1
+
2
+ /**
3
+ * GetMissingValue function signature
4
+ */
5
+ type GetMissingValue = {
6
+ ( key : string ) : any ;
7
+ } ;
8
+
9
+ /**
10
+ * Options for the JsonURL.stringify function.
11
+ *
12
+ * @see https://github.com/jsonurl/specification#291-implied-arrays
13
+ * @see https://github.com/jsonurl/specification#292-implied-objects
14
+ * @see https://github.com/jsonurl/specification#293-x-www-form-urlencoded-arrays-and-objects
15
+ * @see https://github.com/jsonurl/specification#295-empty-objects-and-arrays
16
+ * @see https://github.com/jsonurl/specification#296-address-bar-query-string-friendly
17
+ */
18
+ type JsonURLStringifyOptions = {
19
+ /**
20
+ * @type {boolean } [allowEmptyUnquotedKeys] Normally an empty string
21
+ * value is represented as `''` (two single quotes). If this
22
+ * is true the stringifier will omit a value rather than writing an
23
+ * empty string.
24
+ */
25
+ allowEmptyUnquotedValues ?: boolean ,
26
+ /**
27
+ * @type {boolean } [allowEmptyUnquotedKeys] Normally a key whose value is
28
+ * the empty string is represented as `''` (two single quotes). If this
29
+ * is true the stringifier will omit a value rather than writing an
30
+ * empty string.
31
+ */
32
+ allowEmptyUnquotedKeys ?: boolean ,
33
+ /**
34
+ * @type {boolean } [AQF] Enable the address bar query string friendly
35
+ * (AQF) syntax option, and emit a string as oulined in section
36
+ * 2.9.6 of the JSON→URL specification.
37
+ */
38
+ AQF ?: boolean ,
39
+ /**
40
+ * @type {boolean } [coerceNullToEmptyString] Normally the stringifier will
41
+ * emit a `null` value as a literal `null`. If this is true `null`
42
+ * values will be coerced to the empty string.
43
+ */
44
+ coerceNullToEmptyString ?: boolean ,
45
+ /**
46
+ * @type {Array<any> } [impliedArray] Emit an implied array
47
+ * as oulined in section 2.9.1 of the JSON→URL specification.
48
+ */
49
+ impliedArray ?: boolean ,
50
+ /**
51
+ * @type {Object } [impliedObject] Emit an implied object
52
+ * as oulined in section 2.9.1 of the JSON→URL specification.
53
+ */
54
+ impliedObject ?: boolean ,
55
+ /**
56
+ * @type {boolean } [impliedStringLiterals] If true the stringifier will
57
+ * emit JSON→URL text that assumes all literals are
58
+ * strings.
59
+ */
60
+ impliedStringLiterals ?: boolean ,
61
+ /**
62
+ * @type {boolean } [noEmptyComposite] Emit JSON→URL text as
63
+ * oulined in section 2.9.4 of the JSON→URL specification.
64
+ */
65
+ noEmptyComposite ?: boolean ,
66
+ /**
67
+ * @type {boolean } [wwwFormUrlEncoded] Emit x-www-form-urlencoded content
68
+ * as oulined in section 2.9.3 of the JSON→URL specification.
69
+ */
70
+ wwwFormUrlEncoded ?: boolean ,
71
+ /**
72
+ * @type {boolean } [callFunctions] The stringifier will inspect each
73
+ * value to see if it's a function.
74
+ * If `callFunctions` is true then functions will be called to resolve
75
+ * the value; otherwise, they will be omitted.
76
+ */
77
+ callFunctions ?: boolean ,
78
+ /**
79
+ * @deprecated
80
+ * @type {boolean } [isImplied] Emit an implied object or array. For
81
+ * consistency with parse() use `impliedArray` or `impliedObject`.
82
+ */
83
+ isImplied ?: boolean ,
84
+ /**
85
+ * @type {boolean } [ignoreNullArrayMembers=false] Ignore null array members.
86
+ * This is `true` by default if impliedStringLiterals is true,
87
+ * and `false` by default otherwise.
88
+ */
89
+ ignoreNullArrayMembers ?: boolean ,
90
+ /**
91
+ * @type {boolean } [ignoreNullObjectMembers=false] Ignore null object
92
+ * members. This is `true` by default if impliedStringLiterals is true,
93
+ * and `false` by default otherwise.
94
+ */
95
+ ignoreNullObjectMembers ?: boolean ,
96
+ /**
97
+ * @type {boolean } [ignoreUndefinedArrayMembers] Ignore undefined array
98
+ * members. This is `true` by default if impliedStringLiterals is true,
99
+ * and `false` by default otherwise. Undefined values will be stringified
100
+ * as `null` because `undefined` is not a valid JSON value.
101
+ */
102
+ ignoreUndefinedArrayMembers ?: boolean ,
103
+ /**
104
+ * @type {boolean } [ignoreUndefinedObjectMembers] Ignore undefined object
105
+ * members. This is `true` by default if impliedStringLiterals is true,
106
+ * and `false` by default otherwise. Undefined values will be stringified
107
+ * as `null` because `undefined` is not a valid JSON value.
108
+ */
109
+ ignoreUndefinedObjectMembers ?: boolean ,
110
+ }
111
+
112
+ /**
113
+ * Options for the JsonURL.parse function.
114
+ *
115
+ * @see https://github.com/jsonurl/specification#291-implied-arrays
116
+ * @see https://github.com/jsonurl/specification#292-implied-objects
117
+ * @see https://github.com/jsonurl/specification#293-x-www-form-urlencoded-arrays-and-objects
118
+ * @see https://github.com/jsonurl/specification#294-implied-object-missing-values
119
+ * @see https://github.com/jsonurl/specification#295-empty-objects-and-arrays
120
+ * @see https://github.com/jsonurl/specification#296-address-bar-query-string-friendly
121
+ */
122
+ type JsonURLParseOptions = {
123
+ /**
124
+ * @type {boolean } [allowEmptyUnquotedValues] Normally the empty string
125
+ * is represented as `''` (two single quotes). This option allows the
126
+ * parser to recognize an omitted value as the empty string. Note, in the
127
+ * case of an object value the separator is still required.
128
+ */
129
+ allowEmptyUnquotedValues ?: boolean ,
130
+ /**
131
+ * @type {boolean } [allowEmptyUnquotedKeys] Normally the empty string
132
+ * is represented as `''` (two single quotes). This option allows the
133
+ * parser to recognize an omitted object key as the empty string. Note,
134
+ * the separator is still required.
135
+ */
136
+ allowEmptyUnquotedKeys ?: boolean ,
137
+ /**
138
+ * @type {boolean } [AQF] Enable the address bar query string friendly
139
+ * (AQF) syntax option, and implement the grammar oulined in section
140
+ * 2.9.6 of the JSON→URL specification.
141
+ */
142
+ AQF ?: boolean ,
143
+ /**
144
+ * @type {boolean } [coerceNullToEmptyString] Normally the `null` literal
145
+ * is parsed as a JavaScript `null` value, however, if this is true
146
+ * then `null` literals will be coerced to the empty string.
147
+ */
148
+ coerceNullToEmptyString ?: boolean ,
149
+ /**
150
+ * @type {Array<any> } [impliedArray] An implied array.
151
+ *
152
+ * If provied, parse will implement a parser for the grammar oulined in
153
+ * section 2.9.1 of the JSON→URL specification. The given parse
154
+ * text is assumed to be an array, and the leading and trailing parens
155
+ * must not be present. The given array value will be populated and
156
+ * returned.
157
+ */
158
+ impliedArray ?: Array < any > ,
159
+ /**
160
+ * @type {Object } [impliedObject] An implied object.
161
+ *
162
+ * If provided, parse will implement the grammar oulined in section 2.9.2
163
+ * of the JSON→URL specification. The given parse text is assumed
164
+ * to be an object, and the leading and trailing parens must not be
165
+ * present. The given object value will be populated and returned.
166
+ */
167
+ impliedObject ?: object ,
168
+ /**
169
+ * @type {boolean } [impliedStringLiterals] Instruct the parser to assume
170
+ * that all literals are strings. In this case, the single quote character
171
+ * loses its significance and is parsed as-is.
172
+ */
173
+ impliedStringLiterals ?: boolean ,
174
+ /**
175
+ * @type {boolean } [noEmptyComposite] Implement the grammar
176
+ * oulined in section 2.9.4 of the JSON→URL specification.
177
+ *
178
+ * If true, the parser will distinguish between empty array and empty
179
+ * object. Empty array is back-to-back parens, e.g. `()`. Empty object
180
+ * is two parens with a single colon inside, e.g. `(:)`. Note that this
181
+ * prevents the parser from recognizing `(:)` as an object with a single
182
+ * member whose key and value is the unquoted empty string when
183
+ * `allowEmptyUnquotedValues` and `allowEmptyUnquotedValues` are also
184
+ * both true.
185
+ */
186
+ noEmptyComposite ?: boolean ,
187
+ /**
188
+ * @type {boolean } [wwwFormUrlEncoded] Implement the grammar oulined in
189
+ * section 2.9.3 of the JSON→URL specification.
190
+ *
191
+ * The given parse text is may use ampersand and equal characters as the
192
+ * value and member separator characters, respetively, at the top-level.
193
+ * This may be combined with `impliedArray` or `impliedObject`.
194
+ */
195
+ wwwFormUrlEncoded ?: boolean ,
196
+ /**
197
+ * @param {* } [emptyValue] The value which represents the empty composite.
198
+ * This may be any type. If it is a function then it will be called
199
+ * until it resolves to something that is not a function. The default
200
+ * is an empty Object.
201
+ */
202
+ emptyValue ?: any ,
203
+ /**
204
+ * @type {function } [getMissingValue] Implement the grammar oulined in
205
+ * section 2.9.4 of the JSON→URL specification.
206
+ *
207
+ * This function provides a missing top-level value for the given key.
208
+ */
209
+ getMissingValue ?: GetMissingValue ,
210
+ /**
211
+ * @type {* } [nullValue=null] The value which represents the `null` value.
212
+ * This may be any type. If it is a function then it will be called
213
+ * until it resolves to something that is not a function. The default
214
+ * is `null`.
215
+ */
216
+ nullValue ?: any ,
217
+ /**
218
+ * @type {number } [maxParseChars=65535] Maximum number of characters to
219
+ * parse. The parse() method will throw an Error if it parses more than
220
+ * this number of characters. The default is 64K.
221
+ */
222
+ maxParseChars ?: number ,
223
+ /**
224
+ * @type {number } [maxParseDepth=64] Maximum parse depth.
225
+ * The parse() method will throw an Error if the depth
226
+ * of the input exceeds this value. The default is 64.
227
+ */
228
+ maxParseDepth ?: number ,
229
+ /**
230
+ * @type {number } [maxParseValues=4096] Maximum number of values to parse.
231
+ * The parse() method will throw an Error if it parses more than this
232
+ * number of values. The default is 4096.
233
+ */
234
+ maxParseValues ?: number ,
235
+ }
236
+
237
+ declare class JsonURL {
238
+ /**
239
+ * Construct a new JsonURL class.
240
+ *
241
+ * Each instance of this class contains a number of properties that manage
242
+ * the behavior of the parser and the values it returns; these are documented
243
+ * below. The class instance does not manage parse state -- that is local to
244
+ * the parse() function itself. As long as you don't need different
245
+ * properties (e.g. limits, null value, etc) you may re-use the same Parser
246
+ * instance, even by multiple Workers.
247
+ * @param {Object } [prop] Initialization properties.
248
+ * @deprecated this constructior will be removed and the JsonURL class
249
+ * will simply have two static functions (mirroring the interface
250
+ * of the JSON Object). These properties may be sent as options to
251
+ * parse() and stringify().
252
+ */
253
+ constructor ( prop ?: {
254
+ /**
255
+ * @type {number } [maxParseDepth=64] Maximum parse depth.
256
+ * The parse() method will throw an Error if the depth
257
+ * of the input exceeds this value. The default is 64.
258
+ */
259
+ maxParseDepth ?: number ;
260
+ /**
261
+ * @type {number } [maxParseValues=4096] Maximum number of values to parse.
262
+ * The parse() method will throw an Error if it parses more than this
263
+ * number of values. The default is 4K.
264
+ */
265
+ maxParseValues ?: number ;
266
+ /**
267
+ * @type {number } [maxParseChars=65535] Maximum number of characters to
268
+ * parse. The parse() method will throw an Error if it parses more than
269
+ * this number of characters. The default is 64K.
270
+ */
271
+ maxParseChars ?: number ;
272
+ /**
273
+ * @param {* } [emptyValue] The value which represents the empty composite.
274
+ * This may be any type. If it is a function then it will be called
275
+ * until it resolves to something that is not a function. The default
276
+ * is an empty Object.
277
+ */
278
+ emptyValue ?: any ;
279
+ /**
280
+ * @type {* } [nullValue=null] The value which represents the `null` value.
281
+ * This may be any type. If it is a function then it will be called
282
+ * until it resolves to something that is not a function. The default
283
+ * is `null`.
284
+ */
285
+ nullValue ?: any ;
286
+ } ) ;
287
+
288
+ /**
289
+ * Parse JSON→URL text and return a JavaScript value.
290
+ *
291
+ * The `text` parameter must be provided. The second parameter may be
292
+ * either the index into `text` where the parse should start (a number)
293
+ * or parse options. If an offset is provided then the third parameter
294
+ * may be either the index into `text` where the parse should end (a
295
+ * number) or parse options. If the an end index is provided then the
296
+ * forth parameter may be parse options.
297
+ *
298
+ * @public
299
+ * @param {string } text The text to parse.
300
+ * @param {number|JsonURLParseOptions } [startOrOpt] index into `text`
301
+ * where parse should start (a number) or parse options.
302
+ * @param {number|JsonURLParseOptions } [endOrOpt] index into `text`
303
+ * where parse should end (a number) or parse options.
304
+ * @param {JsonURLParseOptions } [options] parse options.
305
+ * @return {any } the parsed value
306
+ * @throws SyntaxError if there is a syntax error in the given text
307
+ * @throws Error if a limit given in the constructor (or its default)
308
+ * is exceeded.
309
+ */
310
+ static parse ( text : string , startOrOpt ?: number | JsonURLParseOptions , endOrOpt ?: number | JsonURLParseOptions , options ?: JsonURLParseOptions ) : any ;
311
+
312
+ /**
313
+ * Parse JSON→URL text and return a JavaScript value.
314
+ *
315
+ * The `text` parameter must be provided. The second parameter may be
316
+ * either the index into `text` where the parse should start (a number)
317
+ * or parse options. If an offset is provided then the third parameter
318
+ * may be either the index into `text` where the parse should end (a
319
+ * number) or parse options. If the an end index is provided then the
320
+ * forth parameter may be parse options.
321
+ *
322
+ * @param {string } text The text to parse.
323
+ * @param {number|JsonURLParseOptions } [startOrOpt] index into `text`
324
+ * where parse should start (a number) or parse options.
325
+ * @param {number|JsonURLParseOptions } [endOrOpt] index into `text`
326
+ * where parse should end (a number) or parse options.
327
+ * @param {JsonURLParseOptions } [options] parse options.
328
+ * @return {any } the parsed value
329
+ * @throws SyntaxError if there is a syntax error in the given text
330
+ * @throws Error if a limit given in the constructor (or its default)
331
+ * is exceeded.
332
+ * @deprecated this function will be removed and the JsonURL class
333
+ * will simply have two static functions (mirroring the interface
334
+ * of the JSON Object). Call `JsonURL.parse()` instead.
335
+ */
336
+ parse ( text : string , startOrOpt ?: number | JsonURLParseOptions , endOrOpt ?: number | JsonURLParseOptions , options ?: JsonURLParseOptions ) : any ;
337
+
338
+ /**
339
+ * A static method for coverting a JavaScript value to JSON→URL text.
340
+ * @public
341
+ * @param {* } value Any value
342
+ * @param {JsonURLStringifyOptions } [options] stringify options.
343
+ * @returns {string } JSON→URL text, or `undefined` if the given value
344
+ * is `undefined`.
345
+ */
346
+ static stringify ( value : any , options ?: JsonURLStringifyOptions ) : string | undefined ;
347
+ }
348
+
349
+ export default JsonURL ;
350
+
0 commit comments