-
-
Notifications
You must be signed in to change notification settings - Fork 35
/
index.d.ts
126 lines (106 loc) · 3.08 KB
/
index.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import type {JsonObject} from 'type-fest';
/**
Exposed for `instanceof` checking.
*/
export class JSONError extends Error { // eslint-disable-line @typescript-eslint/naming-convention
/**
The filename displayed in the error message, if any.
*/
fileName: string;
/**
The printable section of the JSON which produces the error.
*/
readonly codeFrame: string;
/**
The raw version of `codeFrame` without colors.
*/
readonly rawCodeFrame: string;
}
// Get `reviver`` parameter from `JSON.parse()`.
export type Reviver = Parameters<typeof JSON['parse']>['1'];
/**
Parse JSON with more helpful errors.
@param string - A valid JSON string.
@param reviver - Prescribes how the value originally produced by parsing is transformed, before being returned. See [`JSON.parse` docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter
) for more.
@param filename - The filename displayed in the error message.
@returns A parsed JSON object.
@throws A {@link JSONError} when there is a parsing error.
@example
```
import parseJson, {JSONError} from 'parse-json';
const json = '{\n\t"foo": true,\n}';
parseJson(json);
// JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}'
//
// 1 | {
// 2 | "foo": true,
// > 3 | }
// | ^
parseJson(json, 'foo.json');
// JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}' in foo.json
//
// 1 | {
// 2 | "foo": true,
// > 3 | }
// | ^
// You can also add the filename at a later point
try {
parseJson(json);
} catch (error) {
if (error instanceof JSONError) {
error.fileName = 'foo.json';
}
throw error;
}
// JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}' in foo.json
//
// 1 | {
// 2 | "foo": true,
// > 3 | }
// | ^
```
*/
export default function parseJson(string: string, reviver?: Reviver, filename?: string): JsonObject;
/**
Parse JSON with more helpful errors.
@param string - A valid JSON string.
@param filename - The filename displayed in the error message.
@returns A parsed JSON object.
@throws A {@link JSONError} when there is a parsing error.
@example
```
import parseJson, {JSONError} from 'parse-json';
const json = '{\n\t"foo": true,\n}';
parseJson(json);
// JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}'
//
// 1 | {
// 2 | "foo": true,
// > 3 | }
// | ^
parseJson(json, 'foo.json');
// JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}' in foo.json
//
// 1 | {
// 2 | "foo": true,
// > 3 | }
// | ^
// You can also add the filename at a later point
try {
parseJson(json);
} catch (error) {
if (error instanceof JSONError) {
error.fileName = 'foo.json';
}
throw error;
}
// JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}' in foo.json
//
// 1 | {
// 2 | "foo": true,
// > 3 | }
// | ^
```
*/
export default function parseJson(string: string, filename?: string): JsonObject;