@codewithagents/api-errors 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +109 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +397 -76
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,63 @@ export interface FieldError {
|
|
|
5
5
|
field: string;
|
|
6
6
|
message: string;
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* The format/shape that was recognized when parsing an error body.
|
|
10
|
+
*
|
|
11
|
+
* - `'rfc7807-map'` - RFC 7807 / RFC 9457 `errors` map: `{ errors: { field: [...] } }`
|
|
12
|
+
* - `'spring-array'` - Spring Boot array: `{ errors: [{ field, defaultMessage }] }`
|
|
13
|
+
* - `'violations'` - RFC 9457 / Spring `violations` array: `{ violations: [{ field, message }] }`
|
|
14
|
+
* - `'invalid-params'` - RFC 9457 `invalid-params` array: `{ "invalid-params": [{ name, reason }] }`
|
|
15
|
+
* - `'json-api'` - JSON:API errors array: `{ errors: [{ source: { pointer }, detail }] }`
|
|
16
|
+
* - `'laravel-drf'` - Laravel / DRF top-level field map: `{ field: ["msg1", ...] }`
|
|
17
|
+
* - `'flat-object'` - Simple flat object: `{ field, message }`
|
|
18
|
+
* - `'flat-array'` - Array of flat objects: `[{ field, message }]`
|
|
19
|
+
* - `'rfc9457-detail'` - RFC 9457 top-level `detail` string (last-resort fallback)
|
|
20
|
+
* - `'custom'` - Matched a caller-provided custom parser
|
|
21
|
+
*/
|
|
22
|
+
export type ErrorFormat = 'rfc7807-map' | 'spring-array' | 'violations' | 'invalid-params' | 'json-api' | 'laravel-drf' | 'flat-object' | 'flat-array' | 'rfc9457-detail' | 'custom';
|
|
23
|
+
/**
|
|
24
|
+
* Rich result returned by `extractErrors`.
|
|
25
|
+
*/
|
|
26
|
+
export interface ExtractResult {
|
|
27
|
+
/**
|
|
28
|
+
* Field-level errors extracted from the response body.
|
|
29
|
+
*/
|
|
30
|
+
fieldErrors: FieldError[];
|
|
31
|
+
/**
|
|
32
|
+
* Non-field (global/form-level) error messages.
|
|
33
|
+
* These are messages that could not be attributed to a specific field,
|
|
34
|
+
* such as RFC 9457 `detail`, JSON:API errors without a source pointer,
|
|
35
|
+
* or violations/invalid-params entries without a field name.
|
|
36
|
+
*/
|
|
37
|
+
formErrors: string[];
|
|
38
|
+
/**
|
|
39
|
+
* The format that was recognized.
|
|
40
|
+
* `null` when no supported format matched (both `fieldErrors` and `formErrors` are empty).
|
|
41
|
+
*
|
|
42
|
+
* Use this to distinguish "unrecognized shape" from "recognized but genuinely no errors".
|
|
43
|
+
*/
|
|
44
|
+
format: ErrorFormat | null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A custom parser that callers can register to handle application-specific
|
|
48
|
+
* error shapes not covered by the built-in parsers.
|
|
49
|
+
*
|
|
50
|
+
* Return `null` to indicate "not recognized" and let the next parser try.
|
|
51
|
+
* Return a `ParsedErrors` object (even if both arrays are empty) to signal
|
|
52
|
+
* that this shape was recognized.
|
|
53
|
+
*/
|
|
54
|
+
export interface CustomParser {
|
|
55
|
+
(body: unknown): ParsedErrors | null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Raw parse result used internally and returned by custom parsers.
|
|
59
|
+
* Both arrays may be empty if the shape was recognized but contained no errors.
|
|
60
|
+
*/
|
|
61
|
+
export interface ParsedErrors {
|
|
62
|
+
fieldErrors: FieldError[];
|
|
63
|
+
formErrors: string[];
|
|
64
|
+
}
|
|
8
65
|
/**
|
|
9
66
|
* Options for mapApiErrors and extractFieldErrors.
|
|
10
67
|
*/
|
|
@@ -17,7 +74,7 @@ export interface MapApiErrorsOptions {
|
|
|
17
74
|
/**
|
|
18
75
|
* Optional transform applied to every field name before it is returned.
|
|
19
76
|
* Useful for mapping backend camelCase field names to nested React Hook Form
|
|
20
|
-
* paths, e.g. `"addressCity"`
|
|
77
|
+
* paths, e.g. `"addressCity"` to `"address.city"`.
|
|
21
78
|
*/
|
|
22
79
|
transformField?: (field: string) => string;
|
|
23
80
|
/**
|
|
@@ -32,19 +89,68 @@ export interface MapApiErrorsOptions {
|
|
|
32
89
|
* extractFieldErrors(err, { statusCodes: [422] })
|
|
33
90
|
*/
|
|
34
91
|
statusCodes?: number[];
|
|
92
|
+
/**
|
|
93
|
+
* Optional message resolver / i18n hook.
|
|
94
|
+
* Called for every error message (both field errors and form errors) before
|
|
95
|
+
* the message is included in the result. Return a replacement string to
|
|
96
|
+
* translate or reformat the message.
|
|
97
|
+
*
|
|
98
|
+
* `field` is `null` for global/form-level errors.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* resolveMessage: (msg, field) => t(`errors.${msg}`) ?? msg
|
|
102
|
+
*/
|
|
103
|
+
resolveMessage?: (message: string, field: string | null) => string;
|
|
104
|
+
/**
|
|
105
|
+
* Custom parsers to try before the built-in parsers.
|
|
106
|
+
* Parsers are tried in order; the first one that returns a non-null result wins.
|
|
107
|
+
* Return `null` to indicate "not recognized by this parser".
|
|
108
|
+
*
|
|
109
|
+
* Custom parsers receive the already-unwrapped body (after ApiError / Axios
|
|
110
|
+
* unwrapping), so they do not need to re-implement body unwrapping.
|
|
111
|
+
*/
|
|
112
|
+
parsers?: ReadonlyArray<CustomParser>;
|
|
35
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Extract errors from an unknown API error response, returning a rich result
|
|
116
|
+
* that includes field errors, form-level (non-field) errors, and the matched format.
|
|
117
|
+
*
|
|
118
|
+
* Use `format` to distinguish "unrecognized shape" (format is null) from
|
|
119
|
+
* "recognized but genuinely no errors" (format is non-null, both arrays empty).
|
|
120
|
+
*
|
|
121
|
+
* `formErrors` contains global / non-field error messages that cannot be
|
|
122
|
+
* attributed to a specific field (e.g. RFC 9457 `detail`, JSON:API errors
|
|
123
|
+
* without a source pointer, violations without a field name).
|
|
124
|
+
*
|
|
125
|
+
* Supports all formats recognized by `extractFieldErrors`, plus:
|
|
126
|
+
* - `violations: [{ field, message }]`
|
|
127
|
+
* - `"invalid-params": [{ name, reason }]`
|
|
128
|
+
* - JSON:API `errors: [{ source: { pointer }, detail }]`
|
|
129
|
+
* - Laravel / DRF top-level field map `{ field: ["msg", ...] }`
|
|
130
|
+
*
|
|
131
|
+
* Use `options.parsers` to register custom parsers for application-specific shapes.
|
|
132
|
+
*
|
|
133
|
+
* Never throws.
|
|
134
|
+
*/
|
|
135
|
+
export declare function extractErrors(error: unknown, options?: MapApiErrorsOptions): ExtractResult;
|
|
36
136
|
/**
|
|
37
137
|
* Extract normalized field errors from an unknown API error response.
|
|
38
138
|
*
|
|
39
139
|
* Supports:
|
|
40
140
|
* - RFC 7807 / RFC 9457 Problem Details (Spring Boot 3+) with `errors` map
|
|
41
141
|
* - RFC 9457 top-level `detail` field as a root-level error
|
|
142
|
+
* - RFC 9457 `violations: [{ field, message }]` array
|
|
143
|
+
* - RFC 9457 `"invalid-params": [{ name, reason }]` array
|
|
144
|
+
* - JSON:API `errors: [{ source: { pointer }, detail }]` array
|
|
145
|
+
* - Laravel / DRF top-level field map `{ field: ["msg", ...] }`
|
|
42
146
|
* - Spring Boot default validation format (array of `{ field, defaultMessage }`)
|
|
43
147
|
* - Simple flat `{ field, message }` object
|
|
44
148
|
* - Array of `{ field, message }` objects
|
|
45
149
|
*
|
|
46
|
-
* Use `statusCodes` to restrict extraction to specific HTTP status codes
|
|
47
|
-
*
|
|
150
|
+
* Use `statusCodes` to restrict extraction to specific HTTP status codes.
|
|
151
|
+
*
|
|
152
|
+
* For a richer result that includes non-field errors and the matched format,
|
|
153
|
+
* use `extractErrors` instead.
|
|
48
154
|
*
|
|
49
155
|
* Never throws — returns an empty array for unrecognized shapes.
|
|
50
156
|
*/
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1C;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,UAAU,GACV,aAAa,GACb,aAAa,GACb,YAAY,GACZ,gBAAgB,GAChB,QAAQ,CAAA;AAEZ;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;;;OAKG;IACH,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAAA;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1C;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAA;IAClE;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;CACtC;AA6gBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,aAAa,CA2B1F;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,UAAU,EAAE,CAqB9F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,EAC3E,OAAO,CAAC,EAAE,mBAAmB,GAC5B,IAAI,CAKN"}
|
package/dist/index.js
CHANGED
|
@@ -8,13 +8,191 @@ function isStringArray(value) {
|
|
|
8
8
|
return Array.isArray(value) && value.every((v) => typeof v === 'string');
|
|
9
9
|
}
|
|
10
10
|
// ---------------------------------------------------------------------------
|
|
11
|
+
// Shared helper: keyed-array parser (violations + invalid-params)
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
/** Extract field + message from a single keyed-array item. Returns null when message is absent. */
|
|
14
|
+
function parseKeyedItem(item, fieldKey, messageKey) {
|
|
15
|
+
const message = typeof item[messageKey] === 'string' ? item[messageKey] : null;
|
|
16
|
+
if (message === null)
|
|
17
|
+
return null;
|
|
18
|
+
const field = typeof item[fieldKey] === 'string' && item[fieldKey] !== '' ? item[fieldKey] : null;
|
|
19
|
+
return { field, message };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse an array of objects where each item carries a field key and a message key.
|
|
23
|
+
* Items whose field value is absent or empty are treated as global (form-level) errors.
|
|
24
|
+
* Items without a message value are silently skipped.
|
|
25
|
+
*/
|
|
26
|
+
function parseKeyedArray(items, fieldKey, messageKey) {
|
|
27
|
+
const fieldErrors = [];
|
|
28
|
+
const formErrors = [];
|
|
29
|
+
for (const item of items) {
|
|
30
|
+
if (!isObject(item))
|
|
31
|
+
continue;
|
|
32
|
+
const parsed = parseKeyedItem(item, fieldKey, messageKey);
|
|
33
|
+
if (parsed === null)
|
|
34
|
+
continue;
|
|
35
|
+
if (parsed.field !== null) {
|
|
36
|
+
fieldErrors.push({ field: parsed.field, message: parsed.message });
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
formErrors.push(parsed.message);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { fieldErrors, formErrors };
|
|
43
|
+
}
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
11
45
|
// Format detectors + parsers
|
|
12
46
|
// ---------------------------------------------------------------------------
|
|
47
|
+
/**
|
|
48
|
+
* RFC 9457 violations array (also used by some Spring Boot setups):
|
|
49
|
+
* { "violations": [{ "field": "email", "message": "must not be blank" }] }
|
|
50
|
+
*/
|
|
51
|
+
function tryParseViolations(body) {
|
|
52
|
+
const { violations } = body;
|
|
53
|
+
if (!Array.isArray(violations))
|
|
54
|
+
return null;
|
|
55
|
+
return parseKeyedArray(violations, 'field', 'message');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* RFC 9457 invalid-params array:
|
|
59
|
+
* { "invalid-params": [{ "name": "email", "reason": "must not be blank" }] }
|
|
60
|
+
*/
|
|
61
|
+
function tryParseInvalidParams(body) {
|
|
62
|
+
const invalidParams = body['invalid-params'];
|
|
63
|
+
if (!Array.isArray(invalidParams))
|
|
64
|
+
return null;
|
|
65
|
+
return parseKeyedArray(invalidParams, 'name', 'reason');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* JSON:API errors array:
|
|
69
|
+
* { "errors": [{ "source": { "pointer": "/data/attributes/email" }, "detail": "..." }] }
|
|
70
|
+
*
|
|
71
|
+
* Errors with a source pointer map to field errors.
|
|
72
|
+
* Errors without a source pointer (or with a pointer of "/") map to form errors.
|
|
73
|
+
*
|
|
74
|
+
* IMPORTANT: this parser must run BEFORE tryParseSpringArray because a JSON:API
|
|
75
|
+
* body also has an `errors` array and would silently match the Spring-array parser
|
|
76
|
+
* via the defaultMessage fallback.
|
|
77
|
+
*/
|
|
78
|
+
function tryParseJsonApi(body) {
|
|
79
|
+
const { errors } = body;
|
|
80
|
+
if (!Array.isArray(errors) || !isJsonApiShape(errors))
|
|
81
|
+
return null;
|
|
82
|
+
const fieldErrors = [];
|
|
83
|
+
const formErrors = [];
|
|
84
|
+
for (const item of errors) {
|
|
85
|
+
if (!isObject(item))
|
|
86
|
+
continue;
|
|
87
|
+
classifyJsonApiItem(item, fieldErrors, formErrors);
|
|
88
|
+
}
|
|
89
|
+
return { fieldErrors, formErrors };
|
|
90
|
+
}
|
|
91
|
+
/** True when at least one item looks like a JSON:API error object (not Spring). */
|
|
92
|
+
function isJsonApiShape(errors) {
|
|
93
|
+
return errors.some((item) => isObject(item) &&
|
|
94
|
+
(isObject(item['source']) || typeof item['detail'] === 'string') &&
|
|
95
|
+
!('field' in item) &&
|
|
96
|
+
!('defaultMessage' in item));
|
|
97
|
+
}
|
|
98
|
+
/** Push one JSON:API error item into the appropriate bucket. */
|
|
99
|
+
function classifyJsonApiItem(item, fieldErrors, formErrors) {
|
|
100
|
+
const detail = typeof item['detail'] === 'string' ? item['detail'] : null;
|
|
101
|
+
const message = detail ?? 'Unknown error';
|
|
102
|
+
const source = item['source'];
|
|
103
|
+
if (isObject(source) && typeof source['pointer'] === 'string') {
|
|
104
|
+
const field = pointerToField(source['pointer']);
|
|
105
|
+
if (field !== null) {
|
|
106
|
+
fieldErrors.push({ field, message });
|
|
107
|
+
}
|
|
108
|
+
else if (detail !== null) {
|
|
109
|
+
formErrors.push(detail);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (detail !== null) {
|
|
113
|
+
formErrors.push(detail);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Convert a JSON Pointer (RFC 6901) used in JSON:API source.pointer to a
|
|
118
|
+
* dot-separated field path for form use.
|
|
119
|
+
*
|
|
120
|
+
* `/data/attributes/email` -> `email`
|
|
121
|
+
* `/data/attributes/address/city` -> `address.city`
|
|
122
|
+
* `/data/relationships/author` -> `author`
|
|
123
|
+
* `/email` -> `email`
|
|
124
|
+
* `/` -> null (root, non-field)
|
|
125
|
+
* `` -> null
|
|
126
|
+
*/
|
|
127
|
+
function pointerToField(pointer) {
|
|
128
|
+
if (!pointer || pointer === '/')
|
|
129
|
+
return null;
|
|
130
|
+
const segments = pointer
|
|
131
|
+
.replace(/^\//, '')
|
|
132
|
+
.split('/')
|
|
133
|
+
.map((s) => s.replace(/~1/g, '/').replace(/~0/g, '~'))
|
|
134
|
+
.filter(Boolean);
|
|
135
|
+
return segments.length > 0 ? resolveJsonApiSegments(segments) : null;
|
|
136
|
+
}
|
|
137
|
+
/** Strip well-known JSON:API structural prefixes and join as dot-path. */
|
|
138
|
+
function resolveJsonApiSegments(segments) {
|
|
139
|
+
if (segments[0] !== 'data')
|
|
140
|
+
return segments.join('.');
|
|
141
|
+
if (segments[1] === 'attributes') {
|
|
142
|
+
const rest = segments.slice(2);
|
|
143
|
+
return rest.length > 0 ? rest.join('.') : null;
|
|
144
|
+
}
|
|
145
|
+
if (segments[1] === 'relationships' && segments.length > 2) {
|
|
146
|
+
return segments.slice(2).join('.');
|
|
147
|
+
}
|
|
148
|
+
return segments.join('.');
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Laravel / DRF top-level field-to-messages map:
|
|
152
|
+
* { "email": ["must not be blank", "invalid format"], "name": ["required"] }
|
|
153
|
+
*
|
|
154
|
+
* Guard: at least one value must be a non-empty string array, and the body
|
|
155
|
+
* must not use keys owned by other parsers.
|
|
156
|
+
*/
|
|
157
|
+
function tryParseLaravelDrf(body) {
|
|
158
|
+
const entries = Object.entries(body);
|
|
159
|
+
if (entries.length === 0 || hasReservedLaravelKey(entries))
|
|
160
|
+
return null;
|
|
161
|
+
// Require at least one non-empty string array to distinguish from generic flat objects
|
|
162
|
+
if (!entries.some(([, v]) => isStringArray(v) && v.length > 0))
|
|
163
|
+
return null;
|
|
164
|
+
const fieldErrors = [];
|
|
165
|
+
for (const [rawField, messages] of entries) {
|
|
166
|
+
if (isStringArray(messages)) {
|
|
167
|
+
for (const message of messages)
|
|
168
|
+
fieldErrors.push({ field: rawField, message });
|
|
169
|
+
}
|
|
170
|
+
else if (typeof messages === 'string') {
|
|
171
|
+
fieldErrors.push({ field: rawField, message: messages });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return fieldErrors.length > 0 ? { fieldErrors, formErrors: [] } : null;
|
|
175
|
+
}
|
|
176
|
+
/** Keys that belong to other parsers and disqualify a body from Laravel/DRF matching. */
|
|
177
|
+
const LARAVEL_RESERVED_KEYS = new Set([
|
|
178
|
+
'errors',
|
|
179
|
+
'violations',
|
|
180
|
+
'invalid-params',
|
|
181
|
+
'field',
|
|
182
|
+
'message',
|
|
183
|
+
'detail',
|
|
184
|
+
'title',
|
|
185
|
+
'status',
|
|
186
|
+
'type',
|
|
187
|
+
]);
|
|
188
|
+
function hasReservedLaravelKey(entries) {
|
|
189
|
+
return entries.some(([k]) => LARAVEL_RESERVED_KEYS.has(k));
|
|
190
|
+
}
|
|
13
191
|
/**
|
|
14
192
|
* RFC 7807 Problem Details (Spring Boot 3+ default):
|
|
15
193
|
* { "errors": { "email": ["must not be blank"], "name": ["too short"] } }
|
|
16
194
|
*/
|
|
17
|
-
function tryParseRfc7807(body,
|
|
195
|
+
function tryParseRfc7807(body, transformField) {
|
|
18
196
|
const { errors } = body;
|
|
19
197
|
if (!isObject(errors))
|
|
20
198
|
return null;
|
|
@@ -22,9 +200,8 @@ function tryParseRfc7807(body, fallbackField, transformField) {
|
|
|
22
200
|
for (const [rawField, messages] of Object.entries(errors)) {
|
|
23
201
|
const field = transformField(rawField);
|
|
24
202
|
if (isStringArray(messages)) {
|
|
25
|
-
for (const message of messages)
|
|
203
|
+
for (const message of messages)
|
|
26
204
|
result.push({ field, message });
|
|
27
|
-
}
|
|
28
205
|
}
|
|
29
206
|
else if (typeof messages === 'string') {
|
|
30
207
|
result.push({ field, message: messages });
|
|
@@ -84,18 +261,6 @@ function tryParseFlatArray(body, fallbackField, transformField) {
|
|
|
84
261
|
}
|
|
85
262
|
return result.length > 0 ? result : null;
|
|
86
263
|
}
|
|
87
|
-
/**
|
|
88
|
-
* RFC 9457 / RFC 7807 top-level detail field:
|
|
89
|
-
* { "title": "Bad Request", "detail": "Email is already taken.", "status": 422 }
|
|
90
|
-
*
|
|
91
|
-
* Fires as a last-resort fallback when no field-specific errors are found.
|
|
92
|
-
*/
|
|
93
|
-
function tryParseRfc9457Detail(body, fallbackField, transformField) {
|
|
94
|
-
const detail = body['detail'];
|
|
95
|
-
if (typeof detail !== 'string')
|
|
96
|
-
return null;
|
|
97
|
-
return [{ field: transformField(fallbackField), message: detail }];
|
|
98
|
-
}
|
|
99
264
|
// ---------------------------------------------------------------------------
|
|
100
265
|
// Safety
|
|
101
266
|
// ---------------------------------------------------------------------------
|
|
@@ -127,20 +292,223 @@ function finalize(result) {
|
|
|
127
292
|
return safe.length > MAX_FIELD_ERRORS ? safe.slice(0, MAX_FIELD_ERRORS) : safe;
|
|
128
293
|
}
|
|
129
294
|
// ---------------------------------------------------------------------------
|
|
295
|
+
// Body unwrapping: three independent single-step helpers
|
|
296
|
+
// ---------------------------------------------------------------------------
|
|
297
|
+
/** Unwrap `{ status: number, body: unknown }` (ApiError from generated client). */
|
|
298
|
+
function unwrapApiError(value) {
|
|
299
|
+
if (isObject(value) &&
|
|
300
|
+
typeof value['status'] === 'number' &&
|
|
301
|
+
Object.prototype.hasOwnProperty.call(value, 'body')) {
|
|
302
|
+
return value['body'];
|
|
303
|
+
}
|
|
304
|
+
return value;
|
|
305
|
+
}
|
|
306
|
+
/** Unwrap `{ response: { data: ... } }` (Axios-style errors). */
|
|
307
|
+
function unwrapAxiosResponse(value) {
|
|
308
|
+
if (isObject(value) && isObject(value['response']) && value['response']['data'] !== undefined) {
|
|
309
|
+
return value['response']['data'];
|
|
310
|
+
}
|
|
311
|
+
return value;
|
|
312
|
+
}
|
|
313
|
+
/** Unwrap `{ data: { ... } }` top-level data envelopes (no field/errors at root). */
|
|
314
|
+
function unwrapDataEnvelope(value) {
|
|
315
|
+
if (isObject(value) && isObject(value['data']) && !('field' in value) && !('errors' in value)) {
|
|
316
|
+
return value['data'];
|
|
317
|
+
}
|
|
318
|
+
return value;
|
|
319
|
+
}
|
|
320
|
+
/** Run all three unwrap steps in sequence to get the raw error body. */
|
|
321
|
+
function unwrapBody(error) {
|
|
322
|
+
return unwrapDataEnvelope(unwrapAxiosResponse(unwrapApiError(error)));
|
|
323
|
+
}
|
|
324
|
+
/** Wrap a ParsedErrors result with its format tag, applying transformField to field names. */
|
|
325
|
+
function wrapMatch(parsed, format, transformField) {
|
|
326
|
+
return {
|
|
327
|
+
parsed: {
|
|
328
|
+
fieldErrors: parsed.fieldErrors.map((e) => ({
|
|
329
|
+
field: transformField(e.field),
|
|
330
|
+
message: e.message,
|
|
331
|
+
})),
|
|
332
|
+
formErrors: parsed.formErrors,
|
|
333
|
+
},
|
|
334
|
+
format,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Try all object-body parsers in priority order.
|
|
339
|
+
* Returns the first match, or null if no parser recognized the shape.
|
|
340
|
+
*/
|
|
341
|
+
function matchObjectBody(body, fallbackField, transformField) {
|
|
342
|
+
// Each thunk in this ordered list tries one parser and returns a MatchResult or null.
|
|
343
|
+
const candidates = [
|
|
344
|
+
() => {
|
|
345
|
+
const r = tryParseViolations(body);
|
|
346
|
+
return r && wrapMatch(r, 'violations', transformField);
|
|
347
|
+
},
|
|
348
|
+
() => {
|
|
349
|
+
const r = tryParseInvalidParams(body);
|
|
350
|
+
return r && wrapMatch(r, 'invalid-params', transformField);
|
|
351
|
+
},
|
|
352
|
+
() => {
|
|
353
|
+
const r = tryParseJsonApi(body);
|
|
354
|
+
return r && wrapMatch(r, 'json-api', transformField);
|
|
355
|
+
},
|
|
356
|
+
() => {
|
|
357
|
+
const r = tryParseRfc7807(body, transformField);
|
|
358
|
+
return r && { parsed: { fieldErrors: r, formErrors: [] }, format: 'rfc7807-map' };
|
|
359
|
+
},
|
|
360
|
+
() => {
|
|
361
|
+
const r = tryParseSpringArray(body, fallbackField, transformField);
|
|
362
|
+
return r && { parsed: { fieldErrors: r, formErrors: [] }, format: 'spring-array' };
|
|
363
|
+
},
|
|
364
|
+
() => {
|
|
365
|
+
const r = tryParseLaravelDrf(body);
|
|
366
|
+
return r && wrapMatch(r, 'laravel-drf', transformField);
|
|
367
|
+
},
|
|
368
|
+
() => {
|
|
369
|
+
const r = tryParseFlatObject(body, fallbackField, transformField);
|
|
370
|
+
return r && { parsed: { fieldErrors: r, formErrors: [] }, format: 'flat-object' };
|
|
371
|
+
},
|
|
372
|
+
() => {
|
|
373
|
+
const detail = body['detail'];
|
|
374
|
+
return typeof detail === 'string'
|
|
375
|
+
? { parsed: { fieldErrors: [], formErrors: [detail] }, format: 'rfc9457-detail' }
|
|
376
|
+
: null;
|
|
377
|
+
},
|
|
378
|
+
];
|
|
379
|
+
for (const candidate of candidates) {
|
|
380
|
+
const result = candidate();
|
|
381
|
+
if (result !== null)
|
|
382
|
+
return result;
|
|
383
|
+
}
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Run custom parsers (if any) before the built-in ones.
|
|
388
|
+
* Returns the first match, or null to fall through.
|
|
389
|
+
*/
|
|
390
|
+
function tryCustomParsers(body, customParsers) {
|
|
391
|
+
for (const parser of customParsers) {
|
|
392
|
+
const parsed = parser(body);
|
|
393
|
+
if (parsed !== null)
|
|
394
|
+
return { parsed, format: 'custom' };
|
|
395
|
+
}
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Dispatch an array body through the flat-array parser.
|
|
400
|
+
*/
|
|
401
|
+
function matchArrayBody(body, fallbackField, transformField) {
|
|
402
|
+
const flat = tryParseFlatArray(body, fallbackField, transformField);
|
|
403
|
+
return flat ? { parsed: { fieldErrors: flat, formErrors: [] }, format: 'flat-array' } : null;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Run all parsers (custom, array, object) against an already-unwrapped body.
|
|
407
|
+
* Returns the first match, or null if no parser recognized the shape.
|
|
408
|
+
*/
|
|
409
|
+
function matchBody(body, fallbackField, transformField, customParsers) {
|
|
410
|
+
if (customParsers?.length) {
|
|
411
|
+
const custom = tryCustomParsers(body, customParsers);
|
|
412
|
+
if (custom !== null)
|
|
413
|
+
return custom;
|
|
414
|
+
}
|
|
415
|
+
if (Array.isArray(body))
|
|
416
|
+
return matchArrayBody(body, fallbackField, transformField);
|
|
417
|
+
if (!isObject(body))
|
|
418
|
+
return null;
|
|
419
|
+
return matchObjectBody(body, fallbackField, transformField);
|
|
420
|
+
}
|
|
421
|
+
// ---------------------------------------------------------------------------
|
|
422
|
+
// Status filtering helper
|
|
423
|
+
// ---------------------------------------------------------------------------
|
|
424
|
+
function extractStatus(error) {
|
|
425
|
+
if (!isObject(error))
|
|
426
|
+
return undefined;
|
|
427
|
+
const e = error;
|
|
428
|
+
if (typeof e['status'] === 'number')
|
|
429
|
+
return e['status'];
|
|
430
|
+
if (isObject(e['response'])) {
|
|
431
|
+
const r = e['response'];
|
|
432
|
+
if (typeof r['status'] === 'number')
|
|
433
|
+
return r['status'];
|
|
434
|
+
}
|
|
435
|
+
return undefined;
|
|
436
|
+
}
|
|
437
|
+
/** True when the error's status code is present but not in the allowed list. */
|
|
438
|
+
function isStatusBlocked(error, options) {
|
|
439
|
+
if (!options?.statusCodes)
|
|
440
|
+
return false;
|
|
441
|
+
const status = extractStatus(error);
|
|
442
|
+
return status !== undefined && !options.statusCodes.includes(status);
|
|
443
|
+
}
|
|
444
|
+
// ---------------------------------------------------------------------------
|
|
130
445
|
// Public API
|
|
131
446
|
// ---------------------------------------------------------------------------
|
|
447
|
+
/**
|
|
448
|
+
* Extract errors from an unknown API error response, returning a rich result
|
|
449
|
+
* that includes field errors, form-level (non-field) errors, and the matched format.
|
|
450
|
+
*
|
|
451
|
+
* Use `format` to distinguish "unrecognized shape" (format is null) from
|
|
452
|
+
* "recognized but genuinely no errors" (format is non-null, both arrays empty).
|
|
453
|
+
*
|
|
454
|
+
* `formErrors` contains global / non-field error messages that cannot be
|
|
455
|
+
* attributed to a specific field (e.g. RFC 9457 `detail`, JSON:API errors
|
|
456
|
+
* without a source pointer, violations without a field name).
|
|
457
|
+
*
|
|
458
|
+
* Supports all formats recognized by `extractFieldErrors`, plus:
|
|
459
|
+
* - `violations: [{ field, message }]`
|
|
460
|
+
* - `"invalid-params": [{ name, reason }]`
|
|
461
|
+
* - JSON:API `errors: [{ source: { pointer }, detail }]`
|
|
462
|
+
* - Laravel / DRF top-level field map `{ field: ["msg", ...] }`
|
|
463
|
+
*
|
|
464
|
+
* Use `options.parsers` to register custom parsers for application-specific shapes.
|
|
465
|
+
*
|
|
466
|
+
* Never throws.
|
|
467
|
+
*/
|
|
468
|
+
export function extractErrors(error, options) {
|
|
469
|
+
const fallbackField = options?.fallbackField ?? 'root';
|
|
470
|
+
const transformField = options?.transformField ?? ((f) => f);
|
|
471
|
+
const resolveMessage = options?.resolveMessage;
|
|
472
|
+
try {
|
|
473
|
+
if (isStatusBlocked(error, options))
|
|
474
|
+
return { fieldErrors: [], formErrors: [], format: null };
|
|
475
|
+
const match = matchBody(unwrapBody(error), fallbackField, transformField, options?.parsers);
|
|
476
|
+
if (match === null)
|
|
477
|
+
return { fieldErrors: [], formErrors: [], format: null };
|
|
478
|
+
const { parsed, format } = match;
|
|
479
|
+
const fieldErrors = finalize(resolveMessage
|
|
480
|
+
? parsed.fieldErrors.map((e) => ({
|
|
481
|
+
field: e.field,
|
|
482
|
+
message: resolveMessage(e.message, e.field),
|
|
483
|
+
}))
|
|
484
|
+
: parsed.fieldErrors);
|
|
485
|
+
const formErrors = resolveMessage
|
|
486
|
+
? parsed.formErrors.map((m) => resolveMessage(m, null))
|
|
487
|
+
: parsed.formErrors;
|
|
488
|
+
return { fieldErrors, formErrors, format };
|
|
489
|
+
}
|
|
490
|
+
catch {
|
|
491
|
+
return { fieldErrors: [], formErrors: [], format: null };
|
|
492
|
+
}
|
|
493
|
+
}
|
|
132
494
|
/**
|
|
133
495
|
* Extract normalized field errors from an unknown API error response.
|
|
134
496
|
*
|
|
135
497
|
* Supports:
|
|
136
498
|
* - RFC 7807 / RFC 9457 Problem Details (Spring Boot 3+) with `errors` map
|
|
137
499
|
* - RFC 9457 top-level `detail` field as a root-level error
|
|
500
|
+
* - RFC 9457 `violations: [{ field, message }]` array
|
|
501
|
+
* - RFC 9457 `"invalid-params": [{ name, reason }]` array
|
|
502
|
+
* - JSON:API `errors: [{ source: { pointer }, detail }]` array
|
|
503
|
+
* - Laravel / DRF top-level field map `{ field: ["msg", ...] }`
|
|
138
504
|
* - Spring Boot default validation format (array of `{ field, defaultMessage }`)
|
|
139
505
|
* - Simple flat `{ field, message }` object
|
|
140
506
|
* - Array of `{ field, message }` objects
|
|
141
507
|
*
|
|
142
|
-
* Use `statusCodes` to restrict extraction to specific HTTP status codes
|
|
143
|
-
*
|
|
508
|
+
* Use `statusCodes` to restrict extraction to specific HTTP status codes.
|
|
509
|
+
*
|
|
510
|
+
* For a richer result that includes non-field errors and the matched format,
|
|
511
|
+
* use `extractErrors` instead.
|
|
144
512
|
*
|
|
145
513
|
* Never throws — returns an empty array for unrecognized shapes.
|
|
146
514
|
*/
|
|
@@ -148,66 +516,19 @@ export function extractFieldErrors(error, options) {
|
|
|
148
516
|
const fallbackField = options?.fallbackField ?? 'root';
|
|
149
517
|
const transformField = options?.transformField ?? ((f) => f);
|
|
150
518
|
try {
|
|
151
|
-
|
|
152
|
-
// (or error.response.status for Axios-style errors) before doing anything.
|
|
153
|
-
if (options?.statusCodes !== undefined) {
|
|
154
|
-
let status;
|
|
155
|
-
if (isObject(error)) {
|
|
156
|
-
const e = error;
|
|
157
|
-
if (typeof e['status'] === 'number') {
|
|
158
|
-
status = e['status'];
|
|
159
|
-
}
|
|
160
|
-
else if (isObject(e['response'])) {
|
|
161
|
-
const r = e['response'];
|
|
162
|
-
if (typeof r['status'] === 'number')
|
|
163
|
-
status = r['status'];
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
if (status !== undefined && !options.statusCodes.includes(status)) {
|
|
167
|
-
return [];
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// Unwrap common error wrapper shapes (e.g. Axios response, fetch response body)
|
|
171
|
-
let body = error;
|
|
172
|
-
// Support ApiError-style wrappers: { status: number, body: unknown }
|
|
173
|
-
// Matches the ApiError class generated by @codewithagents/openapi-gen, letting
|
|
174
|
-
// callers pass the thrown error directly: extractFieldErrors(apiError, { statusCodes: [422] })
|
|
175
|
-
if (isObject(body) &&
|
|
176
|
-
typeof body['status'] === 'number' &&
|
|
177
|
-
Object.prototype.hasOwnProperty.call(body, 'body')) {
|
|
178
|
-
body = body['body'];
|
|
179
|
-
}
|
|
180
|
-
// Support objects with a `response.data` shape (Axios-style)
|
|
181
|
-
if (isObject(body) && isObject(body['response']) && body['response']['data'] !== undefined) {
|
|
182
|
-
body = body['response']['data'];
|
|
183
|
-
}
|
|
184
|
-
// Support objects with a `data` property that contains the actual error body
|
|
185
|
-
if (isObject(body) && isObject(body['data']) && !('field' in body) && !('errors' in body)) {
|
|
186
|
-
body = body['data'];
|
|
187
|
-
}
|
|
188
|
-
// Array of flat error objects
|
|
189
|
-
if (Array.isArray(body)) {
|
|
190
|
-
return finalize(tryParseFlatArray(body, fallbackField, transformField) ?? []);
|
|
191
|
-
}
|
|
192
|
-
if (!isObject(body))
|
|
519
|
+
if (isStatusBlocked(error, options))
|
|
193
520
|
return [];
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
//
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
return finalize(flat);
|
|
206
|
-
// Try RFC 9457 top-level detail as a last-resort root error
|
|
207
|
-
const rfc9457 = tryParseRfc9457Detail(body, fallbackField, transformField);
|
|
208
|
-
if (rfc9457 !== null)
|
|
209
|
-
return finalize(rfc9457);
|
|
210
|
-
return [];
|
|
521
|
+
const match = matchBody(unwrapBody(error), fallbackField, transformField, options?.parsers);
|
|
522
|
+
if (match === null)
|
|
523
|
+
return [];
|
|
524
|
+
const { parsed } = match;
|
|
525
|
+
// In the legacy API, form-level errors fall back to fallbackField instead of
|
|
526
|
+
// being returned in a separate channel.
|
|
527
|
+
const fallbackErrors = parsed.formErrors.map((message) => ({
|
|
528
|
+
field: transformField(fallbackField),
|
|
529
|
+
message,
|
|
530
|
+
}));
|
|
531
|
+
return finalize([...parsed.fieldErrors, ...fallbackErrors]);
|
|
211
532
|
}
|
|
212
533
|
catch {
|
|
213
534
|
return [];
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codewithagents/api-errors",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Map backend API errors to form field errors. Framework-agnostic core with React Hook Form adapter.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"build": "tsc",
|
|
19
19
|
"test": "vitest run",
|
|
20
20
|
"test:coverage": "vitest run --coverage",
|
|
21
|
+
"test:mutation": "stryker run",
|
|
21
22
|
"lint": "tsc --noEmit"
|
|
22
23
|
},
|
|
23
24
|
"keywords": [
|
|
@@ -41,6 +42,8 @@
|
|
|
41
42
|
},
|
|
42
43
|
"author": "CodeWithAgents (https://codewithagents.de)",
|
|
43
44
|
"devDependencies": {
|
|
45
|
+
"@stryker-mutator/core": "catalog:",
|
|
46
|
+
"@stryker-mutator/vitest-runner": "catalog:",
|
|
44
47
|
"@vitest/coverage-v8": "catalog:",
|
|
45
48
|
"typescript": "catalog:",
|
|
46
49
|
"vitest": "catalog:"
|