jtlt 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGES.md +27 -0
- package/README.md +61 -164
- package/demo/calltemplate-params-demo.js +138 -0
- package/demo/codemirror.esm.js +28242 -0
- package/demo/codemirror.js +94 -0
- package/demo/index.css +7 -0
- package/demo/index.html +28 -0
- package/demo/index.js +210 -0
- package/demo/vendor/jamilih/dist/jml.mjs +2341 -0
- package/demo/vendor/jhtml/src/SAJJ/SAJJ.ObjectArrayDelegator.js +356 -0
- package/demo/vendor/jhtml/src/SAJJ/SAJJ.Stringifier.js +186 -0
- package/demo/vendor/jhtml/src/SAJJ/SAJJ.js +746 -0
- package/demo/vendor/jhtml/src/SAJJ/testing/SAJJ.html +33 -0
- package/demo/vendor/jhtml/src/SAJJ/testing/SAJJ.testing.js +25 -0
- package/demo/vendor/jhtml/src/jhtml-browser.js +5 -0
- package/demo/vendor/jhtml/src/jhtml-node.cts +3 -0
- package/demo/vendor/jhtml/src/jhtml-node.js +8 -0
- package/demo/vendor/jhtml/src/jhtml-node.mts +1 -0
- package/demo/vendor/jhtml/src/jhtml.cts +3 -0
- package/demo/vendor/jhtml/src/jhtml.js +602 -0
- package/demo/vendor/jhtml/src/jhtml.mts +1 -0
- package/demo/vendor/jsonpath-plus/dist/index-browser-esm.js +2158 -0
- package/demo/vendor/simple-get-json/dist/index-es.js +151 -0
- package/demo/xpath2-placeholder.js +1 -0
- package/dist/AbstractJoiningTransformer.d.ts +83 -9
- package/dist/AbstractJoiningTransformer.d.ts.map +1 -1
- package/dist/DOMJoiningTransformer.d.ts +85 -25
- package/dist/DOMJoiningTransformer.d.ts.map +1 -1
- package/dist/JSONJoiningTransformer.d.ts +159 -51
- package/dist/JSONJoiningTransformer.d.ts.map +1 -1
- package/dist/JSONPathTransformer.d.ts +37 -38
- package/dist/JSONPathTransformer.d.ts.map +1 -1
- package/dist/JSONPathTransformerContext.d.ts +334 -124
- package/dist/JSONPathTransformerContext.d.ts.map +1 -1
- package/dist/StringJoiningTransformer.d.ts +132 -41
- package/dist/StringJoiningTransformer.d.ts.map +1 -1
- package/dist/XPathTransformer.d.ts +35 -20
- package/dist/XPathTransformer.d.ts.map +1 -1
- package/dist/XPathTransformerContext.d.ts +281 -105
- package/dist/XPathTransformerContext.d.ts.map +1 -1
- package/dist/index-browser.d.ts +4 -0
- package/dist/index-browser.d.ts.map +1 -0
- package/dist/index-node.d.ts +4 -0
- package/dist/index-node.d.ts.map +1 -0
- package/dist/index.d.ts +330 -57
- package/dist/index.d.ts.map +1 -1
- package/dist/types.d.ts +204 -0
- package/dist/types.d.ts.map +1 -0
- package/docs/API.expanded.md +172 -5
- package/docs/API.md +92 -2
- package/docs/TO-DO.md +168 -0
- package/docs/calltemplate-params.md +251 -0
- package/eslint.config.js +11 -5
- package/package.json +35 -9
- package/pnpm-workspace.yaml +1 -0
- package/rollup.config.js +13 -0
- package/src/AbstractJoiningTransformer.js +54 -15
- package/src/DOMJoiningTransformer.js +275 -28
- package/src/JSONJoiningTransformer.js +351 -70
- package/src/JSONPathTransformer.js +48 -30
- package/src/JSONPathTransformerContext.js +729 -107
- package/src/StringJoiningTransformer.js +311 -57
- package/src/XPathTransformer.js +27 -12
- package/src/XPathTransformerContext.js +928 -99
- package/src/index-browser.js +5 -0
- package/src/index-node.js +7 -0
- package/src/index.js +502 -98
- package/tsconfig.json +5 -2
- package/typings/xpath2-js.d.ts +40 -1
- package/src/types/xpath2-js.d.ts +0 -2
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import SAJJ from './SAJJ.js';
|
|
2
|
+
|
|
3
|
+
/* eslint-disable jsdoc/reject-any-type -- Arbitrary */
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {any} AnyDelegated
|
|
6
|
+
*/
|
|
7
|
+
/* eslint-enable jsdoc/reject-any-type -- Arbitrary */
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @abstract
|
|
11
|
+
* @class
|
|
12
|
+
* @todo Might add an add() method which defines how to combine result values
|
|
13
|
+
* (so as to allow for other means besides string concatenation)
|
|
14
|
+
*/
|
|
15
|
+
class ObjectArrayDelegator extends SAJJ {
|
|
16
|
+
/* eslint-disable jsdoc/require-returns-check -- Abstract */
|
|
17
|
+
/**
|
|
18
|
+
* @returns {AnyDelegated}
|
|
19
|
+
*/
|
|
20
|
+
objectKeyValueJoinerHandler () {
|
|
21
|
+
throw new Error('Abstract');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @param {object} value
|
|
25
|
+
* @param {object|undefined} parentObject
|
|
26
|
+
* @param {string|undefined} parentKey
|
|
27
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
28
|
+
* @returns {AnyDelegated}
|
|
29
|
+
*/
|
|
30
|
+
beginObjectHandler (
|
|
31
|
+
// eslint-disable-next-line no-unused-vars -- Not used here
|
|
32
|
+
value, parentObject, parentKey, parentObjectArrayBool
|
|
33
|
+
) {
|
|
34
|
+
throw new Error('Abstract');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @param {object} value
|
|
38
|
+
* @param {object|undefined} parentObject
|
|
39
|
+
* @param {string|undefined} parentKey
|
|
40
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
41
|
+
* @returns {AnyDelegated}
|
|
42
|
+
*/
|
|
43
|
+
endObjectHandler (
|
|
44
|
+
// eslint-disable-next-line no-unused-vars -- Not used here
|
|
45
|
+
value, parentObject, parentKey, parentObjectArrayBool
|
|
46
|
+
) {
|
|
47
|
+
throw new Error('Abstract');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @param {AnyDelegated[]} value
|
|
52
|
+
* @param {object|undefined} parentObject
|
|
53
|
+
* @param {string|undefined} parentKey
|
|
54
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
55
|
+
* @param {number} arrLength
|
|
56
|
+
* @returns {AnyDelegated}
|
|
57
|
+
*/
|
|
58
|
+
beginArrayHandler (
|
|
59
|
+
// eslint-disable-next-line no-unused-vars -- Not used here
|
|
60
|
+
value, parentObject, parentKey, parentObjectArrayBool, arrLength
|
|
61
|
+
) {
|
|
62
|
+
throw new Error('Abstract');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @param {AnyDelegated[]} value
|
|
67
|
+
* @param {object|undefined} parentObject
|
|
68
|
+
* @param {string|undefined} parentKey
|
|
69
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
70
|
+
* @param {number} arrLength
|
|
71
|
+
* @returns {AnyDelegated}
|
|
72
|
+
*/
|
|
73
|
+
endArrayHandler (
|
|
74
|
+
// eslint-disable-next-line no-unused-vars -- Not used here
|
|
75
|
+
value, parentObject, parentKey, parentObjectArrayBool, arrLength
|
|
76
|
+
) {
|
|
77
|
+
throw new Error('Abstract');
|
|
78
|
+
}
|
|
79
|
+
/* eslint-enable jsdoc/require-returns-check -- Abstract */
|
|
80
|
+
|
|
81
|
+
// It is probably not necessary to override the defaults for the following
|
|
82
|
+
// two methods and perhaps not any of the others either
|
|
83
|
+
/**
|
|
84
|
+
* @param {AnyDelegated} value
|
|
85
|
+
* @param {object|undefined} parentObject
|
|
86
|
+
* @param {string|undefined} parentKey
|
|
87
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
88
|
+
* @returns {string}
|
|
89
|
+
*/
|
|
90
|
+
objectHandler (value, parentObject, parentKey, parentObjectArrayBool) {
|
|
91
|
+
const ret = this.beginObjectHandler(
|
|
92
|
+
value, parentObject, parentKey, parentObjectArrayBool
|
|
93
|
+
),
|
|
94
|
+
keyVals = [];
|
|
95
|
+
if (this.iterateObjects) {
|
|
96
|
+
let i = 0;
|
|
97
|
+
if (this.iterateObjectPrototype) {
|
|
98
|
+
// eslint-disable-next-line @stylistic/max-len -- Long
|
|
99
|
+
// eslint-disable-next-line guard-for-in -- Deliberately iterating prototype
|
|
100
|
+
for (const key in value) {
|
|
101
|
+
this.currentKey = key;
|
|
102
|
+
this.currentObject = value[key];
|
|
103
|
+
keyVals.push(
|
|
104
|
+
this.keyValueHandler(
|
|
105
|
+
value[key], key, value, parentKey, parentObjectArrayBool, false, i
|
|
106
|
+
)
|
|
107
|
+
);
|
|
108
|
+
i++;
|
|
109
|
+
}
|
|
110
|
+
} else {
|
|
111
|
+
for (const key in value) {
|
|
112
|
+
if (Object.hasOwn(value, key)) {
|
|
113
|
+
this.currentKey = key;
|
|
114
|
+
this.currentObject = value[key];
|
|
115
|
+
keyVals.push(
|
|
116
|
+
this.keyValueHandler(
|
|
117
|
+
value[key], key, value, parentKey,
|
|
118
|
+
parentObjectArrayBool, false, i
|
|
119
|
+
)
|
|
120
|
+
);
|
|
121
|
+
i++;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return ret + keyVals.join(
|
|
127
|
+
this.objectKeyValueJoinerHandler()
|
|
128
|
+
) + this.endObjectHandler(
|
|
129
|
+
value, parentObject, parentKey, parentObjectArrayBool
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @param {AnyDelegated[]} value
|
|
135
|
+
* @param {object|undefined} parentObject
|
|
136
|
+
* @param {string|undefined} parentKey
|
|
137
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
138
|
+
* @returns {string}
|
|
139
|
+
*/
|
|
140
|
+
arrayHandler (value, parentObject, parentKey, parentObjectArrayBool) {
|
|
141
|
+
const arrLength = value.length,
|
|
142
|
+
ret = this.beginArrayHandler(
|
|
143
|
+
value, parentObject, parentKey, parentObjectArrayBool, arrLength
|
|
144
|
+
),
|
|
145
|
+
keyVals = [];
|
|
146
|
+
|
|
147
|
+
if (this.iterateArrays) {
|
|
148
|
+
if (this.iterateArrayPrototype) {
|
|
149
|
+
// eslint-disable-next-line @stylistic/max-len -- Long
|
|
150
|
+
// eslint-disable-next-line guard-for-in -- Deliberately iterating prototype
|
|
151
|
+
for (const key in value) {
|
|
152
|
+
this.currentKey = key;
|
|
153
|
+
this.currentObject = value[key];
|
|
154
|
+
// Ambiguous about whether array value is being iterated or
|
|
155
|
+
// array object value
|
|
156
|
+
keyVals.push(
|
|
157
|
+
this.keyValueHandler(
|
|
158
|
+
value[key], key, value, parentKey, parentObjectArrayBool, true
|
|
159
|
+
)
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
} else {
|
|
163
|
+
const arrl = value.length;
|
|
164
|
+
for (let key = 0; key < arrl; key++) {
|
|
165
|
+
this.currentKey = key;
|
|
166
|
+
this.currentObject = value[key];
|
|
167
|
+
keyVals.push(
|
|
168
|
+
this.keyValueHandler(
|
|
169
|
+
value[key], key, value, parentKey, parentObjectArrayBool, true
|
|
170
|
+
)
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return ret + keyVals.join(
|
|
176
|
+
this.arrayKeyValueJoinerHandler()
|
|
177
|
+
) + this.endArrayHandler(
|
|
178
|
+
value, parentObject, parentKey, parentObjectArrayBool, arrLength
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Can override to avoid delegating to separate array/object handlers; see
|
|
184
|
+
* `isArrayType` notes for a means to treat `objectHandler`/`arrayHandler`
|
|
185
|
+
* as the same; overridden optionally in constructor by
|
|
186
|
+
* `keyValueDistinguishedHandler`.
|
|
187
|
+
* @param {object} value
|
|
188
|
+
* @param {string|number} key
|
|
189
|
+
* @param {object|undefined} parentObject
|
|
190
|
+
* @param {string|undefined} parentKey
|
|
191
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
192
|
+
* @param {boolean} arrayBool
|
|
193
|
+
* @param {number} [iterCt]
|
|
194
|
+
* @returns {string}
|
|
195
|
+
*/
|
|
196
|
+
keyValueHandler (
|
|
197
|
+
value, key, parentObject, parentKey,
|
|
198
|
+
parentObjectArrayBool, arrayBool, iterCt
|
|
199
|
+
) {
|
|
200
|
+
const objectRet = this.keyHandler(
|
|
201
|
+
key, parentObject, parentKey, parentObjectArrayBool, arrayBool, iterCt
|
|
202
|
+
);
|
|
203
|
+
if (arrayBool) {
|
|
204
|
+
return this.arrayKeyValueHandler(
|
|
205
|
+
value, key, parentObject, parentKey, parentObjectArrayBool
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
return objectRet + this.objectKeyValueHandler(
|
|
209
|
+
value, key, parentObject, parentKey, parentObjectArrayBool, iterCt
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* @param {AnyDelegated} value
|
|
215
|
+
* @param {string|number} key
|
|
216
|
+
* @param {object|undefined} parentObject
|
|
217
|
+
* @param {string|undefined} parentKey
|
|
218
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
219
|
+
* @returns {AnyDelegated}
|
|
220
|
+
*/
|
|
221
|
+
arrayKeyValueHandler (
|
|
222
|
+
value, key, parentObject, parentKey, parentObjectArrayBool
|
|
223
|
+
) {
|
|
224
|
+
return this.delegateHandlersByType(
|
|
225
|
+
value, parentObject, parentKey, parentObjectArrayBool
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* @param {AnyDelegated} value
|
|
231
|
+
* @param {string|number} key
|
|
232
|
+
* @param {object|undefined} parentObject
|
|
233
|
+
* @param {string|undefined} parentKey
|
|
234
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
235
|
+
* @param {number} [iterCt]
|
|
236
|
+
* @returns {AnyDelegated}
|
|
237
|
+
*/
|
|
238
|
+
objectKeyValueHandler (
|
|
239
|
+
value, key, parentObject, parentKey, parentObjectArrayBool,
|
|
240
|
+
// eslint-disable-next-line no-unused-vars -- Signature
|
|
241
|
+
iterCt
|
|
242
|
+
) {
|
|
243
|
+
return this.delegateHandlersByType(
|
|
244
|
+
value, parentObject, parentKey, parentObjectArrayBool
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// OPTIONAL DISTINGUISHING OF KEY AND VALUE HANDLERS
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Constructor may use this to override `keyValueHandler`.
|
|
252
|
+
* @param {AnyDelegated} value
|
|
253
|
+
* @param {string} key
|
|
254
|
+
* @param {object|undefined} parentObject
|
|
255
|
+
* @param {string|undefined} parentKey
|
|
256
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
257
|
+
* @param {boolean} arrayBool
|
|
258
|
+
* @param {number} iterCt
|
|
259
|
+
* @returns {string}
|
|
260
|
+
*/
|
|
261
|
+
keyValueDistinguishedHandler (
|
|
262
|
+
value, key, parentObject, parentKey,
|
|
263
|
+
parentObjectArrayBool, arrayBool, iterCt
|
|
264
|
+
) {
|
|
265
|
+
const ret = this.keyHandler(
|
|
266
|
+
key, parentObject, parentKey, parentObjectArrayBool, arrayBool, iterCt
|
|
267
|
+
);
|
|
268
|
+
return ret + this.valueHandler(
|
|
269
|
+
value, key, parentObject, parentKey,
|
|
270
|
+
parentObjectArrayBool, arrayBool, iterCt
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* @param {string|number} key
|
|
276
|
+
* @param {object|undefined} parentObject
|
|
277
|
+
* @param {string|undefined} parentKey
|
|
278
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
279
|
+
* @param {boolean} arrayBool
|
|
280
|
+
* @param {number} [iterCt]
|
|
281
|
+
* @returns {AnyDelegated}
|
|
282
|
+
*/
|
|
283
|
+
keyHandler (
|
|
284
|
+
key, parentObject, parentKey, parentObjectArrayBool, arrayBool, iterCt
|
|
285
|
+
) {
|
|
286
|
+
if (arrayBool) {
|
|
287
|
+
return this.arrayKeyHandler(
|
|
288
|
+
key, parentObject, parentKey, parentObjectArrayBool
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
return this.objectKeyHandler(
|
|
292
|
+
key, parentObject, parentKey, parentObjectArrayBool, iterCt
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* @param {AnyDelegated} value
|
|
297
|
+
* @param {string} key
|
|
298
|
+
* @param {object|undefined} parentObject
|
|
299
|
+
* @param {string|undefined} parentKey
|
|
300
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
301
|
+
* @param {boolean} arrayBool
|
|
302
|
+
* @param {number} iterCt
|
|
303
|
+
* @returns {AnyDelegated}
|
|
304
|
+
*/
|
|
305
|
+
valueHandler (
|
|
306
|
+
value, key, parentObject, parentKey,
|
|
307
|
+
parentObjectArrayBool, arrayBool,
|
|
308
|
+
iterCt
|
|
309
|
+
) {
|
|
310
|
+
if (arrayBool) {
|
|
311
|
+
return this.arrayValueHandler(
|
|
312
|
+
value, key, parentObject, parentKey, parentObjectArrayBool
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
return this.objectValueHandler(
|
|
316
|
+
value, key, parentObject, parentKey, parentObjectArrayBool, iterCt
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* @param {AnyDelegated} value
|
|
322
|
+
* @param {string} key
|
|
323
|
+
* @param {object|undefined} parentObject
|
|
324
|
+
* @param {string|undefined} parentKey
|
|
325
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
326
|
+
* @param {number} [iterCt]
|
|
327
|
+
* @returns {AnyDelegated}
|
|
328
|
+
*/
|
|
329
|
+
objectValueHandler (
|
|
330
|
+
value, key, parentObject, parentKey, parentObjectArrayBool,
|
|
331
|
+
// eslint-disable-next-line no-unused-vars -- Placeholder?
|
|
332
|
+
iterCt
|
|
333
|
+
) {
|
|
334
|
+
return this.delegateHandlersByType(
|
|
335
|
+
value, parentObject, parentKey, parentObjectArrayBool
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* @param {AnyDelegated[]} value
|
|
341
|
+
* @param {string} key
|
|
342
|
+
* @param {object|undefined} parentObject
|
|
343
|
+
* @param {string|undefined} parentKey
|
|
344
|
+
* @param {boolean|undefined} parentObjectArrayBool
|
|
345
|
+
* @returns {AnyDelegated}
|
|
346
|
+
*/
|
|
347
|
+
arrayValueHandler (
|
|
348
|
+
value, key, parentObject, parentKey, parentObjectArrayBool
|
|
349
|
+
) {
|
|
350
|
+
return this.delegateHandlersByType(
|
|
351
|
+
value, parentObject, parentKey, parentObjectArrayBool
|
|
352
|
+
);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
export default ObjectArrayDelegator;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provides JSON.stringifier()-like functionality (no replacer or space
|
|
3
|
+
* arguments currently, however).
|
|
4
|
+
* This class uses the abstract `ObjectArrayDelegator` for
|
|
5
|
+
* object/array delegating so the stringification can occur solely on
|
|
6
|
+
* the terminal methods here.
|
|
7
|
+
* @todo Could implement our own stringifier for strings rather than using
|
|
8
|
+
* `JSON.stringify`
|
|
9
|
+
*/
|
|
10
|
+
import ObjectArrayDelegator from './SAJJ.ObjectArrayDelegator.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
export default class Stringifier extends ObjectArrayDelegator {
|
|
16
|
+
// JSON terminal handler methods
|
|
17
|
+
|
|
18
|
+
// These four methods can be overridden without affecting the logic of
|
|
19
|
+
// the objectHandler and arrayHandler to utilize reporting of the
|
|
20
|
+
// object as a whole
|
|
21
|
+
/**
|
|
22
|
+
* @returns {string}
|
|
23
|
+
*/
|
|
24
|
+
beginObjectHandler (
|
|
25
|
+
/* value, parentObject, parentKey, parentObjectArrayBool */
|
|
26
|
+
) {
|
|
27
|
+
return '{';
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @returns {string}
|
|
31
|
+
*/
|
|
32
|
+
endObjectHandler (
|
|
33
|
+
/* value, parentObject, parentKey, parentObjectArrayBool */
|
|
34
|
+
) {
|
|
35
|
+
return '}';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @returns {string}
|
|
39
|
+
*/
|
|
40
|
+
beginArrayHandler (
|
|
41
|
+
/* value, parentObject, parentKey, parentObjectArrayBool */
|
|
42
|
+
) {
|
|
43
|
+
return '[';
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @returns {string}
|
|
47
|
+
*/
|
|
48
|
+
endArrayHandler (
|
|
49
|
+
/* value, parentObject, parentKey, parentObjectArrayBool */
|
|
50
|
+
) {
|
|
51
|
+
return ']';
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// JSON terminal key handler methods
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @param {string} key
|
|
58
|
+
* @returns {string}
|
|
59
|
+
*/
|
|
60
|
+
objectKeyHandler (
|
|
61
|
+
key /* , parentObject, parentKey, parentObjectArrayBool, iterCt */
|
|
62
|
+
) {
|
|
63
|
+
return '"' +
|
|
64
|
+
key.replaceAll('\\', '\\\\').replaceAll('"', String.raw`\"`) + '":';
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @returns {string}
|
|
69
|
+
*/
|
|
70
|
+
arrayKeyHandler (/* key, parentObject, parentKey, parentObjectArrayBool */) {
|
|
71
|
+
return '';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// JSON terminal joiner handler methods
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @returns {string}
|
|
78
|
+
*/
|
|
79
|
+
objectKeyValueJoinerHandler () {
|
|
80
|
+
return ',';
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* @returns {string}
|
|
84
|
+
*/
|
|
85
|
+
arrayKeyValueJoinerHandler () {
|
|
86
|
+
return ',';
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// JSON terminal primitive handler methods
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @returns {string}
|
|
93
|
+
*/
|
|
94
|
+
nullHandler (/* parentObject, parentKey, parentObjectArrayBool */) {
|
|
95
|
+
return 'null';
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @param {boolean} value
|
|
100
|
+
* @returns {string}
|
|
101
|
+
*/
|
|
102
|
+
// eslint-disable-next-line @stylistic/max-len -- Long
|
|
103
|
+
// eslint-disable-next-line unicorn/prefer-native-coercion-functions -- Clearer
|
|
104
|
+
booleanHandler (
|
|
105
|
+
value /* , parentObject, parentKey, parentObjectArrayBool */
|
|
106
|
+
) {
|
|
107
|
+
return String(value);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @param {number} value
|
|
112
|
+
* @returns {string}
|
|
113
|
+
*/
|
|
114
|
+
// eslint-disable-next-line @stylistic/max-len -- Long
|
|
115
|
+
// eslint-disable-next-line unicorn/prefer-native-coercion-functions -- Clearer
|
|
116
|
+
numberHandler (value /* , parentObject, parentKey, parentObjectArrayBool */) {
|
|
117
|
+
return String(value);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* @param {string} value
|
|
122
|
+
* @returns {string}
|
|
123
|
+
*/
|
|
124
|
+
stringHandler (value /* , parentObject, parentKey, parentObjectArrayBool */) {
|
|
125
|
+
return JSON.stringify(value);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* eslint-disable jsdoc/reject-function-type -- Generic */
|
|
129
|
+
/**
|
|
130
|
+
* @typedef {Function} GenericFunction
|
|
131
|
+
*/
|
|
132
|
+
/* eslint-enable jsdoc/reject-function-type -- Generic */
|
|
133
|
+
|
|
134
|
+
// JavaScript-only (non-JSON) (terminal) handler methods (not used or
|
|
135
|
+
// required for JSON mode)
|
|
136
|
+
/**
|
|
137
|
+
* @param {GenericFunction} value
|
|
138
|
+
* @returns {string}
|
|
139
|
+
*/
|
|
140
|
+
functionHandler (
|
|
141
|
+
value /* , parentObject, parentKey, parentObjectArrayBool */
|
|
142
|
+
) {
|
|
143
|
+
return value.toString(); // May not be supported everywhere
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @returns {string}
|
|
148
|
+
*/
|
|
149
|
+
undefinedHandler (/* parentObject, parentKey, parentObjectArrayBool */) {
|
|
150
|
+
return 'undefined';
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @param {bigint} value
|
|
155
|
+
* @returns {string}
|
|
156
|
+
*/
|
|
157
|
+
bigintHandler (
|
|
158
|
+
value /* , parentObject, parentKey, parentObjectArrayBool */
|
|
159
|
+
) {
|
|
160
|
+
return String(value) + 'n';
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* @param {symbol} value
|
|
165
|
+
* @returns {string}
|
|
166
|
+
*/
|
|
167
|
+
// eslint-disable-next-line @stylistic/max-len -- Long
|
|
168
|
+
// eslint-disable-next-line unicorn/prefer-native-coercion-functions -- Clearer
|
|
169
|
+
symbolHandler (
|
|
170
|
+
value /* , parentObject, parentKey, parentObjectArrayBool */
|
|
171
|
+
) {
|
|
172
|
+
return String(value);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* @param {number} value
|
|
177
|
+
* @returns {string}
|
|
178
|
+
*/
|
|
179
|
+
// eslint-disable-next-line @stylistic/max-len -- Long
|
|
180
|
+
// eslint-disable-next-line unicorn/prefer-native-coercion-functions -- Clearer
|
|
181
|
+
nonfiniteNumberHandler (
|
|
182
|
+
value /* , parentObject, parentKey, parentObjectArrayBool */
|
|
183
|
+
) {
|
|
184
|
+
return String(value);
|
|
185
|
+
}
|
|
186
|
+
}
|