eslint-plugin-nextfriday 0.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/lib/index.cjs ADDED
@@ -0,0 +1,550 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ configs: () => configs_default,
34
+ meta: () => meta_default,
35
+ rules: () => rules_default
36
+ });
37
+ module.exports = __toCommonJS(index_exports);
38
+
39
+ // package.json
40
+ var package_default = {
41
+ name: "eslint-plugin-nextfriday",
42
+ version: "0.1.0",
43
+ description: "A comprehensive ESLint plugin providing custom rules and configurations for Next Friday development workflows.",
44
+ keywords: [
45
+ "eslint",
46
+ "eslintplugin",
47
+ "eslint-plugin",
48
+ "nextfriday",
49
+ "next-friday",
50
+ "linting",
51
+ "code-quality",
52
+ "javascript",
53
+ "typescript",
54
+ "development-tools"
55
+ ],
56
+ homepage: "https://github.com/next-friday/eslint-plugin-nextfriday",
57
+ bugs: {
58
+ url: "https://github.com/next-friday/eslint-plugin-nextfriday/issues"
59
+ },
60
+ repository: {
61
+ type: "git",
62
+ url: "https://github.com/next-friday/eslint-plugin-nextfriday.git"
63
+ },
64
+ license: "MIT",
65
+ author: "Next Friday <nextfriday.developer@gmail.com>",
66
+ contributors: [
67
+ "@joetakara"
68
+ ],
69
+ type: "module",
70
+ exports: {
71
+ ".": {
72
+ types: "./lib/index.d.ts",
73
+ import: "./lib/index.js",
74
+ require: "./lib/index.cjs"
75
+ }
76
+ },
77
+ main: "lib/index.js",
78
+ types: "lib/index.d.ts",
79
+ files: [
80
+ "LICENSE",
81
+ "README.md",
82
+ "CHANGELOG.md",
83
+ "docs",
84
+ "lib"
85
+ ],
86
+ scripts: {
87
+ build: "tsup",
88
+ changeset: "changeset",
89
+ "changeset:publish": "npm publish --provenance --access public",
90
+ "changeset:version": "changeset version",
91
+ clear: "rm -rf lib node_modules/.cache .eslintcache",
92
+ eslint: "eslint src --ext .js,.ts,.mjs --fix",
93
+ "eslint:check": "eslint src --ext .js,.ts,.mjs",
94
+ preinstall: "npx only-allow pnpm",
95
+ prepare: "husky",
96
+ prepublishOnly: "pnpm run build",
97
+ prettier: "prettier --write .",
98
+ "prettier:check": "prettier --check .",
99
+ "sort-package-json": "pnpm exec sort-package-json",
100
+ "sort-package-json:check": "pnpm exec sort-package-json --check",
101
+ test: "jest",
102
+ "test:coverage": "jest --coverage",
103
+ "test:watch": "jest --watch",
104
+ typecheck: "tsc --noEmit"
105
+ },
106
+ dependencies: {
107
+ "@typescript-eslint/utils": "^8.42.0",
108
+ "emoji-regex": "^10.5.0",
109
+ tsup: "^8.5.0"
110
+ },
111
+ devDependencies: {
112
+ "@changesets/changelog-github": "^0.5.1",
113
+ "@changesets/cli": "^2.29.6",
114
+ "@commitlint/cli": "^19.8.1",
115
+ "@commitlint/config-conventional": "^19.8.1",
116
+ "@eslint/js": "^9.35.0",
117
+ "@jest/globals": "^30.1.2",
118
+ "@stylistic/eslint-plugin": "^3.1.0",
119
+ "@swc/core": "^1.13.5",
120
+ "@types/eslint": "^9.6.1",
121
+ "@types/jest": "^30.0.0",
122
+ "@types/node": "^22.5.4",
123
+ "@types/ramda": "^0.31.0",
124
+ "@typescript-eslint/parser": "^8.42.0",
125
+ "@typescript-eslint/rule-tester": "^8.42.0",
126
+ eslint: "^9.35.0",
127
+ "eslint-config-airbnb-extended": "^2.2.0",
128
+ "eslint-config-prettier": "^10.1.8",
129
+ "eslint-import-resolver-typescript": "^4.4.4",
130
+ "eslint-plugin-import-x": "^4.16.1",
131
+ "eslint-plugin-jest": "^29.0.1",
132
+ "eslint-plugin-prettier": "^5.5.4",
133
+ "eslint-plugin-sonarjs": "^3.0.5",
134
+ husky: "^9.1.7",
135
+ jest: "^29.7.0",
136
+ "lint-staged": "^16.1.6",
137
+ prettier: "^3.6.2",
138
+ "sort-package-json": "^3.4.0",
139
+ "ts-jest": "^29.4.1",
140
+ "ts-node": "^10.9.2",
141
+ typescript: "^5.6.2",
142
+ "typescript-eslint": "^8.42.0"
143
+ },
144
+ peerDependencies: {
145
+ eslint: "^9.0.0"
146
+ },
147
+ packageManager: "pnpm@9.12.0",
148
+ engines: {
149
+ node: ">=22.0.0",
150
+ pnpm: ">=9.0.0"
151
+ },
152
+ publishConfig: {
153
+ access: "public"
154
+ }
155
+ };
156
+
157
+ // src/meta.ts
158
+ var meta = {
159
+ name: package_default.name,
160
+ version: package_default.version
161
+ };
162
+ var meta_default = meta;
163
+
164
+ // src/rules/no-emoji.ts
165
+ var import_emoji_regex = __toESM(require("emoji-regex"), 1);
166
+ var import_utils = require("@typescript-eslint/utils");
167
+ var createRule = import_utils.ESLintUtils.RuleCreator(
168
+ (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`
169
+ );
170
+ var noEmoji = createRule({
171
+ name: "no-emoji",
172
+ meta: {
173
+ type: "problem",
174
+ docs: {
175
+ description: "Disallow emoji characters in source code"
176
+ },
177
+ messages: {
178
+ noEmoji: "Emoji are not allowed in source code"
179
+ },
180
+ schema: []
181
+ },
182
+ defaultOptions: [],
183
+ create(context) {
184
+ const { sourceCode } = context;
185
+ return {
186
+ Program() {
187
+ const text = sourceCode.getText();
188
+ const regex = (0, import_emoji_regex.default)();
189
+ const matches = Array.from(text.matchAll(regex));
190
+ matches.forEach((match) => {
191
+ const loc = sourceCode.getLocFromIndex(match.index);
192
+ context.report({
193
+ loc,
194
+ messageId: "noEmoji"
195
+ });
196
+ });
197
+ }
198
+ };
199
+ }
200
+ });
201
+ var no_emoji_default = noEmoji;
202
+
203
+ // src/rules/file-kebab-case.ts
204
+ var import_path = __toESM(require("path"), 1);
205
+ var import_utils2 = require("@typescript-eslint/utils");
206
+ var createRule2 = import_utils2.ESLintUtils.RuleCreator(
207
+ (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`
208
+ );
209
+ var isKebabCase = (str) => {
210
+ if (/\.(config|rc|setup|spec|test)$/.test(str)) {
211
+ return /^[a-z0-9]+(?:-[a-z0-9]+)*(?:\.[a-z0-9]+)*$/.test(str);
212
+ }
213
+ return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(str);
214
+ };
215
+ var fileKebabCase = createRule2({
216
+ name: "file-kebab-case",
217
+ meta: {
218
+ type: "problem",
219
+ docs: {
220
+ description: "Enforce kebab-case filenames for .ts and .js files"
221
+ },
222
+ messages: {
223
+ fileKebabCase: "File names must be kebab-case"
224
+ },
225
+ schema: []
226
+ },
227
+ defaultOptions: [],
228
+ create(context) {
229
+ return {
230
+ Program() {
231
+ const { filename } = context;
232
+ const ext = import_path.default.extname(filename);
233
+ if (ext !== ".ts" && ext !== ".js") {
234
+ return;
235
+ }
236
+ const basename = import_path.default.basename(filename, ext);
237
+ if (!isKebabCase(basename)) {
238
+ context.report({
239
+ loc: { line: 1, column: 0 },
240
+ messageId: "fileKebabCase"
241
+ });
242
+ }
243
+ }
244
+ };
245
+ }
246
+ });
247
+ var file_kebab_case_default = fileKebabCase;
248
+
249
+ // src/rules/jsx-pascal-case.ts
250
+ var import_path2 = __toESM(require("path"), 1);
251
+ var import_utils3 = require("@typescript-eslint/utils");
252
+ var createRule3 = import_utils3.ESLintUtils.RuleCreator(
253
+ (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`
254
+ );
255
+ var isPascalCase = (str) => /^[A-Z][a-zA-Z0-9]*$/.test(str) && !/^[A-Z]+$/.test(str);
256
+ var jsxPascalCase = createRule3({
257
+ name: "jsx-pascal-case",
258
+ meta: {
259
+ type: "problem",
260
+ docs: {
261
+ description: "Enforce PascalCase filenames for .jsx and .tsx files"
262
+ },
263
+ messages: {
264
+ jsxPascalCase: "JSX/TSX file names must be PascalCase"
265
+ },
266
+ schema: []
267
+ },
268
+ defaultOptions: [],
269
+ create(context) {
270
+ return {
271
+ Program() {
272
+ const { filename } = context;
273
+ const ext = import_path2.default.extname(filename);
274
+ if (ext !== ".jsx" && ext !== ".tsx") {
275
+ return;
276
+ }
277
+ const basename = import_path2.default.basename(filename, ext);
278
+ if (!isPascalCase(basename)) {
279
+ context.report({
280
+ loc: { line: 1, column: 0 },
281
+ messageId: "jsxPascalCase"
282
+ });
283
+ }
284
+ }
285
+ };
286
+ }
287
+ });
288
+ var jsx_pascal_case_default = jsxPascalCase;
289
+
290
+ // src/rules/prefer-destructuring-params.ts
291
+ var import_utils4 = require("@typescript-eslint/utils");
292
+ var createRule4 = import_utils4.ESLintUtils.RuleCreator(
293
+ (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`
294
+ );
295
+ var preferDestructuringParams = createRule4({
296
+ name: "prefer-destructuring-params",
297
+ meta: {
298
+ type: "suggestion",
299
+ docs: {
300
+ description: "Enforce destructuring for functions with multiple parameters"
301
+ },
302
+ messages: {
303
+ preferDestructuring: "Functions with multiple parameters should use destructuring"
304
+ },
305
+ schema: []
306
+ },
307
+ defaultOptions: [],
308
+ create(context) {
309
+ const checkFunction = (node) => {
310
+ if (node.params.length <= 1) {
311
+ return;
312
+ }
313
+ const hasNonDestructuredParams = node.params.some(
314
+ (param) => param.type !== import_utils4.AST_NODE_TYPES.ObjectPattern && param.type !== import_utils4.AST_NODE_TYPES.RestElement
315
+ );
316
+ if (hasNonDestructuredParams) {
317
+ context.report({
318
+ node,
319
+ messageId: "preferDestructuring"
320
+ });
321
+ }
322
+ };
323
+ return {
324
+ FunctionDeclaration: checkFunction,
325
+ FunctionExpression: checkFunction,
326
+ ArrowFunctionExpression: checkFunction
327
+ };
328
+ }
329
+ });
330
+ var prefer_destructuring_params_default = preferDestructuringParams;
331
+
332
+ // src/rules/no-explicit-return-type.ts
333
+ var import_utils5 = require("@typescript-eslint/utils");
334
+ var createRule5 = import_utils5.ESLintUtils.RuleCreator(
335
+ (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`
336
+ );
337
+ var noExplicitReturnType = createRule5({
338
+ name: "no-explicit-return-type",
339
+ meta: {
340
+ type: "suggestion",
341
+ docs: {
342
+ description: "Disallow explicit return types on functions"
343
+ },
344
+ fixable: "code",
345
+ schema: [],
346
+ messages: {
347
+ noExplicitReturnType: "Remove explicit return type '{{returnType}}' - TypeScript can infer it automatically"
348
+ }
349
+ },
350
+ defaultOptions: [],
351
+ create(context) {
352
+ const checkFunction = (node) => {
353
+ if (node.returnType) {
354
+ const returnTypeText = context.sourceCode.getText(node.returnType);
355
+ context.report({
356
+ node: node.returnType,
357
+ messageId: "noExplicitReturnType",
358
+ data: {
359
+ returnType: returnTypeText
360
+ },
361
+ fix(fixer) {
362
+ return fixer.remove(node.returnType);
363
+ }
364
+ });
365
+ }
366
+ };
367
+ return {
368
+ FunctionDeclaration: checkFunction,
369
+ FunctionExpression: checkFunction,
370
+ ArrowFunctionExpression: checkFunction
371
+ };
372
+ }
373
+ });
374
+ var no_explicit_return_type_default = noExplicitReturnType;
375
+
376
+ // src/rules/prefer-import-type.ts
377
+ var import_utils6 = require("@typescript-eslint/utils");
378
+ var createRule6 = import_utils6.ESLintUtils.RuleCreator(
379
+ (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`
380
+ );
381
+ var preferImportType = createRule6({
382
+ name: "prefer-import-type",
383
+ meta: {
384
+ type: "suggestion",
385
+ docs: {
386
+ description: "Enforce using 'import type' for type-only imports"
387
+ },
388
+ fixable: "code",
389
+ schema: [],
390
+ messages: {
391
+ preferImportType: "Use 'import type' for type-only imports"
392
+ }
393
+ },
394
+ defaultOptions: [],
395
+ create(context) {
396
+ function checkImportDeclaration(node) {
397
+ if (node.importKind === "type") {
398
+ return;
399
+ }
400
+ if (context.filename.includes(".test.") || context.filename.includes(".spec.") || context.filename.includes("__tests__")) {
401
+ return;
402
+ }
403
+ const isTypeOnlyImport = node.specifiers.every((specifier) => {
404
+ if (specifier.type === import_utils6.AST_NODE_TYPES.ImportDefaultSpecifier) {
405
+ return false;
406
+ }
407
+ if (specifier.type === import_utils6.AST_NODE_TYPES.ImportNamespaceSpecifier) {
408
+ return false;
409
+ }
410
+ if (specifier.type === import_utils6.AST_NODE_TYPES.ImportSpecifier) {
411
+ const importedName = specifier.imported.type === import_utils6.AST_NODE_TYPES.Identifier ? specifier.imported.name : specifier.imported.value;
412
+ return importedName[0] === importedName[0].toUpperCase() && !["ESLintUtils", "RuleTester"].includes(importedName);
413
+ }
414
+ return false;
415
+ });
416
+ if (isTypeOnlyImport) {
417
+ context.report({
418
+ node,
419
+ messageId: "preferImportType",
420
+ fix(fixer) {
421
+ const source = context.sourceCode.getText(node);
422
+ const fixedSource = source.replace(/^import\s+/, "import type ");
423
+ return fixer.replaceText(node, fixedSource);
424
+ }
425
+ });
426
+ }
427
+ }
428
+ return {
429
+ ImportDeclaration: checkImportDeclaration
430
+ };
431
+ }
432
+ });
433
+ var prefer_import_type_default = preferImportType;
434
+
435
+ // src/rules/md-filename-case-restriction.ts
436
+ var import_path3 = __toESM(require("path"), 1);
437
+ var import_utils7 = require("@typescript-eslint/utils");
438
+ var createRule7 = import_utils7.ESLintUtils.RuleCreator(
439
+ (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`
440
+ );
441
+ var mdFilenameCaseRestriction = createRule7({
442
+ name: "md-filename-case-restriction",
443
+ meta: {
444
+ type: "problem",
445
+ docs: {
446
+ description: "Enforce .md filenames to be SNAKE_CASE only"
447
+ },
448
+ messages: {
449
+ invalidFilenameCase: "Markdown filename must be SNAKE_CASE (UPPERCASE with underscores). Found: '{{ filename }}'"
450
+ },
451
+ schema: []
452
+ },
453
+ defaultOptions: [],
454
+ create(context) {
455
+ return {
456
+ Program() {
457
+ const { filename } = context;
458
+ if (!filename.endsWith(".md")) {
459
+ return;
460
+ }
461
+ const basename = import_path3.default.basename(filename, ".md");
462
+ function isSnakeCase(text) {
463
+ return /^[A-Z][A-Z0-9_]*$/.test(text);
464
+ }
465
+ function isValidCase(text) {
466
+ return isSnakeCase(text);
467
+ }
468
+ if (!isValidCase(basename)) {
469
+ context.report({
470
+ node: context.sourceCode.ast,
471
+ messageId: "invalidFilenameCase",
472
+ data: { filename: basename }
473
+ });
474
+ }
475
+ }
476
+ };
477
+ }
478
+ });
479
+ var md_filename_case_restriction_default = mdFilenameCaseRestriction;
480
+
481
+ // src/rules.ts
482
+ var rules = {
483
+ "file-kebab-case": file_kebab_case_default,
484
+ "jsx-pascal-case": jsx_pascal_case_default,
485
+ "md-filename-case-restriction": md_filename_case_restriction_default,
486
+ "no-emoji": no_emoji_default,
487
+ "no-explicit-return-type": no_explicit_return_type_default,
488
+ "prefer-destructuring-params": prefer_destructuring_params_default,
489
+ "prefer-import-type": prefer_import_type_default
490
+ };
491
+ var rules_default = rules;
492
+
493
+ // src/configs.ts
494
+ var plugin = { rules: rules_default };
495
+ var baseRules = {
496
+ "nextfriday/no-emoji": "warn",
497
+ "nextfriday/file-kebab-case": "warn",
498
+ "nextfriday/md-filename-case-restriction": "warn",
499
+ "nextfriday/prefer-destructuring-params": "warn",
500
+ "nextfriday/no-explicit-return-type": "warn",
501
+ "nextfriday/prefer-import-type": "warn"
502
+ };
503
+ var baseRecommendedRules = {
504
+ "nextfriday/no-emoji": "error",
505
+ "nextfriday/file-kebab-case": "error",
506
+ "nextfriday/md-filename-case-restriction": "error",
507
+ "nextfriday/prefer-destructuring-params": "error",
508
+ "nextfriday/no-explicit-return-type": "error",
509
+ "nextfriday/prefer-import-type": "error"
510
+ };
511
+ var jsxRules = {
512
+ "nextfriday/jsx-pascal-case": "warn"
513
+ };
514
+ var jsxRecommendedRules = {
515
+ "nextfriday/jsx-pascal-case": "error"
516
+ };
517
+ var createConfig = (configRules) => ({
518
+ plugins: {
519
+ nextfriday: plugin
520
+ },
521
+ rules: configRules
522
+ });
523
+ var configs = {
524
+ base: createConfig(baseRules),
525
+ "base/recommended": createConfig(baseRecommendedRules),
526
+ react: createConfig({
527
+ ...baseRules,
528
+ ...jsxRules
529
+ }),
530
+ "react/recommended": createConfig({
531
+ ...baseRecommendedRules,
532
+ ...jsxRecommendedRules
533
+ }),
534
+ nextjs: createConfig({
535
+ ...baseRules,
536
+ ...jsxRules
537
+ }),
538
+ "nextjs/recommended": createConfig({
539
+ ...baseRecommendedRules,
540
+ ...jsxRecommendedRules
541
+ })
542
+ };
543
+ var configs_default = configs;
544
+ // Annotate the CommonJS export names for ESM import in node:
545
+ 0 && (module.exports = {
546
+ configs,
547
+ meta,
548
+ rules
549
+ });
550
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../package.json","../src/meta.ts","../src/rules/no-emoji.ts","../src/rules/file-kebab-case.ts","../src/rules/jsx-pascal-case.ts","../src/rules/prefer-destructuring-params.ts","../src/rules/no-explicit-return-type.ts","../src/rules/prefer-import-type.ts","../src/rules/md-filename-case-restriction.ts","../src/rules.ts","../src/configs.ts"],"sourcesContent":["export { default as meta } from \"./meta\";\nexport { default as configs } from \"./configs\";\nexport { default as rules } from \"./rules\";\n","{\n \"name\": \"eslint-plugin-nextfriday\",\n \"version\": \"0.1.0\",\n \"description\": \"A comprehensive ESLint plugin providing custom rules and configurations for Next Friday development workflows.\",\n \"keywords\": [\n \"eslint\",\n \"eslintplugin\",\n \"eslint-plugin\",\n \"nextfriday\",\n \"next-friday\",\n \"linting\",\n \"code-quality\",\n \"javascript\",\n \"typescript\",\n \"development-tools\"\n ],\n \"homepage\": \"https://github.com/next-friday/eslint-plugin-nextfriday\",\n \"bugs\": {\n \"url\": \"https://github.com/next-friday/eslint-plugin-nextfriday/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/next-friday/eslint-plugin-nextfriday.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Next Friday <nextfriday.developer@gmail.com>\",\n \"contributors\": [\n \"@joetakara\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/index.d.ts\",\n \"import\": \"./lib/index.js\",\n \"require\": \"./lib/index.cjs\"\n }\n },\n \"main\": \"lib/index.js\",\n \"types\": \"lib/index.d.ts\",\n \"files\": [\n \"LICENSE\",\n \"README.md\",\n \"CHANGELOG.md\",\n \"docs\",\n \"lib\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"changeset\": \"changeset\",\n \"changeset:publish\": \"npm publish --provenance --access public\",\n \"changeset:version\": \"changeset version\",\n \"clear\": \"rm -rf lib node_modules/.cache .eslintcache\",\n \"eslint\": \"eslint src --ext .js,.ts,.mjs --fix\",\n \"eslint:check\": \"eslint src --ext .js,.ts,.mjs\",\n \"preinstall\": \"npx only-allow pnpm\",\n \"prepare\": \"husky\",\n \"prepublishOnly\": \"pnpm run build\",\n \"prettier\": \"prettier --write .\",\n \"prettier:check\": \"prettier --check .\",\n \"sort-package-json\": \"pnpm exec sort-package-json\",\n \"sort-package-json:check\": \"pnpm exec sort-package-json --check\",\n \"test\": \"jest\",\n \"test:coverage\": \"jest --coverage\",\n \"test:watch\": \"jest --watch\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@typescript-eslint/utils\": \"^8.42.0\",\n \"emoji-regex\": \"^10.5.0\",\n \"tsup\": \"^8.5.0\"\n },\n \"devDependencies\": {\n \"@changesets/changelog-github\": \"^0.5.1\",\n \"@changesets/cli\": \"^2.29.6\",\n \"@commitlint/cli\": \"^19.8.1\",\n \"@commitlint/config-conventional\": \"^19.8.1\",\n \"@eslint/js\": \"^9.35.0\",\n \"@jest/globals\": \"^30.1.2\",\n \"@stylistic/eslint-plugin\": \"^3.1.0\",\n \"@swc/core\": \"^1.13.5\",\n \"@types/eslint\": \"^9.6.1\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^22.5.4\",\n \"@types/ramda\": \"^0.31.0\",\n \"@typescript-eslint/parser\": \"^8.42.0\",\n \"@typescript-eslint/rule-tester\": \"^8.42.0\",\n \"eslint\": \"^9.35.0\",\n \"eslint-config-airbnb-extended\": \"^2.2.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-import-resolver-typescript\": \"^4.4.4\",\n \"eslint-plugin-import-x\": \"^4.16.1\",\n \"eslint-plugin-jest\": \"^29.0.1\",\n \"eslint-plugin-prettier\": \"^5.5.4\",\n \"eslint-plugin-sonarjs\": \"^3.0.5\",\n \"husky\": \"^9.1.7\",\n \"jest\": \"^29.7.0\",\n \"lint-staged\": \"^16.1.6\",\n \"prettier\": \"^3.6.2\",\n \"sort-package-json\": \"^3.4.0\",\n \"ts-jest\": \"^29.4.1\",\n \"ts-node\": \"^10.9.2\",\n \"typescript\": \"^5.6.2\",\n \"typescript-eslint\": \"^8.42.0\"\n },\n \"peerDependencies\": {\n \"eslint\": \"^9.0.0\"\n },\n \"packageManager\": \"pnpm@9.12.0\",\n \"engines\": {\n \"node\": \">=22.0.0\",\n \"pnpm\": \">=9.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import packageJson from \"../package.json\" assert { type: \"json\" };\n\nconst meta = {\n name: packageJson.name,\n version: packageJson.version,\n};\n\nexport default meta;\n","import emojiRegex from \"emoji-regex\";\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`,\n);\n\nconst noEmoji = createRule({\n name: \"no-emoji\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Disallow emoji characters in source code\",\n },\n messages: {\n noEmoji: \"Emoji are not allowed in source code\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const { sourceCode } = context;\n\n return {\n Program() {\n const text = sourceCode.getText();\n const regex = emojiRegex();\n const matches = Array.from(text.matchAll(regex));\n\n matches.forEach((match) => {\n const loc = sourceCode.getLocFromIndex(match.index);\n\n context.report({\n loc,\n messageId: \"noEmoji\",\n });\n });\n },\n };\n },\n});\n\nexport default noEmoji;\n","import path from \"path\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`,\n);\n\nconst isKebabCase = (str: string) => {\n if (/\\.(config|rc|setup|spec|test)$/.test(str)) {\n return /^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\.[a-z0-9]+)*$/.test(str);\n }\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(str);\n};\n\nconst fileKebabCase = createRule({\n name: \"file-kebab-case\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Enforce kebab-case filenames for .ts and .js files\",\n },\n messages: {\n fileKebabCase: \"File names must be kebab-case\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n Program() {\n const { filename } = context;\n const ext = path.extname(filename);\n\n if (ext !== \".ts\" && ext !== \".js\") {\n return;\n }\n\n const basename = path.basename(filename, ext);\n\n if (!isKebabCase(basename)) {\n context.report({\n loc: { line: 1, column: 0 },\n messageId: \"fileKebabCase\",\n });\n }\n },\n };\n },\n});\n\nexport default fileKebabCase;\n","import path from \"path\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`,\n);\n\nconst isPascalCase = (str: string) => /^[A-Z][a-zA-Z0-9]*$/.test(str) && !/^[A-Z]+$/.test(str);\n\nconst jsxPascalCase = createRule({\n name: \"jsx-pascal-case\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Enforce PascalCase filenames for .jsx and .tsx files\",\n },\n messages: {\n jsxPascalCase: \"JSX/TSX file names must be PascalCase\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n Program() {\n const { filename } = context;\n const ext = path.extname(filename);\n\n if (ext !== \".jsx\" && ext !== \".tsx\") {\n return;\n }\n\n const basename = path.basename(filename, ext);\n\n if (!isPascalCase(basename)) {\n context.report({\n loc: { line: 1, column: 0 },\n messageId: \"jsxPascalCase\",\n });\n }\n },\n };\n },\n});\n\nexport default jsxPascalCase;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`,\n);\n\nconst preferDestructuringParams = createRule({\n name: \"prefer-destructuring-params\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce destructuring for functions with multiple parameters\",\n },\n messages: {\n preferDestructuring: \"Functions with multiple parameters should use destructuring\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const checkFunction = (\n node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression,\n ) => {\n if (node.params.length <= 1) {\n return;\n }\n\n const hasNonDestructuredParams = node.params.some(\n (param: TSESTree.Parameter) =>\n param.type !== AST_NODE_TYPES.ObjectPattern && param.type !== AST_NODE_TYPES.RestElement,\n );\n\n if (hasNonDestructuredParams) {\n context.report({\n node,\n messageId: \"preferDestructuring\",\n });\n }\n };\n\n return {\n FunctionDeclaration: checkFunction,\n FunctionExpression: checkFunction,\n ArrowFunctionExpression: checkFunction,\n };\n },\n});\n\nexport default preferDestructuringParams;\n","import { ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`,\n);\n\nconst noExplicitReturnType = createRule({\n name: \"no-explicit-return-type\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Disallow explicit return types on functions\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n noExplicitReturnType: \"Remove explicit return type '{{returnType}}' - TypeScript can infer it automatically\",\n },\n },\n defaultOptions: [],\n create(context) {\n const checkFunction = (\n node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression,\n ) => {\n if (node.returnType) {\n const returnTypeText = context.sourceCode.getText(node.returnType);\n context.report({\n node: node.returnType,\n messageId: \"noExplicitReturnType\",\n data: {\n returnType: returnTypeText,\n },\n fix(fixer) {\n return fixer.remove(node.returnType!);\n },\n });\n }\n };\n\n return {\n FunctionDeclaration: checkFunction,\n FunctionExpression: checkFunction,\n ArrowFunctionExpression: checkFunction,\n };\n },\n});\n\nexport default noExplicitReturnType;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`,\n);\n\nconst preferImportType = createRule({\n name: \"prefer-import-type\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce using 'import type' for type-only imports\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n preferImportType: \"Use 'import type' for type-only imports\",\n },\n },\n defaultOptions: [],\n create(context) {\n function checkImportDeclaration(node: TSESTree.ImportDeclaration) {\n if (node.importKind === \"type\") {\n return;\n }\n\n if (\n context.filename.includes(\".test.\") ||\n context.filename.includes(\".spec.\") ||\n context.filename.includes(\"__tests__\")\n ) {\n return;\n }\n\n const isTypeOnlyImport = node.specifiers.every((specifier) => {\n if (specifier.type === AST_NODE_TYPES.ImportDefaultSpecifier) {\n return false;\n }\n if (specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier) {\n return false;\n }\n if (specifier.type === AST_NODE_TYPES.ImportSpecifier) {\n const importedName =\n specifier.imported.type === AST_NODE_TYPES.Identifier ? specifier.imported.name : specifier.imported.value;\n return (\n importedName[0] === importedName[0].toUpperCase() && ![\"ESLintUtils\", \"RuleTester\"].includes(importedName)\n );\n }\n return false;\n });\n\n if (isTypeOnlyImport) {\n context.report({\n node,\n messageId: \"preferImportType\",\n fix(fixer) {\n const source = context.sourceCode.getText(node);\n const fixedSource = source.replace(/^import\\s+/, \"import type \");\n return fixer.replaceText(node, fixedSource);\n },\n });\n }\n }\n\n return {\n ImportDeclaration: checkImportDeclaration,\n };\n },\n});\n\nexport default preferImportType;\n","import path from \"path\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) => `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name}.md`,\n);\n\nconst mdFilenameCaseRestriction = createRule({\n name: \"md-filename-case-restriction\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Enforce .md filenames to be SNAKE_CASE only\",\n },\n messages: {\n invalidFilenameCase: \"Markdown filename must be SNAKE_CASE (UPPERCASE with underscores). Found: '{{ filename }}'\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n Program() {\n const { filename } = context;\n\n if (!filename.endsWith(\".md\")) {\n return;\n }\n\n const basename = path.basename(filename, \".md\");\n\n function isSnakeCase(text: string): boolean {\n return /^[A-Z][A-Z0-9_]*$/.test(text);\n }\n\n function isValidCase(text: string): boolean {\n return isSnakeCase(text);\n }\n\n if (!isValidCase(basename)) {\n context.report({\n node: context.sourceCode.ast,\n messageId: \"invalidFilenameCase\",\n data: { filename: basename },\n });\n }\n },\n };\n },\n});\n\nexport default mdFilenameCaseRestriction;\n","import noEmoji from \"./rules/no-emoji\";\nimport fileKebabCase from \"./rules/file-kebab-case\";\nimport jsxPascalCase from \"./rules/jsx-pascal-case\";\nimport preferDestructuringParams from \"./rules/prefer-destructuring-params\";\nimport noExplicitReturnType from \"./rules/no-explicit-return-type\";\nimport preferImportType from \"./rules/prefer-import-type\";\nimport mdFilenameCaseRestriction from \"./rules/md-filename-case-restriction\";\n\nimport type { TSESLint } from \"@typescript-eslint/utils\";\n\nconst rules: Record<string, TSESLint.RuleModule<string, readonly unknown[]>> = {\n \"file-kebab-case\": fileKebabCase,\n \"jsx-pascal-case\": jsxPascalCase,\n \"md-filename-case-restriction\": mdFilenameCaseRestriction,\n \"no-emoji\": noEmoji,\n \"no-explicit-return-type\": noExplicitReturnType,\n \"prefer-destructuring-params\": preferDestructuringParams,\n \"prefer-import-type\": preferImportType,\n};\n\nexport default rules;\n","import rules from \"./rules\";\n\nconst plugin = { rules };\n\nconst baseRules = {\n \"nextfriday/no-emoji\": \"warn\",\n \"nextfriday/file-kebab-case\": \"warn\",\n \"nextfriday/md-filename-case-restriction\": \"warn\",\n \"nextfriday/prefer-destructuring-params\": \"warn\",\n \"nextfriday/no-explicit-return-type\": \"warn\",\n \"nextfriday/prefer-import-type\": \"warn\",\n} as const;\n\nconst baseRecommendedRules = {\n \"nextfriday/no-emoji\": \"error\",\n \"nextfriday/file-kebab-case\": \"error\",\n \"nextfriday/md-filename-case-restriction\": \"error\",\n \"nextfriday/prefer-destructuring-params\": \"error\",\n \"nextfriday/no-explicit-return-type\": \"error\",\n \"nextfriday/prefer-import-type\": \"error\",\n} as const;\n\nconst jsxRules = {\n \"nextfriday/jsx-pascal-case\": \"warn\",\n} as const;\n\nconst jsxRecommendedRules = {\n \"nextfriday/jsx-pascal-case\": \"error\",\n} as const;\n\nconst createConfig = (configRules: Record<string, string>) => ({\n plugins: {\n nextfriday: plugin,\n },\n rules: configRules,\n});\n\nconst configs = {\n base: createConfig(baseRules),\n \"base/recommended\": createConfig(baseRecommendedRules),\n react: createConfig({\n ...baseRules,\n ...jsxRules,\n }),\n \"react/recommended\": createConfig({\n ...baseRecommendedRules,\n ...jsxRecommendedRules,\n }),\n nextjs: createConfig({\n ...baseRules,\n ...jsxRules,\n }),\n \"nextjs/recommended\": createConfig({\n ...baseRecommendedRules,\n ...jsxRecommendedRules,\n }),\n};\n\nexport default configs;\n"],"mappings":"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","names":["emojiRegex","import_utils","createRule","path","import_path","import_utils","createRule","path","import_utils","createRule","import_utils","createRule","import_utils","createRule","import_path","import_utils","createRule","path"]}
@@ -0,0 +1,62 @@
1
+ import * as _typescript_eslint_utils_ts_eslint from '@typescript-eslint/utils/ts-eslint';
2
+ import { TSESLint } from '@typescript-eslint/utils';
3
+
4
+ declare const meta: {
5
+ name: string;
6
+ version: string;
7
+ };
8
+
9
+ declare const configs: {
10
+ base: {
11
+ plugins: {
12
+ nextfriday: {
13
+ rules: Record<string, _typescript_eslint_utils_ts_eslint.RuleModule<string, readonly unknown[], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>>;
14
+ };
15
+ };
16
+ rules: Record<string, string>;
17
+ };
18
+ "base/recommended": {
19
+ plugins: {
20
+ nextfriday: {
21
+ rules: Record<string, _typescript_eslint_utils_ts_eslint.RuleModule<string, readonly unknown[], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>>;
22
+ };
23
+ };
24
+ rules: Record<string, string>;
25
+ };
26
+ react: {
27
+ plugins: {
28
+ nextfriday: {
29
+ rules: Record<string, _typescript_eslint_utils_ts_eslint.RuleModule<string, readonly unknown[], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>>;
30
+ };
31
+ };
32
+ rules: Record<string, string>;
33
+ };
34
+ "react/recommended": {
35
+ plugins: {
36
+ nextfriday: {
37
+ rules: Record<string, _typescript_eslint_utils_ts_eslint.RuleModule<string, readonly unknown[], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>>;
38
+ };
39
+ };
40
+ rules: Record<string, string>;
41
+ };
42
+ nextjs: {
43
+ plugins: {
44
+ nextfriday: {
45
+ rules: Record<string, _typescript_eslint_utils_ts_eslint.RuleModule<string, readonly unknown[], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>>;
46
+ };
47
+ };
48
+ rules: Record<string, string>;
49
+ };
50
+ "nextjs/recommended": {
51
+ plugins: {
52
+ nextfriday: {
53
+ rules: Record<string, _typescript_eslint_utils_ts_eslint.RuleModule<string, readonly unknown[], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>>;
54
+ };
55
+ };
56
+ rules: Record<string, string>;
57
+ };
58
+ };
59
+
60
+ declare const rules: Record<string, TSESLint.RuleModule<string, readonly unknown[]>>;
61
+
62
+ export { configs, meta, rules };