|
1 | 1 | import * as Result from './result'; |
| 2 | +const isEqual = require('lodash/isEqual'); // this syntax avoids TS1192 |
2 | 3 |
|
3 | 4 | /** |
4 | 5 | * Information describing how json data failed to match a decoder. |
@@ -177,15 +178,19 @@ export class Decoder<A> { |
177 | 178 | * and numbers, as detailed by this table: |
178 | 179 | * |
179 | 180 | * ``` |
180 | | - * | Decoder | Type | |
181 | | - * | ---------------------------- | ----------------- | |
182 | | - * | constant(true) | Decoder<true> | |
183 | | - * | constant(false) | Decoder<false> | |
184 | | - * | constant(null) | Decoder<null> | |
185 | | - * | constant('alaska') | Decoder<string> | |
186 | | - * | constant<'alaska'>('alaska') | Decoder<'alaska'> | |
187 | | - * | constant(50) | Decoder<number> | |
188 | | - * | constant<50>(50) | Decoder<50> | |
| 181 | + * | Decoder | Type | |
| 182 | + * | ---------------------------- | ---------------------| |
| 183 | + * | constant(true) | Decoder<true> | |
| 184 | + * | constant(false) | Decoder<false> | |
| 185 | + * | constant(null) | Decoder<null> | |
| 186 | + * | constant('alaska') | Decoder<string> | |
| 187 | + * | constant<'alaska'>('alaska') | Decoder<'alaska'> | |
| 188 | + * | constant(50) | Decoder<number> | |
| 189 | + * | constant<50>(50) | Decoder<50> | |
| 190 | + * | constant([1,2,3]) | Decoder<number[]> | |
| 191 | + * | constant<[1,2,3]>([1,2,3]) | Decoder<[1,2,3]> | |
| 192 | + * | constant({x: 't'}) | Decoder<{x: string}> | |
| 193 | + * | constant<{x: 't'}>({x: 't'}) | Decoder<{x: 't'}> | |
189 | 194 | * ``` |
190 | 195 | * |
191 | 196 | * |
@@ -234,7 +239,7 @@ export class Decoder<A> { |
234 | 239 | static constant(value: any): Decoder<any> { |
235 | 240 | return new Decoder( |
236 | 241 | (json: any) => |
237 | | - json === value |
| 242 | + isEqual(json, value) |
238 | 243 | ? Result.ok(value) |
239 | 244 | : Result.err({message: `expected ${JSON.stringify(value)}, got ${JSON.stringify(json)}`}) |
240 | 245 | ); |
|
0 commit comments