toon-formatter 2.0.0 → 2.1.1
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/CHANGELOG.md +39 -1
- package/README.md +152 -1
- package/package.json +14 -7
- package/src/csv.js +19 -50
- package/src/csv_formatter/index.js +496 -0
- package/src/csv_formatter/validator.js +36 -0
- package/src/index.js +9 -1
- package/src/json.js +117 -67
- package/src/json_formatter/csv.js +145 -0
- package/src/json_formatter/index.js +525 -0
- package/src/json_formatter/validator.js +29 -0
- package/src/json_formatter/xml.js +206 -0
- package/src/json_formatter/yaml.js +81 -0
- package/src/utils.js +262 -64
- package/src/xml.js +24 -79
- package/src/xml_formatter/csv.js +122 -0
- package/src/xml_formatter/index.js +488 -0
- package/src/xml_formatter/validator.js +53 -0
- package/src/yaml_formatter/csv.js +101 -0
- package/src/yaml_formatter/index.js +542 -0
- package/src/yaml_formatter/validator.js +31 -0
- package/src/yaml_formatter/xml.js +116 -0
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JsonConverter Class
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { toonToJson, toonToJsonSync, jsonToToon, jsonToToonSync } from '../json.js';
|
|
6
|
+
import { yamlToJson, yamlToJsonSync, jsonToYaml, jsonToYamlSync } from './yaml.js';
|
|
7
|
+
import { xmlToJson, xmlToJsonSync, jsonToXml, jsonToXmlSync } from './xml.js';
|
|
8
|
+
import { csvToJson, csvToJsonSync, jsonToCsv, jsonToCsvSync } from './csv.js';
|
|
9
|
+
import { validateJsonString, validateJsonStringSync } from './validator.js';
|
|
10
|
+
|
|
11
|
+
export class JsonConverter {
|
|
12
|
+
/**
|
|
13
|
+
* Creates a JsonConverter instance
|
|
14
|
+
* @param {Object} [encryptor=null] - Optional Encryptor instance for encryption support
|
|
15
|
+
*/
|
|
16
|
+
constructor(encryptor = null) {
|
|
17
|
+
this.encryptor = encryptor;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// --- Helper Methods for Encryption ---
|
|
21
|
+
|
|
22
|
+
_convertWithEncryption(fn, data, mode) {
|
|
23
|
+
if (!this.encryptor || mode === 'no_encryption') {
|
|
24
|
+
return fn(data);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
switch (mode) {
|
|
28
|
+
case 'middleware': // Decrypt -> Convert -> Encrypt
|
|
29
|
+
// Input is encrypted
|
|
30
|
+
const decrypted = this.encryptor.decrypt(data);
|
|
31
|
+
const result = fn(decrypted);
|
|
32
|
+
return this.encryptor.encrypt(result);
|
|
33
|
+
case 'ingestion': // Decrypt -> Convert
|
|
34
|
+
// Input is encrypted
|
|
35
|
+
const dec = this.encryptor.decrypt(data);
|
|
36
|
+
return fn(dec);
|
|
37
|
+
case 'export': // Convert -> Encrypt
|
|
38
|
+
// Input is plain
|
|
39
|
+
const res = fn(data);
|
|
40
|
+
return this.encryptor.encrypt(res);
|
|
41
|
+
default:
|
|
42
|
+
return fn(data);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async _convertWithEncryptionAsync(fn, data, mode) {
|
|
47
|
+
if (!this.encryptor || mode === 'no_encryption') {
|
|
48
|
+
return await fn(data);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
switch (mode) {
|
|
52
|
+
case 'middleware':
|
|
53
|
+
const decrypted = this.encryptor.decrypt(data);
|
|
54
|
+
const result = await fn(decrypted);
|
|
55
|
+
return this.encryptor.encrypt(result);
|
|
56
|
+
case 'ingestion':
|
|
57
|
+
const dec = this.encryptor.decrypt(data);
|
|
58
|
+
return await fn(dec);
|
|
59
|
+
case 'export':
|
|
60
|
+
const res = await fn(data);
|
|
61
|
+
return this.encryptor.encrypt(res);
|
|
62
|
+
default:
|
|
63
|
+
return await fn(data);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
// --- TOON Conversions ---
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Convert TOON string to JSON (Sync)
|
|
72
|
+
* @param {string} toonString - TOON formatted string
|
|
73
|
+
* @param {Object} [options={}] - Conversion options
|
|
74
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode: 'no_encryption', 'middleware', 'ingestion', 'export'
|
|
75
|
+
* @param {boolean} [options.returnJson=false] - If true, returns JSON string; if false, returns object
|
|
76
|
+
* @returns {Object|string} JSON object or string
|
|
77
|
+
*/
|
|
78
|
+
fromToon(toonString, options = {}) {
|
|
79
|
+
const { conversionMode = 'no_encryption', returnJson = false } = options;
|
|
80
|
+
return this._convertWithEncryption(
|
|
81
|
+
(data) => toonToJsonSync(data, returnJson),
|
|
82
|
+
toonString,
|
|
83
|
+
conversionMode
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Convert TOON string to JSON (Async)
|
|
89
|
+
* @param {string} toonString - TOON formatted string
|
|
90
|
+
* @param {Object} [options={}] - Conversion options
|
|
91
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
92
|
+
* @param {boolean} [options.returnJson=false] - If true, returns JSON string; if false, returns object
|
|
93
|
+
* @returns {Promise<Object|string>} JSON object or string
|
|
94
|
+
*/
|
|
95
|
+
async fromToonAsync(toonString, options = {}) {
|
|
96
|
+
const { conversionMode = 'no_encryption', returnJson = false } = options;
|
|
97
|
+
return this._convertWithEncryptionAsync(
|
|
98
|
+
async (data) => toonToJson(data, returnJson),
|
|
99
|
+
toonString,
|
|
100
|
+
conversionMode
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Convert JSON to TOON string (Sync)
|
|
106
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
107
|
+
* @param {Object} [options={}] - Conversion options
|
|
108
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
109
|
+
* @returns {string} TOON formatted string
|
|
110
|
+
*/
|
|
111
|
+
toToon(jsonData, options = {}) {
|
|
112
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
113
|
+
return this._convertWithEncryption(
|
|
114
|
+
(data) => jsonToToonSync(data),
|
|
115
|
+
jsonData,
|
|
116
|
+
conversionMode
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Convert JSON to TOON string (Async)
|
|
122
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
123
|
+
* @param {Object} [options={}] - Conversion options
|
|
124
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
125
|
+
* @returns {Promise<string>} TOON formatted string
|
|
126
|
+
*/
|
|
127
|
+
async toToonAsync(jsonData, options = {}) {
|
|
128
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
129
|
+
return this._convertWithEncryptionAsync(
|
|
130
|
+
async (data) => jsonToToon(data),
|
|
131
|
+
jsonData,
|
|
132
|
+
conversionMode
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// --- YAML Conversions ---
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Convert YAML string to JSON (Sync)
|
|
140
|
+
* @param {string} yamlString - YAML formatted string
|
|
141
|
+
* @param {Object} [options={}] - Conversion options
|
|
142
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
143
|
+
* @param {boolean} [options.returnJson=false] - If true, returns JSON string; if false, returns object
|
|
144
|
+
* @returns {Object|string} JSON result
|
|
145
|
+
*/
|
|
146
|
+
fromYaml(yamlString, options = {}) {
|
|
147
|
+
const { conversionMode = 'no_encryption', returnJson = false } = options;
|
|
148
|
+
return this._convertWithEncryption(
|
|
149
|
+
(data) => yamlToJsonSync(data, returnJson),
|
|
150
|
+
yamlString,
|
|
151
|
+
conversionMode
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Convert YAML string to JSON (Async)
|
|
157
|
+
* @param {string} yamlString - YAML formatted string
|
|
158
|
+
* @param {Object} [options={}] - Conversion options
|
|
159
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
160
|
+
* @param {boolean} [options.returnJson=false] - If true, returns JSON string; if false, returns object
|
|
161
|
+
* @returns {Promise<Object|string>} JSON result
|
|
162
|
+
*/
|
|
163
|
+
async fromYamlAsync(yamlString, options = {}) {
|
|
164
|
+
const { conversionMode = 'no_encryption', returnJson = false } = options;
|
|
165
|
+
return this._convertWithEncryptionAsync(
|
|
166
|
+
async (data) => yamlToJson(data, returnJson),
|
|
167
|
+
yamlString,
|
|
168
|
+
conversionMode
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Convert JSON to YAML string (Sync)
|
|
174
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
175
|
+
* @param {Object} [options={}] - Conversion options
|
|
176
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
177
|
+
* @returns {string} YAML formatted string
|
|
178
|
+
*/
|
|
179
|
+
toYaml(jsonData, options = {}) {
|
|
180
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
181
|
+
return this._convertWithEncryption(
|
|
182
|
+
(data) => jsonToYamlSync(data),
|
|
183
|
+
jsonData,
|
|
184
|
+
conversionMode
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Convert JSON to YAML string (Async)
|
|
190
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
191
|
+
* @param {Object} [options={}] - Conversion options
|
|
192
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
193
|
+
* @returns {Promise<string>} YAML formatted string
|
|
194
|
+
*/
|
|
195
|
+
async toYamlAsync(jsonData, options = {}) {
|
|
196
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
197
|
+
return this._convertWithEncryptionAsync(
|
|
198
|
+
async (data) => jsonToYaml(data),
|
|
199
|
+
jsonData,
|
|
200
|
+
conversionMode
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// --- XML Conversions ---
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Convert XML string to JSON (Sync)
|
|
208
|
+
* @param {string} xmlString - XML formatted string (supports mixed text)
|
|
209
|
+
* @param {Object} [options={}] - Conversion options
|
|
210
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
211
|
+
* @returns {Object|string} JSON result
|
|
212
|
+
*/
|
|
213
|
+
fromXml(xmlString, options = {}) {
|
|
214
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
215
|
+
return this._convertWithEncryption(
|
|
216
|
+
(data) => xmlToJsonSync(data),
|
|
217
|
+
xmlString,
|
|
218
|
+
conversionMode
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Convert XML string to JSON (Async)
|
|
224
|
+
* @param {string} xmlString - XML formatted string (supports mixed text)
|
|
225
|
+
* @param {Object} [options={}] - Conversion options
|
|
226
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
227
|
+
* @returns {Promise<Object|string>} JSON result
|
|
228
|
+
*/
|
|
229
|
+
async fromXmlAsync(xmlString, options = {}) {
|
|
230
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
231
|
+
return this._convertWithEncryptionAsync(
|
|
232
|
+
async (data) => xmlToJson(data),
|
|
233
|
+
xmlString,
|
|
234
|
+
conversionMode
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Convert JSON to XML string (Sync)
|
|
240
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
241
|
+
* @param {Object} [options={}] - Conversion options
|
|
242
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
243
|
+
* @returns {string} XML formatted string
|
|
244
|
+
*/
|
|
245
|
+
toXml(jsonData, options = {}) {
|
|
246
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
247
|
+
return this._convertWithEncryption(
|
|
248
|
+
(data) => jsonToXmlSync(data),
|
|
249
|
+
jsonData,
|
|
250
|
+
conversionMode
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Convert JSON to XML string (Async)
|
|
256
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
257
|
+
* @param {Object} [options={}] - Conversion options
|
|
258
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
259
|
+
* @returns {Promise<string>} XML formatted string
|
|
260
|
+
*/
|
|
261
|
+
async toXmlAsync(jsonData, options = {}) {
|
|
262
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
263
|
+
return this._convertWithEncryptionAsync(
|
|
264
|
+
async (data) => jsonToXml(data),
|
|
265
|
+
jsonData,
|
|
266
|
+
conversionMode
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// --- CSV Conversions ---
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Convert CSV string to JSON (Sync)
|
|
274
|
+
* @param {string} csvString - CSV formatted string (supports mixed text)
|
|
275
|
+
* @param {Object} [options={}] - Conversion options
|
|
276
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
277
|
+
* @returns {Array<Object>|string} JSON result
|
|
278
|
+
*/
|
|
279
|
+
fromCsv(csvString, options = {}) {
|
|
280
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
281
|
+
return this._convertWithEncryption(
|
|
282
|
+
(data) => csvToJsonSync(data),
|
|
283
|
+
csvString,
|
|
284
|
+
conversionMode
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Convert CSV string to JSON (Async)
|
|
290
|
+
* @param {string} csvString - CSV formatted string (supports mixed text)
|
|
291
|
+
* @param {Object} [options={}] - Conversion options
|
|
292
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
293
|
+
* @returns {Promise<Array<Object>|string>} JSON result
|
|
294
|
+
*/
|
|
295
|
+
async fromCsvAsync(csvString, options = {}) {
|
|
296
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
297
|
+
return this._convertWithEncryptionAsync(
|
|
298
|
+
async (data) => csvToJson(data),
|
|
299
|
+
csvString,
|
|
300
|
+
conversionMode
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Convert JSON to CSV string (Sync)
|
|
306
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
307
|
+
* @param {Object} [options={}] - Conversion options
|
|
308
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
309
|
+
* @returns {string} CSV formatted string
|
|
310
|
+
*/
|
|
311
|
+
toCsv(jsonData, options = {}) {
|
|
312
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
313
|
+
return this._convertWithEncryption(
|
|
314
|
+
(data) => jsonToCsvSync(data),
|
|
315
|
+
jsonData,
|
|
316
|
+
conversionMode
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Convert JSON to CSV string (Async)
|
|
322
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
323
|
+
* @param {Object} [options={}] - Conversion options
|
|
324
|
+
* @param {string} [options.conversionMode='no_encryption'] - Encryption mode
|
|
325
|
+
* @returns {Promise<string>} CSV formatted string
|
|
326
|
+
*/
|
|
327
|
+
async toCsvAsync(jsonData, options = {}) {
|
|
328
|
+
const { conversionMode = 'no_encryption' } = options;
|
|
329
|
+
return this._convertWithEncryptionAsync(
|
|
330
|
+
async (data) => jsonToCsv(data),
|
|
331
|
+
jsonData,
|
|
332
|
+
conversionMode
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// --- Validation ---
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Validate JSON string (Sync)
|
|
340
|
+
* @param {string} jsonString - JSON string to validate
|
|
341
|
+
* @returns {boolean} True if valid
|
|
342
|
+
*/
|
|
343
|
+
validate(jsonString) {
|
|
344
|
+
return validateJsonStringSync(jsonString);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Validate JSON string (Async)
|
|
349
|
+
* @param {string} jsonString - JSON string to validate
|
|
350
|
+
* @returns {Promise<boolean>} True if valid
|
|
351
|
+
*/
|
|
352
|
+
async validateAsync(jsonString) {
|
|
353
|
+
return validateJsonString(jsonString);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// ========================================
|
|
357
|
+
// Static Methods (Backward Compatibility)
|
|
358
|
+
// ========================================
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Convert TOON string to JSON (Sync)
|
|
362
|
+
* @param {string} toonString - TOON formatted string
|
|
363
|
+
* @param {boolean} [returnJson=false] - If true, returns JSON string; if false, returns object
|
|
364
|
+
* @returns {Object|string} JSON object or string
|
|
365
|
+
*/
|
|
366
|
+
static fromToon(toonString, returnJson = false) {
|
|
367
|
+
return toonToJsonSync(toonString, returnJson);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Convert TOON string to JSON (Async)
|
|
372
|
+
* @param {string} toonString - TOON formatted string
|
|
373
|
+
* @param {boolean} [returnJson=false] - If true, returns JSON string; if false, returns object
|
|
374
|
+
* @returns {Promise<Object|string>} JSON object or string
|
|
375
|
+
*/
|
|
376
|
+
static async fromToonAsync(toonString, returnJson = false) {
|
|
377
|
+
return toonToJson(toonString, returnJson);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Convert JSON to TOON string (Sync)
|
|
382
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
383
|
+
* @returns {string} TOON formatted string
|
|
384
|
+
*/
|
|
385
|
+
static toToon(jsonData) {
|
|
386
|
+
return jsonToToonSync(jsonData);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* Convert JSON to TOON string (Async)
|
|
391
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
392
|
+
* @returns {Promise<string>} TOON formatted string
|
|
393
|
+
*/
|
|
394
|
+
static async toToonAsync(jsonData) {
|
|
395
|
+
return jsonToToon(jsonData);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Convert YAML string to JSON (Sync)
|
|
400
|
+
* @param {string} yamlString - YAML formatted string
|
|
401
|
+
* @param {boolean} [returnJson=false] - If true, returns JSON string; if false, returns object
|
|
402
|
+
* @returns {Object|string} JSON object or string
|
|
403
|
+
*/
|
|
404
|
+
static fromYaml(yamlString, returnJson = false) {
|
|
405
|
+
return yamlToJsonSync(yamlString, returnJson);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Convert YAML string to JSON (Async)
|
|
410
|
+
* @param {string} yamlString - YAML formatted string
|
|
411
|
+
* @param {boolean} [returnJson=false] - If true, returns JSON string; if false, returns object
|
|
412
|
+
* @returns {Promise<Object|string>} JSON object or string
|
|
413
|
+
*/
|
|
414
|
+
static async fromYamlAsync(yamlString, returnJson = false) {
|
|
415
|
+
return yamlToJson(yamlString, returnJson);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Convert JSON to YAML string (Sync)
|
|
420
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
421
|
+
* @returns {string} YAML formatted string
|
|
422
|
+
*/
|
|
423
|
+
static toYaml(jsonData) {
|
|
424
|
+
return jsonToYamlSync(jsonData);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Convert JSON to YAML string (Async)
|
|
429
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
430
|
+
* @returns {Promise<string>} YAML formatted string
|
|
431
|
+
*/
|
|
432
|
+
static async toYamlAsync(jsonData) {
|
|
433
|
+
return jsonToYaml(jsonData);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Convert XML string to JSON (Sync)
|
|
438
|
+
* @param {string} xmlString - XML formatted string
|
|
439
|
+
* @returns {Object|string} JSON object or string
|
|
440
|
+
*/
|
|
441
|
+
static fromXml(xmlString) {
|
|
442
|
+
return xmlToJsonSync(xmlString);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* Convert XML string to JSON (Async)
|
|
447
|
+
* @param {string} xmlString - XML formatted string
|
|
448
|
+
* @returns {Promise<Object|string>} JSON object or string
|
|
449
|
+
*/
|
|
450
|
+
static async fromXmlAsync(xmlString) {
|
|
451
|
+
return xmlToJson(xmlString);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Convert JSON to XML string (Sync)
|
|
456
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
457
|
+
* @returns {string} XML formatted string
|
|
458
|
+
*/
|
|
459
|
+
static toXml(jsonData) {
|
|
460
|
+
return jsonToXmlSync(jsonData);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Convert JSON to XML string (Async)
|
|
465
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
466
|
+
* @returns {Promise<string>} XML formatted string
|
|
467
|
+
*/
|
|
468
|
+
static async toXmlAsync(jsonData) {
|
|
469
|
+
return jsonToXml(jsonData);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Convert CSV string to JSON (Sync)
|
|
474
|
+
* @param {string} csvString - CSV formatted string
|
|
475
|
+
* @returns {Array<Object>|string} JSON object or string
|
|
476
|
+
*/
|
|
477
|
+
static fromCsv(csvString) {
|
|
478
|
+
return csvToJsonSync(csvString);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Convert CSV string to JSON (Async)
|
|
483
|
+
* @param {string} csvString - CSV formatted string
|
|
484
|
+
* @returns {Promise<Array<Object>|string>} JSON object or string
|
|
485
|
+
*/
|
|
486
|
+
static async fromCsvAsync(csvString) {
|
|
487
|
+
return csvToJson(csvString);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Convert JSON to CSV string (Sync)
|
|
492
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
493
|
+
* @returns {string} CSV formatted string
|
|
494
|
+
*/
|
|
495
|
+
static toCsv(jsonData) {
|
|
496
|
+
return jsonToCsvSync(jsonData);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* Convert JSON to CSV string (Async)
|
|
501
|
+
* @param {Object|string} jsonData - JSON data or string with embedded JSON
|
|
502
|
+
* @returns {Promise<string>} CSV formatted string
|
|
503
|
+
*/
|
|
504
|
+
static async toCsvAsync(jsonData) {
|
|
505
|
+
return jsonToCsv(jsonData);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Validate JSON string
|
|
510
|
+
* @param {string} jsonString - JSON string to validate
|
|
511
|
+
* @returns {boolean} True if valid
|
|
512
|
+
*/
|
|
513
|
+
static validate(jsonString) {
|
|
514
|
+
return validateJsonStringSync(jsonString);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Validate JSON string (Async)
|
|
519
|
+
* @param {string} jsonString - JSON string to validate
|
|
520
|
+
* @returns {Promise<boolean>} True if valid
|
|
521
|
+
*/
|
|
522
|
+
static async validateAsync(jsonString) {
|
|
523
|
+
return validateJsonString(jsonString);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Validator (for JsonConverter)
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Validate JSON string (Sync)
|
|
7
|
+
* @param {string} jsonString
|
|
8
|
+
* @returns {boolean} True if valid, throws error otherwise
|
|
9
|
+
*/
|
|
10
|
+
export function validateJsonStringSync(jsonString) {
|
|
11
|
+
if (typeof jsonString !== 'string') {
|
|
12
|
+
throw new Error("Input must be a string.");
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
JSON.parse(jsonString);
|
|
16
|
+
return true;
|
|
17
|
+
} catch (e) {
|
|
18
|
+
throw new Error(`Invalid JSON: ${e.message}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Validate JSON string (Async)
|
|
24
|
+
* @param {string} jsonString
|
|
25
|
+
* @returns {Promise<boolean>} True if valid
|
|
26
|
+
*/
|
|
27
|
+
export async function validateJsonString(jsonString) {
|
|
28
|
+
return validateJsonStringSync(jsonString);
|
|
29
|
+
}
|