@checkdigit/eslint-plugin 6.4.0-PR.66-40b9 → 6.4.0-PR.72-8a17
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 +0 -1
- package/dist-cjs/index.cjs +70 -66
- package/dist-cjs/metafile.json +50 -16
- package/dist-mjs/get-documentation-url.mjs +9 -0
- package/dist-mjs/index.mjs +8 -8
- package/dist-mjs/invalid-json-stringify.mjs +58 -0
- package/dist-types/get-documentation-url.d.ts +1 -0
- package/dist-types/index.d.ts +3 -5
- package/dist-types/{no-side-effects.d.ts → invalid-json-stringify.d.ts} +1 -0
- package/dist-types/no-test-import.d.ts +1 -1
- package/package.json +1 -1
- package/src/get-documentation-url.ts +7 -0
- package/src/index.ts +6 -6
- package/src/invalid-json-stringify.md +4 -0
- package/src/invalid-json-stringify.ts +71 -0
- package/src/no-test-import.ts +1 -1
- package/dist-mjs/no-side-effects.mjs +0 -60
- package/src/no-side-effects.ts +0 -125
package/README.md
CHANGED
|
@@ -13,7 +13,6 @@ Copyright (c) 2021-2023 [Check Digit, LLC](https://checkdigit.com)
|
|
|
13
13
|
- `@checkdigit/require-assert-predicate-rejects-throws`
|
|
14
14
|
- `@checkdigit/object-literal-response`
|
|
15
15
|
- `@checkdigit/no-test-import`
|
|
16
|
-
- `@checkdigit/no-side-effects`
|
|
17
16
|
|
|
18
17
|
## Configurations
|
|
19
18
|
|
package/dist-cjs/index.cjs
CHANGED
|
@@ -105,6 +105,67 @@ var file_path_comment_default = {
|
|
|
105
105
|
}
|
|
106
106
|
};
|
|
107
107
|
|
|
108
|
+
// package.json
|
|
109
|
+
var package_default = { name: "@checkdigit/eslint-plugin", version: "6.4.0-PR.72-8a17", description: "Check Digit eslint plugins", keywords: ["eslint", "eslintplugin"], homepage: "https://github.com/checkdigit/eslint-plugin#readme", bugs: { url: "https://github.com/checkdigit/eslint-plugin/issues" }, repository: { type: "git", url: "https://github.com/checkdigit/eslint-plugin" }, license: "MIT", author: "Check Digit, LLC", sideEffects: false, type: "module", exports: { ".": { types: "./dist-types/index.d.ts", require: "./dist-cjs/index.cjs", import: "./dist-mjs/index.mjs", default: "./dist-mjs/index.mjs" } }, 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"], scripts: { "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", "build:dist-types": "rimraf dist-types && npx builder --type=types --outDir=dist-types", "ci:compile": "tsc --noEmit", "ci:coverage": 'NODE_OPTIONS="--disable-warning ExperimentalWarning --experimental-vm-modules" jest --coverage=true', "ci:lint": "npm run lint", "ci:style": "npm run prettier", "ci:test": 'NODE_OPTIONS="--disable-warning ExperimentalWarning --experimental-vm-modules" jest --coverage=false', lint: "eslint --max-warnings 0 --ignore-path .gitignore .", "lint:fix": "eslint --ignore-path .gitignore . --fix", prepublishOnly: "npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs", prettier: "prettier --ignore-path .gitignore --list-different .", "prettier:fix": "prettier --ignore-path .gitignore --write .", test: "npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style" }, prettier: "@checkdigit/prettier-config", jest: { preset: "@checkdigit/jest-config" }, devDependencies: { "@checkdigit/jest-config": "^6.0.2", "@checkdigit/prettier-config": "^5.5.0", "@checkdigit/typescript-config": "^6.0.0", "@types/eslint": "^8.56.10", "@typescript-eslint/eslint-plugin": "^7.16.0", "@typescript-eslint/parser": "^7.16.0", "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" }, peerDependencies: { eslint: ">=8 <9" }, engines: { node: ">=20.13" } };
|
|
110
|
+
|
|
111
|
+
// src/get-documentation-url.ts
|
|
112
|
+
function getDocumentationUrl(ruleId2) {
|
|
113
|
+
return `${package_default.repository.url}/blob/v${package_default.version}/docs/rules/${ruleId2}.md`;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// src/invalid-json-stringify.ts
|
|
117
|
+
var INVALID_JSON_STRINGIFY = "INVALID_JSON_STRINGIFY";
|
|
118
|
+
var ruleId = "invalid-json-stringify";
|
|
119
|
+
var DEFAULT_OPTIONS = ["error|.*Error"];
|
|
120
|
+
var invalid_json_stringify_default = {
|
|
121
|
+
meta: {
|
|
122
|
+
type: "problem",
|
|
123
|
+
docs: {
|
|
124
|
+
description: "Serializing objects with JSON.stringify() can lose information for certain data payload (e.g. Error). This rule disallows serializing such objects by matching the name of the first parameter passed to JSON.stringify() using Regexp pattern.",
|
|
125
|
+
url: getDocumentationUrl(ruleId)
|
|
126
|
+
},
|
|
127
|
+
schema: [
|
|
128
|
+
{
|
|
129
|
+
type: "array",
|
|
130
|
+
items: {
|
|
131
|
+
description: "Regular expression pattern to match the name of the first parameter of JSON.stringify().",
|
|
132
|
+
type: "string",
|
|
133
|
+
minItems: 1
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
],
|
|
137
|
+
messages: {
|
|
138
|
+
[INVALID_JSON_STRINGIFY]: `Serializing paremeter "{{ parameterName }}" with JSON.stringify can potentially lose information.`
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
create(context) {
|
|
142
|
+
const options = context.options[0] ?? DEFAULT_OPTIONS;
|
|
143
|
+
const invalidParameterNamePatterns = options.map((option) => new RegExp(option, "u"));
|
|
144
|
+
return {
|
|
145
|
+
CallExpression(node) {
|
|
146
|
+
if (node.callee.type === "MemberExpression" && node.callee.object.type === "Identifier" && node.callee.object.name === "JSON" && node.callee.property.type === "Identifier" && node.callee.property.name === "stringify") {
|
|
147
|
+
const argument = node.arguments[0];
|
|
148
|
+
if (argument !== void 0 && argument.type === "Identifier") {
|
|
149
|
+
invalidParameterNamePatterns.some((invalidParameterNamePattern) => {
|
|
150
|
+
if (invalidParameterNamePattern.test(argument.name)) {
|
|
151
|
+
context.report({
|
|
152
|
+
node,
|
|
153
|
+
messageId: INVALID_JSON_STRINGIFY,
|
|
154
|
+
data: {
|
|
155
|
+
parameterName: argument.name
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
return false;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
108
169
|
// src/no-card-numbers.ts
|
|
109
170
|
var CARD_NUMBER_FOUND = "CARD_NUMBER_FOUND";
|
|
110
171
|
var CARD_NUMBERS_FOUND = "CARD_NUMBERS_FOUND";
|
|
@@ -227,65 +288,8 @@ var no_card_numbers_default = {
|
|
|
227
288
|
}
|
|
228
289
|
};
|
|
229
290
|
|
|
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 = {
|
|
250
|
-
meta: {
|
|
251
|
-
type: "problem",
|
|
252
|
-
docs: {
|
|
253
|
-
description: "Ensure no side effects can occur at the main module-level",
|
|
254
|
-
url: "https://github.com/checkdigit/eslint-plugin"
|
|
255
|
-
},
|
|
256
|
-
schema: [
|
|
257
|
-
{
|
|
258
|
-
type: "object",
|
|
259
|
-
properties: {
|
|
260
|
-
excludedIdentifiers: {
|
|
261
|
-
type: "array",
|
|
262
|
-
items: { type: "string" }
|
|
263
|
-
}
|
|
264
|
-
},
|
|
265
|
-
additionalProperties: false
|
|
266
|
-
}
|
|
267
|
-
]
|
|
268
|
-
},
|
|
269
|
-
create(context) {
|
|
270
|
-
const options = context.options[0] ?? {};
|
|
271
|
-
const excludedIdentifiers = options.excludedIdentifiers.length > 0 ? options.excludedIdentifiers : [];
|
|
272
|
-
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
|
-
});
|
|
282
|
-
}
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
};
|
|
286
|
-
|
|
287
291
|
// src/no-test-import.ts
|
|
288
|
-
var
|
|
292
|
+
var DEFAULT_OPTIONS2 = { testFilePattern: "\\.(test|spec)(\\.\\w+)?$" };
|
|
289
293
|
var NO_TEST_IMPORT = "NO_TEST_IMPORT";
|
|
290
294
|
var no_test_import_default = {
|
|
291
295
|
meta: {
|
|
@@ -311,7 +315,7 @@ var no_test_import_default = {
|
|
|
311
315
|
}
|
|
312
316
|
},
|
|
313
317
|
create(context) {
|
|
314
|
-
const options = { ...
|
|
318
|
+
const options = { ...DEFAULT_OPTIONS2, ...context.options[0] };
|
|
315
319
|
const testFileRegexp = new RegExp(options.testFilePattern, "u");
|
|
316
320
|
return {
|
|
317
321
|
ImportDeclaration(node) {
|
|
@@ -748,10 +752,10 @@ var src_default = {
|
|
|
748
752
|
"require-strict-assert": require_strict_assert_default,
|
|
749
753
|
"no-test-import": no_test_import_default,
|
|
750
754
|
"no-wallaby-comment": no_wallaby_comment_default,
|
|
751
|
-
"no-side-effects": no_side_effects_default,
|
|
752
755
|
"regular-expression-comment": regular_expression_comment_default,
|
|
753
756
|
"require-assert-predicate-rejects-throws": require_assert_predicate_rejects_throws_default,
|
|
754
|
-
"object-literal-response": object_literal_response_default
|
|
757
|
+
"object-literal-response": object_literal_response_default,
|
|
758
|
+
"invalid-json-stringify": invalid_json_stringify_default
|
|
755
759
|
},
|
|
756
760
|
configs: {
|
|
757
761
|
all: {
|
|
@@ -761,11 +765,11 @@ var src_default = {
|
|
|
761
765
|
"@checkdigit/no-uuid": "error",
|
|
762
766
|
"@checkdigit/require-strict-assert": "error",
|
|
763
767
|
"@checkdigit/no-wallaby-comment": "error",
|
|
764
|
-
"@checkdigit/no-side-effects": ["error", { excludedIdentifiers: ["assert", "debug", "log"] }],
|
|
765
768
|
"@checkdigit/regular-expression-comment": "error",
|
|
766
769
|
"@checkdigit/require-assert-predicate-rejects-throws": "error",
|
|
767
770
|
"@checkdigit/object-literal-response": "error",
|
|
768
|
-
"@checkdigit/no-test-import": "
|
|
771
|
+
"@checkdigit/no-test-import": "error",
|
|
772
|
+
"@checkdigit/invalid-json-stringify": "error"
|
|
769
773
|
}
|
|
770
774
|
},
|
|
771
775
|
recommended: {
|
|
@@ -775,14 +779,14 @@ var src_default = {
|
|
|
775
779
|
"@checkdigit/no-uuid": "error",
|
|
776
780
|
"@checkdigit/require-strict-assert": "error",
|
|
777
781
|
"@checkdigit/no-wallaby-comment": "off",
|
|
778
|
-
"@checkdigit/no-side-effects": "error",
|
|
779
782
|
"@checkdigit/regular-expression-comment": "error",
|
|
780
783
|
"@checkdigit/require-assert-predicate-rejects-throws": "error",
|
|
781
784
|
"@checkdigit/object-literal-response": "error",
|
|
782
|
-
"@checkdigit/no-test-import": "
|
|
785
|
+
"@checkdigit/no-test-import": "error",
|
|
786
|
+
"@checkdigit/invalid-json-stringify": "error"
|
|
783
787
|
}
|
|
784
788
|
}
|
|
785
789
|
}
|
|
786
790
|
};
|
|
787
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9maWxlLXBhdGgtY29tbWVudC50cyIsICIuLi9zcmMvbm8tY2FyZC1udW1iZXJzLnRzIiwgIi4uL3NyYy9uby1zaWRlLWVmZmVjdHMudHMiLCAiLi4vc3JjL25vLXRlc3QtaW1wb3J0LnRzIiwgIi4uL3NyYy9uby11dWlkLnRzIiwgIi4uL3NyYy9uby13YWxsYWJ5LWNvbW1lbnQudHMiLCAiLi4vc3JjL29iamVjdC1saXRlcmFsLXJlc3BvbnNlLnRzIiwgIi4uL3NyYy9yZWd1bGFyLWV4cHJlc3Npb24tY29tbWVudC50cyIsICIuLi9zcmMvcmVxdWlyZS1hc3NlcnQtcHJlZGljYXRlLXJlamVjdHMtdGhyb3dzLnRzIiwgIi4uL3NyYy9yZXF1aXJlLXN0cmljdC1hc3NlcnQudHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ1VBLElBQU8sNEJBQVE7QUFBQSxFQUNiLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxNQUNiLEtBQUs7QUFBQSxJQUNQO0FBQUEsSUFDQSxTQUFTO0FBQUEsRUFDWDtBQUFBLEVBQ0EsT0FBTyxTQUFTO0FBQ2QsVUFBTSxZQUFZLFFBQVEsV0FBVyxTQUFTLEVBQUUsQ0FBQztBQUNqRCxVQUFNLGVBQWUsUUFBUSxTQUFTLE1BQU0sTUFBTSxFQUFFLENBQUM7QUFFckQsUUFBSSxjQUFjLFVBQWEsaUJBQWlCLFFBQVc7QUFDekQsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUVBLFFBQUksQ0FBQyxVQUFVLFdBQVcsSUFBSSxHQUFHO0FBQy9CLFVBQUksVUFBVSxXQUFXLElBQUksR0FBRztBQUM5QixnQkFBUSxPQUFPO0FBQUEsVUFDYixLQUFLO0FBQUEsWUFDSCxPQUFPO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFDVjtBQUFBLFlB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
|
|
791
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9maWxlLXBhdGgtY29tbWVudC50cyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL2dldC1kb2N1bWVudGF0aW9uLXVybC50cyIsICIuLi9zcmMvaW52YWxpZC1qc29uLXN0cmluZ2lmeS50cyIsICIuLi9zcmMvbm8tY2FyZC1udW1iZXJzLnRzIiwgIi4uL3NyYy9uby10ZXN0LWltcG9ydC50cyIsICIuLi9zcmMvbm8tdXVpZC50cyIsICIuLi9zcmMvbm8td2FsbGFieS1jb21tZW50LnRzIiwgIi4uL3NyYy9vYmplY3QtbGl0ZXJhbC1yZXNwb25zZS50cyIsICIuLi9zcmMvcmVndWxhci1leHByZXNzaW9uLWNvbW1lbnQudHMiLCAiLi4vc3JjL3JlcXVpcmUtYXNzZXJ0LXByZWRpY2F0ZS1yZWplY3RzLXRocm93cy50cyIsICIuLi9zcmMvcmVxdWlyZS1zdHJpY3QtYXNzZXJ0LnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNVQSxJQUFPLDRCQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsTUFDYixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsU0FBUztBQUFBLEVBQ1g7QUFBQSxFQUNBLE9BQU8sU0FBUztBQUNkLFVBQU0sWUFBWSxRQUFRLFdBQVcsU0FBUyxFQUFFLENBQUM7QUFDakQsVUFBTSxlQUFlLFFBQVEsU0FBUyxNQUFNLE1BQU0sRUFBRSxDQUFDO0FBRXJELFFBQUksY0FBYyxVQUFhLGlCQUFpQixRQUFXO0FBQ3pELGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFFQSxRQUFJLENBQUMsVUFBVSxXQUFXLElBQUksR0FBRztBQUMvQixVQUFJLFVBQVUsV0FBVyxJQUFJLEdBQUc7QUFDOUIsZ0JBQVEsT0FBTztBQUFBLFVBQ2IsS0FBSztB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Q0FBaUM7QUFBQSxRQUNqQyx1QkFBdUI7QUFBQSxRQUN2QixxQ0FBcUM7QUFBQSxRQUNyQyxrQ0FBa0M7QUFBQSxRQUNsQywwQ0FBMEM7QUFBQSxRQUMxQyx1REFBdUQ7QUFBQSxRQUN2RCx1Q0FBdUM7QUFBQSxRQUN2Qyw4QkFBOEI7QUFBQSxRQUM5QixzQ0FBc0M7QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFBQSxJQUNBLGFBQWE7QUFBQSxNQUNYLE9BQU87QUFBQSxRQUNMLCtCQUErQjtBQUFBLFFBQy9CLGlDQUFpQztBQUFBLFFBQ2pDLHVCQUF1QjtBQUFBLFFBQ3ZCLHFDQUFxQztBQUFBLFFBQ3JDLGtDQUFrQztBQUFBLFFBQ2xDLDBDQUEwQztBQUFBLFFBQzFDLHVEQUF1RDtBQUFBLFFBQ3ZELHVDQUF1QztBQUFBLFFBQ3ZDLDhCQUE4QjtBQUFBLFFBQzlCLHNDQUFzQztBQUFBLE1BQ3hDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFsicnVsZUlkIiwgIkRFRkFVTFRfT1BUSU9OUyJdCn0K
|
|
788
792
|
module.exports = module.exports.default;
|
package/dist-cjs/metafile.json
CHANGED
|
@@ -5,18 +5,46 @@
|
|
|
5
5
|
"imports": [],
|
|
6
6
|
"format": "esm"
|
|
7
7
|
},
|
|
8
|
-
"
|
|
9
|
-
"bytes":
|
|
8
|
+
"package.json": {
|
|
9
|
+
"bytes": 2696,
|
|
10
10
|
"imports": [],
|
|
11
|
+
"format": "esm",
|
|
12
|
+
"with": {
|
|
13
|
+
"type": "json"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"src/get-documentation-url.ts": {
|
|
17
|
+
"bytes": 262,
|
|
18
|
+
"imports": [
|
|
19
|
+
{
|
|
20
|
+
"path": "package.json",
|
|
21
|
+
"kind": "import-statement",
|
|
22
|
+
"original": "../package.json",
|
|
23
|
+
"with": {
|
|
24
|
+
"type": "json"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
],
|
|
11
28
|
"format": "esm"
|
|
12
29
|
},
|
|
13
|
-
"src/
|
|
14
|
-
"bytes":
|
|
30
|
+
"src/invalid-json-stringify.ts": {
|
|
31
|
+
"bytes": 2365,
|
|
32
|
+
"imports": [
|
|
33
|
+
{
|
|
34
|
+
"path": "src/get-documentation-url.ts",
|
|
35
|
+
"kind": "import-statement",
|
|
36
|
+
"original": "./get-documentation-url"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"format": "esm"
|
|
40
|
+
},
|
|
41
|
+
"src/no-card-numbers.ts": {
|
|
42
|
+
"bytes": 3901,
|
|
15
43
|
"imports": [],
|
|
16
44
|
"format": "esm"
|
|
17
45
|
},
|
|
18
46
|
"src/no-test-import.ts": {
|
|
19
|
-
"bytes":
|
|
47
|
+
"bytes": 1874,
|
|
20
48
|
"imports": [],
|
|
21
49
|
"format": "esm"
|
|
22
50
|
},
|
|
@@ -51,7 +79,7 @@
|
|
|
51
79
|
"format": "esm"
|
|
52
80
|
},
|
|
53
81
|
"src/index.ts": {
|
|
54
|
-
"bytes":
|
|
82
|
+
"bytes": 2385,
|
|
55
83
|
"imports": [
|
|
56
84
|
{
|
|
57
85
|
"path": "src/file-path-comment.ts",
|
|
@@ -59,14 +87,14 @@
|
|
|
59
87
|
"original": "./file-path-comment"
|
|
60
88
|
},
|
|
61
89
|
{
|
|
62
|
-
"path": "src/
|
|
90
|
+
"path": "src/invalid-json-stringify.ts",
|
|
63
91
|
"kind": "import-statement",
|
|
64
|
-
"original": "./
|
|
92
|
+
"original": "./invalid-json-stringify"
|
|
65
93
|
},
|
|
66
94
|
{
|
|
67
|
-
"path": "src/no-
|
|
95
|
+
"path": "src/no-card-numbers.ts",
|
|
68
96
|
"kind": "import-statement",
|
|
69
|
-
"original": "./no-
|
|
97
|
+
"original": "./no-card-numbers"
|
|
70
98
|
},
|
|
71
99
|
{
|
|
72
100
|
"path": "src/no-test-import.ts",
|
|
@@ -114,19 +142,25 @@
|
|
|
114
142
|
"entryPoint": "src/index.ts",
|
|
115
143
|
"inputs": {
|
|
116
144
|
"src/index.ts": {
|
|
117
|
-
"bytesInOutput":
|
|
145
|
+
"bytesInOutput": 1909
|
|
118
146
|
},
|
|
119
147
|
"src/file-path-comment.ts": {
|
|
120
148
|
"bytesInOutput": 1961
|
|
121
149
|
},
|
|
150
|
+
"package.json": {
|
|
151
|
+
"bytesInOutput": 2785
|
|
152
|
+
},
|
|
153
|
+
"src/get-documentation-url.ts": {
|
|
154
|
+
"bytesInOutput": 146
|
|
155
|
+
},
|
|
156
|
+
"src/invalid-json-stringify.ts": {
|
|
157
|
+
"bytesInOutput": 1999
|
|
158
|
+
},
|
|
122
159
|
"src/no-card-numbers.ts": {
|
|
123
160
|
"bytesInOutput": 3356
|
|
124
161
|
},
|
|
125
|
-
"src/no-side-effects.ts": {
|
|
126
|
-
"bytesInOutput": 3665
|
|
127
|
-
},
|
|
128
162
|
"src/no-test-import.ts": {
|
|
129
|
-
"bytesInOutput":
|
|
163
|
+
"bytesInOutput": 1458
|
|
130
164
|
},
|
|
131
165
|
"src/no-uuid.ts": {
|
|
132
166
|
"bytesInOutput": 2251
|
|
@@ -147,7 +181,7 @@
|
|
|
147
181
|
"bytesInOutput": 3362
|
|
148
182
|
}
|
|
149
183
|
},
|
|
150
|
-
"bytes":
|
|
184
|
+
"bytes": 52919
|
|
151
185
|
}
|
|
152
186
|
}
|
|
153
187
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// src/get-documentation-url.ts
|
|
2
|
+
import packageJson from "../package.json" with { type: "json" };
|
|
3
|
+
function getDocumentationUrl(ruleId) {
|
|
4
|
+
return `${packageJson.repository.url}/blob/v${packageJson.version}/docs/rules/${ruleId}.md`;
|
|
5
|
+
}
|
|
6
|
+
export {
|
|
7
|
+
getDocumentationUrl as default
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2dldC1kb2N1bWVudGF0aW9uLXVybC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFFQSxPQUFPLGlCQUFpQixrQkFBa0IsS0FBSyxFQUFFLE1BQU0sT0FBTztBQUUvQyxTQUFSLG9CQUFxQyxRQUF3QjtBQUNsRSxTQUFPLEdBQUcsWUFBWSxXQUFXLEdBQUcsVUFBVSxZQUFZLE9BQU8sZUFBZSxNQUFNO0FBQ3hGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist-mjs/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import filePathComment from "./file-path-comment.mjs";
|
|
3
|
+
import invalidJsonStringify from "./invalid-json-stringify.mjs";
|
|
3
4
|
import noCardNumbers from "./no-card-numbers.mjs";
|
|
4
|
-
import noSideEffects from "./no-side-effects.mjs";
|
|
5
5
|
import noTestImport from "./no-test-import.mjs";
|
|
6
6
|
import noUuid from "./no-uuid.mjs";
|
|
7
7
|
import noWallabyComment from "./no-wallaby-comment.mjs";
|
|
@@ -17,10 +17,10 @@ var src_default = {
|
|
|
17
17
|
"require-strict-assert": requireStrictAssert,
|
|
18
18
|
"no-test-import": noTestImport,
|
|
19
19
|
"no-wallaby-comment": noWallabyComment,
|
|
20
|
-
"no-side-effects": noSideEffects,
|
|
21
20
|
"regular-expression-comment": regexComment,
|
|
22
21
|
"require-assert-predicate-rejects-throws": requireAssertPredicateRejectsThrows,
|
|
23
|
-
"object-literal-response": objectLiteralResponse
|
|
22
|
+
"object-literal-response": objectLiteralResponse,
|
|
23
|
+
"invalid-json-stringify": invalidJsonStringify
|
|
24
24
|
},
|
|
25
25
|
configs: {
|
|
26
26
|
all: {
|
|
@@ -30,11 +30,11 @@ var src_default = {
|
|
|
30
30
|
"@checkdigit/no-uuid": "error",
|
|
31
31
|
"@checkdigit/require-strict-assert": "error",
|
|
32
32
|
"@checkdigit/no-wallaby-comment": "error",
|
|
33
|
-
"@checkdigit/no-side-effects": ["error", { excludedIdentifiers: ["assert", "debug", "log"] }],
|
|
34
33
|
"@checkdigit/regular-expression-comment": "error",
|
|
35
34
|
"@checkdigit/require-assert-predicate-rejects-throws": "error",
|
|
36
35
|
"@checkdigit/object-literal-response": "error",
|
|
37
|
-
"@checkdigit/no-test-import": "
|
|
36
|
+
"@checkdigit/no-test-import": "error",
|
|
37
|
+
"@checkdigit/invalid-json-stringify": "error"
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
recommended: {
|
|
@@ -44,11 +44,11 @@ var src_default = {
|
|
|
44
44
|
"@checkdigit/no-uuid": "error",
|
|
45
45
|
"@checkdigit/require-strict-assert": "error",
|
|
46
46
|
"@checkdigit/no-wallaby-comment": "off",
|
|
47
|
-
"@checkdigit/no-side-effects": "error",
|
|
48
47
|
"@checkdigit/regular-expression-comment": "error",
|
|
49
48
|
"@checkdigit/require-assert-predicate-rejects-throws": "error",
|
|
50
49
|
"@checkdigit/object-literal-response": "error",
|
|
51
|
-
"@checkdigit/no-test-import": "
|
|
50
|
+
"@checkdigit/no-test-import": "error",
|
|
51
|
+
"@checkdigit/invalid-json-stringify": "error"
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
}
|
|
@@ -56,4 +56,4 @@ var src_default = {
|
|
|
56
56
|
export {
|
|
57
57
|
src_default as default
|
|
58
58
|
};
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLE9BQU8scUJBQXFCO0FBQzVCLE9BQU8sMEJBQTBCO0FBQ2pDLE9BQU8sbUJBQW1CO0FBQzFCLE9BQU8sa0JBQWtCO0FBQ3pCLE9BQU8sWUFBWTtBQUNuQixPQUFPLHNCQUFzQjtBQUM3QixPQUFPLDJCQUEyQjtBQUNsQyxPQUFPLGtCQUFrQjtBQUN6QixPQUFPLHlDQUF5QztBQUNoRCxPQUFPLHlCQUF5QjtBQUVoQyxJQUFPLGNBQVE7QUFBQSxFQUNiLE9BQU87QUFBQSxJQUNMLHFCQUFxQjtBQUFBLElBQ3JCLG1CQUFtQjtBQUFBLElBQ25CLFdBQVc7QUFBQSxJQUNYLHlCQUF5QjtBQUFBLElBQ3pCLGtCQUFrQjtBQUFBLElBQ2xCLHNCQUFzQjtBQUFBLElBQ3RCLDhCQUE4QjtBQUFBLElBQzlCLDJDQUEyQztBQUFBLElBQzNDLDJCQUEyQjtBQUFBLElBQzNCLDBCQUEwQjtBQUFBLEVBQzVCO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxLQUFLO0FBQUEsTUFDSCxPQUFPO0FBQUEsUUFDTCwrQkFBK0I7QUFBQSxRQUMvQixpQ0FBaUM7QUFBQSxRQUNqQyx1QkFBdUI7QUFBQSxRQUN2QixxQ0FBcUM7QUFBQSxRQUNyQyxrQ0FBa0M7QUFBQSxRQUNsQywwQ0FBMEM7QUFBQSxRQUMxQyx1REFBdUQ7QUFBQSxRQUN2RCx1Q0FBdUM7QUFBQSxRQUN2Qyw4QkFBOEI7QUFBQSxRQUM5QixzQ0FBc0M7QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFBQSxJQUNBLGFBQWE7QUFBQSxNQUNYLE9BQU87QUFBQSxRQUNMLCtCQUErQjtBQUFBLFFBQy9CLGlDQUFpQztBQUFBLFFBQ2pDLHVCQUF1QjtBQUFBLFFBQ3ZCLHFDQUFxQztBQUFBLFFBQ3JDLGtDQUFrQztBQUFBLFFBQ2xDLDBDQUEwQztBQUFBLFFBQzFDLHVEQUF1RDtBQUFBLFFBQ3ZELHVDQUF1QztBQUFBLFFBQ3ZDLDhCQUE4QjtBQUFBLFFBQzlCLHNDQUFzQztBQUFBLE1BQ3hDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// src/invalid-json-stringify.ts
|
|
2
|
+
import getDocumentationUrl from "./get-documentation-url.mjs";
|
|
3
|
+
var INVALID_JSON_STRINGIFY = "INVALID_JSON_STRINGIFY";
|
|
4
|
+
var ruleId = "invalid-json-stringify";
|
|
5
|
+
var DEFAULT_OPTIONS = ["error|.*Error"];
|
|
6
|
+
var invalid_json_stringify_default = {
|
|
7
|
+
meta: {
|
|
8
|
+
type: "problem",
|
|
9
|
+
docs: {
|
|
10
|
+
description: "Serializing objects with JSON.stringify() can lose information for certain data payload (e.g. Error). This rule disallows serializing such objects by matching the name of the first parameter passed to JSON.stringify() using Regexp pattern.",
|
|
11
|
+
url: getDocumentationUrl(ruleId)
|
|
12
|
+
},
|
|
13
|
+
schema: [
|
|
14
|
+
{
|
|
15
|
+
type: "array",
|
|
16
|
+
items: {
|
|
17
|
+
description: "Regular expression pattern to match the name of the first parameter of JSON.stringify().",
|
|
18
|
+
type: "string",
|
|
19
|
+
minItems: 1
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
messages: {
|
|
24
|
+
[INVALID_JSON_STRINGIFY]: `Serializing paremeter "{{ parameterName }}" with JSON.stringify can potentially lose information.`
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
create(context) {
|
|
28
|
+
const options = context.options[0] ?? DEFAULT_OPTIONS;
|
|
29
|
+
const invalidParameterNamePatterns = options.map((option) => new RegExp(option, "u"));
|
|
30
|
+
return {
|
|
31
|
+
CallExpression(node) {
|
|
32
|
+
if (node.callee.type === "MemberExpression" && node.callee.object.type === "Identifier" && node.callee.object.name === "JSON" && node.callee.property.type === "Identifier" && node.callee.property.name === "stringify") {
|
|
33
|
+
const argument = node.arguments[0];
|
|
34
|
+
if (argument !== void 0 && argument.type === "Identifier") {
|
|
35
|
+
invalidParameterNamePatterns.some((invalidParameterNamePattern) => {
|
|
36
|
+
if (invalidParameterNamePattern.test(argument.name)) {
|
|
37
|
+
context.report({
|
|
38
|
+
node,
|
|
39
|
+
messageId: INVALID_JSON_STRINGIFY,
|
|
40
|
+
data: {
|
|
41
|
+
parameterName: argument.name
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
export {
|
|
55
|
+
INVALID_JSON_STRINGIFY,
|
|
56
|
+
invalid_json_stringify_default as default
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ludmFsaWQtanNvbi1zdHJpbmdpZnkudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBR0EsT0FBTyx5QkFBeUI7QUFRekIsSUFBTSx5QkFBeUI7QUFDdEMsSUFBTSxTQUFTO0FBQ2YsSUFBTSxrQkFBa0IsQ0FBQyxlQUFlO0FBRXhDLElBQU8saUNBQVE7QUFBQSxFQUNiLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQ0U7QUFBQSxNQUNGLEtBQUssb0JBQW9CLE1BQU07QUFBQSxJQUNqQztBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ047QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxVQUNMLGFBQWE7QUFBQSxVQUNiLE1BQU07QUFBQSxVQUNOLFVBQVU7QUFBQSxRQUNaO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsc0JBQXNCLEdBQUc7QUFBQSxJQUM1QjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU8sU0FBUztBQUNkLFVBQU0sVUFBVyxRQUFRLFFBQVEsQ0FBQyxLQUFLO0FBQ3ZDLFVBQU0sK0JBQStCLFFBQVEsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLFFBQVEsR0FBRyxDQUFDO0FBRXBGLFdBQU87QUFBQSxNQUNMLGVBQWUsTUFBTTtBQUNuQixZQUNFLEtBQUssT0FBTyxTQUFTLHNCQUNyQixLQUFLLE9BQU8sT0FBTyxTQUFTLGdCQUM1QixLQUFLLE9BQU8sT0FBTyxTQUFTLFVBQzVCLEtBQUssT0FBTyxTQUFTLFNBQVMsZ0JBQzlCLEtBQUssT0FBTyxTQUFTLFNBQVMsYUFDOUI7QUFDQSxnQkFBTSxXQUFXLEtBQUssVUFBVSxDQUFDO0FBQ2pDLGNBQUksYUFBYSxVQUFhLFNBQVMsU0FBUyxjQUFjO0FBQzVELHlDQUE2QixLQUFLLENBQUMsZ0NBQWdDO0FBQ2pFLGtCQUFJLDRCQUE0QixLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQ25ELHdCQUFRLE9BQU87QUFBQSxrQkFDYjtBQUFBLGtCQUNBLFdBQVc7QUFBQSxrQkFDWCxNQUFNO0FBQUEsb0JBQ0osZUFBZSxTQUFTO0FBQUEsa0JBQzFCO0FBQUEsZ0JBQ0YsQ0FBQztBQUNELHVCQUFPO0FBQUEsY0FDVDtBQUNBLHFCQUFPO0FBQUEsWUFDVCxDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function getDocumentationUrl(ruleId: string): string;
|
package/dist-types/index.d.ts
CHANGED
|
@@ -6,10 +6,10 @@ declare const _default: {
|
|
|
6
6
|
'require-strict-assert': import("eslint").Rule.RuleModule;
|
|
7
7
|
'no-test-import': import("eslint").Rule.RuleModule;
|
|
8
8
|
'no-wallaby-comment': import("eslint").Rule.RuleModule;
|
|
9
|
-
'no-side-effects': import("eslint").Rule.RuleModule;
|
|
10
9
|
'regular-expression-comment': import("eslint").Rule.RuleModule;
|
|
11
10
|
'require-assert-predicate-rejects-throws': import("eslint").Rule.RuleModule;
|
|
12
11
|
'object-literal-response': import("eslint").Rule.RuleModule;
|
|
12
|
+
'invalid-json-stringify': import("eslint").Rule.RuleModule;
|
|
13
13
|
};
|
|
14
14
|
configs: {
|
|
15
15
|
all: {
|
|
@@ -19,13 +19,11 @@ declare const _default: {
|
|
|
19
19
|
'@checkdigit/no-uuid': string;
|
|
20
20
|
'@checkdigit/require-strict-assert': string;
|
|
21
21
|
'@checkdigit/no-wallaby-comment': string;
|
|
22
|
-
'@checkdigit/no-side-effects': (string | {
|
|
23
|
-
excludedIdentifiers: string[];
|
|
24
|
-
})[];
|
|
25
22
|
'@checkdigit/regular-expression-comment': string;
|
|
26
23
|
'@checkdigit/require-assert-predicate-rejects-throws': string;
|
|
27
24
|
'@checkdigit/object-literal-response': string;
|
|
28
25
|
'@checkdigit/no-test-import': string;
|
|
26
|
+
'@checkdigit/invalid-json-stringify': string;
|
|
29
27
|
};
|
|
30
28
|
};
|
|
31
29
|
recommended: {
|
|
@@ -35,11 +33,11 @@ declare const _default: {
|
|
|
35
33
|
'@checkdigit/no-uuid': string;
|
|
36
34
|
'@checkdigit/require-strict-assert': string;
|
|
37
35
|
'@checkdigit/no-wallaby-comment': string;
|
|
38
|
-
'@checkdigit/no-side-effects': string;
|
|
39
36
|
'@checkdigit/regular-expression-comment': string;
|
|
40
37
|
'@checkdigit/require-assert-predicate-rejects-throws': string;
|
|
41
38
|
'@checkdigit/object-literal-response': string;
|
|
42
39
|
'@checkdigit/no-test-import': string;
|
|
40
|
+
'@checkdigit/invalid-json-stringify': string;
|
|
43
41
|
};
|
|
44
42
|
};
|
|
45
43
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Rule } from 'eslint';
|
|
2
2
|
/**
|
|
3
|
-
* this rule should be turned
|
|
3
|
+
* this rule should be turned off for test files (e.g. *.test.ts, *.spec.ts)
|
|
4
4
|
*/
|
|
5
5
|
export interface NoTestImportRuleOptions {
|
|
6
6
|
testFilePattern?: string;
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@checkdigit/eslint-plugin","version":"6.4.0-PR.
|
|
1
|
+
{"name":"@checkdigit/eslint-plugin","version":"6.4.0-PR.72-8a17","description":"Check Digit eslint plugins","keywords":["eslint","eslintplugin"],"homepage":"https://github.com/checkdigit/eslint-plugin#readme","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"repository":{"type":"git","url":"https://github.com/checkdigit/eslint-plugin"},"license":"MIT","author":"Check Digit, LLC","sideEffects":false,"type":"module","exports":{".":{"types":"./dist-types/index.d.ts","require":"./dist-cjs/index.cjs","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"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"],"scripts":{"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","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","ci:compile":"tsc --noEmit","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","lint":"eslint --max-warnings 0 --ignore-path .gitignore .","lint:fix":"eslint --ignore-path .gitignore . --fix","prepublishOnly":"npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"},"prettier":"@checkdigit/prettier-config","jest":{"preset":"@checkdigit/jest-config"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.5.0","@checkdigit/typescript-config":"^6.0.0","@types/eslint":"^8.56.10","@typescript-eslint/eslint-plugin":"^7.16.0","@typescript-eslint/parser":"^7.16.0","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"},"peerDependencies":{"eslint":">=8 <9"},"engines":{"node":">=20.13"}}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// get-documentation-url.ts
|
|
2
|
+
|
|
3
|
+
import packageJson from '../package.json' with { type: 'json' };
|
|
4
|
+
|
|
5
|
+
export default function getDocumentationUrl(ruleId: string): string {
|
|
6
|
+
return `${packageJson.repository.url}/blob/v${packageJson.version}/docs/rules/${ruleId}.md`;
|
|
7
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import filePathComment from './file-path-comment';
|
|
10
|
+
import invalidJsonStringify from './invalid-json-stringify';
|
|
10
11
|
import noCardNumbers from './no-card-numbers';
|
|
11
|
-
import noSideEffects from './no-side-effects';
|
|
12
12
|
import noTestImport from './no-test-import';
|
|
13
13
|
import noUuid from './no-uuid';
|
|
14
14
|
import noWallabyComment from './no-wallaby-comment';
|
|
@@ -25,10 +25,10 @@ export default {
|
|
|
25
25
|
'require-strict-assert': requireStrictAssert,
|
|
26
26
|
'no-test-import': noTestImport,
|
|
27
27
|
'no-wallaby-comment': noWallabyComment,
|
|
28
|
-
'no-side-effects': noSideEffects,
|
|
29
28
|
'regular-expression-comment': regexComment,
|
|
30
29
|
'require-assert-predicate-rejects-throws': requireAssertPredicateRejectsThrows,
|
|
31
30
|
'object-literal-response': objectLiteralResponse,
|
|
31
|
+
'invalid-json-stringify': invalidJsonStringify,
|
|
32
32
|
},
|
|
33
33
|
configs: {
|
|
34
34
|
all: {
|
|
@@ -38,11 +38,11 @@ export default {
|
|
|
38
38
|
'@checkdigit/no-uuid': 'error',
|
|
39
39
|
'@checkdigit/require-strict-assert': 'error',
|
|
40
40
|
'@checkdigit/no-wallaby-comment': 'error',
|
|
41
|
-
'@checkdigit/no-side-effects': ['error', { excludedIdentifiers: ['assert', 'debug', 'log'] }],
|
|
42
41
|
'@checkdigit/regular-expression-comment': 'error',
|
|
43
42
|
'@checkdigit/require-assert-predicate-rejects-throws': 'error',
|
|
44
43
|
'@checkdigit/object-literal-response': 'error',
|
|
45
|
-
'@checkdigit/no-test-import': '
|
|
44
|
+
'@checkdigit/no-test-import': 'error',
|
|
45
|
+
'@checkdigit/invalid-json-stringify': 'error',
|
|
46
46
|
},
|
|
47
47
|
},
|
|
48
48
|
recommended: {
|
|
@@ -52,11 +52,11 @@ export default {
|
|
|
52
52
|
'@checkdigit/no-uuid': 'error',
|
|
53
53
|
'@checkdigit/require-strict-assert': 'error',
|
|
54
54
|
'@checkdigit/no-wallaby-comment': 'off',
|
|
55
|
-
'@checkdigit/no-side-effects': 'error',
|
|
56
55
|
'@checkdigit/regular-expression-comment': 'error',
|
|
57
56
|
'@checkdigit/require-assert-predicate-rejects-throws': 'error',
|
|
58
57
|
'@checkdigit/object-literal-response': 'error',
|
|
59
|
-
'@checkdigit/no-test-import': '
|
|
58
|
+
'@checkdigit/no-test-import': 'error',
|
|
59
|
+
'@checkdigit/invalid-json-stringify': 'error',
|
|
60
60
|
},
|
|
61
61
|
},
|
|
62
62
|
},
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
Serializing objects with `JSON.stringify()` can lose information for certain data payload.
|
|
2
|
+
For example, an instance of Error will result in empty output like `{}` because it's properties are not enumerable.
|
|
3
|
+
|
|
4
|
+
This rule disallows serializing such objects with potential issue by matching the name of the first parameter passed to JSON.stringify() with Regexp pattern.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// invalid-json-stringify.ts
|
|
2
|
+
|
|
3
|
+
import type { Rule } from 'eslint';
|
|
4
|
+
import getDocumentationUrl from './get-documentation-url';
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* Copyright (c) 2021-2024 Check Digit, LLC
|
|
8
|
+
*
|
|
9
|
+
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export const INVALID_JSON_STRINGIFY = 'INVALID_JSON_STRINGIFY';
|
|
13
|
+
const ruleId = 'invalid-json-stringify';
|
|
14
|
+
const DEFAULT_OPTIONS = ['error|.*Error'];
|
|
15
|
+
|
|
16
|
+
export default {
|
|
17
|
+
meta: {
|
|
18
|
+
type: 'problem',
|
|
19
|
+
docs: {
|
|
20
|
+
description:
|
|
21
|
+
'Serializing objects with JSON.stringify() can lose information for certain data payload (e.g. Error). This rule disallows serializing such objects by matching the name of the first parameter passed to JSON.stringify() using Regexp pattern.',
|
|
22
|
+
url: getDocumentationUrl(ruleId),
|
|
23
|
+
},
|
|
24
|
+
schema: [
|
|
25
|
+
{
|
|
26
|
+
type: 'array',
|
|
27
|
+
items: {
|
|
28
|
+
description: 'Regular expression pattern to match the name of the first parameter of JSON.stringify().',
|
|
29
|
+
type: 'string',
|
|
30
|
+
minItems: 1,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
messages: {
|
|
35
|
+
[INVALID_JSON_STRINGIFY]: `Serializing paremeter "{{ parameterName }}" with JSON.stringify can potentially lose information.`,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
create(context) {
|
|
39
|
+
const options = (context.options[0] ?? DEFAULT_OPTIONS) as string[];
|
|
40
|
+
const invalidParameterNamePatterns = options.map((option) => new RegExp(option, 'u'));
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
CallExpression(node) {
|
|
44
|
+
if (
|
|
45
|
+
node.callee.type === 'MemberExpression' &&
|
|
46
|
+
node.callee.object.type === 'Identifier' &&
|
|
47
|
+
node.callee.object.name === 'JSON' &&
|
|
48
|
+
node.callee.property.type === 'Identifier' &&
|
|
49
|
+
node.callee.property.name === 'stringify'
|
|
50
|
+
) {
|
|
51
|
+
const argument = node.arguments[0];
|
|
52
|
+
if (argument !== undefined && argument.type === 'Identifier') {
|
|
53
|
+
invalidParameterNamePatterns.some((invalidParameterNamePattern) => {
|
|
54
|
+
if (invalidParameterNamePattern.test(argument.name)) {
|
|
55
|
+
context.report({
|
|
56
|
+
node,
|
|
57
|
+
messageId: INVALID_JSON_STRINGIFY,
|
|
58
|
+
data: {
|
|
59
|
+
parameterName: argument.name,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
} as Rule.RuleModule;
|
package/src/no-test-import.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type { Rule } from 'eslint';
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* this rule should be turned
|
|
12
|
+
* this rule should be turned off for test files (e.g. *.test.ts, *.spec.ts)
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
export interface NoTestImportRuleOptions {
|
|
@@ -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=
|
package/src/no-side-effects.ts
DELETED
|
@@ -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;
|