@@ -39,6 +39,7 @@ Alternatively, the main decoder `run()` method returns an object of type `Result
3939* [ constant] ( _decoder_.decoder.md#constant )
4040* [ dict] ( _decoder_.decoder.md#dict )
4141* [ fail] ( _decoder_.decoder.md#fail )
42+ * [ intersection] ( _decoder_.decoder.md#intersection )
4243* [ lazy] ( _decoder_.decoder.md#lazy )
4344* [ number] ( _decoder_.decoder.md#number )
4445* [ object] ( _decoder_.decoder.md#object )
8384** ● decode** : * ` function ` *
8485
8586#### Type declaration
86- ▸(json: * ` any ` * ): ` Result.Result ` <` A ` , ` Partial ` < [ DecoderError ] ( ../interfaces/_decoder_.decodererror.md ) > >
87+ ▸(json: * ` any ` * ): ` DecodeResult ` <` A ` >
8788
8889** Parameters:**
8990
9091| Param | Type |
9192| ------ | ------ |
9293| json | ` any ` |
9394
94- ** Returns:** ` Result.Result ` <` A ` , ` Partial ` < [ DecoderError ] ( ../interfaces/_decoder_.decodererror.md ) > >
95+ ** Returns:** ` DecodeResult ` <` A ` >
9596
9697___
9798
178179
179180### run
180181
181- ▸ ** run** (json: * ` any ` * ): ` Result.Result ` <` A ` , [ DecoderError ] ( ../interfaces/_decoder_.decodererror.md ) >
182+ ▸ ** run** (json: * ` any ` * ): ` RunResult ` <` A ` >
182183
183184Run the decoder and return a ` Result ` with either the decoded value or a ` DecoderError ` containing the json input, the location of the error, and the error message.
184185
@@ -207,7 +208,7 @@ string().run(9001)
207208| ------ | ------ |
208209| json | ` any ` |
209210
210- ** Returns:** ` Result.Result ` <` A ` , [ DecoderError ] ( ../interfaces/_decoder_.decodererror.md ) >
211+ ** Returns:** ` RunResult ` <` A ` >
211212
212213___
213214<a id =" runpromise " ></a >
@@ -252,27 +253,18 @@ ___
252253
253254Decoder identity function. Useful for incremental decoding.
254255
255- Example:
256-
257- ```
258- const json: any = [1, true, 2, 3, 'five', 4, []];
259- const jsonArray: any[] = Result.withDefault([], array(anyJson()).run(json));
260- const numbers: number[] = Result.successes(jsonArray.map(number().run));
261-
262- numbers
263- // => [1, 2, 3, 4]
264- ```
265-
266256** Returns:** [ Decoder] ( _decoder_.decoder.md ) <` any ` >
267257
268258___
269259<a id =" array " ></a >
270260
271261### ` <Static> ` array
272262
263+ ▸ ** array** (): [ Decoder] ( _decoder_.decoder.md ) <` any ` [ ] >
264+
273265▸ ** array** A(decoder: * [ Decoder] ( _decoder_.decoder.md ) <` A ` >* ): [ Decoder] ( _decoder_.decoder.md ) <` A ` [ ] >
274266
275- Decoder for json arrays. Runs ` decoder ` on each array element, and succeeds if all elements are successfully decoded.
267+ Decoder for json arrays. Runs ` decoder ` on each array element, and succeeds if all elements are successfully decoded. If no ` decoder ` argument is provided then the outer array part of the json is validated but not the contents, typing the result as ` any[] ` .
276268
277269To decode a single value that is inside of an array see ` valueAt ` .
278270
@@ -284,8 +276,23 @@ array(number()).run([1, 2, 3])
284276
285277array(array(boolean())).run([[true], [], [true, false, false]])
286278// => {ok: true, result: [[true], [], [true, false, false]]}
279+
280+ const validNumbersDecoder = array()
281+ .map((arr: any[]) => arr.map(number().run))
282+ .map(Result.successes)
283+
284+ validNumbersDecoder.run([1, true, 2, 3, 'five', 4, []])
285+ // {ok: true, result: [1, 2, 3, 4]}
286+
287+ validNumbersDecoder.run([false, 'hi', {}])
288+ // {ok: true, result: []}
289+
290+ validNumbersDecoder.run(false)
291+ // {ok: false, error: {..., message: "expected an array, got a boolean"}}
287292```
288293
294+ ** Returns:** [ Decoder] ( _decoder_.decoder.md ) <` any ` [ ] >
295+
289296** Type parameters:**
290297
291298#### A
@@ -456,6 +463,176 @@ Decoder that ignores the input json and always fails with `errorMessage`.
456463
457464** Returns:** [ Decoder] ( _decoder_.decoder.md ) <` A ` >
458465
466+ ___
467+ <a id =" intersection " ></a >
468+
469+ ### ` <Static> ` intersection
470+
471+ ▸ ** intersection** A,B(ad: * [ Decoder] ( _decoder_.decoder.md ) <` A ` >* , bd: * [ Decoder] ( _decoder_.decoder.md ) <` B ` >* ): [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` >
472+
473+ ▸ ** intersection** A,B,C(ad: * [ Decoder] ( _decoder_.decoder.md ) <` A ` >* , bd: * [ Decoder] ( _decoder_.decoder.md ) <` B ` >* , cd: * [ Decoder] ( _decoder_.decoder.md ) <` C ` >* ): [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` >
474+
475+ ▸ ** intersection** A,B,C,D(ad: * [ Decoder] ( _decoder_.decoder.md ) <` A ` >* , bd: * [ Decoder] ( _decoder_.decoder.md ) <` B ` >* , cd: * [ Decoder] ( _decoder_.decoder.md ) <` C ` >* , dd: * [ Decoder] ( _decoder_.decoder.md ) <` D ` >* ): [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` & ` D ` >
476+
477+ ▸ ** intersection** A,B,C,D,E(ad: * [ Decoder] ( _decoder_.decoder.md ) <` A ` >* , bd: * [ Decoder] ( _decoder_.decoder.md ) <` B ` >* , cd: * [ Decoder] ( _decoder_.decoder.md ) <` C ` >* , dd: * [ Decoder] ( _decoder_.decoder.md ) <` D ` >* , ed: * [ Decoder] ( _decoder_.decoder.md ) <` E ` >* ): [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` & ` D ` & ` E ` >
478+
479+ ▸ ** intersection** A,B,C,D,E,F(ad: * [ Decoder] ( _decoder_.decoder.md ) <` A ` >* , bd: * [ Decoder] ( _decoder_.decoder.md ) <` B ` >* , cd: * [ Decoder] ( _decoder_.decoder.md ) <` C ` >* , dd: * [ Decoder] ( _decoder_.decoder.md ) <` D ` >* , ed: * [ Decoder] ( _decoder_.decoder.md ) <` E ` >* , fd: * [ Decoder] ( _decoder_.decoder.md ) <` F ` >* ): [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` & ` D ` & ` E ` & ` F ` >
480+
481+ ▸ ** intersection** A,B,C,D,E,F,G(ad: * [ Decoder] ( _decoder_.decoder.md ) <` A ` >* , bd: * [ Decoder] ( _decoder_.decoder.md ) <` B ` >* , cd: * [ Decoder] ( _decoder_.decoder.md ) <` C ` >* , dd: * [ Decoder] ( _decoder_.decoder.md ) <` D ` >* , ed: * [ Decoder] ( _decoder_.decoder.md ) <` E ` >* , fd: * [ Decoder] ( _decoder_.decoder.md ) <` F ` >* , gd: * [ Decoder] ( _decoder_.decoder.md ) <` G ` >* ): [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` & ` D ` & ` E ` & ` F ` & ` G ` >
482+
483+ ▸ ** intersection** A,B,C,D,E,F,G,H(ad: * [ Decoder] ( _decoder_.decoder.md ) <` A ` >* , bd: * [ Decoder] ( _decoder_.decoder.md ) <` B ` >* , cd: * [ Decoder] ( _decoder_.decoder.md ) <` C ` >* , dd: * [ Decoder] ( _decoder_.decoder.md ) <` D ` >* , ed: * [ Decoder] ( _decoder_.decoder.md ) <` E ` >* , fd: * [ Decoder] ( _decoder_.decoder.md ) <` F ` >* , gd: * [ Decoder] ( _decoder_.decoder.md ) <` G ` >* , hd: * [ Decoder] ( _decoder_.decoder.md ) <` H ` >* ): [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` & ` D ` & ` E ` & ` F ` & ` G ` & ` H ` >
484+
485+ Combines 2-8 object decoders into a decoder for the intersection of all the objects.
486+
487+ Example:
488+
489+ ```
490+ interface Pet {
491+ name: string;
492+ maxLegs: number;
493+ }
494+
495+ interface Cat extends Pet {
496+ evil: boolean;
497+ }
498+
499+ const petDecoder: Decoder<Pet> = object({name: string(), maxLegs: number()});
500+ const catDecoder: Decoder<Cat> = intersection(petDecoder, object({evil: boolean()}));
501+ ```
502+
503+ ** Type parameters:**
504+
505+ #### A
506+ #### B
507+ ** Parameters:**
508+
509+ | Param | Type |
510+ | ------ | ------ |
511+ | ad | [ Decoder] ( _decoder_.decoder.md ) <` A ` > |
512+ | bd | [ Decoder] ( _decoder_.decoder.md ) <` B ` > |
513+
514+ ** Returns:** [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` >
515+
516+ ** Type parameters:**
517+
518+ #### A
519+ #### B
520+ #### C
521+ ** Parameters:**
522+
523+ | Param | Type |
524+ | ------ | ------ |
525+ | ad | [ Decoder] ( _decoder_.decoder.md ) <` A ` > |
526+ | bd | [ Decoder] ( _decoder_.decoder.md ) <` B ` > |
527+ | cd | [ Decoder] ( _decoder_.decoder.md ) <` C ` > |
528+
529+ ** Returns:** [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` >
530+
531+ ** Type parameters:**
532+
533+ #### A
534+ #### B
535+ #### C
536+ #### D
537+ ** Parameters:**
538+
539+ | Param | Type |
540+ | ------ | ------ |
541+ | ad | [ Decoder] ( _decoder_.decoder.md ) <` A ` > |
542+ | bd | [ Decoder] ( _decoder_.decoder.md ) <` B ` > |
543+ | cd | [ Decoder] ( _decoder_.decoder.md ) <` C ` > |
544+ | dd | [ Decoder] ( _decoder_.decoder.md ) <` D ` > |
545+
546+ ** Returns:** [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` & ` D ` >
547+
548+ ** Type parameters:**
549+
550+ #### A
551+ #### B
552+ #### C
553+ #### D
554+ #### E
555+ ** Parameters:**
556+
557+ | Param | Type |
558+ | ------ | ------ |
559+ | ad | [ Decoder] ( _decoder_.decoder.md ) <` A ` > |
560+ | bd | [ Decoder] ( _decoder_.decoder.md ) <` B ` > |
561+ | cd | [ Decoder] ( _decoder_.decoder.md ) <` C ` > |
562+ | dd | [ Decoder] ( _decoder_.decoder.md ) <` D ` > |
563+ | ed | [ Decoder] ( _decoder_.decoder.md ) <` E ` > |
564+
565+ ** Returns:** [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` & ` D ` & ` E ` >
566+
567+ ** Type parameters:**
568+
569+ #### A
570+ #### B
571+ #### C
572+ #### D
573+ #### E
574+ #### F
575+ ** Parameters:**
576+
577+ | Param | Type |
578+ | ------ | ------ |
579+ | ad | [ Decoder] ( _decoder_.decoder.md ) <` A ` > |
580+ | bd | [ Decoder] ( _decoder_.decoder.md ) <` B ` > |
581+ | cd | [ Decoder] ( _decoder_.decoder.md ) <` C ` > |
582+ | dd | [ Decoder] ( _decoder_.decoder.md ) <` D ` > |
583+ | ed | [ Decoder] ( _decoder_.decoder.md ) <` E ` > |
584+ | fd | [ Decoder] ( _decoder_.decoder.md ) <` F ` > |
585+
586+ ** Returns:** [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` & ` D ` & ` E ` & ` F ` >
587+
588+ ** Type parameters:**
589+
590+ #### A
591+ #### B
592+ #### C
593+ #### D
594+ #### E
595+ #### F
596+ #### G
597+ ** Parameters:**
598+
599+ | Param | Type |
600+ | ------ | ------ |
601+ | ad | [ Decoder] ( _decoder_.decoder.md ) <` A ` > |
602+ | bd | [ Decoder] ( _decoder_.decoder.md ) <` B ` > |
603+ | cd | [ Decoder] ( _decoder_.decoder.md ) <` C ` > |
604+ | dd | [ Decoder] ( _decoder_.decoder.md ) <` D ` > |
605+ | ed | [ Decoder] ( _decoder_.decoder.md ) <` E ` > |
606+ | fd | [ Decoder] ( _decoder_.decoder.md ) <` F ` > |
607+ | gd | [ Decoder] ( _decoder_.decoder.md ) <` G ` > |
608+
609+ ** Returns:** [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` & ` D ` & ` E ` & ` F ` & ` G ` >
610+
611+ ** Type parameters:**
612+
613+ #### A
614+ #### B
615+ #### C
616+ #### D
617+ #### E
618+ #### F
619+ #### G
620+ #### H
621+ ** Parameters:**
622+
623+ | Param | Type |
624+ | ------ | ------ |
625+ | ad | [ Decoder] ( _decoder_.decoder.md ) <` A ` > |
626+ | bd | [ Decoder] ( _decoder_.decoder.md ) <` B ` > |
627+ | cd | [ Decoder] ( _decoder_.decoder.md ) <` C ` > |
628+ | dd | [ Decoder] ( _decoder_.decoder.md ) <` D ` > |
629+ | ed | [ Decoder] ( _decoder_.decoder.md ) <` E ` > |
630+ | fd | [ Decoder] ( _decoder_.decoder.md ) <` F ` > |
631+ | gd | [ Decoder] ( _decoder_.decoder.md ) <` G ` > |
632+ | hd | [ Decoder] ( _decoder_.decoder.md ) <` H ` > |
633+
634+ ** Returns:** [ Decoder] ( _decoder_.decoder.md ) < ` A ` & ` B ` & ` C ` & ` D ` & ` E ` & ` F ` & ` G ` & ` H ` >
635+
459636___
460637<a id =" lazy " ></a >
461638
506683
507684### ` <Static> ` object
508685
686+ ▸ ** object** (): [ Decoder] ( _decoder_.decoder.md ) <` object ` >
687+
509688▸ ** object** A(decoders: * [ DecoderObject] ( ../modules/_decoder_.md#decoderobject ) <` A ` >* ): [ Decoder] ( _decoder_.decoder.md ) <` A ` >
510689
511- An higher-order decoder that runs decoders on specified fields of an object, and returns a new object with those fields.
690+ An higher-order decoder that runs decoders on specified fields of an object, and returns a new object with those fields. If ` object ` is called with no arguments, then the outer object part of the json is validated but not the contents, typing the result as a dictionary where all keys have a value of type ` any ` .
512691
513692The ` optional ` and ` constant ` decoders are particularly useful for decoding objects that match typescript interfaces.
514693
@@ -519,8 +698,13 @@ Example:
519698```
520699object({x: number(), y: number()}).run({x: 5, y: 10})
521700// => {ok: true, result: {x: 5, y: 10}}
701+
702+ object().map(Object.keys).run({n: 1, i: [], c: {}, e: 'e'})
703+ // => {ok: true, result: ['n', 'i', 'c', 'e']}
522704```
523705
706+ ** Returns:** [ Decoder] ( _decoder_.decoder.md ) <` object ` >
707+
524708** Type parameters:**
525709
526710#### A
0 commit comments