@checkdigit/eslint-plugin 4.0.0-beta.1 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +72 -0
- package/.github/workflows/codeql-analysis.yml +31 -0
- package/.github/workflows/coverage.yml +46 -0
- package/README.md +6 -9
- package/SECURITY.md +14 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -38
- package/dist/index.js.map +1 -1
- package/dist/{pure-functions.d.ts → no-uuid.d.ts} +0 -0
- package/package.json +24 -32
- package/.eslintrc +0 -76
- package/coverage/clover.xml +0 -94
- package/coverage/coverage-final.json +0 -4
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/file-path-comment.ts.html +0 -349
- package/coverage/lcov-report/index.html +0 -146
- package/coverage/lcov-report/no-card-numbers.ts.html +0 -508
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/pure-functions.ts.html +0 -301
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov.info +0 -176
- package/dist/file-path-comment.js +0 -86
- package/dist/file-path-comment.js.map +0 -1
- package/dist/file-path-comment.spec.d.ts +0 -1
- package/dist/file-path-comment.spec.js +0 -72
- package/dist/file-path-comment.spec.js.map +0 -1
- package/dist/no-card-numbers.js +0 -131
- package/dist/no-card-numbers.js.map +0 -1
- package/dist/no-card-numbers.spec.d.ts +0 -1
- package/dist/no-card-numbers.spec.js +0 -104
- package/dist/no-card-numbers.spec.js.map +0 -1
- package/dist/pure-functions.js +0 -55
- package/dist/pure-functions.js.map +0 -1
- package/dist/pure-functions.spec.d.ts +0 -1
- package/dist/pure-functions.spec.js +0 -90
- package/dist/pure-functions.spec.js.map +0 -1
- package/src/file-path-comment.spec.ts +0 -71
- package/src/file-path-comment.ts +0 -88
- package/src/index.ts +0 -35
- package/src/no-card-numbers.spec.ts +0 -114
- package/src/no-card-numbers.ts +0 -141
- package/src/pure-functions.spec.ts +0 -93
- package/src/pure-functions.ts +0 -72
- package/tsconfig.json +0 -12
package/coverage/lcov.info
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
TN:
|
|
2
|
-
SF:src/file-path-comment.ts
|
|
3
|
-
FN:20,(anonymous_0)
|
|
4
|
-
FN:42,(anonymous_1)
|
|
5
|
-
FN:59,(anonymous_2)
|
|
6
|
-
FN:79,(anonymous_3)
|
|
7
|
-
FNF:4
|
|
8
|
-
FNH:4
|
|
9
|
-
FNDA:14,(anonymous_0)
|
|
10
|
-
FNDA:1,(anonymous_1)
|
|
11
|
-
FNDA:2,(anonymous_2)
|
|
12
|
-
FNDA:2,(anonymous_3)
|
|
13
|
-
DA:11,1
|
|
14
|
-
DA:21,14
|
|
15
|
-
DA:22,14
|
|
16
|
-
DA:24,14
|
|
17
|
-
DA:25,2
|
|
18
|
-
DA:28,12
|
|
19
|
-
DA:29,3
|
|
20
|
-
DA:30,1
|
|
21
|
-
DA:43,1
|
|
22
|
-
DA:47,2
|
|
23
|
-
DA:60,2
|
|
24
|
-
DA:65,9
|
|
25
|
-
DA:66,9
|
|
26
|
-
DA:67,2
|
|
27
|
-
DA:80,2
|
|
28
|
-
DA:86,12
|
|
29
|
-
LF:16
|
|
30
|
-
LH:16
|
|
31
|
-
BRDA:24,0,0,2
|
|
32
|
-
BRDA:28,1,0,3
|
|
33
|
-
BRDA:28,1,1,9
|
|
34
|
-
BRDA:29,2,0,1
|
|
35
|
-
BRDA:29,2,1,2
|
|
36
|
-
BRDA:66,3,0,2
|
|
37
|
-
BRF:6
|
|
38
|
-
BRH:6
|
|
39
|
-
end_of_record
|
|
40
|
-
TN:
|
|
41
|
-
SF:src/no-card-numbers.ts
|
|
42
|
-
FN:25,luhnCheck
|
|
43
|
-
FN:30,(anonymous_1)
|
|
44
|
-
FN:31,(anonymous_2)
|
|
45
|
-
FN:47,checkForCardNumbers
|
|
46
|
-
FN:52,(anonymous_4)
|
|
47
|
-
FN:110,(anonymous_5)
|
|
48
|
-
FN:114,(anonymous_6)
|
|
49
|
-
FN:120,(anonymous_7)
|
|
50
|
-
FN:130,(anonymous_8)
|
|
51
|
-
FNF:9
|
|
52
|
-
FNH:9
|
|
53
|
-
FNDA:18,luhnCheck
|
|
54
|
-
FNDA:297,(anonymous_1)
|
|
55
|
-
FNDA:297,(anonymous_2)
|
|
56
|
-
FNDA:28,checkForCardNumbers
|
|
57
|
-
FNDA:18,(anonymous_4)
|
|
58
|
-
FNDA:9,(anonymous_5)
|
|
59
|
-
FNDA:10,(anonymous_6)
|
|
60
|
-
FNDA:16,(anonymous_7)
|
|
61
|
-
FNDA:2,(anonymous_8)
|
|
62
|
-
DA:12,1
|
|
63
|
-
DA:13,1
|
|
64
|
-
DA:14,1
|
|
65
|
-
DA:15,1
|
|
66
|
-
DA:26,18
|
|
67
|
-
DA:30,297
|
|
68
|
-
DA:32,297
|
|
69
|
-
DA:33,297
|
|
70
|
-
DA:34,145
|
|
71
|
-
DA:36,145
|
|
72
|
-
DA:37,22
|
|
73
|
-
DA:40,297
|
|
74
|
-
DA:48,28
|
|
75
|
-
DA:49,28
|
|
76
|
-
DA:50,12
|
|
77
|
-
DA:52,18
|
|
78
|
-
DA:53,16
|
|
79
|
-
DA:54,2
|
|
80
|
-
DA:55,1
|
|
81
|
-
DA:62,1
|
|
82
|
-
DA:63,1
|
|
83
|
-
DA:74,14
|
|
84
|
-
DA:75,2
|
|
85
|
-
DA:76,1
|
|
86
|
-
DA:83,1
|
|
87
|
-
DA:84,1
|
|
88
|
-
DA:98,1
|
|
89
|
-
DA:111,9
|
|
90
|
-
DA:112,9
|
|
91
|
-
DA:114,9
|
|
92
|
-
DA:115,10
|
|
93
|
-
DA:116,10
|
|
94
|
-
DA:119,9
|
|
95
|
-
DA:121,16
|
|
96
|
-
DA:122,0
|
|
97
|
-
DA:124,16
|
|
98
|
-
DA:125,0
|
|
99
|
-
DA:127,16
|
|
100
|
-
DA:128,16
|
|
101
|
-
DA:131,2
|
|
102
|
-
DA:132,0
|
|
103
|
-
DA:134,2
|
|
104
|
-
DA:135,0
|
|
105
|
-
DA:137,2
|
|
106
|
-
LF:44
|
|
107
|
-
LH:40
|
|
108
|
-
BRDA:33,0,0,145
|
|
109
|
-
BRDA:36,1,0,22
|
|
110
|
-
BRDA:49,2,0,12
|
|
111
|
-
BRDA:52,3,0,18
|
|
112
|
-
BRDA:52,3,1,13
|
|
113
|
-
BRDA:53,4,0,2
|
|
114
|
-
BRDA:53,4,1,14
|
|
115
|
-
BRDA:54,5,0,1
|
|
116
|
-
BRDA:54,5,1,1
|
|
117
|
-
BRDA:62,6,0,1
|
|
118
|
-
BRDA:74,7,0,2
|
|
119
|
-
BRDA:75,8,0,1
|
|
120
|
-
BRDA:75,8,1,1
|
|
121
|
-
BRDA:83,9,0,1
|
|
122
|
-
BRDA:115,10,0,10
|
|
123
|
-
BRDA:115,11,0,10
|
|
124
|
-
BRDA:115,11,1,10
|
|
125
|
-
BRDA:121,12,0,0
|
|
126
|
-
BRDA:124,13,0,0
|
|
127
|
-
BRDA:124,14,0,16
|
|
128
|
-
BRDA:124,14,1,12
|
|
129
|
-
BRDA:131,15,0,0
|
|
130
|
-
BRDA:134,16,0,0
|
|
131
|
-
BRF:23
|
|
132
|
-
BRH:19
|
|
133
|
-
end_of_record
|
|
134
|
-
TN:
|
|
135
|
-
SF:src/pure-functions.ts
|
|
136
|
-
FN:25,(anonymous_0)
|
|
137
|
-
FN:29,check
|
|
138
|
-
FN:44,(anonymous_2)
|
|
139
|
-
FNF:3
|
|
140
|
-
FNH:3
|
|
141
|
-
FNDA:3,(anonymous_0)
|
|
142
|
-
FNDA:5,check
|
|
143
|
-
FNDA:12,(anonymous_2)
|
|
144
|
-
DA:12,1
|
|
145
|
-
DA:14,1
|
|
146
|
-
DA:26,3
|
|
147
|
-
DA:27,3
|
|
148
|
-
DA:30,5
|
|
149
|
-
DA:31,5
|
|
150
|
-
DA:32,5
|
|
151
|
-
DA:33,0
|
|
152
|
-
DA:36,5
|
|
153
|
-
DA:38,5
|
|
154
|
-
DA:39,6
|
|
155
|
-
DA:40,6
|
|
156
|
-
DA:41,12
|
|
157
|
-
DA:42,12
|
|
158
|
-
DA:45,12
|
|
159
|
-
DA:46,12
|
|
160
|
-
DA:47,12
|
|
161
|
-
DA:56,2
|
|
162
|
-
DA:66,3
|
|
163
|
-
LF:19
|
|
164
|
-
LH:18
|
|
165
|
-
BRDA:32,0,0,0
|
|
166
|
-
BRDA:42,1,0,2
|
|
167
|
-
BRDA:43,2,0,12
|
|
168
|
-
BRDA:43,2,1,12
|
|
169
|
-
BRDA:48,3,0,12
|
|
170
|
-
BRDA:48,3,1,9
|
|
171
|
-
BRDA:48,3,2,3
|
|
172
|
-
BRDA:50,4,0,3
|
|
173
|
-
BRDA:50,4,1,1
|
|
174
|
-
BRF:9
|
|
175
|
-
BRH:8
|
|
176
|
-
end_of_record
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// file-path-comment.ts
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
/*
|
|
5
|
-
* Copyright (c) 2021 Check Digit, LLC
|
|
6
|
-
*
|
|
7
|
-
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
8
|
-
*/
|
|
9
|
-
exports.default = {
|
|
10
|
-
meta: {
|
|
11
|
-
type: 'suggestion',
|
|
12
|
-
docs: {
|
|
13
|
-
description: 'Validate that first line of file is a path to the file',
|
|
14
|
-
url: 'https://github.com/checkdigit/eslint-plugin',
|
|
15
|
-
},
|
|
16
|
-
fixable: 'code',
|
|
17
|
-
},
|
|
18
|
-
create(context) {
|
|
19
|
-
const firstLine = context.getSourceCode().getLines()[0];
|
|
20
|
-
const expectedPath = context.getFilename().split('src/')[1];
|
|
21
|
-
if (expectedPath === undefined) {
|
|
22
|
-
return {};
|
|
23
|
-
}
|
|
24
|
-
if (!firstLine.startsWith('//')) {
|
|
25
|
-
if (firstLine.startsWith('/*')) {
|
|
26
|
-
context.report({
|
|
27
|
-
loc: {
|
|
28
|
-
start: {
|
|
29
|
-
line: 0,
|
|
30
|
-
column: 0,
|
|
31
|
-
},
|
|
32
|
-
end: {
|
|
33
|
-
line: 0,
|
|
34
|
-
column: 1,
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
message: 'first line cannot be a block comment',
|
|
38
|
-
fix(fixer) {
|
|
39
|
-
return fixer.insertTextBeforeRange([0, 0], `// ${expectedPath}\n\n`);
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
context.report({
|
|
45
|
-
loc: {
|
|
46
|
-
start: {
|
|
47
|
-
line: 0,
|
|
48
|
-
column: 0,
|
|
49
|
-
},
|
|
50
|
-
end: {
|
|
51
|
-
line: 0,
|
|
52
|
-
column: 1,
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
message: 'first line is not a comment with the file path',
|
|
56
|
-
fix(fixer) {
|
|
57
|
-
return fixer.insertTextBeforeRange([0, 0], `// ${expectedPath}\n\n`);
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
const actualComment = firstLine.split('// ')[1];
|
|
64
|
-
if (expectedPath !== actualComment) {
|
|
65
|
-
context.report({
|
|
66
|
-
loc: {
|
|
67
|
-
start: {
|
|
68
|
-
line: 0,
|
|
69
|
-
column: 0,
|
|
70
|
-
},
|
|
71
|
-
end: {
|
|
72
|
-
line: 0,
|
|
73
|
-
column: 1,
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
message: 'first line is a comment but is not a path to the file',
|
|
77
|
-
fix(fixer) {
|
|
78
|
-
return fixer.replaceTextRange([0, firstLine.length], `// ${expectedPath}`);
|
|
79
|
-
},
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return {};
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
//# sourceMappingURL=file-path-comment.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-path-comment.js","sourceRoot":"","sources":["../src/file-path-comment.ts"],"names":[],"mappings":";AAAA,uBAAuB;;AAIvB;;;;GAIG;AAEH,kBAAe;IACb,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,wDAAwD;YACrE,GAAG,EAAE,6CAA6C;SACnD;QACD,OAAO,EAAE,MAAM;KAChB;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAW,CAAC;QAClE,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5D,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,OAAO,EAAE,CAAC;SACX;QAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC/B,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC9B,OAAO,CAAC,MAAM,CAAC;oBACb,GAAG,EAAE;wBACH,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC;4BACP,MAAM,EAAE,CAAC;yBACV;wBACD,GAAG,EAAE;4BACH,IAAI,EAAE,CAAC;4BACP,MAAM,EAAE,CAAC;yBACV;qBACF;oBACD,OAAO,EAAE,sCAAsC;oBAC/C,GAAG,CAAC,KAAqB;wBACvB,OAAO,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,YAAY,MAAM,CAAC,CAAC;oBACvE,CAAC;iBACF,CAAC,CAAC;aACJ;iBAAM;gBACL,OAAO,CAAC,MAAM,CAAC;oBACb,GAAG,EAAE;wBACH,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC;4BACP,MAAM,EAAE,CAAC;yBACV;wBACD,GAAG,EAAE;4BACH,IAAI,EAAE,CAAC;4BACP,MAAM,EAAE,CAAC;yBACV;qBACF;oBACD,OAAO,EAAE,gDAAgD;oBACzD,GAAG,CAAC,KAAqB;wBACvB,OAAO,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,YAAY,MAAM,CAAC,CAAC;oBACvE,CAAC;iBACF,CAAC,CAAC;aACJ;SACF;aAAM;YACL,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,YAAY,KAAK,aAAa,EAAE;gBAClC,OAAO,CAAC,MAAM,CAAC;oBACb,GAAG,EAAE;wBACH,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC;4BACP,MAAM,EAAE,CAAC;yBACV;wBACD,GAAG,EAAE;4BACH,IAAI,EAAE,CAAC;4BACP,MAAM,EAAE,CAAC;yBACV;qBACF;oBACD,OAAO,EAAE,uDAAuD;oBAChE,GAAG,CAAC,KAAqB;wBACvB,OAAO,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,YAAY,EAAE,CAAC,CAAC;oBAC7E,CAAC;iBACF,CAAC,CAAC;aACJ;SACF;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;CACiB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// file-path-comment.spec.ts
|
|
3
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
-
};
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
/*
|
|
8
|
-
* Copyright (c) 2021 Check Digit, LLC
|
|
9
|
-
*
|
|
10
|
-
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
11
|
-
*/
|
|
12
|
-
const eslint_1 = require("eslint");
|
|
13
|
-
const file_path_comment_1 = __importDefault(require("./file-path-comment"));
|
|
14
|
-
describe('file-path-comment', () => {
|
|
15
|
-
const ruleTester = new eslint_1.RuleTester({ parserOptions: { ecmaVersion: 2020 } });
|
|
16
|
-
ruleTester.run('file-path-comment', file_path_comment_1.default, {
|
|
17
|
-
valid: [
|
|
18
|
-
{
|
|
19
|
-
filename: 'src/world/hello.ts',
|
|
20
|
-
code: `// world/hello.ts`,
|
|
21
|
-
parserOptions: {
|
|
22
|
-
project: './tsconfig.json',
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
filename: 'src/hello.ts',
|
|
27
|
-
code: `// hello.ts\n`,
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
filename: 'hello.ts',
|
|
31
|
-
code: `// whatever does not matter\n`,
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
filename: 'source/hello.ts',
|
|
35
|
-
code: `// whatever does not matter\n`,
|
|
36
|
-
},
|
|
37
|
-
],
|
|
38
|
-
invalid: [
|
|
39
|
-
{
|
|
40
|
-
filename: 'src/hello.ts',
|
|
41
|
-
code: `// not-hello.ts`,
|
|
42
|
-
errors: [{ message: 'first line is a comment but is not a path to the file' }],
|
|
43
|
-
output: `// hello.ts`,
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
filename: 'src/hello.ts',
|
|
47
|
-
code: `//hello.ts\n`,
|
|
48
|
-
errors: [{ message: 'first line is a comment but is not a path to the file' }],
|
|
49
|
-
output: `// hello.ts\n`,
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
filename: 'src/hello.ts',
|
|
53
|
-
code: `/* not-hello.ts */`,
|
|
54
|
-
errors: [{ message: 'first line cannot be a block comment' }],
|
|
55
|
-
output: `// hello.ts\n\n/* not-hello.ts */`,
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
filename: 'src/hello.ts',
|
|
59
|
-
code: `const x = 123;`,
|
|
60
|
-
errors: [{ message: 'first line is not a comment with the file path' }],
|
|
61
|
-
output: `// hello.ts\n\nconst x = 123;`,
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
filename: 'src/hello.ts',
|
|
65
|
-
code: ``,
|
|
66
|
-
errors: [{ message: 'first line is not a comment with the file path' }],
|
|
67
|
-
output: `// hello.ts\n\n`,
|
|
68
|
-
},
|
|
69
|
-
],
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
//# sourceMappingURL=file-path-comment.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-path-comment.spec.js","sourceRoot":"","sources":["../src/file-path-comment.spec.ts"],"names":[],"mappings":";AAAA,4BAA4B;;;;;AAE5B;;;;GAIG;AAEH,mCAAoC;AAEpC,4EAAuC;AAEvC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,MAAM,UAAU,GAAG,IAAI,mBAAU,CAAC,EAAE,aAAa,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAE5E,UAAU,CAAC,GAAG,CAAC,mBAAmB,EAAE,2BAAI,EAAE;QACxC,KAAK,EAAE;YACL;gBACE,QAAQ,EAAE,oBAAoB;gBAC9B,IAAI,EAAE,mBAAmB;gBACzB,aAAa,EAAE;oBACb,OAAO,EAAE,iBAAiB;iBAC3B;aACF;YACD;gBACE,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,eAAe;aACtB;YACD;gBACE,QAAQ,EAAE,UAAU;gBACpB,IAAI,EAAE,+BAA+B;aACtC;YACD;gBACE,QAAQ,EAAE,iBAAiB;gBAC3B,IAAI,EAAE,+BAA+B;aACtC;SACF;QACD,OAAO,EAAE;YACP;gBACE,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,iBAAiB;gBACvB,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,uDAAuD,EAAE,CAAC;gBAC9E,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,uDAAuD,EAAE,CAAC;gBAC9E,MAAM,EAAE,eAAe;aACxB;YACD;gBACE,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,oBAAoB;gBAC1B,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC;gBAC7D,MAAM,EAAE,mCAAmC;aAC5C;YACD;gBACE,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC;gBACvE,MAAM,EAAE,+BAA+B;aACxC;YACD;gBACE,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC;gBACvE,MAAM,EAAE,iBAAiB;aAC1B;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/no-card-numbers.js
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// no-card-numbers.ts
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const CARD_NUMBER_FOUND = 'CARD_NUMBER_FOUND';
|
|
5
|
-
const CARD_NUMBERS_FOUND = 'CARD_NUMBERS_FOUND';
|
|
6
|
-
const cardNumberRegex = /\d{15,19}/gmu;
|
|
7
|
-
const allowCardNumbers = [
|
|
8
|
-
'4111111111111111',
|
|
9
|
-
'111111111111111',
|
|
10
|
-
'000000000000000',
|
|
11
|
-
'0000000000000000',
|
|
12
|
-
'00000000000000000',
|
|
13
|
-
'000000000000000000',
|
|
14
|
-
'0000000000000000000',
|
|
15
|
-
];
|
|
16
|
-
function luhnCheck(cardNumber) {
|
|
17
|
-
return (cardNumber
|
|
18
|
-
.split('')
|
|
19
|
-
.reverse()
|
|
20
|
-
.map((digit) => parseInt(digit, 10))
|
|
21
|
-
.reduce((previousValue, currentValue, index) => {
|
|
22
|
-
let value = currentValue;
|
|
23
|
-
if (index % 2 === 1) {
|
|
24
|
-
value *= 2;
|
|
25
|
-
// eslint-disable-next-line no-magic-numbers
|
|
26
|
-
if (value > 9) {
|
|
27
|
-
value = (value % 10) + 1;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return previousValue + value;
|
|
31
|
-
}, 0) %
|
|
32
|
-
10 ===
|
|
33
|
-
0);
|
|
34
|
-
}
|
|
35
|
-
function checkForCardNumbers(value, context, node, loc) {
|
|
36
|
-
const matches = value.match(cardNumberRegex);
|
|
37
|
-
if (matches === null) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const cardNumbers = matches.filter((match) => luhnCheck(match) && allowCardNumbers.indexOf(match) === -1);
|
|
41
|
-
if (cardNumbers.length === 1) {
|
|
42
|
-
if (node !== undefined) {
|
|
43
|
-
context.report({
|
|
44
|
-
messageId: CARD_NUMBER_FOUND,
|
|
45
|
-
data: {
|
|
46
|
-
number: cardNumbers[0],
|
|
47
|
-
},
|
|
48
|
-
node,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
else if (loc !== undefined) {
|
|
52
|
-
context.report({
|
|
53
|
-
messageId: CARD_NUMBER_FOUND,
|
|
54
|
-
data: {
|
|
55
|
-
number: cardNumbers[0],
|
|
56
|
-
},
|
|
57
|
-
loc: {
|
|
58
|
-
start: loc.start,
|
|
59
|
-
end: loc.end,
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else if (cardNumbers.length > 1) {
|
|
65
|
-
if (node !== undefined) {
|
|
66
|
-
context.report({
|
|
67
|
-
messageId: CARD_NUMBERS_FOUND,
|
|
68
|
-
data: {
|
|
69
|
-
number: matches.join(', '),
|
|
70
|
-
},
|
|
71
|
-
node,
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
else if (loc !== undefined) {
|
|
75
|
-
context.report({
|
|
76
|
-
messageId: CARD_NUMBERS_FOUND,
|
|
77
|
-
data: {
|
|
78
|
-
number: matches.join(', '),
|
|
79
|
-
},
|
|
80
|
-
loc: {
|
|
81
|
-
start: loc.start,
|
|
82
|
-
end: loc.end,
|
|
83
|
-
},
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
exports.default = {
|
|
89
|
-
meta: {
|
|
90
|
-
type: 'problem',
|
|
91
|
-
docs: {
|
|
92
|
-
description: 'Detects if a luhn passing card number',
|
|
93
|
-
url: 'https://github.com/checkdigit/eslint-plugin',
|
|
94
|
-
},
|
|
95
|
-
messages: {
|
|
96
|
-
[CARD_NUMBER_FOUND]: `Valid card number: "{{ number }}"`,
|
|
97
|
-
[CARD_NUMBERS_FOUND]: `Multiple valid card numbers found: "{{ numbers }}"`,
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
|
-
create(context) {
|
|
101
|
-
const sourceCode = context.getSourceCode();
|
|
102
|
-
const comments = sourceCode.getAllComments();
|
|
103
|
-
comments.forEach((comment) => {
|
|
104
|
-
if (comment.loc !== undefined && comment.loc !== null) {
|
|
105
|
-
checkForCardNumbers(comment.value, context, undefined, comment.loc);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
return {
|
|
109
|
-
Literal(node) {
|
|
110
|
-
if (node.value === undefined) {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
if (typeof node.value !== 'string' && typeof node.value !== 'number') {
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
const value = `${node.value}`;
|
|
117
|
-
checkForCardNumbers(value, context, node);
|
|
118
|
-
},
|
|
119
|
-
TemplateElement(node) {
|
|
120
|
-
if (!node.value) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
if (typeof node.value.cooked !== 'string') {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
checkForCardNumbers(node.value.cooked, context, node);
|
|
127
|
-
},
|
|
128
|
-
};
|
|
129
|
-
},
|
|
130
|
-
};
|
|
131
|
-
//# sourceMappingURL=no-card-numbers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-card-numbers.js","sourceRoot":"","sources":["../src/no-card-numbers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// no-card-numbers.spec.ts
|
|
3
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
-
};
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
/*
|
|
8
|
-
* Copyright (c) 2021 Check Digit, LLC
|
|
9
|
-
*
|
|
10
|
-
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
11
|
-
*/
|
|
12
|
-
const eslint_1 = require("eslint");
|
|
13
|
-
const no_card_numbers_1 = __importDefault(require("./no-card-numbers"));
|
|
14
|
-
const CARD_NUMBER_FOUND = 'CARD_NUMBER_FOUND';
|
|
15
|
-
const CARD_NUMBERS_FOUND = 'CARD_NUMBERS_FOUND';
|
|
16
|
-
const CARD_NUMBER_FOUND_MSG = {
|
|
17
|
-
messageId: CARD_NUMBER_FOUND,
|
|
18
|
-
};
|
|
19
|
-
const CARD_NUMBERS_FOUND_MSG = {
|
|
20
|
-
messageId: CARD_NUMBERS_FOUND,
|
|
21
|
-
};
|
|
22
|
-
const STRING_TEST = `
|
|
23
|
-
const NOT_A_SECRET = "I'm not a secret, I think";
|
|
24
|
-
`;
|
|
25
|
-
// eslint-disable-next-line no-template-curly-in-string
|
|
26
|
-
const TEMPLATE_TEST = "const NOT_A_SECRET = `A template that isn't a secret. ${1+1} = 2`";
|
|
27
|
-
const CONTAINS_CARD_NUMBER_IN_NUMBER = `
|
|
28
|
-
const foo = 4507894813950280;
|
|
29
|
-
`;
|
|
30
|
-
const CONTAINS_A_PASSING_CARD_NUMBER = `
|
|
31
|
-
const foo = 4111111111111111;
|
|
32
|
-
const fuz = 123111111111111111567;
|
|
33
|
-
const bar = 111111111111111;
|
|
34
|
-
const baz = 000000000000000;
|
|
35
|
-
const far = 0000000000000000;
|
|
36
|
-
const faz = 00000000000000000;
|
|
37
|
-
const doo = 000000000000000000;
|
|
38
|
-
const dar = 0000000000000000000;
|
|
39
|
-
`;
|
|
40
|
-
const CONTAINS_A_PASSING_CARD_NUMBER_IN_COMMENT = `
|
|
41
|
-
// 4111111111111111;
|
|
42
|
-
// 123111111111111111567;
|
|
43
|
-
// 111111111111111;
|
|
44
|
-
// 000000000000000;
|
|
45
|
-
// 0000000000000000;
|
|
46
|
-
// 00000000000000000;
|
|
47
|
-
// 000000000000000000;
|
|
48
|
-
// 0000000000000000000;
|
|
49
|
-
`;
|
|
50
|
-
const CONTAINS_SEVERAL_CARD_NUMBERS_IN_STRING = `
|
|
51
|
-
const foo = '4507894813950280 aa 4939816588221579';
|
|
52
|
-
`;
|
|
53
|
-
const CONTAINS_CARD_NUMBER_IN_COMMENT = `
|
|
54
|
-
// this test will be using this valid card number -> 4507894813950280
|
|
55
|
-
const foo = 'nothing wrong here';
|
|
56
|
-
`;
|
|
57
|
-
const CONTAINS_SEVERAL_CARD_NUMBERS_IN_COMMENT = `
|
|
58
|
-
// this test will be using these valid card numbers -> 4507894813950280 and 4732643354095204
|
|
59
|
-
const foo = 'nothing wrong here';
|
|
60
|
-
`;
|
|
61
|
-
const STRING_WITH_CARD_NUMBER_THAT_DOESNT_PASS_LUHN_CHECK = `
|
|
62
|
-
const foo = 4507894813950285;
|
|
63
|
-
`;
|
|
64
|
-
describe('no-card-numbers', () => {
|
|
65
|
-
const ruleTester = new eslint_1.RuleTester({ parserOptions: { ecmaVersion: 2020 } });
|
|
66
|
-
ruleTester.run('no-card-numbers', no_card_numbers_1.default, {
|
|
67
|
-
valid: [
|
|
68
|
-
{
|
|
69
|
-
code: STRING_TEST,
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
code: TEMPLATE_TEST,
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
code: STRING_WITH_CARD_NUMBER_THAT_DOESNT_PASS_LUHN_CHECK,
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
code: CONTAINS_A_PASSING_CARD_NUMBER,
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
code: CONTAINS_A_PASSING_CARD_NUMBER_IN_COMMENT,
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
invalid: [
|
|
85
|
-
{
|
|
86
|
-
code: CONTAINS_CARD_NUMBER_IN_NUMBER,
|
|
87
|
-
errors: [CARD_NUMBER_FOUND_MSG],
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
code: CONTAINS_SEVERAL_CARD_NUMBERS_IN_STRING,
|
|
91
|
-
errors: [CARD_NUMBERS_FOUND_MSG],
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
code: CONTAINS_CARD_NUMBER_IN_COMMENT,
|
|
95
|
-
errors: [CARD_NUMBER_FOUND_MSG],
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
code: CONTAINS_SEVERAL_CARD_NUMBERS_IN_COMMENT,
|
|
99
|
-
errors: [CARD_NUMBERS_FOUND_MSG],
|
|
100
|
-
},
|
|
101
|
-
],
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
//# sourceMappingURL=no-card-numbers.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-card-numbers.spec.js","sourceRoot":"","sources":["../src/no-card-numbers.spec.ts"],"names":[],"mappings":";AAAA,0BAA0B;;;;;AAE1B;;;;GAIG;AAEH,mCAAoC;AAEpC,wEAAqC;AAErC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAC9C,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEhD,MAAM,qBAAqB,GAAG;IAC5B,SAAS,EAAE,iBAAiB;CAC7B,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,SAAS,EAAE,kBAAkB;CAC9B,CAAC;AAEF,MAAM,WAAW,GAAG;;CAEnB,CAAC;AAEF,uDAAuD;AACvD,MAAM,aAAa,GAAG,mEAAmE,CAAC;AAE1F,MAAM,8BAA8B,GAAG;;CAEtC,CAAC;AAEF,MAAM,8BAA8B,GAAG;;;;;;;;;CAStC,CAAC;AAEF,MAAM,yCAAyC,GAAG;;;;;;;;;CASjD,CAAC;AAEF,MAAM,uCAAuC,GAAG;;CAE/C,CAAC;AAEF,MAAM,+BAA+B,GAAG;;;CAGvC,CAAC;AAEF,MAAM,wCAAwC,GAAG;;;CAGhD,CAAC;AAEF,MAAM,mDAAmD,GAAG;;CAE3D,CAAC;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,UAAU,GAAG,IAAI,mBAAU,CAAC,EAAE,aAAa,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5E,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,yBAAI,EAAE;QACtC,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,WAAW;aAClB;YACD;gBACE,IAAI,EAAE,aAAa;aACpB;YACD;gBACE,IAAI,EAAE,mDAAmD;aAC1D;YACD;gBACE,IAAI,EAAE,8BAA8B;aACrC;YACD;gBACE,IAAI,EAAE,yCAAyC;aAChD;SACF;QACD,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,8BAA8B;gBACpC,MAAM,EAAE,CAAC,qBAAqB,CAAC;aAChC;YACD;gBACE,IAAI,EAAE,uCAAuC;gBAC7C,MAAM,EAAE,CAAC,sBAAsB,CAAC;aACjC;YACD;gBACE,IAAI,EAAE,+BAA+B;gBACrC,MAAM,EAAE,CAAC,qBAAqB,CAAC;aAChC;YACD;gBACE,IAAI,EAAE,wCAAwC;gBAC9C,MAAM,EAAE,CAAC,sBAAsB,CAAC;aACjC;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/pure-functions.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// pure-functions.ts
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const INVALID_CLOSURE = 'INVALID_CLOSURE';
|
|
5
|
-
exports.default = {
|
|
6
|
-
meta: {
|
|
7
|
-
type: 'problem',
|
|
8
|
-
docs: {
|
|
9
|
-
description: 'disallow closures of anything other than const primitive values',
|
|
10
|
-
url: 'https://github.com/checkdigit/eslint-plugin',
|
|
11
|
-
},
|
|
12
|
-
messages: {
|
|
13
|
-
[INVALID_CLOSURE]: 'invalid closure over {{ name }}',
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
create(context) {
|
|
17
|
-
const sourceCode = context.getSourceCode();
|
|
18
|
-
const manager = sourceCode.scopeManager;
|
|
19
|
-
function check(node) {
|
|
20
|
-
const functionScope = manager.acquire(node);
|
|
21
|
-
const functionRange = node.range;
|
|
22
|
-
if (functionRange === undefined) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const queue = [functionScope];
|
|
26
|
-
let scope;
|
|
27
|
-
while ((scope = queue.pop())) {
|
|
28
|
-
queue.push(...scope.childScopes);
|
|
29
|
-
for (const reference of scope.references) {
|
|
30
|
-
const variable = reference.resolved;
|
|
31
|
-
if (variable !== null &&
|
|
32
|
-
variable.defs.every((definition) => {
|
|
33
|
-
const definitionNode = definition.node;
|
|
34
|
-
const definitionRange = definitionNode.range;
|
|
35
|
-
return ((functionRange[0] > definitionRange[0] || definitionRange[1] < functionRange[0]) &&
|
|
36
|
-
!(definition.kind === 'const' &&
|
|
37
|
-
definitionNode.init?.type === 'Literal'));
|
|
38
|
-
})) {
|
|
39
|
-
context.report({
|
|
40
|
-
node: reference.identifier,
|
|
41
|
-
messageId: INVALID_CLOSURE,
|
|
42
|
-
data: { name: variable.name },
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return {
|
|
49
|
-
ArrowFunctionExpression: check,
|
|
50
|
-
FunctionDeclaration: check,
|
|
51
|
-
FunctionExpression: check,
|
|
52
|
-
};
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
//# sourceMappingURL=pure-functions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pure-functions.js","sourceRoot":"","sources":["../src/pure-functions.ts"],"names":[],"mappings":";AAAA,oBAAoB;;AAWpB,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAE1C,kBAAe;IACb,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,iEAAiE;YAC9E,GAAG,EAAE,6CAA6C;SACnD;QACD,QAAQ,EAAE;YACR,CAAC,eAAe,CAAC,EAAE,iCAAiC;SACrD;KACF;IACD,MAAM,CAAC,OAAyB;QAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC;QAExC,SAAS,KAAK,CAAC,IAAiB;YAC9B,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;YACjC,IAAI,aAAa,KAAK,SAAS,EAAE;gBAC/B,OAAO;aACR;YAED,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9B,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE;gBAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;gBACjC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE;oBACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;oBACpC,IACE,QAAQ,KAAK,IAAI;wBACjB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE;4BACjC,MAAM,cAAc,GAAG,UAAU,CAAC,IAA4D,CAAC;4BAC/F,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC;4BAC7C,OAAO,CACL,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gCAChF,CAAC,CACE,UAA0C,CAAC,IAAI,KAAK,OAAO;oCAC5D,cAAc,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,CACxC,CACF,CAAC;wBACJ,CAAC,CAAC,EACF;wBACA,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,SAAS,CAAC,UAAU;4BAC1B,SAAS,EAAE,eAAe;4BAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;yBAC9B,CAAC,CAAC;qBACJ;iBACF;aACF;QACH,CAAC;QAED,OAAO;YACL,uBAAuB,EAAE,KAAK;YAC9B,mBAAmB,EAAE,KAAK;YAC1B,kBAAkB,EAAE,KAAK;SAC1B,CAAC;IACJ,CAAC;CACiB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|