-
Notifications
You must be signed in to change notification settings - Fork 137
Expand file tree
/
Copy patherrors.ts
More file actions
80 lines (74 loc) · 2.09 KB
/
errors.ts
File metadata and controls
80 lines (74 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
export type CliErrorCode =
| 'INVALID_ARGUMENT'
| 'SESSION_ID_INVALID'
| 'SESSION_NOT_FOUND'
| 'UNKNOWN_COMMAND'
| 'VALIDATION_ERROR'
| 'MISSING_REQUIRED'
| 'JSON_PARSE_ERROR'
| 'FILE_READ_ERROR'
| 'DOCUMENT_OPEN_FAILED'
| 'DOCUMENT_EXPORT_FAILED'
| 'FILE_WRITE_ERROR'
| 'OUTPUT_EXISTS'
| 'TARGET_NOT_FOUND'
| 'NO_ACTIVE_DOCUMENT'
| 'DIRTY_CLOSE_REQUIRES_DECISION'
| 'REVISION_MISMATCH'
| 'CONTEXT_LOCK_TIMEOUT'
| 'PROJECT_CONTEXT_MISMATCH'
| 'DIRTY_SESSION_EXISTS'
| 'SOURCE_DRIFT_DETECTED'
| 'COLLABORATION_SYNC_TIMEOUT'
| 'TRACK_CHANGE_NOT_FOUND'
| 'TRACK_CHANGE_MODE_UNSUPPORTED'
| 'TRACK_CHANGE_COMMAND_UNAVAILABLE'
| 'TRACK_CHANGE_CONFLICT'
| 'COMMAND_FAILED'
| 'UNSUPPORTED_FORMAT'
| 'TIMEOUT'
// Plan-engine error codes — passed through from document-api adapters
| 'REVISION_CHANGED_SINCE_COMPILE'
| 'PLAN_CONFLICT_OVERLAP'
| 'DOCUMENT_IDENTITY_CONFLICT'
| 'INVALID_INSERTION_CONTEXT'
| 'INVALID_INPUT'
| 'INVALID_STEP_COMBINATION'
| 'MATCH_NOT_FOUND'
| 'PRECONDITION_FAILED'
| 'CROSS_BLOCK_MATCH'
| 'SPAN_FRAGMENTED'
| 'PAGE_NUMBERS_NOT_MATERIALIZED'
| 'CAPABILITY_UNAVAILABLE';
/**
* Intersection type for errors thrown by document-api adapter operations.
* These may carry a `code` string (e.g. `'TARGET_NOT_FOUND'`) and optional `details`.
*/
export type AdapterLikeError = Error & {
code?: unknown;
details?: unknown;
};
export class CliError extends Error {
readonly code: CliErrorCode;
readonly details?: unknown;
readonly exitCode: number;
constructor(code: CliErrorCode, message: string, details?: unknown, exitCode = 1) {
super(message);
Object.setPrototypeOf(this, CliError.prototype);
this.name = 'CliError';
this.code = code;
this.details = details;
this.exitCode = exitCode;
}
}
export function toCliError(error: unknown): CliError {
if (error instanceof CliError) return error;
if (error instanceof Error) {
return new CliError('COMMAND_FAILED', error.message, {
name: error.name,
});
}
return new CliError('COMMAND_FAILED', 'Unknown error', {
error,
});
}