json-as 1.1.1 → 1.1.3

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.
@@ -10,6 +10,7 @@ import { getClasses, getImportedClass } from "./linker.js";
10
10
  let indent = " ";
11
11
 
12
12
  const DEBUG = process.env["JSON_DEBUG"];
13
+ const STRICT = !(process.env["JSON_STRICT"] && process.env["JSON_STRICT"] == "false");
13
14
 
14
15
  class JSONTransform extends Visitor {
15
16
  static SN: JSONTransform = new JSONTransform();
@@ -326,7 +327,7 @@ class JSONTransform extends Visitor {
326
327
 
327
328
  // DESERIALIZE += indent + " console.log(\"data: \" + JSON.Util.ptrToStr(srcStart,srcEnd))\n";
328
329
  DESERIALIZE += indent + " let keyStart: usize = 0;\n";
329
- if (shouldGroup || DEBUG) DESERIALIZE += indent + " let keyEnd: usize = 0;\n";
330
+ DESERIALIZE += indent + " let keyEnd: usize = 0;\n";
330
331
  DESERIALIZE += indent + " let isKey = false;\n";
331
332
  if (sortedMembers.object.length || sortedMembers.array.length) DESERIALIZE += indent + " let depth: i32 = 0;\n";
332
333
  DESERIALIZE += indent + " let lastIndex: usize = 0;\n\n";
@@ -345,7 +346,7 @@ class JSONTransform extends Visitor {
345
346
  DESERIALIZE += indent + " if (code == 34 && load<u16>(srcStart - 2) !== 92) {\n";
346
347
  DESERIALIZE += indent + " if (isKey) {\n";
347
348
  DESERIALIZE += indent + " keyStart = lastIndex;\n";
348
- if (shouldGroup || DEBUG) DESERIALIZE += indent + " keyEnd = srcStart;\n";
349
+ DESERIALIZE += indent + " keyEnd = srcStart;\n";
349
350
  DESERIALIZE += indent + " while (JSON.Util.isSpace((code = load<u16>((srcStart += 2))))) {}\n";
350
351
  DESERIALIZE += indent + " if (code !== 58) throw new Error(\"Expected ':' after key at position \" + (srcEnd - srcStart).toString());\n";
351
352
  DESERIALIZE += indent + " isKey = false;\n";
@@ -358,27 +359,46 @@ class JSONTransform extends Visitor {
358
359
  DESERIALIZE += indent + " } else {\n";
359
360
  // if (shouldGroup) DESERIALIZE += " const keySize = keyEnd - keyStart;\n";
360
361
 
361
- const groupMembers = (members: Property[]) => {
362
- let sorted: Property[][] = [];
363
-
364
- let len = -1;
365
- members
366
- .slice()
367
- .sort((a, b) => (a.alias?.length || a.name.length) - (b.alias?.length || b.name.length))
368
- .forEach((member) => {
369
- const _nameLength = member.alias?.length || member.name.length;
370
- if (_nameLength === len) {
371
- sorted[sorted.length - 1].push(member);
372
- } else {
373
- sorted.push([member]);
374
- len = _nameLength;
375
- }
376
- });
362
+ const groupMembers = (members: Property[]): Property[][] => {
363
+ const groups = new Map<number, Property[]>();
364
+
365
+ for (const member of members) {
366
+ const name = member.alias || member.name;
367
+ const length = name.length;
377
368
 
378
- sorted = sorted.sort((a, b) => b.length - a.length);
379
- return sorted;
369
+ if (!groups.has(length)) {
370
+ groups.set(length, []);
371
+ }
372
+
373
+ groups.get(length)!.push(member);
374
+ }
375
+
376
+ return [...groups.values()]
377
+ .map(group =>
378
+ group.sort((a, b) => {
379
+ const aLen = (a.alias || a.name).length;
380
+ const bLen = (b.alias || b.name).length;
381
+ return aLen - bLen;
382
+ })
383
+ )
384
+ .sort((a, b) => b.length - a.length);
380
385
  };
381
386
 
387
+ const generateGroups = (members: Property[], cb: (group: Property[]) => void) => {
388
+ const groups = groupMembers(members);
389
+ DESERIALIZE += " switch (<u32>keyEnd - <u32>keyStart) {\n";
390
+
391
+ for (const group of groups) {
392
+ const groupLen = (group[0].alias || group[0].name).length << 1
393
+ DESERIALIZE += " case " + groupLen + ": {\n";
394
+ cb(group);
395
+ DESERIALIZE += "\n }\n";
396
+ }
397
+
398
+ DESERIALIZE += " }\n";
399
+ DESERIALIZE += " break;\n";
400
+ }
401
+
382
402
  const generateComparisions = (members: Property[]) => {
383
403
  if (members.some((m) => (m.alias || m.name).length << 1 == 2)) {
384
404
  DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
@@ -399,8 +419,9 @@ class JSONTransform extends Visitor {
399
419
  const complex = isStruct(members[0].type) || members[0].type != "JSON.Obj" || isArray(members[0].type);
400
420
  const firstMemberName = members[0].alias || members[0].name;
401
421
  DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
402
- DESERIALIZE += indent + " store<" + members[0].type + ">(changetype<usize>(out), JSON.__deserialize<" + members[0].type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(firstMemberName) + "));\n";
403
- if (!complex) DESERIALIZE += indent + " srcStart += 2;\n";
422
+ DESERIALIZE += indent + " store<" + members[0].type + ">(changetype<usize>(out), JSON.__deserialize<" + members[0].type + ">(lastIndex, srcStart" + (isString(members[0].type) ? " + 2" : "") + "), offsetof<this>(" + JSON.stringify(members[0].name) + "));\n";
423
+ if (isString(members[0].type)) DESERIALIZE += indent + " srcStart += 4;\n";
424
+ else if (!complex) DESERIALIZE += indent + " srcStart += 2;\n";
404
425
  DESERIALIZE += indent + " keyStart = 0;\n";
405
426
  DESERIALIZE += indent + " break;\n";
406
427
  DESERIALIZE += indent + " }";
@@ -409,30 +430,32 @@ class JSONTransform extends Visitor {
409
430
  const member = members[i];
410
431
  const memberName = member.alias || member.name;
411
432
  DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
412
- DESERIALIZE += indent + " store<" + members[0].type + ">(changetype<usize>(out), JSON.__deserialize<" + members[0].type + ">(lastIndex, srcStart), offsetof<this>(" + JSON.stringify(memberName) + "));\n";
413
- if (isString(members[0].type)) DESERIALIZE += indent + " srcStart += 4;\n";
433
+ DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), JSON.__deserialize<" + member.type + ">(lastIndex, srcStart" + (isString(member.type) ? " + 2" : "") + "), offsetof<this>(" + JSON.stringify(member.name) + "));\n";
434
+ if (isString(member.type)) DESERIALIZE += indent + " srcStart += 4;\n";
414
435
  else if (!complex) DESERIALIZE += indent + " srcStart += 2;\n";
415
436
  DESERIALIZE += indent + " keyStart = 0;\n";
416
437
  DESERIALIZE += indent + " break;\n";
417
438
  DESERIALIZE += indent + " }";
418
439
  }
419
440
 
420
- DESERIALIZE += " else {\n";
421
- DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
422
- DESERIALIZE += indent + " }\n";
441
+ if (STRICT) {
442
+ DESERIALIZE += " else {\n";
443
+ DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
444
+ DESERIALIZE += indent + " }\n";
445
+ }
423
446
  };
424
447
 
425
448
  let mbElse = " ";
426
449
  if (sortedMembers.string.length) {
450
+ // generateGroups(sortedMembers.string, generateComparisions)
427
451
  DESERIALIZE += mbElse + "if (code == 34) {\n";
428
452
  DESERIALIZE += " lastIndex = srcStart;\n";
429
453
  DESERIALIZE += " srcStart += 2;\n";
430
454
  DESERIALIZE += " while (srcStart < srcEnd) {\n";
431
455
  DESERIALIZE += " const code = load<u16>(srcStart);\n";
432
456
  DESERIALIZE += " if (code == 34 && load<u16>(srcStart - 2) !== 92) {\n";
433
- DESERIALIZE += " srcStart += 2;\n";
434
457
  // DESERIALIZE += " console.log(JSON.Util.ptrToStr(keyStart,keyEnd) + \" = \" + load<u16>(keyStart).toString() + \" val \" + JSON.Util.ptrToStr(lastIndex, srcStart));\n";
435
- generateComparisions(sortedMembers.string);
458
+ generateGroups(sortedMembers.string, generateComparisions);
436
459
  DESERIALIZE += " }\n"; // Close break char check
437
460
  DESERIALIZE += " srcStart += 2;\n";
438
461
  DESERIALIZE += " }\n"; // Close char scan loop
@@ -449,7 +472,7 @@ class JSONTransform extends Visitor {
449
472
  DESERIALIZE += " if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {\n";
450
473
  // DESERIALIZE += " console.log(JSON.Util.ptrToStr(keyStart,keyEnd) + \" = \" + load<u16>(keyStart).toString() + \" val \" + JSON.Util.ptrToStr(lastIndex, srcStart));\n";
451
474
 
452
- generateComparisions(sortedMembers.number);
475
+ generateGroups(sortedMembers.number, generateComparisions);
453
476
  DESERIALIZE += " }\n"; // Close break char check
454
477
  DESERIALIZE += " srcStart += 2;\n";
455
478
  DESERIALIZE += " }\n"; // Close char scan loop
@@ -472,7 +495,7 @@ class JSONTransform extends Visitor {
472
495
  DESERIALIZE += " srcStart += 2;\n";
473
496
 
474
497
  indent = " ";
475
- generateComparisions(sortedMembers.object);
498
+ generateGroups(sortedMembers.object, generateComparisions);
476
499
  indent = "";
477
500
 
478
501
  DESERIALIZE += " }\n"; // Close break char check
@@ -498,7 +521,7 @@ class JSONTransform extends Visitor {
498
521
  // DESERIALIZE += " console.log(ptrToStr(keyStart,keyEnd) + \" = \" + (load<u64>(keyStart) & 0x0000FFFFFFFFFFFF) .toString());\n";
499
522
 
500
523
  indent = " ";
501
- generateComparisions(sortedMembers.array);
524
+ generateGroups(sortedMembers.array, generateComparisions);
502
525
  indent = "";
503
526
 
504
527
  DESERIALIZE += " }\n"; // Close break char check
@@ -513,71 +536,97 @@ class JSONTransform extends Visitor {
513
536
  DESERIALIZE += mbElse + "if (code == 116) {\n";
514
537
  DESERIALIZE += " if (load<u64>(srcStart) == 28429475166421108) {\n";
515
538
  DESERIALIZE += " srcStart += 8;\n";
516
- if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 2)) {
517
- DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
518
- }
519
- if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 4)) {
520
- DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
521
- }
522
- if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 6)) {
523
- DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
524
- }
525
- if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 8)) {
526
- DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
527
- }
528
- if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 > 8)) {
529
- DESERIALIZE += toMemCDecl(Math.max(...sortedMembers.boolean.map((m) => (m.alias || m.name).length << 1)), " ");
530
- }
531
- const firstMemberName = sortedMembers.boolean[0].alias || sortedMembers.boolean[0].name;
532
- DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
533
- DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
534
- DESERIALIZE += indent + " srcStart += 2;\n";
535
- DESERIALIZE += indent + " keyStart = 0;\n";
536
- DESERIALIZE += indent + " break;\n";
537
- DESERIALIZE += indent + " }";
538
539
 
539
- for (let i = 1; i < sortedMembers.boolean.length; i++) {
540
- const member = sortedMembers.boolean[i];
541
- const memberName = member.alias || member.name;
542
- DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
543
- DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
544
- DESERIALIZE += indent + " srcStart += 2;\n";
545
- DESERIALIZE += indent + " keyStart = 0;\n";
546
- DESERIALIZE += indent + " break;\n";
547
- DESERIALIZE += indent + " }";
548
- }
540
+ generateGroups(sortedMembers.boolean, (group) => {
541
+ if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
542
+ DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
543
+ }
544
+ if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
545
+ DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
546
+ }
547
+ if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
548
+ DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
549
+ }
550
+ if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
551
+ DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
552
+ }
553
+ if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
554
+ DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
555
+ }
556
+ const firstMemberName = group[0].alias || group[0].name;
549
557
 
550
- DESERIALIZE += " else {\n";
551
- DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
552
- DESERIALIZE += indent + " }\n";
558
+ DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
559
+ DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
560
+ DESERIALIZE += indent + " srcStart += 2;\n";
561
+ DESERIALIZE += indent + " keyStart = 0;\n";
562
+ DESERIALIZE += indent + " break;\n";
563
+ DESERIALIZE += indent + " }";
564
+
565
+ for (let i = 1; i < group.length; i++) {
566
+ const member = group[i];
567
+ const memberName = member.alias || member.name;
568
+ DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
569
+ DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
570
+ DESERIALIZE += indent + " srcStart += 2;\n";
571
+ DESERIALIZE += indent + " keyStart = 0;\n";
572
+ DESERIALIZE += indent + " break;\n";
573
+ DESERIALIZE += indent + " }";
574
+ }
575
+
576
+ if (STRICT) {
577
+ DESERIALIZE += " else {\n";
578
+ DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
579
+ DESERIALIZE += indent + " }\n";
580
+ }
581
+ });
553
582
 
554
583
  DESERIALIZE += " }"; // Close first char check
555
584
  mbElse = " else ";
556
585
  DESERIALIZE += " else if (load<u64>(srcStart, 2) == 28429466576093281) {\n";
557
586
  DESERIALIZE += " srcStart += 10;\n";
558
587
 
559
- DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
560
- DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
561
- DESERIALIZE += indent + " srcStart += 2;\n";
562
- DESERIALIZE += indent + " keyStart = 0;\n";
563
- DESERIALIZE += indent + " break;\n";
564
- DESERIALIZE += indent + " }";
588
+ generateGroups(sortedMembers.boolean, (group) => {
589
+ if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
590
+ DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
591
+ }
592
+ if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
593
+ DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
594
+ }
595
+ if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
596
+ DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
597
+ }
598
+ if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
599
+ DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
600
+ }
601
+ if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
602
+ DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
603
+ }
604
+ const firstMemberName = group[0].alias || group[0].name;
565
605
 
566
- for (let i = 1; i < sortedMembers.boolean.length; i++) {
567
- const member = sortedMembers.boolean[i];
568
- const memberName = member.alias || member.name;
569
- DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
570
- DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
606
+ DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
607
+ DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
571
608
  DESERIALIZE += indent + " srcStart += 2;\n";
572
609
  DESERIALIZE += indent + " keyStart = 0;\n";
573
610
  DESERIALIZE += indent + " break;\n";
574
611
  DESERIALIZE += indent + " }";
575
- }
576
612
 
577
- DESERIALIZE += " else {\n";
578
- DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
579
- DESERIALIZE += indent + " }\n";
613
+ for (let i = 1; i < group.length; i++) {
614
+ const member = group[i];
615
+ const memberName = member.alias || member.name;
616
+ DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
617
+ DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
618
+ DESERIALIZE += indent + " srcStart += 2;\n";
619
+ DESERIALIZE += indent + " keyStart = 0;\n";
620
+ DESERIALIZE += indent + " break;\n";
621
+ DESERIALIZE += indent + " }";
622
+ }
580
623
 
624
+ if (STRICT) {
625
+ DESERIALIZE += " else {\n";
626
+ DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
627
+ DESERIALIZE += indent + " }\n";
628
+ }
629
+ });
581
630
  DESERIALIZE += " }\n"; // Close first char check
582
631
  DESERIALIZE += " }"; // Close first char check
583
632
  }
@@ -587,45 +636,48 @@ class JSONTransform extends Visitor {
587
636
 
588
637
  DESERIALIZE += " if (load<u64>(srcStart) == 30399761348886638) {\n";
589
638
  DESERIALIZE += " srcStart += 8;\n";
639
+ generateGroups(sortedMembers.null, (group) => {
640
+ if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
641
+ DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
642
+ }
643
+ if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
644
+ DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
645
+ }
646
+ if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
647
+ DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
648
+ }
649
+ if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
650
+ DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
651
+ }
652
+ if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
653
+ DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
654
+ }
590
655
 
591
- if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 2)) {
592
- DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
593
- }
594
- if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 4)) {
595
- DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
596
- }
597
- if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 6)) {
598
- DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
599
- }
600
- if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 8)) {
601
- DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
602
- }
603
- if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 > 8)) {
604
- DESERIALIZE += toMemCDecl(Math.max(...sortedMembers.null.map((m) => (m.alias || m.name).length << 1)), " ");
605
- }
606
-
607
- const firstMemberName = sortedMembers.null[0].alias || sortedMembers.null[0].name;
608
- DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
609
- DESERIALIZE += indent + " store<" + sortedMembers.null[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(sortedMembers.null[0].name) + "));\n";
610
- DESERIALIZE += indent + " srcStart += 2;\n";
611
- DESERIALIZE += indent + " keyStart = 0;\n";
612
- DESERIALIZE += indent + " break;\n";
613
- DESERIALIZE += indent + " }";
614
-
615
- for (let i = 1; i < sortedMembers.null.length; i++) {
616
- const member = sortedMembers.null[i];
617
- const memberName = member.alias || member.name;
618
- DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
619
- DESERIALIZE += indent + " store<" + sortedMembers.null[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(sortedMembers.null[0].name) + "));\n";
656
+ const firstMemberName = group[0].alias || group[0].name;
657
+ DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
658
+ DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
620
659
  DESERIALIZE += indent + " srcStart += 2;\n";
621
660
  DESERIALIZE += indent + " keyStart = 0;\n";
622
661
  DESERIALIZE += indent + " break;\n";
623
662
  DESERIALIZE += indent + " }";
624
- }
625
663
 
626
- DESERIALIZE += " else {\n";
627
- DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
628
- DESERIALIZE += indent + " }\n";
664
+ for (let i = 1; i < group.length; i++) {
665
+ const member = group[i];
666
+ const memberName = member.alias || member.name;
667
+ DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
668
+ DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
669
+ DESERIALIZE += indent + " srcStart += 2;\n";
670
+ DESERIALIZE += indent + " keyStart = 0;\n";
671
+ DESERIALIZE += indent + " break;\n";
672
+ DESERIALIZE += indent + " }";
673
+ }
674
+
675
+ if (STRICT) {
676
+ DESERIALIZE += " else {\n";
677
+ DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
678
+ DESERIALIZE += indent + " }\n";
679
+ }
680
+ });
629
681
 
630
682
  DESERIALIZE += " }"; // Close first char check
631
683
  DESERIALIZE += "\n }"; // Close first char check