@typia/utils 12.0.0-dev.20260306 → 12.0.0-dev.20260307

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.
Files changed (60) hide show
  1. package/README.md +5 -5
  2. package/lib/converters/LlmSchemaConverter.d.ts +1 -20
  3. package/lib/converters/LlmSchemaConverter.js +0 -189
  4. package/lib/converters/LlmSchemaConverter.js.map +1 -1
  5. package/lib/converters/LlmSchemaConverter.mjs +0 -227
  6. package/lib/converters/LlmSchemaConverter.mjs.map +1 -1
  7. package/lib/http/HttpLlm.d.ts +2 -32
  8. package/lib/http/HttpLlm.js +4 -27
  9. package/lib/http/HttpLlm.js.map +1 -1
  10. package/lib/http/HttpLlm.mjs +1 -24
  11. package/lib/http/HttpLlm.mjs.map +1 -1
  12. package/lib/http/internal/HttpLlmApplicationComposer.js +13 -19
  13. package/lib/http/internal/HttpLlmApplicationComposer.js.map +1 -1
  14. package/lib/http/internal/HttpLlmApplicationComposer.mjs +7 -9
  15. package/lib/http/internal/HttpLlmApplicationComposer.mjs.map +1 -1
  16. package/lib/index.mjs +10 -10
  17. package/lib/utils/LlmJson.d.ts +67 -0
  18. package/lib/utils/LlmJson.js +106 -0
  19. package/lib/utils/LlmJson.js.map +1 -0
  20. package/lib/utils/LlmJson.mjs +113 -0
  21. package/lib/utils/LlmJson.mjs.map +1 -0
  22. package/lib/utils/index.d.ts +1 -1
  23. package/lib/utils/index.js +1 -1
  24. package/lib/utils/index.js.map +1 -1
  25. package/lib/utils/index.mjs +1 -1
  26. package/lib/utils/internal/coerceLlmArguments.d.ts +1 -0
  27. package/lib/utils/internal/coerceLlmArguments.js +233 -0
  28. package/lib/utils/internal/coerceLlmArguments.js.map +1 -0
  29. package/lib/utils/internal/coerceLlmArguments.mjs +232 -0
  30. package/lib/utils/internal/coerceLlmArguments.mjs.map +1 -0
  31. package/lib/utils/internal/parseLenientJson.d.ts +1 -0
  32. package/lib/utils/internal/parseLenientJson.js +639 -0
  33. package/lib/utils/internal/parseLenientJson.js.map +1 -0
  34. package/lib/utils/internal/parseLenientJson.mjs +640 -0
  35. package/lib/utils/internal/parseLenientJson.mjs.map +1 -0
  36. package/lib/utils/internal/stringifyValidationFailure.d.ts +2 -0
  37. package/lib/utils/{stringifyValidationFailure.js → internal/stringifyValidationFailure.js} +55 -63
  38. package/lib/utils/internal/stringifyValidationFailure.js.map +1 -0
  39. package/lib/utils/{stringifyValidationFailure.mjs → internal/stringifyValidationFailure.mjs} +54 -63
  40. package/lib/utils/internal/stringifyValidationFailure.mjs.map +1 -0
  41. package/lib/validators/internal/OpenApiOneOfValidator.mjs +5 -1
  42. package/lib/validators/internal/OpenApiOneOfValidator.mjs.map +1 -1
  43. package/package.json +2 -2
  44. package/src/converters/LlmSchemaConverter.ts +0 -277
  45. package/src/http/HttpLlm.ts +1 -44
  46. package/src/http/internal/HttpLlmApplicationComposer.ts +3 -9
  47. package/src/utils/LlmJson.ts +115 -0
  48. package/src/utils/index.ts +1 -1
  49. package/src/utils/internal/coerceLlmArguments.ts +297 -0
  50. package/src/utils/internal/parseLenientJson.ts +731 -0
  51. package/src/utils/{stringifyValidationFailure.ts → internal/stringifyValidationFailure.ts} +66 -70
  52. package/lib/http/internal/LlmDataMerger.d.ts +0 -48
  53. package/lib/http/internal/LlmDataMerger.js +0 -60
  54. package/lib/http/internal/LlmDataMerger.js.map +0 -1
  55. package/lib/http/internal/LlmDataMerger.mjs +0 -59
  56. package/lib/http/internal/LlmDataMerger.mjs.map +0 -1
  57. package/lib/utils/stringifyValidationFailure.d.ts +0 -25
  58. package/lib/utils/stringifyValidationFailure.js.map +0 -1
  59. package/lib/utils/stringifyValidationFailure.mjs.map +0 -1
  60. package/src/http/internal/LlmDataMerger.ts +0 -73
@@ -0,0 +1,639 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseLenientJson = parseLenientJson;
4
+ /**
5
+ * Maximum nesting depth to prevent stack overflow attacks.
6
+ *
7
+ * @internal
8
+ */
9
+ const MAX_DEPTH = 512;
10
+ /**
11
+ * Check if a string is a valid 4-character hexadecimal string.
12
+ *
13
+ * @internal
14
+ */
15
+ function isHexString(s) {
16
+ if (s.length !== 4)
17
+ return false;
18
+ for (let i = 0; i < 4; i++) {
19
+ const c = s.charCodeAt(i);
20
+ if (!((c >= 48 && c <= 57) || (c >= 65 && c <= 70) || (c >= 97 && c <= 102))) {
21
+ return false;
22
+ }
23
+ }
24
+ return true;
25
+ }
26
+ /**
27
+ * Extract JSON content from markdown code block if present.
28
+ *
29
+ * LLM outputs often wrap JSON in markdown code blocks like:
30
+ *
31
+ * Here is your result:
32
+ *
33
+ * ```json
34
+ * { "name": "test" }
35
+ * ```
36
+ *
37
+ * This function extracts the content between the backticks.
38
+ *
39
+ * IMPORTANT: Only extracts if the input doesn't already start with JSON. If
40
+ * input (after trim) starts with `{`, `[`, or `"`, it's already JSON and any
41
+ * markdown inside is part of a string value.
42
+ *
43
+ * @param input Text that may contain markdown code block
44
+ * @returns Extracted content or null if no code block found
45
+ * @internal
46
+ */
47
+ function extractMarkdownCodeBlock(input) {
48
+ // Must be ```json specifically, not just ```
49
+ const codeBlockStart = input.indexOf("```json");
50
+ if (codeBlockStart === -1)
51
+ return null;
52
+ // Check if input already starts with JSON (after trimming whitespace)
53
+ // If so, don't extract - the markdown is inside a JSON string value
54
+ const trimmed = input.trimStart();
55
+ if (trimmed.length > 0) {
56
+ const firstChar = trimmed[0];
57
+ if (firstChar === "{" || firstChar === "[" || firstChar === '"') {
58
+ return null;
59
+ }
60
+ }
61
+ // Find the end of the opening line (after ```json)
62
+ let contentStart = codeBlockStart + 7; // length of "```json"
63
+ while (contentStart < input.length && input[contentStart] !== "\n") {
64
+ contentStart++;
65
+ }
66
+ if (contentStart >= input.length)
67
+ return null;
68
+ contentStart++; // skip the newline
69
+ // Find the closing ```
70
+ const codeBlockEnd = input.indexOf("```", contentStart);
71
+ if (codeBlockEnd === -1) {
72
+ // No closing ``` - return everything after opening
73
+ return input.slice(contentStart);
74
+ }
75
+ return input.slice(contentStart, codeBlockEnd);
76
+ }
77
+ /**
78
+ * Find the start position of JSON object/array content in text that may have
79
+ * junk prefix.
80
+ *
81
+ * LLM outputs often contain text before JSON like:
82
+ *
83
+ * - "Here is your JSON: {"name": "test"}"
84
+ * - "Sure! [1, 2, 3]"
85
+ *
86
+ * This function only looks for `{` or `[` to skip junk prefix. Primitive values
87
+ * (strings, numbers, booleans) are handled directly by the parser.
88
+ *
89
+ * @param input Text that may contain JSON with junk prefix
90
+ * @returns Index of first `{` or `[`, or -1 if not found
91
+ * @internal
92
+ */
93
+ function findJsonStart(input) {
94
+ const objStart = input.indexOf("{");
95
+ const arrStart = input.indexOf("[");
96
+ if (objStart === -1 && arrStart === -1)
97
+ return -1;
98
+ if (objStart === -1)
99
+ return arrStart;
100
+ if (arrStart === -1)
101
+ return objStart;
102
+ return Math.min(objStart, arrStart);
103
+ }
104
+ /**
105
+ * Check if input starts with a valid JSON primitive token.
106
+ *
107
+ * @param input Trimmed input string
108
+ * @returns True if input starts with a primitive value
109
+ * @internal
110
+ */
111
+ function startsWithPrimitive(input) {
112
+ if (input.length === 0)
113
+ return false;
114
+ const ch = input[0];
115
+ // String
116
+ if (ch === '"')
117
+ return true;
118
+ // Number (digit or minus)
119
+ if ((ch >= "0" && ch <= "9") || ch === "-")
120
+ return true;
121
+ // Keywords
122
+ if (input.startsWith("true") ||
123
+ input.startsWith("false") ||
124
+ input.startsWith("null"))
125
+ return true;
126
+ // Partial keywords
127
+ if ("true".startsWith(input) ||
128
+ "false".startsWith(input) ||
129
+ "null".startsWith(input))
130
+ return true;
131
+ return false;
132
+ }
133
+ /**
134
+ * Parse lenient JSON that may be incomplete or malformed.
135
+ *
136
+ * Handles:
137
+ *
138
+ * - Unclosed brackets `{`, `[` - parses as much as possible
139
+ * - Trailing commas `[1, 2, ]` - ignores them
140
+ * - Unclosed strings `"hello` - returns partial string
141
+ * - Junk text before JSON (LLM often adds explanatory text)
142
+ * - Markdown code blocks (extracts content from `json ... `)
143
+ * - Incomplete keywords like `tru`, `fal`, `nul`
144
+ * - Unicode escape sequences including surrogate pairs (emoji)
145
+ * - JavaScript-style comments (single-line and multi-line)
146
+ * - Unquoted object keys (JavaScript identifier style)
147
+ *
148
+ * @param input Raw JSON string (potentially incomplete)
149
+ * @returns Parse result with data, original input, and any errors
150
+ * @internal
151
+ */
152
+ function parseLenientJson(input) {
153
+ // Try native JSON.parse first (faster for valid JSON)
154
+ try {
155
+ return {
156
+ success: true,
157
+ data: JSON.parse(input),
158
+ };
159
+ }
160
+ catch (_a) {
161
+ // Fall back to lenient parser
162
+ }
163
+ // Extract markdown code block if present
164
+ const codeBlockContent = extractMarkdownCodeBlock(input);
165
+ const jsonSource = codeBlockContent !== null ? codeBlockContent : input;
166
+ // Check if input is empty or whitespace-only
167
+ const trimmed = jsonSource.trim();
168
+ if (trimmed.length === 0) {
169
+ const errors = [];
170
+ const parser = new LenientJsonParser(jsonSource, errors);
171
+ const data = parser.parse();
172
+ if (errors.length > 0) {
173
+ return { success: false, data: data, input, errors };
174
+ }
175
+ return { success: true, data: data };
176
+ }
177
+ // Check if input starts with a primitive value (no junk prefix skipping needed)
178
+ if (startsWithPrimitive(trimmed)) {
179
+ const errors = [];
180
+ const parser = new LenientJsonParser(jsonSource, errors);
181
+ const data = parser.parse();
182
+ if (errors.length > 0) {
183
+ return { success: false, data: data, input, errors };
184
+ }
185
+ return { success: true, data: data };
186
+ }
187
+ // Find JSON start position (skip junk prefix from LLM)
188
+ const jsonStart = findJsonStart(jsonSource);
189
+ if (jsonStart === -1) {
190
+ // No JSON found - return empty object for lenient behavior
191
+ return {
192
+ success: true,
193
+ data: {},
194
+ };
195
+ }
196
+ // Extract JSON portion (skip junk prefix)
197
+ const jsonInput = jsonStart > 0 ? jsonSource.slice(jsonStart) : jsonSource;
198
+ const errors = [];
199
+ const parser = new LenientJsonParser(jsonInput, errors);
200
+ const data = parser.parse();
201
+ if (errors.length > 0) {
202
+ return {
203
+ success: false,
204
+ data: data,
205
+ input,
206
+ errors,
207
+ };
208
+ }
209
+ return {
210
+ success: true,
211
+ data: data,
212
+ };
213
+ }
214
+ /**
215
+ * Lenient JSON parser that handles incomplete JSON.
216
+ *
217
+ * @internal
218
+ */
219
+ class LenientJsonParser {
220
+ constructor(input, errors) {
221
+ this.pos = 0;
222
+ this.depth = 0;
223
+ this.input = input;
224
+ this.errors = errors;
225
+ }
226
+ parse() {
227
+ this.skipWhitespace();
228
+ if (this.pos >= this.input.length) {
229
+ return undefined;
230
+ }
231
+ return this.parseValue("$input");
232
+ }
233
+ parseValue(path) {
234
+ this.skipWhitespace();
235
+ if (this.pos >= this.input.length) {
236
+ return undefined;
237
+ }
238
+ // Check for maximum depth to prevent stack overflow
239
+ if (this.depth >= MAX_DEPTH) {
240
+ this.errors.push({
241
+ path,
242
+ expected: "value (max depth exceeded)",
243
+ value: undefined,
244
+ });
245
+ return undefined;
246
+ }
247
+ const char = this.input[this.pos];
248
+ if (char === "{")
249
+ return this.parseObject(path);
250
+ if (char === "[")
251
+ return this.parseArray(path);
252
+ if (char === '"')
253
+ return this.parseString();
254
+ if (char === "-" || (char >= "0" && char <= "9"))
255
+ return this.parseNumber();
256
+ // Handle keywords (true, false, null) or invalid identifiers
257
+ if (this.isIdentifierStart(char)) {
258
+ return this.parseKeywordOrIdentifier(path);
259
+ }
260
+ this.errors.push({
261
+ path,
262
+ expected: "JSON value",
263
+ value: this.getErrorContext(),
264
+ });
265
+ // Skip the problematic character and try to continue
266
+ this.pos++;
267
+ return undefined;
268
+ }
269
+ getErrorContext() {
270
+ // Get surrounding context for better error messages
271
+ const start = Math.max(0, this.pos - 10);
272
+ const end = Math.min(this.input.length, this.pos + 20);
273
+ const before = this.input.slice(start, this.pos);
274
+ const after = this.input.slice(this.pos, end);
275
+ return ((start > 0 ? "..." : "") +
276
+ before +
277
+ "→" +
278
+ after +
279
+ (end < this.input.length ? "..." : ""));
280
+ }
281
+ parseKeywordOrIdentifier(path) {
282
+ // Extract the token (sequence of identifier characters)
283
+ const start = this.pos;
284
+ while (this.pos < this.input.length &&
285
+ this.isIdentifierChar(this.input[this.pos])) {
286
+ this.pos++;
287
+ }
288
+ const token = this.input.slice(start, this.pos);
289
+ // Check for complete or partial keyword matches
290
+ if (token === "true")
291
+ return true;
292
+ if (token === "false")
293
+ return false;
294
+ if (token === "null")
295
+ return null;
296
+ // Partial match for lenient parsing (e.g., "tru" -> true, "fal" -> false)
297
+ if ("true".startsWith(token) && token.length > 0)
298
+ return true;
299
+ if ("false".startsWith(token) && token.length > 0)
300
+ return false;
301
+ if ("null".startsWith(token) && token.length > 0)
302
+ return null;
303
+ // Check if this looks like a string with missing opening quote (e.g., abcdefg")
304
+ if (this.pos < this.input.length && this.input[this.pos] === '"') {
305
+ // Treat as unquoted string value - skip the errant closing quote and return as string
306
+ this.pos++; // skip the closing quote
307
+ this.errors.push({
308
+ path,
309
+ expected: "quoted string",
310
+ value: "missing opening quote for '" + token + "'",
311
+ });
312
+ return token;
313
+ }
314
+ // Invalid identifier as value - provide helpful error message
315
+ this.errors.push({
316
+ path,
317
+ expected: "JSON value (string, number, boolean, null, object, or array)",
318
+ value: "unquoted string '" + token + "' - did you forget quotes?",
319
+ });
320
+ // Skip to next comma, closing brace/bracket for recovery
321
+ this.skipToRecoveryPoint();
322
+ return undefined;
323
+ }
324
+ skipToRecoveryPoint() {
325
+ while (this.pos < this.input.length) {
326
+ const ch = this.input[this.pos];
327
+ if (ch === "," || ch === "}" || ch === "]") {
328
+ return;
329
+ }
330
+ this.pos++;
331
+ }
332
+ }
333
+ parseObject(path) {
334
+ const result = {};
335
+ this.pos++; // skip '{'
336
+ this.depth++;
337
+ this.skipWhitespace();
338
+ while (this.pos < this.input.length) {
339
+ this.skipWhitespace();
340
+ // Handle end of object or end of input
341
+ if (this.pos >= this.input.length || this.input[this.pos] === "}") {
342
+ if (this.pos < this.input.length)
343
+ this.pos++; // skip '}'
344
+ this.depth--;
345
+ return result;
346
+ }
347
+ // Skip trailing comma
348
+ if (this.input[this.pos] === ",") {
349
+ this.pos++;
350
+ this.skipWhitespace();
351
+ continue;
352
+ }
353
+ // Parse key (quoted string or unquoted identifier)
354
+ let key;
355
+ if (this.input[this.pos] === '"') {
356
+ key = this.parseString();
357
+ }
358
+ else if (this.isIdentifierStart(this.input[this.pos])) {
359
+ key = this.parseIdentifier();
360
+ }
361
+ else {
362
+ this.errors.push({
363
+ path,
364
+ expected: "string key",
365
+ value: this.input[this.pos],
366
+ });
367
+ // Try to recover by skipping to next meaningful character
368
+ this.depth--;
369
+ return result;
370
+ }
371
+ if (typeof key !== "string") {
372
+ this.depth--;
373
+ return result;
374
+ }
375
+ this.skipWhitespace();
376
+ // Expect colon - but if we're at end of input, it's just incomplete (not an error)
377
+ if (this.pos >= this.input.length) {
378
+ this.depth--;
379
+ return result;
380
+ }
381
+ if (this.input[this.pos] !== ":") {
382
+ this.errors.push({
383
+ path: path + "." + key,
384
+ expected: "':'",
385
+ value: this.input[this.pos],
386
+ });
387
+ this.depth--;
388
+ return result;
389
+ }
390
+ this.pos++; // skip ':'
391
+ this.skipWhitespace();
392
+ // Parse value
393
+ if (this.pos >= this.input.length) {
394
+ // No value - incomplete but not an error for lenient parsing
395
+ this.depth--;
396
+ return result;
397
+ }
398
+ const value = this.parseValue(path + "." + key);
399
+ result[key] = value;
400
+ this.skipWhitespace();
401
+ // Handle comma or end
402
+ if (this.pos < this.input.length && this.input[this.pos] === ",") {
403
+ this.pos++;
404
+ }
405
+ }
406
+ this.depth--;
407
+ return result;
408
+ }
409
+ parseArray(path) {
410
+ const result = [];
411
+ this.pos++; // skip '['
412
+ this.depth++;
413
+ this.skipWhitespace();
414
+ let index = 0;
415
+ while (this.pos < this.input.length) {
416
+ this.skipWhitespace();
417
+ // Handle end of array or end of input
418
+ if (this.pos >= this.input.length || this.input[this.pos] === "]") {
419
+ if (this.pos < this.input.length)
420
+ this.pos++; // skip ']'
421
+ this.depth--;
422
+ return result;
423
+ }
424
+ // Skip trailing comma
425
+ if (this.input[this.pos] === ",") {
426
+ this.pos++;
427
+ this.skipWhitespace();
428
+ continue;
429
+ }
430
+ // Parse value
431
+ const value = this.parseValue(path + "[" + index + "]");
432
+ result.push(value);
433
+ index++;
434
+ this.skipWhitespace();
435
+ // Handle comma or end
436
+ if (this.pos < this.input.length && this.input[this.pos] === ",") {
437
+ this.pos++;
438
+ }
439
+ }
440
+ this.depth--;
441
+ return result;
442
+ }
443
+ parseString() {
444
+ this.pos++; // skip opening '"'
445
+ let result = "";
446
+ let escaped = false;
447
+ while (this.pos < this.input.length) {
448
+ const char = this.input[this.pos];
449
+ if (escaped) {
450
+ switch (char) {
451
+ case '"':
452
+ result += '"';
453
+ break;
454
+ case "\\":
455
+ result += "\\";
456
+ break;
457
+ case "/":
458
+ result += "/";
459
+ break;
460
+ case "b":
461
+ result += "\b";
462
+ break;
463
+ case "f":
464
+ result += "\f";
465
+ break;
466
+ case "n":
467
+ result += "\n";
468
+ break;
469
+ case "r":
470
+ result += "\r";
471
+ break;
472
+ case "t":
473
+ result += "\t";
474
+ break;
475
+ case "u":
476
+ // Parse unicode escape
477
+ if (this.pos + 4 <= this.input.length) {
478
+ const hex = this.input.slice(this.pos + 1, this.pos + 5);
479
+ if (isHexString(hex)) {
480
+ const highCode = parseInt(hex, 16);
481
+ this.pos += 4;
482
+ // Check for surrogate pair (emoji and characters > U+FFFF)
483
+ if (highCode >= 0xd800 &&
484
+ highCode <= 0xdbff &&
485
+ this.pos + 6 <= this.input.length &&
486
+ this.input[this.pos + 1] === "\\" &&
487
+ this.input[this.pos + 2] === "u") {
488
+ const lowHex = this.input.slice(this.pos + 3, this.pos + 7);
489
+ if (isHexString(lowHex)) {
490
+ const lowCode = parseInt(lowHex, 16);
491
+ if (lowCode >= 0xdc00 && lowCode <= 0xdfff) {
492
+ result += String.fromCharCode(highCode, lowCode);
493
+ this.pos += 6;
494
+ break;
495
+ }
496
+ }
497
+ }
498
+ result += String.fromCharCode(highCode);
499
+ }
500
+ else {
501
+ // Invalid hex - preserve escape sequence literally
502
+ result += "\\u" + hex;
503
+ this.pos += 4;
504
+ }
505
+ }
506
+ else {
507
+ // Incomplete unicode escape - add partial sequence
508
+ const partial = this.input.slice(this.pos + 1);
509
+ result += "\\u" + partial;
510
+ this.pos = this.input.length - 1;
511
+ }
512
+ break;
513
+ default:
514
+ result += char;
515
+ }
516
+ escaped = false;
517
+ this.pos++;
518
+ continue;
519
+ }
520
+ if (char === "\\") {
521
+ escaped = true;
522
+ this.pos++;
523
+ continue;
524
+ }
525
+ if (char === '"') {
526
+ this.pos++; // skip closing '"'
527
+ return result;
528
+ }
529
+ result += char;
530
+ this.pos++;
531
+ }
532
+ // Unclosed string - return what we have (lenient)
533
+ return result;
534
+ }
535
+ parseNumber() {
536
+ const start = this.pos;
537
+ // Handle negative sign
538
+ if (this.input[this.pos] === "-") {
539
+ this.pos++;
540
+ }
541
+ // Parse integer part
542
+ while (this.pos < this.input.length &&
543
+ this.input[this.pos] >= "0" &&
544
+ this.input[this.pos] <= "9") {
545
+ this.pos++;
546
+ }
547
+ // Parse decimal part
548
+ if (this.pos < this.input.length && this.input[this.pos] === ".") {
549
+ this.pos++;
550
+ while (this.pos < this.input.length &&
551
+ this.input[this.pos] >= "0" &&
552
+ this.input[this.pos] <= "9") {
553
+ this.pos++;
554
+ }
555
+ }
556
+ // Parse exponent
557
+ if (this.pos < this.input.length &&
558
+ (this.input[this.pos] === "e" || this.input[this.pos] === "E")) {
559
+ this.pos++;
560
+ if (this.pos < this.input.length &&
561
+ (this.input[this.pos] === "+" || this.input[this.pos] === "-")) {
562
+ this.pos++;
563
+ }
564
+ while (this.pos < this.input.length &&
565
+ this.input[this.pos] >= "0" &&
566
+ this.input[this.pos] <= "9") {
567
+ this.pos++;
568
+ }
569
+ }
570
+ const numStr = this.input.slice(start, this.pos);
571
+ const num = Number(numStr);
572
+ return Number.isNaN(num) ? 0 : num;
573
+ }
574
+ isIdentifierStart(ch) {
575
+ return ((ch >= "a" && ch <= "z") ||
576
+ (ch >= "A" && ch <= "Z") ||
577
+ ch === "_" ||
578
+ ch === "$");
579
+ }
580
+ isIdentifierChar(ch) {
581
+ return ((ch >= "a" && ch <= "z") ||
582
+ (ch >= "A" && ch <= "Z") ||
583
+ (ch >= "0" && ch <= "9") ||
584
+ ch === "_" ||
585
+ ch === "$");
586
+ }
587
+ parseIdentifier() {
588
+ const start = this.pos;
589
+ while (this.pos < this.input.length &&
590
+ this.isIdentifierChar(this.input[this.pos])) {
591
+ this.pos++;
592
+ }
593
+ return this.input.slice(start, this.pos);
594
+ }
595
+ skipWhitespace() {
596
+ while (this.pos < this.input.length) {
597
+ const ch = this.input[this.pos];
598
+ // Skip standard whitespace
599
+ if (ch === " " || ch === "\t" || ch === "\n" || ch === "\r") {
600
+ this.pos++;
601
+ continue;
602
+ }
603
+ // Skip single-line comment: // ...
604
+ if (ch === "/" &&
605
+ this.pos + 1 < this.input.length &&
606
+ this.input[this.pos + 1] === "/") {
607
+ this.pos += 2;
608
+ while (this.pos < this.input.length &&
609
+ this.input[this.pos] !== "\n" &&
610
+ this.input[this.pos] !== "\r") {
611
+ this.pos++;
612
+ }
613
+ continue;
614
+ }
615
+ // Skip multi-line comment: /* ... */
616
+ if (ch === "/" &&
617
+ this.pos + 1 < this.input.length &&
618
+ this.input[this.pos + 1] === "*") {
619
+ this.pos += 2;
620
+ while (this.pos + 1 < this.input.length) {
621
+ if (this.input[this.pos] === "*" &&
622
+ this.input[this.pos + 1] === "/") {
623
+ this.pos += 2;
624
+ break;
625
+ }
626
+ this.pos++;
627
+ }
628
+ // Handle unclosed comment - move to end
629
+ if (this.pos + 1 >= this.input.length) {
630
+ this.pos = this.input.length;
631
+ }
632
+ continue;
633
+ }
634
+ // Not whitespace or comment
635
+ break;
636
+ }
637
+ }
638
+ }
639
+ //# sourceMappingURL=parseLenientJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseLenientJson.js","sourceRoot":"","sources":["../../../src/utils/internal/parseLenientJson.ts"],"names":[],"mappings":"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"}