@codewithagents/api-errors 1.1.0 → 1.2.1

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 (58) hide show
  1. package/README.md +201 -32
  2. package/dist/index.d.ts +61 -41
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +81 -420
  5. package/dist/index.js.map +1 -1
  6. package/dist/parsers/dispatch.d.ts +12 -0
  7. package/dist/parsers/dispatch.d.ts.map +1 -0
  8. package/dist/parsers/dispatch.js +116 -0
  9. package/dist/parsers/dispatch.js.map +1 -0
  10. package/dist/parsers/flat.d.ts +12 -0
  11. package/dist/parsers/flat.d.ts.map +1 -0
  12. package/dist/parsers/flat.js +31 -0
  13. package/dist/parsers/flat.js.map +1 -0
  14. package/dist/parsers/graphql-extensions.d.ts +18 -0
  15. package/dist/parsers/graphql-extensions.d.ts.map +1 -0
  16. package/dist/parsers/graphql-extensions.js +81 -0
  17. package/dist/parsers/graphql-extensions.js.map +1 -0
  18. package/dist/parsers/invalid-params.d.ts +7 -0
  19. package/dist/parsers/invalid-params.d.ts.map +1 -0
  20. package/dist/parsers/invalid-params.js +12 -0
  21. package/dist/parsers/invalid-params.js.map +1 -0
  22. package/dist/parsers/json-api.d.ts +14 -0
  23. package/dist/parsers/json-api.d.ts.map +1 -0
  24. package/dist/parsers/json-api.js +85 -0
  25. package/dist/parsers/json-api.js.map +1 -0
  26. package/dist/parsers/laravel-drf.d.ts +10 -0
  27. package/dist/parsers/laravel-drf.d.ts.map +1 -0
  28. package/dist/parsers/laravel-drf.js +46 -0
  29. package/dist/parsers/laravel-drf.js.map +1 -0
  30. package/dist/parsers/rfc7807.d.ts +7 -0
  31. package/dist/parsers/rfc7807.d.ts.map +1 -0
  32. package/dist/parsers/rfc7807.js +24 -0
  33. package/dist/parsers/rfc7807.js.map +1 -0
  34. package/dist/parsers/spring.d.ts +7 -0
  35. package/dist/parsers/spring.d.ts.map +1 -0
  36. package/dist/parsers/spring.js +24 -0
  37. package/dist/parsers/spring.js.map +1 -0
  38. package/dist/parsers/types.d.ts +44 -0
  39. package/dist/parsers/types.d.ts.map +1 -0
  40. package/dist/parsers/types.js +2 -0
  41. package/dist/parsers/types.js.map +1 -0
  42. package/dist/parsers/unwrap.d.ts +3 -0
  43. package/dist/parsers/unwrap.d.ts.map +1 -0
  44. package/dist/parsers/unwrap.js +29 -0
  45. package/dist/parsers/unwrap.js.map +1 -0
  46. package/dist/parsers/utils.d.ts +12 -0
  47. package/dist/parsers/utils.d.ts.map +1 -0
  48. package/dist/parsers/utils.js +65 -0
  49. package/dist/parsers/utils.js.map +1 -0
  50. package/dist/parsers/violations.d.ts +7 -0
  51. package/dist/parsers/violations.d.ts.map +1 -0
  52. package/dist/parsers/violations.js +12 -0
  53. package/dist/parsers/violations.js.map +1 -0
  54. package/dist/parsers/zod-flatten.d.ts +11 -0
  55. package/dist/parsers/zod-flatten.d.ts.map +1 -0
  56. package/dist/parsers/zod-flatten.js +37 -0
  57. package/dist/parsers/zod-flatten.js.map +1 -0
  58. package/package.json +5 -1
package/dist/index.js CHANGED
@@ -1,423 +1,7 @@
1
- // ---------------------------------------------------------------------------
2
- // Internal type guards
3
- // ---------------------------------------------------------------------------
4
- function isObject(value) {
5
- return typeof value === 'object' && value !== null && !Array.isArray(value);
6
- }
7
- function isStringArray(value) {
8
- return Array.isArray(value) && value.every((v) => typeof v === 'string');
9
- }
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
- // ---------------------------------------------------------------------------
45
- // Format detectors + parsers
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
- }
191
- /**
192
- * RFC 7807 Problem Details (Spring Boot 3+ default):
193
- * { "errors": { "email": ["must not be blank"], "name": ["too short"] } }
194
- */
195
- function tryParseRfc7807(body, transformField) {
196
- const { errors } = body;
197
- if (!isObject(errors))
198
- return null;
199
- const result = [];
200
- for (const [rawField, messages] of Object.entries(errors)) {
201
- const field = transformField(rawField);
202
- if (isStringArray(messages)) {
203
- for (const message of messages)
204
- result.push({ field, message });
205
- }
206
- else if (typeof messages === 'string') {
207
- result.push({ field, message: messages });
208
- }
209
- // null / unknown value shapes are skipped — no partial/garbage errors
210
- }
211
- return result.length > 0 ? result : null;
212
- }
213
- /**
214
- * Spring Boot default validation format (pre-3):
215
- * { "errors": [{ "field": "email", "defaultMessage": "must not be blank" }] }
216
- */
217
- function tryParseSpringArray(body, fallbackField, transformField) {
218
- const { errors } = body;
219
- if (!Array.isArray(errors))
220
- return null;
221
- const result = [];
222
- for (const item of errors) {
223
- if (!isObject(item))
224
- continue;
225
- const rawField = typeof item['field'] === 'string' ? item['field'] : fallbackField;
226
- const message = typeof item['defaultMessage'] === 'string'
227
- ? item['defaultMessage']
228
- : typeof item['message'] === 'string'
229
- ? item['message']
230
- : 'Unknown error';
231
- result.push({ field: transformField(rawField), message });
232
- }
233
- return result.length > 0 ? result : null;
234
- }
235
- /**
236
- * Simple flat object format:
237
- * { "field": "email", "message": "Invalid email" }
238
- */
239
- function tryParseFlatObject(body, fallbackField, transformField) {
240
- const rawField = typeof body['field'] === 'string' ? body['field'] : null;
241
- const message = typeof body['message'] === 'string' ? body['message'] : null;
242
- if (message === null)
243
- return null;
244
- const field = rawField !== null ? rawField : fallbackField;
245
- return [{ field: transformField(field), message }];
246
- }
247
- /**
248
- * Array of simple flat objects:
249
- * [{ "field": "email", "message": "Invalid email" }]
250
- */
251
- function tryParseFlatArray(body, fallbackField, transformField) {
252
- const result = [];
253
- for (const item of body) {
254
- if (!isObject(item))
255
- continue;
256
- const rawField = typeof item['field'] === 'string' ? item['field'] : fallbackField;
257
- const message = typeof item['message'] === 'string' ? item['message'] : null;
258
- if (message === null)
259
- continue;
260
- result.push({ field: transformField(rawField), message });
261
- }
262
- return result.length > 0 ? result : null;
263
- }
264
- // ---------------------------------------------------------------------------
265
- // Safety
266
- // ---------------------------------------------------------------------------
267
- /**
268
- * Field-path segments that must never be forwarded to a path-aware setter.
269
- * A path-aware setter (e.g. React Hook Form's `setError`) splits the field name
270
- * on `.`/`[]` and walks/creates nested objects, so a malicious field like
271
- * `__proto__.polluted` from an untrusted error body would otherwise become a
272
- * prototype-pollution write in the consuming app.
273
- */
274
- const FORBIDDEN_FIELD_SEGMENTS = new Set(['__proto__', 'constructor', 'prototype']);
275
- /**
276
- * Upper bound on the number of field errors returned. A hostile body with a huge
277
- * `errors` map or array would otherwise produce an unbounded list (and an equal
278
- * number of `setError` calls / re-renders downstream).
279
- */
280
- const MAX_FIELD_ERRORS = 1000;
281
- /** True if no path segment of `field` is a prototype-pollution gadget key. */
282
- function isSafeFieldPath(field) {
283
- for (const segment of field.split(/[.[\]]+/)) {
284
- if (FORBIDDEN_FIELD_SEGMENTS.has(segment))
285
- return false;
286
- }
287
- return true;
288
- }
289
- /** Drop unsafe field paths and cap the result before it leaves the library. */
290
- function finalize(result) {
291
- const safe = result.filter((e) => isSafeFieldPath(e.field));
292
- return safe.length > MAX_FIELD_ERRORS ? safe.slice(0, MAX_FIELD_ERRORS) : safe;
293
- }
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
- }
1
+ import { finalize } from './parsers/utils.js';
2
+ import { unwrapBody } from './parsers/unwrap.js';
3
+ import { matchBody } from './parsers/dispatch.js';
4
+ import { isObject } from './parsers/utils.js';
421
5
  // ---------------------------------------------------------------------------
422
6
  // Status filtering helper
423
7
  // ---------------------------------------------------------------------------
@@ -555,4 +139,81 @@ export function mapApiErrors(error, setError, options) {
555
139
  setError(field, { type: 'server', message });
556
140
  }
557
141
  }
142
+ /**
143
+ * Vanilla (framework-agnostic) adapter.
144
+ *
145
+ * Extracts field errors from an unknown API error response and returns a plain
146
+ * `Record<string, string>` mapping field names to their first error message.
147
+ * Useful for any custom form library or imperative error handling.
148
+ *
149
+ * Only fieldErrors are included. For form-level (global) errors use `extractErrors`.
150
+ *
151
+ * @example
152
+ * ```ts
153
+ * const record = mapApiErrorsToRecord(error)
154
+ * // { email: "must not be blank", name: "required" }
155
+ * ```
156
+ */
157
+ export function mapApiErrorsToRecord(error, options) {
158
+ const fieldErrors = extractFieldErrors(error, options);
159
+ const record = {};
160
+ for (const { field, message } of fieldErrors) {
161
+ if (!(field in record)) {
162
+ record[field] = message;
163
+ }
164
+ }
165
+ return record;
166
+ }
167
+ /**
168
+ * Formik adapter.
169
+ *
170
+ * Extracts field errors from an unknown API error response and calls Formik's
171
+ * `setErrors` with a `Record<string, string>` of field -> first error message.
172
+ *
173
+ * No Formik import is required. The `setErrors` parameter is typed by its
174
+ * shape only (structural typing).
175
+ *
176
+ * @example
177
+ * ```ts
178
+ * try {
179
+ * await submitForm(values)
180
+ * } catch (error) {
181
+ * mapApiErrorsFormik(error, setErrors)
182
+ * }
183
+ * ```
184
+ */
185
+ export function mapApiErrorsFormik(error, setErrors, options) {
186
+ setErrors(mapApiErrorsToRecord(error, options));
187
+ }
188
+ /**
189
+ * TanStack Form v1 adapter.
190
+ *
191
+ * Extracts field errors from an unknown API error response and calls
192
+ * `form.setFieldMeta` for each field to inject server-side errors into the
193
+ * form state. The updater function merges errors and errorMap onto the
194
+ * existing field meta.
195
+ *
196
+ * No TanStack Form import is required. The `form` parameter is typed by its
197
+ * shape only (structural typing), so this adapter works without adding
198
+ * `@tanstack/form-core` as a dependency.
199
+ *
200
+ * @example
201
+ * ```ts
202
+ * try {
203
+ * await form.handleSubmit()
204
+ * } catch (error) {
205
+ * mapApiErrorsTanstack(error, form)
206
+ * }
207
+ * ```
208
+ */
209
+ export function mapApiErrorsTanstack(error, form, options) {
210
+ const record = mapApiErrorsToRecord(error, options);
211
+ for (const [field, message] of Object.entries(record)) {
212
+ form.setFieldMeta(field, (meta) => ({
213
+ ...meta,
214
+ errors: [message],
215
+ errorMap: { onChange: message },
216
+ }));
217
+ }
218
+ }
558
219
  //# sourceMappingURL=index.js.map
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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"}
@@ -0,0 +1,12 @@
1
+ import type { CustomParser, ErrorFormat, ParsedErrors } from './types.js';
2
+ /** Internal match result: parsed errors + the format that matched. */
3
+ export interface MatchResult {
4
+ parsed: ParsedErrors;
5
+ format: ErrorFormat;
6
+ }
7
+ /**
8
+ * Run all parsers (custom, array, object) against an already-unwrapped body.
9
+ * Returns the first match, or null if no parser recognized the shape.
10
+ */
11
+ export declare function matchBody(body: unknown, fallbackField: string, transformField: (f: string) => string, customParsers: ReadonlyArray<CustomParser> | undefined): MatchResult | null;
12
+ //# sourceMappingURL=dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/parsers/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAYzE,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,WAAW,CAAA;CACpB;AA6GD;;;GAGG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,EACb,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACrC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,SAAS,GACrD,WAAW,GAAG,IAAI,CAQpB"}