faf-cli 2.1.7 → 2.2.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/README.md +11 -24
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +12 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/email.d.ts +23 -0
- package/dist/commands/email.d.ts.map +1 -0
- package/dist/commands/email.js +183 -0
- package/dist/commands/email.js.map +1 -0
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/score-v3.d.ts +15 -0
- package/dist/commands/score-v3.d.ts.map +1 -0
- package/dist/commands/score-v3.js +202 -0
- package/dist/commands/score-v3.js.map +1 -0
- package/dist/commands/score.d.ts +5 -0
- package/dist/commands/score.d.ts.map +1 -1
- package/dist/commands/score.js +12 -0
- package/dist/commands/score.js.map +1 -1
- package/dist/commands/vibe.d.ts +1 -1
- package/dist/commands/vibe.d.ts.map +1 -1
- package/dist/commands/vibe.js +6 -8
- package/dist/commands/vibe.js.map +1 -1
- package/dist/compiler/faf-compiler.d.ts +137 -0
- package/dist/compiler/faf-compiler.d.ts.map +1 -0
- package/dist/compiler/faf-compiler.js +598 -0
- package/dist/compiler/faf-compiler.js.map +1 -0
- package/dist/output/experience-manager.d.ts +1 -1
- package/dist/utils/error-handler.d.ts +27 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +152 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAgClE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1E,EAAE,EAAE,CAAC,EACL,OAAO,CAAC,EAAE,YAAY,GACrB,CAAC,CAWH;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrE,EAAE,EAAE,CAAC,EACL,OAAO,CAAC,EAAE,YAAY,GACrB,CAAC,CAWH;AAsED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAM3E"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Error handling wrapper for consistent error management
|
|
4
|
+
* Provides clean error messages and telemetry
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.handleError = handleError;
|
|
8
|
+
exports.withErrorHandling = withErrorHandling;
|
|
9
|
+
exports.withSyncErrorHandling = withSyncErrorHandling;
|
|
10
|
+
exports.createUserError = createUserError;
|
|
11
|
+
const championship_style_1 = require("./championship-style");
|
|
12
|
+
const colors_1 = require("../fix-once/colors");
|
|
13
|
+
/**
|
|
14
|
+
* Standardized error handler
|
|
15
|
+
*/
|
|
16
|
+
function handleError(err, context) {
|
|
17
|
+
// In quiet mode, only show critical errors
|
|
18
|
+
if (championship_style_1.OUTPUT_CONFIG.quiet && !isCriticalError(err)) {
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
// Format error message based on environment
|
|
22
|
+
const errorMessage = formatErrorMessage(err, context);
|
|
23
|
+
if (!championship_style_1.OUTPUT_CONFIG.quiet) {
|
|
24
|
+
(0, championship_style_1.error)(colors_1.colors.error('─'.repeat(50)));
|
|
25
|
+
(0, championship_style_1.error)(colors_1.colors.error('❌ ERROR'));
|
|
26
|
+
(0, championship_style_1.error)(colors_1.colors.error('─'.repeat(50)));
|
|
27
|
+
}
|
|
28
|
+
(0, championship_style_1.error)(errorMessage);
|
|
29
|
+
if (championship_style_1.OUTPUT_CONFIG.verbose && err.stack) {
|
|
30
|
+
(0, championship_style_1.error)(colors_1.colors.secondary('\nStack trace:'));
|
|
31
|
+
(0, championship_style_1.error)(colors_1.colors.secondary(err.stack));
|
|
32
|
+
}
|
|
33
|
+
// Log context if available
|
|
34
|
+
if (context && !championship_style_1.OUTPUT_CONFIG.quiet) {
|
|
35
|
+
if (context.command)
|
|
36
|
+
(0, championship_style_1.error)(`Command: ${context.command}`);
|
|
37
|
+
if (context.file)
|
|
38
|
+
(0, championship_style_1.error)(`File: ${context.file}`);
|
|
39
|
+
if (context.operation)
|
|
40
|
+
(0, championship_style_1.error)(`Operation: ${context.operation}`);
|
|
41
|
+
}
|
|
42
|
+
// Exit with appropriate code
|
|
43
|
+
const exitCode = getExitCode(err);
|
|
44
|
+
process.exit(exitCode);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Wrapper for async functions with error handling
|
|
48
|
+
*/
|
|
49
|
+
function withErrorHandling(fn, context) {
|
|
50
|
+
return (async (...args) => {
|
|
51
|
+
try {
|
|
52
|
+
return await fn(...args);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
handleError(err, {
|
|
56
|
+
...context,
|
|
57
|
+
details: { args }
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Wrapper for sync functions with error handling
|
|
64
|
+
*/
|
|
65
|
+
function withSyncErrorHandling(fn, context) {
|
|
66
|
+
return ((...args) => {
|
|
67
|
+
try {
|
|
68
|
+
return fn(...args);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
handleError(err, {
|
|
72
|
+
...context,
|
|
73
|
+
details: { args }
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Format error message based on error type
|
|
80
|
+
*/
|
|
81
|
+
function formatErrorMessage(err, context) {
|
|
82
|
+
// File not found
|
|
83
|
+
if (err.code === 'ENOENT') {
|
|
84
|
+
const file = err.path || context?.file || 'unknown file';
|
|
85
|
+
return `File not found: ${file}`;
|
|
86
|
+
}
|
|
87
|
+
// Permission denied
|
|
88
|
+
if (err.code === 'EACCES' || err.code === 'EPERM') {
|
|
89
|
+
const file = err.path || context?.file || 'unknown file';
|
|
90
|
+
return `Permission denied: ${file}`;
|
|
91
|
+
}
|
|
92
|
+
// Network errors
|
|
93
|
+
if (err.code === 'ECONNREFUSED' || err.code === 'ETIMEDOUT') {
|
|
94
|
+
return `Network error: ${err.message}`;
|
|
95
|
+
}
|
|
96
|
+
// JSON parse errors
|
|
97
|
+
if (err instanceof SyntaxError && err.message.includes('JSON')) {
|
|
98
|
+
return `Invalid JSON: ${err.message}`;
|
|
99
|
+
}
|
|
100
|
+
// FAF-specific errors
|
|
101
|
+
if (err.message?.includes('FAF')) {
|
|
102
|
+
return err.message;
|
|
103
|
+
}
|
|
104
|
+
// Default
|
|
105
|
+
return err.message || 'An unexpected error occurred';
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Determine if error is critical (should show even in quiet mode)
|
|
109
|
+
*/
|
|
110
|
+
function isCriticalError(err) {
|
|
111
|
+
// Permission errors are critical
|
|
112
|
+
if (err.code === 'EACCES' || err.code === 'EPERM')
|
|
113
|
+
return true;
|
|
114
|
+
// Out of memory/space
|
|
115
|
+
if (err.code === 'ENOMEM' || err.code === 'ENOSPC')
|
|
116
|
+
return true;
|
|
117
|
+
// FAF corruption
|
|
118
|
+
if (err.message?.includes('corrupt') || err.message?.includes('invalid format'))
|
|
119
|
+
return true;
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get appropriate exit code for error type
|
|
124
|
+
*/
|
|
125
|
+
function getExitCode(err) {
|
|
126
|
+
// Standard POSIX codes
|
|
127
|
+
if (err.code === 'ENOENT')
|
|
128
|
+
return 2; // File not found
|
|
129
|
+
if (err.code === 'EACCES' || err.code === 'EPERM')
|
|
130
|
+
return 126; // Permission denied
|
|
131
|
+
if (err.code === 'EINVAL')
|
|
132
|
+
return 22; // Invalid argument
|
|
133
|
+
// FAF-specific codes
|
|
134
|
+
if (err.message?.includes('score'))
|
|
135
|
+
return 10; // Scoring error
|
|
136
|
+
if (err.message?.includes('sync'))
|
|
137
|
+
return 11; // Sync error
|
|
138
|
+
if (err.message?.includes('trust'))
|
|
139
|
+
return 12; // Trust error
|
|
140
|
+
return 1; // General error
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Create a user-friendly error for common issues
|
|
144
|
+
*/
|
|
145
|
+
function createUserError(message, suggestion) {
|
|
146
|
+
const err = new Error(message);
|
|
147
|
+
if (suggestion) {
|
|
148
|
+
err.message += `\n\n💡 Suggestion: ${suggestion}`;
|
|
149
|
+
}
|
|
150
|
+
return err;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "faf-cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "🏎️🏁 STOP faffing About! - AI-context ⚡️ FAST AF | Universal, shareable AI-context for any AI, human or team",
|
|
5
5
|
"icon": "https://faf.one/orange-smiley.svg",
|
|
6
6
|
"logo": "https://faf.one/orange-smiley.svg",
|