File tree Expand file tree Collapse file tree 3 files changed +50
-0
lines changed
Expand file tree Collapse file tree 3 files changed +50
-0
lines changed Original file line number Diff line number Diff line change @@ -36,6 +36,7 @@ export * from './inRange.js';
3636export * from './isEmpty.js' ;
3737export * from './iterateForever.js' ;
3838export * from './joinStrings.js' ;
39+ export * from './jsonParse.js' ;
3940export * from './looksLikeURL.js' ;
4041export * from './normalize.js' ;
4142export * from './parseNumber.js' ;
Original file line number Diff line number Diff line change 1+ import type { TypeAssertionFn } from './types/functions.js' ;
2+
3+ export type JsonReviver = Parameters < JSON [ 'parse' ] > [ 1 ] ;
4+
5+ export function jsonParse ( input : string ) : unknown ;
6+
7+ export function jsonParse ( input : string , reviver ?: JsonReviver ) : unknown ;
8+
9+ export function jsonParse < T > ( input : string , reviver : JsonReviver | undefined , assertionFn : TypeAssertionFn < T > ) : T ;
10+
11+ export function jsonParse < T > ( input : string , reviver ?: JsonReviver , assertionFn ?: TypeAssertionFn < T > ) : unknown {
12+ const data : unknown = JSON . parse ( input , reviver ) ;
13+
14+ assertionFn ?.( data ) ;
15+
16+ return data ;
17+ }
Original file line number Diff line number Diff line change 1+ import { describe , expect , it } from 'vitest' ;
2+
3+ import { assertIsObject } from '../src/assertion/assertIsObject.js' ;
4+ import { jsonParse } from '../src/jsonParse.js' ;
5+
6+ describe ( 'jsonParse()' , ( ) => {
7+ it ( 'Parses a JSON string' , ( ) => {
8+ const unknownData = jsonParse ( '{"name":"test"}' ) ;
9+
10+ expect ( unknownData ) . toEqual ( {
11+ name : 'test' ,
12+ } ) ;
13+ } ) ;
14+
15+ it ( 'Can use a reviver function' , ( ) => {
16+ const unknownData = jsonParse ( '{"name":"test"}' , ( key , value ) => {
17+ return key === 'name' ? String ( value ) . toUpperCase ( ) : value ;
18+ } ) ;
19+
20+ expect ( unknownData ) . toEqual ( {
21+ name : 'TEST' ,
22+ } ) ;
23+ } ) ;
24+
25+ it ( 'Can use a type assertion function' , ( ) => {
26+ expect ( jsonParse ( '{"name":"test"}' , undefined , assertIsObject ) ) . toEqual ( {
27+ name : 'test' ,
28+ } ) ;
29+
30+ expect ( ( ) => jsonParse ( '[]' , undefined , assertIsObject ) ) . toThrowError ( ) ;
31+ } ) ;
32+ } ) ;
You can’t perform that action at this time.
0 commit comments