@checkdigit/eslint-plugin 6.0.0-PR.59-4373 → 6.0.0-PR.59-538d

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.
@@ -0,0 +1,549 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ default: () => src_default
24
+ });
25
+ module.exports = __toCommonJS(src_exports);
26
+
27
+ // src/file-path-comment.ts
28
+ var file_path_comment_default = {
29
+ meta: {
30
+ type: "suggestion",
31
+ docs: {
32
+ description: "Validate that first line of file is a path to the file",
33
+ url: "https://github.com/checkdigit/eslint-plugin"
34
+ },
35
+ fixable: "code"
36
+ },
37
+ create(context) {
38
+ const firstLine = context.sourceCode.getLines()[0];
39
+ const expectedPath = context.filename.split("src/")[1];
40
+ if (firstLine === void 0 || expectedPath === void 0) {
41
+ return {};
42
+ }
43
+ if (!firstLine.startsWith("//")) {
44
+ if (firstLine.startsWith("/*")) {
45
+ context.report({
46
+ loc: {
47
+ start: {
48
+ line: 0,
49
+ column: 0
50
+ },
51
+ end: {
52
+ line: 0,
53
+ column: 1
54
+ }
55
+ },
56
+ message: "first line cannot be a block comment",
57
+ fix(fixer) {
58
+ return fixer.insertTextBeforeRange([0, 0], `// ${expectedPath}
59
+
60
+ `);
61
+ }
62
+ });
63
+ } else {
64
+ context.report({
65
+ loc: {
66
+ start: {
67
+ line: 0,
68
+ column: 0
69
+ },
70
+ end: {
71
+ line: 0,
72
+ column: 1
73
+ }
74
+ },
75
+ message: "first line is not a comment with the file path",
76
+ fix(fixer) {
77
+ return fixer.insertTextBeforeRange([0, 0], `// ${expectedPath}
78
+
79
+ `);
80
+ }
81
+ });
82
+ }
83
+ } else {
84
+ const actualComment = firstLine.split("// ")[1];
85
+ if (expectedPath !== actualComment) {
86
+ context.report({
87
+ loc: {
88
+ start: {
89
+ line: 0,
90
+ column: 0
91
+ },
92
+ end: {
93
+ line: 0,
94
+ column: 1
95
+ }
96
+ },
97
+ message: "first line is a comment but is not a path to the file",
98
+ fix(fixer) {
99
+ return fixer.replaceTextRange([0, firstLine.length], `// ${expectedPath}`);
100
+ }
101
+ });
102
+ }
103
+ }
104
+ return {};
105
+ }
106
+ };
107
+
108
+ // src/no-card-numbers.ts
109
+ var CARD_NUMBER_FOUND = "CARD_NUMBER_FOUND";
110
+ var CARD_NUMBERS_FOUND = "CARD_NUMBERS_FOUND";
111
+ var cardNumberRegex = /\d{15,19}/gmu;
112
+ var allowCardNumbers = [
113
+ "4111111111111111",
114
+ "111111111111111",
115
+ "000000000000000",
116
+ "0000000000000000",
117
+ "00000000000000000",
118
+ "000000000000000000",
119
+ "0000000000000000000"
120
+ ];
121
+ function luhnCheck(cardNumber) {
122
+ return cardNumber.split("").reverse().map((digit) => parseInt(digit, 10)).reduce((previousValue, currentValue, index) => {
123
+ let value = currentValue;
124
+ if (index % 2 === 1) {
125
+ value *= 2;
126
+ if (value > 9) {
127
+ value = value % 10 + 1;
128
+ }
129
+ }
130
+ return previousValue + value;
131
+ }, 0) % 10 === 0;
132
+ }
133
+ function checkForCardNumbers(value, context, node, loc) {
134
+ const matches = value.match(cardNumberRegex);
135
+ if (matches === null) {
136
+ return;
137
+ }
138
+ const cardNumbers = matches.filter(
139
+ (match) => luhnCheck(match) && !allowCardNumbers.includes(match) && // any 16-digit number that begins with 0-1 or 7-9 is not a valid card number
140
+ !match.startsWith("0") && !match.startsWith("1") && !match.startsWith("7") && !match.startsWith("8") && !match.startsWith("9")
141
+ );
142
+ if (cardNumbers.length === 1) {
143
+ const cardNumber = cardNumbers[0];
144
+ if (cardNumber !== void 0) {
145
+ if (node !== void 0) {
146
+ context.report({
147
+ messageId: CARD_NUMBER_FOUND,
148
+ data: {
149
+ number: cardNumber
150
+ },
151
+ node
152
+ });
153
+ } else if (loc !== void 0) {
154
+ context.report({
155
+ messageId: CARD_NUMBER_FOUND,
156
+ data: {
157
+ number: cardNumber
158
+ },
159
+ loc: {
160
+ start: loc.start,
161
+ end: loc.end
162
+ }
163
+ });
164
+ }
165
+ }
166
+ } else if (cardNumbers.length > 1) {
167
+ if (node !== void 0) {
168
+ context.report({
169
+ messageId: CARD_NUMBERS_FOUND,
170
+ data: {
171
+ numbers: matches.join(", ")
172
+ },
173
+ node
174
+ });
175
+ } else if (loc !== void 0) {
176
+ context.report({
177
+ messageId: CARD_NUMBERS_FOUND,
178
+ data: {
179
+ numbers: matches.join(", ")
180
+ },
181
+ loc: {
182
+ start: loc.start,
183
+ end: loc.end
184
+ }
185
+ });
186
+ }
187
+ }
188
+ }
189
+ var no_card_numbers_default = {
190
+ meta: {
191
+ type: "problem",
192
+ docs: {
193
+ description: "Detects if a luhn passing card number",
194
+ url: "https://github.com/checkdigit/eslint-plugin"
195
+ },
196
+ messages: {
197
+ [CARD_NUMBER_FOUND]: `Valid card number: "{{ number }}"`,
198
+ [CARD_NUMBERS_FOUND]: `Multiple valid card numbers found: "{{ numbers }}"`
199
+ }
200
+ },
201
+ create(context) {
202
+ const sourceCode = context.sourceCode;
203
+ const comments = sourceCode.getAllComments();
204
+ comments.forEach((comment) => {
205
+ if (comment.loc !== void 0 && comment.loc !== null) {
206
+ checkForCardNumbers(comment.value, context, void 0, comment.loc);
207
+ }
208
+ });
209
+ return {
210
+ Literal(node) {
211
+ if (node.value === void 0) {
212
+ return;
213
+ }
214
+ if (typeof node.value !== "string" && typeof node.value !== "number") {
215
+ return;
216
+ }
217
+ const value = String(node.value);
218
+ checkForCardNumbers(value, context, node);
219
+ },
220
+ TemplateElement(node) {
221
+ if (typeof node.value.cooked !== "string") {
222
+ return;
223
+ }
224
+ checkForCardNumbers(node.value.cooked, context, node);
225
+ }
226
+ };
227
+ }
228
+ };
229
+
230
+ // src/no-uuid.ts
231
+ var UUID_FOUND = "UUID_FOUND";
232
+ var UUIDS_FOUND = "UUIDS_FOUND";
233
+ var uuidRegex = /[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}/gmu;
234
+ function checkForUuid(value, context, node, loc) {
235
+ const matches = value.match(uuidRegex);
236
+ if (matches === null) {
237
+ return;
238
+ }
239
+ if (matches.length === 1) {
240
+ if (node !== void 0) {
241
+ context.report({
242
+ messageId: UUID_FOUND,
243
+ data: {
244
+ uuid: matches[0]
245
+ },
246
+ node
247
+ });
248
+ } else if (loc !== void 0) {
249
+ context.report({
250
+ messageId: UUID_FOUND,
251
+ data: {
252
+ uuid: matches[0]
253
+ },
254
+ loc: {
255
+ start: loc.start,
256
+ end: loc.end
257
+ }
258
+ });
259
+ }
260
+ } else if (matches.length > 1) {
261
+ if (node !== void 0) {
262
+ context.report({
263
+ messageId: UUIDS_FOUND,
264
+ data: {
265
+ uuids: matches.join(", ")
266
+ },
267
+ node
268
+ });
269
+ } else if (loc !== void 0) {
270
+ context.report({
271
+ messageId: UUIDS_FOUND,
272
+ data: {
273
+ uuids: matches.join(", ")
274
+ },
275
+ loc: {
276
+ start: loc.start,
277
+ end: loc.end
278
+ }
279
+ });
280
+ }
281
+ }
282
+ }
283
+ var no_uuid_default = {
284
+ meta: {
285
+ type: "problem",
286
+ docs: {
287
+ description: "Detects if a string literal contains a UUID",
288
+ url: "https://github.com/checkdigit/eslint-plugin"
289
+ },
290
+ messages: {
291
+ [UUID_FOUND]: `UUID found: "{{ uuid }}"`,
292
+ [UUIDS_FOUND]: `Multiple UUIDs found: "{{ uuids }}"`
293
+ }
294
+ },
295
+ create(context) {
296
+ const sourceCode = context.sourceCode;
297
+ const comments = sourceCode.getAllComments();
298
+ comments.forEach((comment) => {
299
+ if (comment.loc !== void 0 && comment.loc !== null) {
300
+ checkForUuid(comment.value, context, void 0, comment.loc);
301
+ }
302
+ });
303
+ return {
304
+ Literal(node) {
305
+ if (node.value === void 0) {
306
+ return;
307
+ }
308
+ if (typeof node.value !== "string") {
309
+ return;
310
+ }
311
+ const value = node.value;
312
+ checkForUuid(value, context, node);
313
+ },
314
+ TemplateElement(node) {
315
+ if (typeof node.value.cooked !== "string") {
316
+ return;
317
+ }
318
+ checkForUuid(node.value.cooked, context, node);
319
+ }
320
+ };
321
+ }
322
+ };
323
+
324
+ // src/no-wallaby-comment.ts
325
+ var wallabyRegex = /(?<=(?:^|\*\/)\s*)[?]{1,2}|file\.only|file\.skip/gu;
326
+ var commentRegex = /\s*(?:\/\/|<!--)\s*(?<comment>\?{1,2}\.?\s*|file\.(?:only|skip))\s*/gu;
327
+ function removeWallabyComment(context, sourceCode, start, end) {
328
+ context.report({
329
+ loc: {
330
+ start: sourceCode.getLocFromIndex(start),
331
+ end: sourceCode.getLocFromIndex(end)
332
+ },
333
+ message: "Remove wallaby-specific comments",
334
+ fix: (fixer) => fixer.removeRange([start, end])
335
+ });
336
+ }
337
+ function processLineComment(context, sourceCode, comment) {
338
+ if (comment.loc) {
339
+ const line = sourceCode.getLines()[comment.loc.start.line - 1];
340
+ if (line !== void 0) {
341
+ let match;
342
+ while ((match = commentRegex.exec(line)) !== null) {
343
+ const start = sourceCode.getIndexFromLoc({ line: comment.loc.start.line, column: match.index });
344
+ const end = sourceCode.getIndexFromLoc({ line: comment.loc.start.line, column: comment.loc.end.column });
345
+ removeWallabyComment(context, sourceCode, start, end);
346
+ }
347
+ }
348
+ }
349
+ }
350
+ function processBlockComment(context, sourceCode, comment) {
351
+ const commentValues = comment.value.split("\n");
352
+ const blockCommentRegex = /^(?:\s*\*\s*)?(?:file\.only|file\.skip)$/gu;
353
+ commentValues.forEach((commentValue) => {
354
+ let startLine = comment.loc?.start.line ?? 0;
355
+ const endLine = comment.loc?.end.line ?? 0;
356
+ let match;
357
+ while (comment.loc && (match = wallabyRegex.exec(commentValue)) !== null) {
358
+ let start = 0;
359
+ let end = 0;
360
+ const removeEntireComment = blockCommentRegex.test(comment.value.trim());
361
+ if (removeEntireComment) {
362
+ start = sourceCode.getIndexFromLoc({ line: comment.loc.start.line, column: comment.loc.start.column });
363
+ end = sourceCode.getIndexFromLoc({ line: comment.loc.end.line, column: comment.loc.end.column });
364
+ } else {
365
+ let lineNumber = 0;
366
+ while (startLine <= endLine) {
367
+ const line = sourceCode.getLines()[startLine];
368
+ if (line !== void 0 && line.includes(match.input)) {
369
+ lineNumber = startLine;
370
+ break;
371
+ }
372
+ startLine++;
373
+ }
374
+ start = sourceCode.getIndexFromLoc({ line: lineNumber + 1, column: comment.loc.start.column });
375
+ end = sourceCode.getIndexFromLoc({ line: lineNumber + 2, column: 0 });
376
+ }
377
+ removeWallabyComment(context, sourceCode, start, end);
378
+ }
379
+ });
380
+ }
381
+ var no_wallaby_comment_default = {
382
+ meta: {
383
+ type: "problem",
384
+ docs: {
385
+ description: "Detects wallaby-specific temporary comments like // ? or // ?? or // ?. or // ??. or // file.only or // file.skip and fix it",
386
+ url: "https://github.com/checkdigit/eslint-plugin"
387
+ },
388
+ fixable: "code"
389
+ },
390
+ create(context) {
391
+ const sourceCode = context.sourceCode;
392
+ const comments = sourceCode.getAllComments();
393
+ comments.forEach((comment) => {
394
+ if (comment.type === "Line") {
395
+ processLineComment(context, sourceCode, comment);
396
+ } else {
397
+ processBlockComment(context, sourceCode, comment);
398
+ }
399
+ });
400
+ return {};
401
+ }
402
+ };
403
+
404
+ // src/regular-expression-comment.ts
405
+ var regular_expression_comment_default = {
406
+ meta: {
407
+ type: "problem",
408
+ docs: {
409
+ description: "Require comments for regular expressions before or on the same line",
410
+ url: "https://github.com/checkdigit/eslint-plugin"
411
+ }
412
+ },
413
+ create(context) {
414
+ const comments = context.sourceCode.getAllComments();
415
+ const lines = context.sourceCode.getLines();
416
+ return {
417
+ Literal(node) {
418
+ if (node.loc && node.value instanceof RegExp) {
419
+ const regularExpressionLine = node.loc.start.line;
420
+ const previousLine = regularExpressionLine - 1;
421
+ const previousLineComment = lines[previousLine - 1];
422
+ const regularExpressionComment = comments.find((comment) => {
423
+ if (!comment.loc) {
424
+ return false;
425
+ }
426
+ const regularExpression = /[a-zA-Z]/gu;
427
+ const commentRegularExpressionLine = /^\s*(?:\/{2,}|\/\*+)/gu;
428
+ const hasComment = regularExpression.test(comment.value.trim());
429
+ if (comment.type === "Line" || comment.loc.start.line === comment.loc.end.line) {
430
+ return comment.loc.end.line === previousLine && previousLineComment !== void 0 && commentRegularExpressionLine.test(previousLineComment) && hasComment || comment.loc.end.line === regularExpressionLine && hasComment;
431
+ }
432
+ return comment.loc.end.line === previousLine && hasComment || comment.loc.end.line === regularExpressionLine && hasComment;
433
+ });
434
+ if (!regularExpressionComment) {
435
+ context.report({
436
+ node,
437
+ message: "Missing comment for regular expression"
438
+ });
439
+ }
440
+ }
441
+ }
442
+ };
443
+ }
444
+ };
445
+
446
+ // src/require-strict-assert.ts
447
+ var NODE_ASSERT_STRICT = "node:assert/strict";
448
+ var NODE_ASSERT = "node:assert";
449
+ var require_strict_assert_default = {
450
+ meta: {
451
+ type: "problem",
452
+ docs: {
453
+ description: "Require importing strict version of node:assert and using non-strict assert functions.",
454
+ url: "https://github.com/checkdigit/eslint-plugin"
455
+ },
456
+ fixable: "code"
457
+ },
458
+ create(context) {
459
+ const nodeValues = {};
460
+ return {
461
+ Literal(node) {
462
+ if (typeof node.value === "string" && node.parent.type === "ImportDeclaration" && node.parent.specifiers.length > 0) {
463
+ const importSpecifier = node.parent.specifiers[0];
464
+ if (importSpecifier) {
465
+ nodeValues[importSpecifier.local.name] = node.value;
466
+ }
467
+ if (node.value === NODE_ASSERT || node.value === NODE_ASSERT_STRICT) {
468
+ const importDeclaration = node.parent;
469
+ const defaultSpecifier = importDeclaration.specifiers.find(
470
+ (specifier) => specifier.type === "ImportDefaultSpecifier" || specifier.type === "ImportNamespaceSpecifier"
471
+ );
472
+ if (defaultSpecifier !== void 0) {
473
+ const importDeclarationRange = importDeclaration.range ?? [0, 0];
474
+ let rangeToReplace = defaultSpecifier.range ?? importDeclarationRange;
475
+ let correctedText = `{ strict as ${defaultSpecifier.local.name} }`;
476
+ if (node.value === NODE_ASSERT_STRICT && defaultSpecifier.range && importDeclaration.source.range) {
477
+ rangeToReplace = [defaultSpecifier.range[0], importDeclaration.source.range[1]];
478
+ correctedText = `{ strict as ${defaultSpecifier.local.name} } from '${NODE_ASSERT}'`;
479
+ }
480
+ context.report({
481
+ node: importDeclaration,
482
+ message: "Invalid form of strict assertion mode",
483
+ fix: (fixer) => fixer.replaceTextRange(rangeToReplace, correctedText)
484
+ });
485
+ }
486
+ }
487
+ }
488
+ },
489
+ CallExpression(node) {
490
+ const callee = node.callee;
491
+ if (callee.type === "MemberExpression" && callee.object.type === "Identifier" && callee.object.name !== "" && callee.property.type === "Identifier" && callee.property.name !== "" && (callee.property.name.includes("strict") || callee.property.name.includes("Strict"))) {
492
+ const nodeValue = nodeValues[callee.object.name];
493
+ if (nodeValue === NODE_ASSERT || nodeValue === NODE_ASSERT_STRICT) {
494
+ let nonStrictFunctionName = "";
495
+ const strictFunctionName = callee.property.name;
496
+ if (strictFunctionName === "strict") {
497
+ nonStrictFunctionName = `${callee.object.name}.equal`;
498
+ } else {
499
+ const functionName = strictFunctionName.includes("strict") ? strictFunctionName.split("strict").join("") : strictFunctionName.split("Strict").join("");
500
+ const fixedFunctionName = `${functionName.charAt(0).toLowerCase()}${functionName.slice(1)}`;
501
+ nonStrictFunctionName = `${callee.object.name}.${fixedFunctionName}`;
502
+ }
503
+ context.report({
504
+ node,
505
+ message: "strict method not required when in strict assertion mode.",
506
+ fix: (fixer) => fixer.replaceText(callee, nonStrictFunctionName)
507
+ });
508
+ }
509
+ }
510
+ }
511
+ };
512
+ }
513
+ };
514
+
515
+ // src/index.ts
516
+ var src_default = {
517
+ rules: {
518
+ "file-path-comment": file_path_comment_default,
519
+ "no-card-numbers": no_card_numbers_default,
520
+ "no-uuid": no_uuid_default,
521
+ "require-strict-assert": require_strict_assert_default,
522
+ "no-wallaby-comment": no_wallaby_comment_default,
523
+ "regular-expression-comment": regular_expression_comment_default
524
+ },
525
+ configs: {
526
+ all: {
527
+ rules: {
528
+ "@checkdigit/no-card-numbers": "error",
529
+ "@checkdigit/file-path-comment": "error",
530
+ "@checkdigit/no-uuid": "error",
531
+ "@checkdigit/require-strict-assert": "error",
532
+ "@checkdigit/no-wallaby-comment": "error",
533
+ "@checkdigit/regular-expression-comment": "error"
534
+ }
535
+ },
536
+ recommended: {
537
+ rules: {
538
+ "@checkdigit/no-card-numbers": "error",
539
+ "@checkdigit/file-path-comment": "off",
540
+ "@checkdigit/no-uuid": "error",
541
+ "@checkdigit/require-strict-assert": "error",
542
+ "@checkdigit/no-wallaby-comment": "off",
543
+ "@checkdigit/regular-expression-comment": "error"
544
+ }
545
+ }
546
+ }
547
+ };
548
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9maWxlLXBhdGgtY29tbWVudC50cyIsICIuLi9zcmMvbm8tY2FyZC1udW1iZXJzLnRzIiwgIi4uL3NyYy9uby11dWlkLnRzIiwgIi4uL3NyYy9uby13YWxsYWJ5LWNvbW1lbnQudHMiLCAiLi4vc3JjL3JlZ3VsYXItZXhwcmVzc2lvbi1jb21tZW50LnRzIiwgIi4uL3NyYy9yZXF1aXJlLXN0cmljdC1hc3NlcnQudHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ1VBLElBQU8sNEJBQVE7QUFBQSxFQUNiLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxNQUNiLEtBQUs7QUFBQSxJQUNQO0FBQUEsSUFDQSxTQUFTO0FBQUEsRUFDWDtBQUFBLEVBQ0EsT0FBTyxTQUFTO0FBQ2QsVUFBTSxZQUFZLFFBQVEsV0FBVyxTQUFTLEVBQUUsQ0FBQztBQUNqRCxVQUFNLGVBQWUsUUFBUSxTQUFTLE1BQU0sTUFBTSxFQUFFLENBQUM7QUFFckQsUUFBSSxjQUFjLFVBQWEsaUJBQWlCLFFBQVc7QUFDekQsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUVBLFFBQUksQ0FBQyxVQUFVLFdBQVcsSUFBSSxHQUFHO0FBQy9CLFVBQUksVUFBVSxXQUFXLElBQUksR0FBRztBQUM5QixnQkFBUSxPQUFPO0FBQUEsVUFDYixLQUFLO0FBQUEsWUFDSCxPQUFPO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFDVjtBQUFBLFlBQ0EsS0FBSztBQUFBLGNBQ0gsTUFBTTtBQUFBLGNBQ04sUUFBUTtBQUFBLFlBQ1Y7QUFBQSxVQUNGO0FBQUEsVUFDQSxTQUFTO0FBQUEsVUFDVCxJQUFJLE9BQXVCO0FBQ3pCLG1CQUFPLE1BQU0sc0JBQXNCLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxZQUFZ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
549
+ module.exports = module.exports.default;
@@ -0,0 +1,101 @@
1
+ {
2
+ "inputs": {
3
+ "src/file-path-comment.ts": {
4
+ "bytes": 2234,
5
+ "imports": [],
6
+ "format": "esm"
7
+ },
8
+ "src/no-card-numbers.ts": {
9
+ "bytes": 3901,
10
+ "imports": [],
11
+ "format": "esm"
12
+ },
13
+ "src/no-uuid.ts": {
14
+ "bytes": 2595,
15
+ "imports": [],
16
+ "format": "esm"
17
+ },
18
+ "src/no-wallaby-comment.ts": {
19
+ "bytes": 3488,
20
+ "imports": [],
21
+ "format": "esm"
22
+ },
23
+ "src/regular-expression-comment.ts": {
24
+ "bytes": 2357,
25
+ "imports": [],
26
+ "format": "esm"
27
+ },
28
+ "src/require-strict-assert.ts": {
29
+ "bytes": 3759,
30
+ "imports": [],
31
+ "format": "esm"
32
+ },
33
+ "src/index.ts": {
34
+ "bytes": 1437,
35
+ "imports": [
36
+ {
37
+ "path": "src/file-path-comment.ts",
38
+ "kind": "import-statement",
39
+ "original": "./file-path-comment"
40
+ },
41
+ {
42
+ "path": "src/no-card-numbers.ts",
43
+ "kind": "import-statement",
44
+ "original": "./no-card-numbers"
45
+ },
46
+ {
47
+ "path": "src/no-uuid.ts",
48
+ "kind": "import-statement",
49
+ "original": "./no-uuid"
50
+ },
51
+ {
52
+ "path": "src/no-wallaby-comment.ts",
53
+ "kind": "import-statement",
54
+ "original": "./no-wallaby-comment"
55
+ },
56
+ {
57
+ "path": "src/regular-expression-comment.ts",
58
+ "kind": "import-statement",
59
+ "original": "./regular-expression-comment"
60
+ },
61
+ {
62
+ "path": "src/require-strict-assert.ts",
63
+ "kind": "import-statement",
64
+ "original": "./require-strict-assert"
65
+ }
66
+ ],
67
+ "format": "esm"
68
+ }
69
+ },
70
+ "outputs": {
71
+ "dist-cjs/index.cjs": {
72
+ "imports": [],
73
+ "exports": [],
74
+ "entryPoint": "src/index.ts",
75
+ "inputs": {
76
+ "src/index.ts": {
77
+ "bytesInOutput": 1181
78
+ },
79
+ "src/file-path-comment.ts": {
80
+ "bytesInOutput": 1961
81
+ },
82
+ "src/no-card-numbers.ts": {
83
+ "bytesInOutput": 3356
84
+ },
85
+ "src/no-uuid.ts": {
86
+ "bytesInOutput": 2251
87
+ },
88
+ "src/no-wallaby-comment.ts": {
89
+ "bytesInOutput": 3053
90
+ },
91
+ "src/regular-expression-comment.ts": {
92
+ "bytesInOutput": 1698
93
+ },
94
+ "src/require-strict-assert.ts": {
95
+ "bytesInOutput": 3362
96
+ }
97
+ },
98
+ "bytes": 32346
99
+ }
100
+ }
101
+ }
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@checkdigit/eslint-plugin","version":"6.0.0-PR.59-4373","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.11"},"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":"^7.0.1","@types/eslint":"^8.56.6","@typescript-eslint/eslint-plugin":"^7.3.1","@typescript-eslint/parser":"^7.3.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-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-mjs","dist-cjs","!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.0.0-PR.59-538d","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.11"},"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.3.1","@typescript-eslint/parser":"^7.3.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-mjs","dist-cjs","!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"]}