eslint-plugin-functype 1.4.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.
- package/dist/chunk-BlXvk904.js +1 -0
- package/dist/cli/list-rules.d.ts +1 -1
- package/dist/cli/list-rules.js +15 -239
- package/dist/cli/list-rules.js.map +1 -1
- package/dist/index.d.ts +19 -17
- package/dist/index.js +1 -1364
- package/dist/index.js.map +1 -1
- package/dist/rules/index.d.ts +24 -32
- package/dist/rules/index.js +1 -1357
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/no-get-unsafe.d.ts +7 -0
- package/dist/rules/no-get-unsafe.js +2 -0
- package/dist/rules/no-get-unsafe.js.map +1 -0
- package/dist/rules/no-imperative-loops.d.ts +7 -0
- package/dist/rules/no-imperative-loops.js +2 -0
- package/dist/rules/no-imperative-loops.js.map +1 -0
- package/dist/rules/prefer-do-notation.d.ts +7 -0
- package/dist/rules/prefer-do-notation.js +5 -0
- package/dist/rules/prefer-do-notation.js.map +1 -0
- package/dist/rules/prefer-either.d.ts +7 -0
- package/dist/rules/prefer-either.js +2 -0
- package/dist/rules/prefer-either.js.map +1 -0
- package/dist/rules/prefer-flatmap.d.ts +7 -0
- package/dist/rules/prefer-flatmap.js +2 -0
- package/dist/rules/prefer-flatmap.js.map +1 -0
- package/dist/rules/prefer-fold.d.ts +7 -0
- package/dist/rules/prefer-fold.js +2 -0
- package/dist/rules/prefer-fold.js.map +1 -0
- package/dist/rules/prefer-list.d.ts +7 -0
- package/dist/rules/prefer-list.js +2 -0
- package/dist/rules/prefer-list.js.map +1 -0
- package/dist/rules/prefer-map.d.ts +7 -0
- package/dist/rules/prefer-map.js +2 -0
- package/dist/rules/prefer-map.js.map +1 -0
- package/dist/rules/prefer-option.d.ts +7 -0
- package/dist/rules/prefer-option.js +2 -0
- package/dist/rules/prefer-option.js.map +1 -0
- package/dist/types/ast.d.ts +12 -0
- package/dist/types/ast.js +1 -0
- package/dist/utils/dependency-validator.d.ts +13 -11
- package/dist/utils/dependency-validator.js +3 -108
- package/dist/utils/dependency-validator.js.map +1 -1
- package/dist/utils/functype-detection.d.ts +69 -0
- package/dist/utils/functype-detection.js +2 -0
- package/dist/utils/functype-detection.js.map +1 -0
- package/package.json +34 -41
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createRequire as e}from"node:module";var t=e(import.meta.url);export{t};
|
package/dist/cli/list-rules.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export { };
|
package/dist/cli/list-rules.js
CHANGED
|
@@ -1,241 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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 ? `pnpm add -D ${missingPackageNames.join(\" \")}` : \"\"\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.map((dep) => ` ⢠${dep.name} - ${dep.description}`).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\" && process.env.FUNCTYPE_SKIP_VALIDATION !== \"true\"\n}\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// 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 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\" : 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 } 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})\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,21 +1,23 @@
|
|
|
1
|
-
import * as eslint from
|
|
1
|
+
import * as eslint from "eslint";
|
|
2
2
|
|
|
3
|
+
//#region src/index.d.ts
|
|
3
4
|
declare const plugin: {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
+
};
|
|
19
20
|
};
|
|
20
|
-
|
|
21
|
+
//#endregion
|
|
21
22
|
export { plugin as default };
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|