eslint-plugin-functype 1.2.0 → 2.0.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.
Files changed (47) hide show
  1. package/README.md +86 -44
  2. package/dist/chunk-BlXvk904.js +1 -0
  3. package/dist/cli/list-rules.d.ts +1 -1
  4. package/dist/cli/list-rules.js +15 -239
  5. package/dist/cli/list-rules.js.map +1 -1
  6. package/dist/index.d.ts +19 -16
  7. package/dist/index.js +1 -1075
  8. package/dist/index.js.map +1 -1
  9. package/dist/rules/index.d.ts +24 -29
  10. package/dist/rules/index.js +1 -1071
  11. package/dist/rules/index.js.map +1 -1
  12. package/dist/rules/no-get-unsafe.d.ts +7 -0
  13. package/dist/rules/no-get-unsafe.js +2 -0
  14. package/dist/rules/no-get-unsafe.js.map +1 -0
  15. package/dist/rules/no-imperative-loops.d.ts +7 -0
  16. package/dist/rules/no-imperative-loops.js +2 -0
  17. package/dist/rules/no-imperative-loops.js.map +1 -0
  18. package/dist/rules/prefer-do-notation.d.ts +7 -0
  19. package/dist/rules/prefer-do-notation.js +5 -0
  20. package/dist/rules/prefer-do-notation.js.map +1 -0
  21. package/dist/rules/prefer-either.d.ts +7 -0
  22. package/dist/rules/prefer-either.js +2 -0
  23. package/dist/rules/prefer-either.js.map +1 -0
  24. package/dist/rules/prefer-flatmap.d.ts +7 -0
  25. package/dist/rules/prefer-flatmap.js +2 -0
  26. package/dist/rules/prefer-flatmap.js.map +1 -0
  27. package/dist/rules/prefer-fold.d.ts +7 -0
  28. package/dist/rules/prefer-fold.js +2 -0
  29. package/dist/rules/prefer-fold.js.map +1 -0
  30. package/dist/rules/prefer-list.d.ts +7 -0
  31. package/dist/rules/prefer-list.js +2 -0
  32. package/dist/rules/prefer-list.js.map +1 -0
  33. package/dist/rules/prefer-map.d.ts +7 -0
  34. package/dist/rules/prefer-map.js +2 -0
  35. package/dist/rules/prefer-map.js.map +1 -0
  36. package/dist/rules/prefer-option.d.ts +7 -0
  37. package/dist/rules/prefer-option.js +2 -0
  38. package/dist/rules/prefer-option.js.map +1 -0
  39. package/dist/types/ast.d.ts +12 -0
  40. package/dist/types/ast.js +1 -0
  41. package/dist/utils/dependency-validator.d.ts +13 -11
  42. package/dist/utils/dependency-validator.js +3 -108
  43. package/dist/utils/dependency-validator.js.map +1 -1
  44. package/dist/utils/functype-detection.d.ts +69 -0
  45. package/dist/utils/functype-detection.js +2 -0
  46. package/dist/utils/functype-detection.js.map +1 -0
  47. package/package.json +37 -34
package/README.md CHANGED
@@ -7,25 +7,28 @@ Custom ESLint rules for functional TypeScript programming with [functype](https:
7
7
 
8
8
  ## Features
9
9
 
10
- - šŸ”§ **8 Custom ESLint Rules** - Purpose-built for functional TypeScript patterns
10
+ - šŸ”§ **9 Custom ESLint Rules** - Purpose-built for functional TypeScript patterns
11
+ - šŸŽ­ **Do Notation Support** - New rule suggests functype's Do notation for complex monadic chains
11
12
  - šŸ—ļø **Functype Library Integration** - Smart detection when functype is already being used properly
12
13
  - šŸ› ļø **Auto-Fixable** - Most violations can be automatically fixed with `--fix`
13
14
  - ⚔ **ESLint 9+ Flat Config** - Modern ESLint configuration format
14
15
  - šŸŽÆ **TypeScript Native** - Built specifically for TypeScript AST patterns
15
- - šŸ“Š **99 Tests** - Comprehensive test coverage including real functype integration
16
+ - šŸŽØ **Visual Test Output** - Beautiful before/after transformations with colorized diffs
17
+ - šŸ“Š **100+ Tests** - Comprehensive test coverage including real functype integration
16
18
 
17
19
  ## Rules
18
20
 
19
- | Rule | Description | Auto-Fix |
20
- |------|-------------|----------|
21
- | `prefer-option` | Prefer `Option<T>` over nullable types (`T \| null \| undefined`) | āœ… |
22
- | `prefer-either` | Prefer `Either<E, T>` over try/catch and throw statements | āœ… |
23
- | `prefer-list` | Prefer `List<T>` over native arrays for immutable collections | āœ… |
24
- | `prefer-fold` | Prefer `.fold()` over complex if/else chains | āœ… |
25
- | `prefer-map` | Prefer `.map()` over imperative transformations | āœ… |
26
- | `prefer-flatmap` | Prefer `.flatMap()` over `.map().flat()` patterns | āœ… |
27
- | `no-get-unsafe` | Disallow unsafe `.get()` calls on Option/Either types | āŒ |
28
- | `no-imperative-loops` | Prefer functional iteration over imperative loops | āœ… |
21
+ | Rule | Description | Auto-Fix |
22
+ | --------------------- | ----------------------------------------------------------------- | -------- |
23
+ | `prefer-option` | Prefer `Option<T>` over nullable types (`T \| null \| undefined`) | āœ… |
24
+ | `prefer-either` | Prefer `Either<E, T>` over try/catch and throw statements | āœ… |
25
+ | `prefer-list` | Prefer `List<T>` over native arrays for immutable collections | āœ… |
26
+ | `prefer-fold` | Prefer `.fold()` over complex if/else chains | āœ… |
27
+ | `prefer-map` | Prefer `.map()` over imperative transformations | āœ… |
28
+ | `prefer-flatmap` | Prefer `.flatMap()` over `.map().flat()` patterns | āœ… |
29
+ | `no-get-unsafe` | Disallow unsafe `.get()` calls on Option/Either types | āŒ |
30
+ | `no-imperative-loops` | Prefer functional iteration over imperative loops | āœ… |
31
+ | `prefer-do-notation` | Prefer Do notation for complex monadic compositions | āœ… |
29
32
 
30
33
  ## Installation
31
34
 
@@ -39,7 +42,7 @@ pnpm add -D eslint-plugin-functype
39
42
 
40
43
  ```bash
41
44
  npm install functype
42
- # or
45
+ # or
43
46
  pnpm add functype
44
47
  ```
45
48
 
@@ -49,12 +52,12 @@ pnpm add functype
49
52
 
50
53
  ```javascript
51
54
  // eslint.config.mjs
52
- import functypePlugin from 'eslint-plugin-functype'
53
- import tsParser from '@typescript-eslint/parser'
55
+ import functypePlugin from "eslint-plugin-functype"
56
+ import tsParser from "@typescript-eslint/parser"
54
57
 
55
58
  export default [
56
59
  {
57
- files: ['**/*.ts', '**/*.tsx'],
60
+ files: ["**/*.ts", "**/*.tsx"],
58
61
  plugins: {
59
62
  functype: functypePlugin,
60
63
  },
@@ -62,19 +65,20 @@ export default [
62
65
  parser: tsParser,
63
66
  parserOptions: {
64
67
  ecmaVersion: 2022,
65
- sourceType: 'module',
68
+ sourceType: "module",
66
69
  },
67
70
  },
68
71
  rules: {
69
72
  // All rules as errors
70
- 'functype/prefer-option': 'error',
71
- 'functype/prefer-either': 'error',
72
- 'functype/prefer-list': 'error',
73
- 'functype/prefer-fold': 'error',
74
- 'functype/prefer-map': 'error',
75
- 'functype/prefer-flatmap': 'error',
76
- 'functype/no-get-unsafe': 'error',
77
- 'functype/no-imperative-loops': 'error',
73
+ "functype/prefer-option": "error",
74
+ "functype/prefer-either": "error",
75
+ "functype/prefer-list": "error",
76
+ "functype/prefer-fold": "error",
77
+ "functype/prefer-map": "error",
78
+ "functype/prefer-flatmap": "error",
79
+ "functype/no-get-unsafe": "error",
80
+ "functype/no-imperative-loops": "error",
81
+ "functype/prefer-do-notation": "error",
78
82
  },
79
83
  },
80
84
  ]
@@ -86,15 +90,16 @@ export default [
86
90
  // eslint.config.mjs - Selective rules
87
91
  export default [
88
92
  {
89
- files: ['**/*.ts'],
93
+ files: ["**/*.ts"],
90
94
  plugins: { functype: functypePlugin },
91
95
  rules: {
92
96
  // Start with just type safety rules
93
- 'functype/prefer-option': 'warn',
94
- 'functype/no-get-unsafe': 'error',
95
-
97
+ "functype/prefer-option": "warn",
98
+ "functype/no-get-unsafe": "error",
99
+
96
100
  // Add more as your codebase evolves
97
- 'functype/prefer-list': 'off', // Disable for gradual adoption
101
+ "functype/prefer-list": "off", // Disable for gradual adoption
102
+ "functype/prefer-do-notation": "warn", // New: suggest Do notation
98
103
  },
99
104
  },
100
105
  ]
@@ -107,9 +112,11 @@ export default [
107
112
  ```typescript
108
113
  // prefer-option: nullable types
109
114
  const user: User | null = findUser(id)
110
- function getAge(): number | undefined { /* ... */ }
115
+ function getAge(): number | undefined {
116
+ /* ... */
117
+ }
111
118
 
112
- // prefer-either: try/catch blocks
119
+ // prefer-either: try/catch blocks
113
120
  try {
114
121
  const result = riskyOperation()
115
122
  return result
@@ -131,20 +138,31 @@ for (let i = 0; i < items.length; i++) {
131
138
  if (condition1) {
132
139
  return value1
133
140
  } else if (condition2) {
134
- return value2
141
+ return value2
135
142
  } else {
136
143
  return defaultValue
137
144
  }
145
+
146
+ // prefer-do-notation: nested null checks
147
+ const city = (user && user.address && user.address.city) || "Unknown"
148
+
149
+ // prefer-do-notation: chained flatMap operations
150
+ const result = option1
151
+ .flatMap((x) => getOption2(x))
152
+ .flatMap((y) => getOption3(y))
153
+ .flatMap((z) => getOption4(z))
138
154
  ```
139
155
 
140
156
  ### āœ… After (auto-fixed or manually corrected)
141
157
 
142
158
  ```typescript
143
- import { Option, Either, List } from 'functype'
159
+ import { Option, Either, List, Do, $ } from "functype"
144
160
 
145
161
  // prefer-option: use Option<T>
146
162
  const user: Option<User> = Option.fromNullable(findUser(id))
147
- function getAge(): Option<number> { /* ... */ }
163
+ function getAge(): Option<number> {
164
+ /* ... */
165
+ }
148
166
 
149
167
  // prefer-either: use Either<E, T>
150
168
  function safeOperation(): Either<Error, Result> {
@@ -161,13 +179,28 @@ const items: List<number> = List.from([1, 2, 3])
161
179
  const readonlyItems: List<string> = List.from(["a", "b"])
162
180
 
163
181
  // no-imperative-loops: use functional methods
164
- items.forEach(item => console.log(item))
182
+ items.forEach((item) => console.log(item))
165
183
 
166
184
  // prefer-fold: use fold for conditional logic
167
185
  const result = Option.fromBoolean(condition1)
168
186
  .map(() => value1)
169
187
  .orElse(() => Option.fromBoolean(condition2).map(() => value2))
170
188
  .getOrElse(defaultValue)
189
+
190
+ // prefer-do-notation: use Do notation for nested checks
191
+ const city = Do(function* () {
192
+ const u = yield* $(Option(user))
193
+ const addr = yield* $(Option(u.address))
194
+ return yield* $(Option(addr.city))
195
+ }).getOrElse("Unknown")
196
+
197
+ // prefer-do-notation: use Do for complex chains
198
+ const result = Do(function* () {
199
+ const x = yield* $(option1)
200
+ const y = yield* $(getOption2(x))
201
+ const z = yield* $(getOption3(y))
202
+ return yield* $(getOption4(z))
203
+ })
171
204
  ```
172
205
 
173
206
  ## Functype Integration
@@ -175,16 +208,16 @@ const result = Option.fromBoolean(condition1)
175
208
  The plugin is **functype-aware** and won't flag code that's already using functype properly:
176
209
 
177
210
  ```typescript
178
- import { Option, List } from 'functype'
211
+ import { Option, List } from "functype"
179
212
 
180
213
  // āœ… These won't be flagged - already using functype correctly
181
214
  const user = Option.some({ name: "Alice" })
182
215
  const items = List.from([1, 2, 3])
183
- const result = user.map(u => u.name).getOrElse("Unknown")
216
+ const result = user.map((u) => u.name).getOrElse("Unknown")
184
217
 
185
- // āŒ These will still be flagged - bad patterns even with functype available
186
- const badUser: User | null = null // prefer-option
187
- const badItems = [1, 2, 3] // prefer-list
218
+ // āŒ These will still be flagged - bad patterns even with functype available
219
+ const badUser: User | null = null // prefer-option
220
+ const badItems = [1, 2, 3] // prefer-list
188
221
  ```
189
222
 
190
223
  ## CLI Tools
@@ -214,9 +247,12 @@ pnpm install
214
247
  # Build plugin
215
248
  pnpm run build
216
249
 
217
- # Run tests (99 tests)
250
+ # Run tests (100+ tests)
218
251
  pnpm test
219
252
 
253
+ # Visual transformation demo
254
+ pnpm test tests/rules/visual-transformation-demo.test.ts
255
+
220
256
  # Lint codebase
221
257
  pnpm run lint
222
258
 
@@ -246,9 +282,10 @@ This plugin provides **custom ESLint rules** specifically designed for functiona
246
282
 
247
283
  ### Test Coverage
248
284
 
249
- - **99 Tests Total** across 10 test suites
285
+ - **100+ Tests Total** across 11 test suites (including visual tests)
250
286
  - **Integration Tests** with real functype library usage
251
287
  - **Auto-Fix Verification** ensures fixes produce valid code
288
+ - **Visual Test Output** with colorized before/after transformations
252
289
  - **False Positive Prevention** tests ensure proper functype patterns aren't flagged
253
290
 
254
291
  ## Contributing
@@ -261,6 +298,11 @@ This plugin provides **custom ESLint rules** specifically designed for functiona
261
298
 
262
299
  ### Development Setup
263
300
 
301
+ **Requirements:**
302
+
303
+ - Node.js 22.0.0 or higher
304
+ - pnpm (recommended package manager)
305
+
264
306
  ```bash
265
307
  git clone https://github.com/jordanburke/eslint-plugin-functype.git
266
308
  cd eslint-plugin-functype
@@ -280,4 +322,4 @@ pnpm test
280
322
 
281
323
  ---
282
324
 
283
- **Need help?** [Open an issue](https://github.com/jordanburke/eslint-plugin-functype/issues) or check the [functype documentation](https://jordanburke.github.io/functype/).
325
+ **Need help?** [Open an issue](https://github.com/jordanburke/eslint-plugin-functype/issues) or check the [functype documentation](https://jordanburke.github.io/functype/).
@@ -0,0 +1 @@
1
+ import{createRequire as e}from"node:module";var t=e(import.meta.url);export{t};
@@ -1 +1 @@
1
- #!/usr/bin/env node
1
+ export { };
@@ -1,241 +1,17 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';
3
-
4
- var fs = require('fs');
5
- var path = require('path');
6
-
7
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
-
9
- var fs__default = /*#__PURE__*/_interopDefault(fs);
10
- var path__default = /*#__PURE__*/_interopDefault(path);
11
-
12
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
13
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
14
- }) : x)(function(x) {
15
- if (typeof require !== "undefined") return require.apply(this, arguments);
16
- throw Error('Dynamic require of "' + x + '" is not supported');
17
- });
18
-
19
- // src/utils/dependency-validator.ts
20
- var PEER_DEPENDENCIES = [
21
- {
22
- name: "@typescript-eslint/eslint-plugin",
23
- packageName: "@typescript-eslint/eslint-plugin",
24
- description: "TypeScript-aware ESLint rules",
25
- required: true
26
- },
27
- {
28
- name: "@typescript-eslint/parser",
29
- packageName: "@typescript-eslint/parser",
30
- description: "TypeScript parser for ESLint",
31
- required: true
32
- },
33
- {
34
- name: "eslint-plugin-functional",
35
- packageName: "eslint-plugin-functional",
36
- description: "Functional programming ESLint rules",
37
- required: true
38
- },
39
- {
40
- name: "eslint-plugin-prettier",
41
- packageName: "eslint-plugin-prettier",
42
- description: "Code formatting rules",
43
- required: false
44
- },
45
- {
46
- name: "eslint-plugin-simple-import-sort",
47
- packageName: "eslint-plugin-simple-import-sort",
48
- description: "Import sorting rules",
49
- required: false
50
- },
51
- {
52
- name: "prettier",
53
- packageName: "prettier",
54
- description: "Code formatter",
55
- required: false
56
- }
57
- ];
58
- function tryRequire(packageName) {
59
- try {
60
- __require.resolve(packageName);
61
- return true;
62
- } catch {
63
- return false;
64
- }
65
- }
66
- function validatePeerDependencies() {
67
- const missing = [];
68
- const available = [];
69
- const warnings = [];
70
- for (const dep of PEER_DEPENDENCIES) {
71
- if (tryRequire(dep.packageName)) {
72
- available.push(dep);
73
- } else {
74
- missing.push(dep);
75
- if (dep.required) ; else {
76
- warnings.push(`Optional plugin '${dep.name}' not found. Some rules will be skipped.`);
77
- }
78
- }
79
- }
80
- const requiredMissing = missing.filter((dep) => dep.required);
81
- const isValid = requiredMissing.length === 0;
82
- const missingPackageNames = missing.map((dep) => dep.packageName);
83
- const installCommand = missingPackageNames.length > 0 ? `pnpm add -D ${missingPackageNames.join(" ")}` : "";
84
- return {
85
- isValid,
86
- missing,
87
- available,
88
- installCommand,
89
- warnings
90
- };
91
- }
92
-
93
- // src/cli/list-rules.ts
94
- var colors = {
95
- reset: "\x1B[0m",
96
- bright: "\x1B[1m",
97
- red: "\x1B[31m",
98
- green: "\x1B[32m",
99
- yellow: "\x1B[33m",
100
- blue: "\x1B[34m",
101
- magenta: "\x1B[35m",
102
- cyan: "\x1B[36m"
103
- };
104
- function colorize(text, color) {
105
- return colors[color] + text + colors.reset;
106
- }
107
- function printDependencyStatus(result) {
108
- console.log(colorize("\n\u{1F50D} Dependency Status Check:", "bright"));
109
- console.log(colorize("=".repeat(40), "blue"));
110
- if (result.available.length > 0) {
111
- console.log(colorize("\n\u2705 Available:", "green"));
112
- result.available.forEach((dep) => {
113
- const icon = dep.required ? "\u{1F527}" : "\u{1F50C}";
114
- console.log(` ${icon} ${colorize(dep.name, "green")} - ${dep.description}`);
115
- });
116
- }
117
- if (result.missing.length > 0) {
118
- console.log(colorize("\n\u274C Missing:", "red"));
119
- result.missing.forEach((dep) => {
120
- const icon = dep.required ? "\u26A0\uFE0F " : "\u{1F4A1}";
121
- const color = dep.required ? "red" : "yellow";
122
- console.log(` ${icon} ${colorize(dep.name, color)} - ${dep.description}`);
123
- });
124
- if (result.installCommand) {
125
- console.log(colorize("\n\u{1F4E6} Install missing dependencies:", "bright"));
126
- console.log(` ${colorize(result.installCommand, "cyan")}`);
127
- }
128
- }
129
- if (result.warnings.length > 0) {
130
- console.log(colorize("\n\u26A0\uFE0F Warnings:", "yellow"));
131
- result.warnings.forEach((warning) => console.log(` ${warning}`));
132
- }
133
- const status = result.isValid ? "\u2705 Ready to use" : "\u274C Configuration will fail";
134
- const statusColor = result.isValid ? "green" : "red";
135
- console.log(colorize(`
136
- ${status}`, statusColor));
137
- }
138
- async function main() {
139
- const args = process.argv.slice(2);
140
- const showHelp = args.includes("--help") || args.includes("-h");
141
- const showUsage = args.includes("--usage") || args.includes("-u");
142
- const checkDeps = args.includes("--check-deps") || args.includes("--check");
143
- if (showHelp) {
144
- console.log(colorize("\u{1F4CB} ESLint Plugin Functype - Custom Rules", "bright"));
145
- console.log("\nUsage: pnpm run list-rules [options]");
146
- console.log("\nOptions:");
147
- console.log(" --verbose, -v Show rule descriptions and schemas");
148
- console.log(" --usage, -u Show usage examples");
149
- console.log(" --check-deps Check peer dependency status");
150
- console.log(" --help, -h Show this help message");
151
- console.log("\nThis command lists all custom rules provided by the functype plugin.");
152
- return;
153
- }
154
- if (checkDeps) {
155
- console.log(colorize("\u{1F527} ESLint Plugin Functype - Dependency Check", "bright"));
156
- const result = validatePeerDependencies();
157
- printDependencyStatus(result);
158
- if (!result.isValid) {
159
- process.exit(1);
160
- }
161
- return;
162
- }
163
- console.log(colorize("\u{1F527} ESLint Plugin Functype - Custom Rules", "bright"));
164
- const distPath = path__default.default.join(__dirname, "..", "..", "dist");
165
- if (!fs__default.default.existsSync(distPath)) {
166
- console.error(colorize("\u274C Build directory not found. Run `pnpm run build` first.", "red"));
167
- process.exit(1);
168
- }
169
- try {
170
- const pluginPath = path__default.default.join(distPath, "index.js");
171
- const plugin = __require(pluginPath);
172
- if (!plugin.rules) {
173
- console.error(colorize("\u274C No rules found in plugin.", "red"));
174
- process.exit(1);
175
- }
176
- console.log(colorize("\n\u{1F4E6} Available Custom Rules:", "bright"));
177
- console.log(colorize("=".repeat(40), "blue"));
178
- const rules = Object.keys(plugin.rules);
179
- rules.forEach((ruleName) => {
180
- const rule = plugin.rules[ruleName];
181
- const fullName = `functype/${ruleName}`;
182
- console.log(`
183
- ${colorize("\u25CF", "green")} ${colorize(fullName, "bright")}`);
184
- if (rule.meta?.docs?.description) {
185
- console.log(` ${colorize("Description:", "cyan")} ${rule.meta.docs.description}`);
186
- }
187
- if (rule.meta?.type) {
188
- const typeColor = rule.meta.type === "problem" ? "red" : rule.meta.type === "suggestion" ? "yellow" : "blue";
189
- console.log(` ${colorize("Type:", "cyan")} ${colorize(rule.meta.type, typeColor)}`);
190
- }
191
- if (rule.meta?.fixable) {
192
- console.log(` ${colorize("Fixable:", "cyan")} ${colorize("Yes", "green")}`);
193
- }
194
- if (showUsage) {
195
- console.log(` ${colorize("Usage:", "cyan")} "${fullName}": "error"`);
196
- }
197
- });
198
- console.log(colorize(`
199
- \u{1F4CA} Summary: ${rules.length} custom rules available`, "bright"));
200
- if (showUsage) {
201
- printCustomUsageInfo();
202
- }
203
- console.log(colorize("\n\u{1F4A1} Tips:", "bright"));
204
- console.log("\u2022 Use --verbose to see detailed rule information");
205
- console.log("\u2022 Use --usage to see configuration examples");
206
- console.log('\u2022 All rules are prefixed with "functype/"');
207
- console.log("\u2022 Consider using eslint-config-functype for pre-configured setup");
208
- console.log(colorize("\n\u{1F517} Links:", "bright"));
209
- console.log("\u2022 Documentation: https://github.com/jordanburke/eslint-plugin-functype");
210
- console.log("\u2022 Configuration Bundle: https://github.com/jordanburke/eslint-config-functype");
211
- console.log("\u2022 Functype Library: https://github.com/jordanburke/functype");
212
- } catch (error) {
213
- console.error(colorize("\u274C Error loading plugin:", "red"), error.message);
214
- process.exit(1);
215
- }
216
- }
217
- function printCustomUsageInfo() {
218
- console.log(colorize("\n\u{1F4A1} Usage Examples:", "bright"));
219
- console.log(colorize("=".repeat(30), "blue"));
220
- console.log("\n" + colorize("ESLint 9+ (flat config):", "green"));
221
- console.log(' import functypePlugin from "eslint-plugin-functype"');
222
- console.log(" export default [");
223
- console.log(" {");
224
- console.log(" plugins: { functype: functypePlugin },");
225
- console.log(" rules: {");
226
- console.log(' "functype/prefer-option": "error",');
227
- console.log(' "functype/prefer-either": "error",');
228
- console.log(' "functype/no-get-unsafe": "error",');
229
- console.log(" }");
230
- console.log(" }");
231
- console.log(" ]");
232
- console.log("\n" + colorize("With eslint-config-functype (recommended):", "green"));
233
- console.log(' import functypeConfig from "eslint-config-functype"');
234
- console.log(" export default [functypeConfig.recommended]");
235
- }
236
- main().catch((error) => {
237
- console.error(colorize("\u274C Unexpected error:", "red"), error);
238
- process.exit(1);
239
- });
240
- //# sourceMappingURL=list-rules.js.map
2
+ import e from"../index.js";import{validatePeerDependencies as t}from"../utils/dependency-validator.js";const n={reset:`\x1B[0m`,bright:`\x1B[1m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,magenta:`\x1B[35m`,cyan:`\x1B[36m`};function r(e,t){return n[t]+e+n.reset}function i(e){console.log(r(`
3
+ šŸ” Dependency Status Check:`,`bright`)),console.log(r(`=`.repeat(40),`blue`)),e.available.length>0&&(console.log(r(`
4
+ āœ… Available:`,`green`)),e.available.forEach(e=>{let t=e.required?`šŸ”§`:`šŸ”Œ`;console.log(` ${t} ${r(e.name,`green`)} - ${e.description}`)})),e.missing.length>0&&(console.log(r(`
5
+ āŒ Missing:`,`red`)),e.missing.forEach(e=>{let t=e.required?`āš ļø `:`šŸ’”`,n=e.required?`red`:`yellow`;console.log(` ${t} ${r(e.name,n)} - ${e.description}`)}),e.installCommand&&(console.log(r(`
6
+ šŸ“¦ Install missing dependencies:`,`bright`)),console.log(` ${r(e.installCommand,`cyan`)}`))),e.warnings.length>0&&(console.log(r(`
7
+ āš ļø Warnings:`,`yellow`)),e.warnings.forEach(e=>console.log(` ${e}`)));let t=e.isValid?`āœ… Ready to use`:`āŒ Configuration will fail`,n=e.isValid?`green`:`red`;console.log(r(`\n${t}`,n))}async function a(){let n=process.argv.slice(2),a=n.includes(`--help`)||n.includes(`-h`),s=n.includes(`--usage`)||n.includes(`-u`),c=n.includes(`--check-deps`)||n.includes(`--check`);if(a){console.log(r(`šŸ“‹ ESLint Plugin Functype - Custom Rules`,`bright`)),console.log(`
8
+ Usage: pnpm run list-rules [options]`),console.log(`
9
+ Options:`),console.log(` --verbose, -v Show rule descriptions and schemas`),console.log(` --usage, -u Show usage examples`),console.log(` --check-deps Check peer dependency status`),console.log(` --help, -h Show this help message`),console.log(`
10
+ This command lists all custom rules provided by the functype plugin.`);return}if(c){console.log(r(`šŸ”§ ESLint Plugin Functype - Dependency Check`,`bright`));let e=t();i(e),e.isValid||process.exit(1);return}console.log(r(`šŸ”§ ESLint Plugin Functype - Custom Rules`,`bright`)),e.rules||(console.error(r(`āŒ No rules found in plugin.`,`red`)),process.exit(1)),console.log(r(`
11
+ šŸ“¦ Available Custom Rules:`,`bright`)),console.log(r(`=`.repeat(40),`blue`));let l=Object.keys(e.rules);l.forEach(t=>{let n=e.rules[t],i=`functype/${t}`;if(console.log(`\n${r(`ā—`,`green`)} ${r(i,`bright`)}`),n.meta?.docs?.description&&console.log(` ${r(`Description:`,`cyan`)} ${n.meta.docs.description}`),n.meta?.type){let e=n.meta.type===`problem`?`red`:n.meta.type===`suggestion`?`yellow`:`blue`;console.log(` ${r(`Type:`,`cyan`)} ${r(n.meta.type,e)}`)}n.meta?.fixable&&console.log(` ${r(`Fixable:`,`cyan`)} ${r(`Yes`,`green`)}`),s&&console.log(` ${r(`Usage:`,`cyan`)} "${i}": "error"`)}),console.log(r(`\nšŸ“Š Summary: ${l.length} custom rules available`,`bright`)),s&&o(),console.log(r(`
12
+ šŸ’” Tips:`,`bright`)),console.log(`• Use --verbose to see detailed rule information`),console.log(`• Use --usage to see configuration examples`),console.log(`• All rules are prefixed with "functype/"`),console.log(`• Consider using eslint-config-functype for pre-configured setup`),console.log(r(`
13
+ šŸ”— Links:`,`bright`)),console.log(`• Documentation: https://github.com/jordanburke/eslint-plugin-functype`),console.log(`• Configuration Bundle: https://github.com/jordanburke/eslint-config-functype`),console.log(`• Functype Library: https://github.com/jordanburke/functype`)}function o(){console.log(r(`
14
+ šŸ’” Usage Examples:`,`bright`)),console.log(r(`=`.repeat(30),`blue`)),console.log(`
15
+ `+r(`ESLint 9+ (flat config):`,`green`)),console.log(` import functypePlugin from "eslint-plugin-functype"`),console.log(` export default [`),console.log(` {`),console.log(` plugins: { functype: functypePlugin },`),console.log(` rules: {`),console.log(` "functype/prefer-option": "error",`),console.log(` "functype/prefer-either": "error",`),console.log(` "functype/no-get-unsafe": "error",`),console.log(` }`),console.log(` }`),console.log(` ]`),console.log(`
16
+ `+r(`With eslint-config-functype (recommended):`,`green`)),console.log(` import functypeConfig from "eslint-config-functype"`),console.log(` export default [functypeConfig.recommended]`)}a().catch(e=>{console.error(r(`āŒ Unexpected error:`,`red`),e),process.exit(1)});export{};
241
17
  //# sourceMappingURL=list-rules.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/dependency-validator.ts","../../src/cli/list-rules.ts"],"names":["path","fs"],"mappings":"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","file":"list-rules.js","sourcesContent":["// Utility to validate peer dependencies and provide helpful error messages\n\ninterface PeerDependency {\n name: string\n packageName: string\n description: string\n required: boolean\n}\n\nconst PEER_DEPENDENCIES: PeerDependency[] = [\n {\n name: '@typescript-eslint/eslint-plugin',\n packageName: '@typescript-eslint/eslint-plugin',\n description: 'TypeScript-aware ESLint rules',\n required: true\n },\n {\n name: '@typescript-eslint/parser',\n packageName: '@typescript-eslint/parser', \n description: 'TypeScript parser for ESLint',\n required: true\n },\n {\n name: 'eslint-plugin-functional',\n packageName: 'eslint-plugin-functional',\n description: 'Functional programming ESLint rules',\n required: true\n },\n {\n name: 'eslint-plugin-prettier',\n packageName: 'eslint-plugin-prettier',\n description: 'Code formatting rules',\n required: false\n },\n {\n name: 'eslint-plugin-simple-import-sort',\n packageName: 'eslint-plugin-simple-import-sort',\n description: 'Import sorting rules',\n required: false\n },\n {\n name: 'prettier',\n packageName: 'prettier',\n description: 'Code formatter',\n required: false\n }\n]\n\nexport interface ValidationResult {\n isValid: boolean\n missing: PeerDependency[]\n available: PeerDependency[]\n installCommand: string\n warnings: string[]\n}\n\nfunction tryRequire(packageName: string): boolean {\n try {\n require.resolve(packageName)\n return true\n } catch {\n return false\n }\n}\n\nexport function validatePeerDependencies(): ValidationResult {\n const missing: PeerDependency[] = []\n const available: PeerDependency[] = []\n const warnings: string[] = []\n\n for (const dep of PEER_DEPENDENCIES) {\n if (tryRequire(dep.packageName)) {\n available.push(dep)\n } else {\n missing.push(dep)\n if (dep.required) {\n // Required dependency is missing - this will cause errors\n } else {\n // Optional dependency is missing - add warning\n warnings.push(`Optional plugin '${dep.name}' not found. Some rules will be skipped.`)\n }\n }\n }\n\n const requiredMissing = missing.filter(dep => dep.required)\n const isValid = requiredMissing.length === 0\n\n // Generate install command for missing dependencies\n const missingPackageNames = missing.map(dep => dep.packageName)\n const installCommand = missingPackageNames.length > 0 \n ? `pnpm add -D ${missingPackageNames.join(' ')}`\n : ''\n\n return {\n isValid,\n missing,\n available,\n installCommand,\n warnings\n }\n}\n\nexport function createValidationError(result: ValidationResult): Error {\n const requiredMissing = result.missing.filter(dep => dep.required)\n \n if (requiredMissing.length === 0) {\n return new Error('No validation errors')\n }\n\n const missingList = requiredMissing\n .map(dep => ` • ${dep.name} - ${dep.description}`)\n .join('\\n')\n\n const message = [\n 'āŒ Missing required peer dependencies for eslint-plugin-functype:',\n '',\n missingList,\n '',\n 'šŸ“¦ Install missing dependencies:',\n ` ${result.installCommand}`,\n '',\n 'šŸ“– See installation guide: https://github.com/jordanburke/eslint-plugin-functype#installation'\n ].join('\\n')\n\n return new Error(message)\n}\n\nexport function shouldValidateDependencies(): boolean {\n // Skip validation in test environments or when explicitly disabled\n return process.env.NODE_ENV !== 'test' && \n process.env.FUNCTYPE_SKIP_VALIDATION !== 'true'\n}","#!/usr/bin/env node\n\nimport fs from 'fs'\nimport path from 'path'\nimport { validatePeerDependencies, type ValidationResult } from '../utils/dependency-validator'\n\n// Remove unused type\n// type RuleSeverity = 'off' | 'warn' | 'error' | 0 | 1 | 2\n\n// Colors for console output\nconst colors = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n} as const\n\nfunction colorize(text: string, color: keyof typeof colors): string {\n return colors[color] + text + colors.reset\n}\n\n\n// Removed unused utility functions - they were for the old config-based approach\n\n\nfunction printDependencyStatus(result: ValidationResult): void {\n console.log(colorize('\\nšŸ” Dependency Status Check:', 'bright'))\n console.log(colorize('='.repeat(40), 'blue'))\n \n // Show available dependencies\n if (result.available.length > 0) {\n console.log(colorize('\\nāœ… Available:', 'green'))\n result.available.forEach(dep => {\n const icon = dep.required ? 'šŸ”§' : 'šŸ”Œ'\n console.log(` ${icon} ${colorize(dep.name, 'green')} - ${dep.description}`)\n })\n }\n \n // Show missing dependencies\n if (result.missing.length > 0) {\n console.log(colorize('\\nāŒ Missing:', 'red'))\n result.missing.forEach(dep => {\n const icon = dep.required ? 'āš ļø ' : 'šŸ’”'\n const color = dep.required ? 'red' : 'yellow'\n console.log(` ${icon} ${colorize(dep.name, color)} - ${dep.description}`)\n })\n \n if (result.installCommand) {\n console.log(colorize('\\nšŸ“¦ Install missing dependencies:', 'bright'))\n console.log(` ${colorize(result.installCommand, 'cyan')}`)\n }\n }\n \n // Show warnings\n if (result.warnings.length > 0) {\n console.log(colorize('\\nāš ļø Warnings:', 'yellow'))\n result.warnings.forEach(warning => console.log(` ${warning}`))\n }\n \n // Overall status\n const status = result.isValid ? 'āœ… Ready to use' : 'āŒ Configuration will fail'\n const statusColor = result.isValid ? 'green' : 'red'\n console.log(colorize(`\\n${status}`, statusColor))\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2)\n const showHelp = args.includes('--help') || args.includes('-h')\n const showUsage = args.includes('--usage') || args.includes('-u')\n const checkDeps = args.includes('--check-deps') || args.includes('--check')\n \n if (showHelp) {\n console.log(colorize('šŸ“‹ ESLint Plugin Functype - Custom Rules', 'bright'))\n console.log('\\nUsage: pnpm run list-rules [options]')\n console.log('\\nOptions:')\n console.log(' --verbose, -v Show rule descriptions and schemas')\n console.log(' --usage, -u Show usage examples')\n console.log(' --check-deps Check peer dependency status') \n console.log(' --help, -h Show this help message')\n console.log('\\nThis command lists all custom rules provided by the functype plugin.')\n return\n }\n \n // Handle dependency check\n if (checkDeps) {\n console.log(colorize('šŸ”§ ESLint Plugin Functype - Dependency Check', 'bright'))\n const result = validatePeerDependencies()\n printDependencyStatus(result)\n \n if (!result.isValid) {\n process.exit(1)\n }\n return\n }\n \n console.log(colorize('šŸ”§ ESLint Plugin Functype - Custom Rules', 'bright'))\n \n const distPath = path.join(__dirname, '..', '..', 'dist')\n \n if (!fs.existsSync(distPath)) {\n console.error(colorize('āŒ Build directory not found. Run `pnpm run build` first.', 'red'))\n process.exit(1)\n }\n \n // Load the plugin to get available rules\n try {\n const pluginPath = path.join(distPath, 'index.js')\n const plugin = require(pluginPath)\n \n if (!plugin.rules) {\n console.error(colorize('āŒ No rules found in plugin.', 'red'))\n process.exit(1)\n }\n \n console.log(colorize('\\nšŸ“¦ Available Custom Rules:', 'bright'))\n console.log(colorize('='.repeat(40), 'blue'))\n \n const rules = Object.keys(plugin.rules)\n \n rules.forEach(ruleName => {\n const rule = plugin.rules[ruleName]\n const fullName = `functype/${ruleName}`\n \n console.log(`\\n${colorize('ā—', 'green')} ${colorize(fullName, 'bright')}`)\n \n if (rule.meta?.docs?.description) {\n console.log(` ${colorize('Description:', 'cyan')} ${rule.meta.docs.description}`)\n }\n \n if (rule.meta?.type) {\n const typeColor = rule.meta.type === 'problem' ? 'red' : \n rule.meta.type === 'suggestion' ? 'yellow' : 'blue'\n console.log(` ${colorize('Type:', 'cyan')} ${colorize(rule.meta.type, typeColor)}`)\n }\n \n if (rule.meta?.fixable) {\n console.log(` ${colorize('Fixable:', 'cyan')} ${colorize('Yes', 'green')}`)\n }\n \n if (showUsage) {\n console.log(` ${colorize('Usage:', 'cyan')} \"${fullName}\": \"error\"`)\n }\n })\n \n console.log(colorize(`\\nšŸ“Š Summary: ${rules.length} custom rules available`, 'bright'))\n \n if (showUsage) {\n printCustomUsageInfo()\n }\n \n console.log(colorize('\\nšŸ’” Tips:', 'bright'))\n console.log('• Use --verbose to see detailed rule information')\n console.log('• Use --usage to see configuration examples')\n console.log('• All rules are prefixed with \"functype/\"')\n console.log('• Consider using eslint-config-functype for pre-configured setup')\n \n console.log(colorize('\\nšŸ”— Links:', 'bright'))\n console.log('• Documentation: https://github.com/jordanburke/eslint-plugin-functype')\n console.log('• Configuration Bundle: https://github.com/jordanburke/eslint-config-functype')\n console.log('• Functype Library: https://github.com/jordanburke/functype')\n \n } catch (error) {\n console.error(colorize('āŒ Error loading plugin:', 'red'), (error as Error).message)\n process.exit(1)\n }\n}\n\nfunction printCustomUsageInfo(): void {\n console.log(colorize('\\nšŸ’” Usage Examples:', 'bright'))\n console.log(colorize('='.repeat(30), 'blue'))\n console.log('\\n' + colorize('ESLint 9+ (flat config):', 'green'))\n console.log(' import functypePlugin from \"eslint-plugin-functype\"')\n console.log(' export default [')\n console.log(' {')\n console.log(' plugins: { functype: functypePlugin },')\n console.log(' rules: {')\n console.log(' \"functype/prefer-option\": \"error\",')\n console.log(' \"functype/prefer-either\": \"error\",')\n console.log(' \"functype/no-get-unsafe\": \"error\",')\n console.log(' }')\n console.log(' }')\n console.log(' ]')\n console.log('\\n' + colorize('With eslint-config-functype (recommended):', 'green'))\n console.log(' import functypeConfig from \"eslint-config-functype\"')\n console.log(' export default [functypeConfig.recommended]')\n}\n\n// Run the CLI\nmain().catch(error => {\n console.error(colorize('āŒ Unexpected error:', 'red'), error)\n process.exit(1)\n})"]}
1
+ {"version":3,"file":"list-rules.js","names":[],"sources":["../../src/cli/list-rules.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport plugin from \"../index.js\"\nimport { validatePeerDependencies, type ValidationResult } from \"../utils/dependency-validator.js\"\n\n// Colors for console output\nconst colors = {\n reset: \"\\x1b[0m\",\n bright: \"\\x1b[1m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n} as const\n\nfunction colorize(text: string, color: keyof typeof colors): string {\n return colors[color] + text + colors.reset\n}\n\n// Removed unused utility functions - they were for the old config-based approach\n\nfunction printDependencyStatus(result: ValidationResult): void {\n console.log(colorize(\"\\nšŸ” Dependency Status Check:\", \"bright\"))\n console.log(colorize(\"=\".repeat(40), \"blue\"))\n\n // Show available dependencies\n if (result.available.length > 0) {\n console.log(colorize(\"\\nāœ… Available:\", \"green\"))\n result.available.forEach((dep) => {\n const icon = dep.required ? \"šŸ”§\" : \"šŸ”Œ\"\n console.log(` ${icon} ${colorize(dep.name, \"green\")} - ${dep.description}`)\n })\n }\n\n // Show missing dependencies\n if (result.missing.length > 0) {\n console.log(colorize(\"\\nāŒ Missing:\", \"red\"))\n result.missing.forEach((dep) => {\n const icon = dep.required ? \"āš ļø \" : \"šŸ’”\"\n const color = dep.required ? \"red\" : \"yellow\"\n console.log(` ${icon} ${colorize(dep.name, color)} - ${dep.description}`)\n })\n\n if (result.installCommand) {\n console.log(colorize(\"\\nšŸ“¦ Install missing dependencies:\", \"bright\"))\n console.log(` ${colorize(result.installCommand, \"cyan\")}`)\n }\n }\n\n // Show warnings\n if (result.warnings.length > 0) {\n console.log(colorize(\"\\nāš ļø Warnings:\", \"yellow\"))\n result.warnings.forEach((warning) => console.log(` ${warning}`))\n }\n\n // Overall status\n const status = result.isValid ? \"āœ… Ready to use\" : \"āŒ Configuration will fail\"\n const statusColor = result.isValid ? \"green\" : \"red\"\n console.log(colorize(`\\n${status}`, statusColor))\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2)\n const showHelp = args.includes(\"--help\") || args.includes(\"-h\")\n const showUsage = args.includes(\"--usage\") || args.includes(\"-u\")\n const checkDeps = args.includes(\"--check-deps\") || args.includes(\"--check\")\n\n if (showHelp) {\n console.log(colorize(\"šŸ“‹ ESLint Plugin Functype - Custom Rules\", \"bright\"))\n console.log(\"\\nUsage: pnpm run list-rules [options]\")\n console.log(\"\\nOptions:\")\n console.log(\" --verbose, -v Show rule descriptions and schemas\")\n console.log(\" --usage, -u Show usage examples\")\n console.log(\" --check-deps Check peer dependency status\")\n console.log(\" --help, -h Show this help message\")\n console.log(\"\\nThis command lists all custom rules provided by the functype plugin.\")\n return\n }\n\n // Handle dependency check\n if (checkDeps) {\n console.log(colorize(\"šŸ”§ ESLint Plugin Functype - Dependency Check\", \"bright\"))\n const result = validatePeerDependencies()\n printDependencyStatus(result)\n\n if (!result.isValid) {\n process.exit(1)\n }\n return\n }\n\n console.log(colorize(\"šŸ”§ ESLint Plugin Functype - Custom Rules\", \"bright\"))\n\n if (!plugin.rules) {\n console.error(colorize(\"āŒ No rules found in plugin.\", \"red\"))\n process.exit(1)\n }\n\n console.log(colorize(\"\\nšŸ“¦ Available Custom Rules:\", \"bright\"))\n console.log(colorize(\"=\".repeat(40), \"blue\"))\n\n const rules = Object.keys(plugin.rules)\n\n rules.forEach((ruleName) => {\n const rule = plugin.rules[ruleName]\n const fullName = `functype/${ruleName}`\n\n console.log(`\\n${colorize(\"ā—\", \"green\")} ${colorize(fullName, \"bright\")}`)\n\n if (rule.meta?.docs?.description) {\n console.log(` ${colorize(\"Description:\", \"cyan\")} ${rule.meta.docs.description}`)\n }\n\n if (rule.meta?.type) {\n const typeColor = rule.meta.type === \"problem\" ? \"red\" : rule.meta.type === \"suggestion\" ? \"yellow\" : \"blue\"\n console.log(` ${colorize(\"Type:\", \"cyan\")} ${colorize(rule.meta.type, typeColor)}`)\n }\n\n if (rule.meta?.fixable) {\n console.log(` ${colorize(\"Fixable:\", \"cyan\")} ${colorize(\"Yes\", \"green\")}`)\n }\n\n if (showUsage) {\n console.log(` ${colorize(\"Usage:\", \"cyan\")} \"${fullName}\": \"error\"`)\n }\n })\n\n console.log(colorize(`\\nšŸ“Š Summary: ${rules.length} custom rules available`, \"bright\"))\n\n if (showUsage) {\n printCustomUsageInfo()\n }\n\n console.log(colorize(\"\\nšŸ’” Tips:\", \"bright\"))\n console.log(\"• Use --verbose to see detailed rule information\")\n console.log(\"• Use --usage to see configuration examples\")\n console.log('• All rules are prefixed with \"functype/\"')\n console.log(\"• Consider using eslint-config-functype for pre-configured setup\")\n\n console.log(colorize(\"\\nšŸ”— Links:\", \"bright\"))\n console.log(\"• Documentation: https://github.com/jordanburke/eslint-plugin-functype\")\n console.log(\"• Configuration Bundle: https://github.com/jordanburke/eslint-config-functype\")\n console.log(\"• Functype Library: https://github.com/jordanburke/functype\")\n}\n\nfunction printCustomUsageInfo(): void {\n console.log(colorize(\"\\nšŸ’” Usage Examples:\", \"bright\"))\n console.log(colorize(\"=\".repeat(30), \"blue\"))\n console.log(\"\\n\" + colorize(\"ESLint 9+ (flat config):\", \"green\"))\n console.log(' import functypePlugin from \"eslint-plugin-functype\"')\n console.log(\" export default [\")\n console.log(\" {\")\n console.log(\" plugins: { functype: functypePlugin },\")\n console.log(\" rules: {\")\n console.log(' \"functype/prefer-option\": \"error\",')\n console.log(' \"functype/prefer-either\": \"error\",')\n console.log(' \"functype/no-get-unsafe\": \"error\",')\n console.log(\" }\")\n console.log(\" }\")\n console.log(\" ]\")\n console.log(\"\\n\" + colorize(\"With eslint-config-functype (recommended):\", \"green\"))\n console.log(' import functypeConfig from \"eslint-config-functype\"')\n console.log(\" export default [functypeConfig.recommended]\")\n}\n\n// Run the CLI\nmain().catch((error) => {\n console.error(colorize(\"āŒ Unexpected error:\", \"red\"), error)\n process.exit(1)\n})\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,20 +1,23 @@
1
- import * as eslint from 'eslint';
1
+ import * as eslint from "eslint";
2
2
 
3
+ //#region src/index.d.ts
3
4
  declare const plugin: {
4
- rules: {
5
- "prefer-option": eslint.Rule.RuleModule;
6
- "prefer-either": eslint.Rule.RuleModule;
7
- "prefer-list": eslint.Rule.RuleModule;
8
- "no-get-unsafe": eslint.Rule.RuleModule;
9
- "prefer-fold": eslint.Rule.RuleModule;
10
- "prefer-map": eslint.Rule.RuleModule;
11
- "prefer-flatmap": eslint.Rule.RuleModule;
12
- "no-imperative-loops": eslint.Rule.RuleModule;
13
- };
14
- meta: {
15
- name: string;
16
- version: string;
17
- };
5
+ rules: {
6
+ "prefer-option": eslint.Rule.RuleModule;
7
+ "prefer-either": eslint.Rule.RuleModule;
8
+ "prefer-list": eslint.Rule.RuleModule;
9
+ "no-get-unsafe": eslint.Rule.RuleModule;
10
+ "prefer-fold": eslint.Rule.RuleModule;
11
+ "prefer-map": eslint.Rule.RuleModule;
12
+ "prefer-flatmap": eslint.Rule.RuleModule;
13
+ "no-imperative-loops": eslint.Rule.RuleModule;
14
+ "prefer-do-notation": eslint.Rule.RuleModule;
15
+ };
16
+ meta: {
17
+ name: string;
18
+ version: string;
19
+ };
18
20
  };
19
-
21
+ //#endregion
20
22
  export { plugin as default };
23
+ //# sourceMappingURL=index.d.ts.map