x_ite 8.3.3 → 8.4.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.
Files changed (85) hide show
  1. package/dist/assets/components/Annotation.js +13 -13
  2. package/dist/assets/components/Annotation.min.js +1 -1
  3. package/dist/assets/components/CADGeometry.js +13 -13
  4. package/dist/assets/components/CADGeometry.min.js +1 -1
  5. package/dist/assets/components/CubeMapTexturing.js +25 -25
  6. package/dist/assets/components/CubeMapTexturing.min.js +1 -1
  7. package/dist/assets/components/DIS.js +13 -13
  8. package/dist/assets/components/DIS.min.js +1 -1
  9. package/dist/assets/components/EventUtilities.js +9 -9
  10. package/dist/assets/components/EventUtilities.min.js +1 -1
  11. package/dist/assets/components/Geometry2D.js +19 -19
  12. package/dist/assets/components/Geometry2D.min.js +1 -1
  13. package/dist/assets/components/Geospatial.js +33 -33
  14. package/dist/assets/components/Geospatial.min.js +1 -1
  15. package/dist/assets/components/HAnim.js +21 -19
  16. package/dist/assets/components/HAnim.min.js +1 -1
  17. package/dist/assets/components/KeyDeviceSensor.js +8 -8
  18. package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
  19. package/dist/assets/components/Layout.js +27 -27
  20. package/dist/assets/components/Layout.min.js +1 -1
  21. package/dist/assets/components/NURBS.js +24 -24
  22. package/dist/assets/components/NURBS.min.js +1 -1
  23. package/dist/assets/components/ParticleSystems.js +23 -23
  24. package/dist/assets/components/ParticleSystems.min.js +1 -1
  25. package/dist/assets/components/Picking.js +19 -19
  26. package/dist/assets/components/Picking.min.js +1 -1
  27. package/dist/assets/components/RigidBodyPhysics.js +17 -17
  28. package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
  29. package/dist/assets/components/Scripting.js +28 -28
  30. package/dist/assets/components/Scripting.min.js +1 -1
  31. package/dist/assets/components/Text.js +24 -24
  32. package/dist/assets/components/Text.min.js +1 -1
  33. package/dist/assets/components/TextureProjector.js +14 -14
  34. package/dist/assets/components/TextureProjector.min.js +1 -1
  35. package/dist/assets/components/Texturing3D.js +27 -27
  36. package/dist/assets/components/Texturing3D.min.js +1 -1
  37. package/dist/assets/components/VolumeRendering.js +19 -19
  38. package/dist/assets/components/VolumeRendering.min.js +1 -1
  39. package/dist/assets/components/X_ITE.js +9 -9
  40. package/dist/assets/components/X_ITE.min.js +1 -1
  41. package/dist/x_ite.css +1 -1
  42. package/dist/x_ite.js +2711 -292
  43. package/dist/x_ite.min.js +1 -1
  44. package/dist/x_ite.zip +0 -0
  45. package/docs/_config.yml +2 -2
  46. package/docs/_posts/reference/field-services-and-objects.md +24 -4
  47. package/docs/_posts/reference/prototype-services.md +24 -4
  48. package/docs/_posts/reference/scene-services.md +9 -4
  49. package/docs/_posts/what's-new.md +11 -1
  50. package/package.json +1 -1
  51. package/src/x_ite/Base/X3DInfoArray.js +26 -0
  52. package/src/x_ite/Base/X3DObject.js +1 -1
  53. package/src/x_ite/Base/X3DObjectArrayField.js +44 -0
  54. package/src/x_ite/Base/X3DTypedArrayField.js +74 -0
  55. package/src/x_ite/Browser/VERSION.js +1 -1
  56. package/src/x_ite/Components/Core/X3DNode.js +486 -23
  57. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +371 -10
  58. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +3 -1
  59. package/src/x_ite/Components/Rendering/X3DGeometryNode.js +6 -3
  60. package/src/x_ite/Configuration/ComponentInfo.js +32 -0
  61. package/src/x_ite/Configuration/ProfileInfo.js +4 -0
  62. package/src/x_ite/Configuration/UnitInfo.js +46 -0
  63. package/src/x_ite/Execution/X3DExecutionContext.js +54 -0
  64. package/src/x_ite/Execution/X3DExportedNode.js +52 -0
  65. package/src/x_ite/Execution/X3DImportedNode.js +164 -0
  66. package/src/x_ite/Execution/X3DScene.js +339 -0
  67. package/src/x_ite/Fields/ArrayFields.js +48 -0
  68. package/src/x_ite/Fields/SFBool.js +8 -0
  69. package/src/x_ite/Fields/SFColor.js +26 -1
  70. package/src/x_ite/Fields/SFColorRGBA.js +2 -0
  71. package/src/x_ite/Fields/SFDouble.js +10 -0
  72. package/src/x_ite/Fields/SFFloat.js +10 -0
  73. package/src/x_ite/Fields/SFImage.js +61 -1
  74. package/src/x_ite/Fields/SFInt32.js +11 -3
  75. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +26 -1
  76. package/src/x_ite/Fields/SFNode.js +40 -25
  77. package/src/x_ite/Fields/SFRotation.js +28 -3
  78. package/src/x_ite/Fields/SFString.js +8 -0
  79. package/src/x_ite/Fields/SFTime.js +8 -0
  80. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +30 -4
  81. package/src/x_ite/InputOutput/Generator.js +63 -2
  82. package/src/x_ite/Parser/JSONParser.js +1 -1
  83. package/src/x_ite/Prototype/X3DExternProtoDeclaration.js +123 -0
  84. package/src/x_ite/Prototype/X3DProtoDeclaration.js +228 -0
  85. package/src/x_ite/Routing/X3DRoute.js +67 -0
@@ -354,7 +354,7 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
354
354
  index = 0,
355
355
  initializableReference = false;
356
356
 
357
- field .getReferences () .forEach (function (reference)
357
+ for (const reference of field .getReferences ())
358
358
  {
359
359
  initializableReference = initializableReference || reference .isInitializable ();
360
360
 
@@ -375,7 +375,7 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
375
375
 
376
376
  if (index !== field .getReferences () .size)
377
377
  generator .string += generator .Break ();
378
- });
378
+ }
379
379
 
380
380
  if (field .getAccessType () === X3DConstants .inputOutput && !initializableReference && !field .isDefaultValue ())
381
381
  {
@@ -417,7 +417,7 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
417
417
  index = 0,
418
418
  initializableReference = false;
419
419
 
420
- field .getReferences () .forEach (function (reference)
420
+ for (const reference of field .getReferences ())
421
421
  {
422
422
  initializableReference = initializableReference || reference .isInitializable ();
423
423
 
@@ -434,7 +434,7 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
434
434
 
435
435
  if (index !== field .getReferences () .size)
436
436
  generator .string += generator .Break ();
437
- });
437
+ }
438
438
 
439
439
  if (field .getAccessType () === X3DConstants .inputOutput && !initializableReference && !this .isDefaultValue (field))
440
440
  {
@@ -543,14 +543,7 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
543
543
  {
544
544
  if (field .getAccessType () === X3DConstants .inputOutput && field .getReferences () .size !== 0)
545
545
  {
546
- let initializableReference = false;
547
-
548
- field .getReferences () .forEach (function (fieldReference)
549
- {
550
- initializableReference = initializableReference || fieldReference .isInitializable ();
551
- });
552
-
553
- if (!initializableReference)
546
+ if (![... field .getReferences ()] .some (reference => reference .isInitializable ()))
554
547
  mustOutputValue = !this .isDefaultValue (field);
555
548
  }
556
549
  }
@@ -635,17 +628,13 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
635
628
 
636
629
  let mustOutputValue = false;
637
630
 
638
- if (field .getAccessType () === X3DConstants .inputOutput && field .getReferences () .size !== 0)
631
+ if (generator .ExecutionContext ())
639
632
  {
640
- let initializableReference = false;
641
-
642
- field .getReferences () .forEach (function (fieldReference)
633
+ if (field .getAccessType () === X3DConstants .inputOutput && field .getReferences () .size !== 0)
643
634
  {
644
- initializableReference = initializableReference || fieldReference .isInitializable ();
645
- });
646
-
647
- if (!initializableReference)
648
- mustOutputValue = true;
635
+ if (![... field .getReferences ()] .some (reference => reference .isInitializable ()))
636
+ mustOutputValue = !this .isDefaultValue (field);
637
+ }
649
638
  }
650
639
 
651
640
  if ((field .getReferences () .size === 0 || !generator .ExecutionContext ()) || sharedNode || mustOutputValue)
@@ -725,7 +714,7 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
725
714
  {
726
715
  const protoFields = field .getReferences ();
727
716
 
728
- protoFields .forEach (function (protoField)
717
+ for (const protoField of protoFields)
729
718
  {
730
719
  generator .string += generator .Indent ();
731
720
  generator .string += "<connect";
@@ -739,7 +728,7 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
739
728
  generator .string += "'";
740
729
  generator .string += "/>";
741
730
  generator .string += generator .TidyBreak ();
742
- });
731
+ }
743
732
  }
744
733
 
745
734
  generator .DecIndent ();
@@ -781,6 +770,480 @@ X3DNode .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
781
770
 
782
771
  generator .LeaveScope ();
783
772
  },
773
+ toJSONStream: function (generator)
774
+ {
775
+ try
776
+ {
777
+ const sharedNode = generator .IsSharedNode (this);
778
+
779
+ generator .EnterScope ();
780
+
781
+ const name = generator .Name (this);
782
+
783
+ // USE name
784
+
785
+ if (name .length)
786
+ {
787
+ if (generator .ExistsNode (this))
788
+ {
789
+ generator .string += '{';
790
+ generator .string += generator .TidySpace ();
791
+ generator .string += '"';
792
+ generator .string += this .getTypeName ();
793
+ generator .string += '"';
794
+ generator .string += ':';
795
+ generator .string += generator .TidyBreak ();
796
+ generator .string += generator .IncIndent ();
797
+ generator .string += generator .Indent ();
798
+ generator .string += '{';
799
+ generator .string += generator .TidyBreak ();
800
+ generator .string += generator .IncIndent ();
801
+ generator .string += generator .Indent ();
802
+ generator .string += '"';
803
+ generator .string += "@USE";
804
+ generator .string += '"';
805
+ generator .string += ':';
806
+ generator .string += generator .TidySpace ();
807
+ generator .string += generator .JSONEncode (name);
808
+ generator .string += generator .TidyBreak ();
809
+ generator .string += generator .DecIndent ();
810
+ generator .string += generator .Indent ();
811
+ generator .string += '}';
812
+ generator .string += generator .TidyBreak ();
813
+ generator .string += generator .DecIndent ();
814
+ generator .string += generator .Indent ();
815
+ generator .string += '}';
816
+
817
+ generator .LeaveScope ();
818
+ return;
819
+ }
820
+ }
821
+
822
+ // Type name
823
+
824
+ generator .string += '{';
825
+ generator .string += generator .TidySpace ();
826
+ generator .string += '"';
827
+ generator .string += this .getTypeName ();
828
+ generator .string += '"';
829
+ generator .string += ':';
830
+ generator .string += generator .TidyBreak ();
831
+ generator .string += generator .IncIndent ();
832
+ generator .string += generator .Indent ();
833
+ generator .string += '{';
834
+ generator .string += generator .TidyBreak ();
835
+ generator .string += generator .IncIndent ();
836
+
837
+
838
+ // DEF name
839
+
840
+ if (name .length)
841
+ {
842
+ generator .AddNode (this);
843
+
844
+ generator .string += generator .Indent ();
845
+ generator .string += '"';
846
+ generator .string += "@DEF";
847
+ generator .string += '"';
848
+ generator .string += ':';
849
+ generator .string += generator .TidySpace ();
850
+ generator .string += generator .JSONEncode (name);
851
+ generator .string += ',';
852
+ generator .string += generator .TidyBreak ();
853
+ }
854
+
855
+
856
+ // Fields
857
+
858
+ const
859
+ fields = this .getChangedFields (),
860
+ userDefinedFields = this .getUserDefinedFields ();
861
+
862
+ const references = [ ];
863
+
864
+ let sourceText = this .getSourceText ();
865
+
866
+ // Source text
867
+
868
+ if (sourceText)
869
+ {
870
+ if (sourceText .length !== 1)
871
+ sourceText = null;
872
+
873
+ if (sourceText && ! sourceText [0] .match (/^\s*(?:ecmascript|javascript|vrmlscript)\:/s))
874
+ sourceText = null;
875
+ }
876
+
877
+
878
+ // Predefined fields
879
+
880
+ if (fields .length)
881
+ {
882
+ const outputFields = [ ];
883
+
884
+ for (const field of fields)
885
+ {
886
+ // If the field is a inputOutput and we have as reference only inputOnly or outputOnly we must output the value
887
+ // for this field.
888
+
889
+ let mustOutputValue = false;
890
+
891
+ if (generator .ExecutionContext ())
892
+ {
893
+ if (field .getAccessType () === X3DConstants .inputOutput && field .getReferences () .size !== 0)
894
+ {
895
+ if (![... field .getReferences ()] .some (reference => reference .isInitializable ()))
896
+ mustOutputValue = !this .isDefaultValue (field);
897
+ }
898
+ }
899
+
900
+ // If we have no execution context we are not in a proto and must not generate IS references the same is true
901
+ // if the node is a shared node as the node does not belong to the execution context.
902
+
903
+ if (field .getReferences () .size === 0 || !generator .ExecutionContext () || sharedNode || mustOutputValue)
904
+ {
905
+ if (mustOutputValue)
906
+ references .push (field);
907
+
908
+ if (field !== sourceText)
909
+ outputFields .push (field);
910
+ }
911
+ else
912
+ {
913
+ references .push (field);
914
+ }
915
+ }
916
+
917
+ for (const field of outputFields)
918
+ {
919
+ if (field .isInitializable ())
920
+ {
921
+ switch (field .getType ())
922
+ {
923
+ case X3DConstants .SFNode:
924
+ case X3DConstants .MFNode:
925
+ {
926
+ generator .string += generator .Indent ();
927
+ generator .string += '"';
928
+ generator .string += '-';
929
+ generator .string += field .getName ();
930
+ generator .string += '"';
931
+ generator .string += ':';
932
+ generator .string += generator .TidySpace ();
933
+
934
+ field .toJSONStream (generator);
935
+ break;
936
+ }
937
+ default:
938
+ {
939
+ generator .string += generator .Indent ();
940
+ generator .string += '"';
941
+ generator .string += '@';
942
+ generator .string += field .getName ();
943
+ generator .string += '"';
944
+ generator .string += ':';
945
+ generator .string += generator .TidySpace ();
946
+
947
+ field .toJSONStream (generator);
948
+ break;
949
+ }
950
+ }
951
+
952
+ generator .string += ',';
953
+ generator .string += generator .TidyBreak ();
954
+ }
955
+ }
956
+ }
957
+
958
+ // User defined fields
959
+
960
+ if (! this .canUserDefinedFields () || ! userDefinedFields .length)
961
+ ;
962
+ else
963
+ {
964
+ generator .string += generator .Indent ();
965
+ generator .string += '"';
966
+ generator .string += "field";
967
+ generator .string += '"';
968
+ generator .string += ':';
969
+ generator .string += generator .TidySpace ();
970
+ generator .string += '[';
971
+ generator .string += generator .TidyBreak ();
972
+ generator .string += generator .IncIndent ();
973
+
974
+ for (const field of userDefinedFields)
975
+ {
976
+ generator .string += generator .Indent ();
977
+ generator .string += '{';
978
+ generator .string += generator .TidyBreak ();
979
+ generator .string += generator .IncIndent ();
980
+
981
+ generator .string += generator .Indent ();
982
+ generator .string += '"';
983
+ generator .string += "@accessType";
984
+ generator .string += '"';
985
+ generator .string += ':';
986
+ generator .string += generator .TidySpace ();
987
+ generator .string += '"';
988
+ generator .string += generator .AccessType (field .getAccessType ());
989
+ generator .string += '"';
990
+ generator .string += ',';
991
+ generator .string += generator .TidyBreak ();
992
+
993
+ generator .string += generator .Indent ();
994
+ generator .string += '"';
995
+ generator .string += "@type";
996
+ generator .string += '"';
997
+ generator .string += ':';
998
+ generator .string += generator .TidySpace ();
999
+ generator .string += '"';
1000
+ generator .string += field .getTypeName ();
1001
+ generator .string += '"';
1002
+ generator .string += ',';
1003
+ generator .string += generator .TidyBreak ();
1004
+
1005
+ generator .string += generator .Indent ();
1006
+ generator .string += '"';
1007
+ generator .string += "@name";
1008
+ generator .string += '"';
1009
+ generator .string += ':';
1010
+ generator .string += generator .TidySpace ();
1011
+ generator .string += generator .JSONEncode (field .getName ());
1012
+
1013
+ // If the field is a inputOutput and we have as reference only inputOnly or outputOnly we must output the value
1014
+ // for this field.
1015
+
1016
+ let mustOutputValue = false;
1017
+
1018
+ if (generator .ExecutionContext ())
1019
+ {
1020
+ if (field .getAccessType () === X3DConstants .inputOutput && field .getReferences () .size !== 0)
1021
+ {
1022
+ if (![... field .getReferences ()] .some (reference => reference .isInitializable ()))
1023
+ mustOutputValue = !this .isDefaultValue (field);
1024
+ }
1025
+ }
1026
+
1027
+ if ((field .getReferences () .size === 0 || !generator .ExecutionContext ()) || sharedNode || mustOutputValue)
1028
+ {
1029
+ if (mustOutputValue && generator .ExecutionContext ())
1030
+ references .push (field);
1031
+
1032
+ if (!field .isInitializable () || field .isDefaultValue ())
1033
+ ;
1034
+ else
1035
+ {
1036
+ // Output value
1037
+
1038
+ generator .string += ',';
1039
+ generator .string += generator .TidyBreak ();
1040
+
1041
+ switch (field .getType ())
1042
+ {
1043
+ case X3DConstants .SFNode:
1044
+ {
1045
+ generator .string += generator .Indent ();
1046
+ generator .string += '"';
1047
+ generator .string += "-children";
1048
+ generator .string += '"';
1049
+ generator .string += ':';
1050
+ generator .string += generator .TidySpace ();
1051
+ generator .string += '[';
1052
+ generator .string += generator .TidyBreak ();
1053
+ generator .string += generator .IncIndent ();
1054
+ generator .string += generator .Indent ();
1055
+
1056
+ field .toJSONStream (generator);
1057
+
1058
+ generator .string += generator .TidyBreak ();
1059
+ generator .string += generator .DecIndent ();
1060
+ generator .string += generator .Indent ();
1061
+ generator .string += ']';
1062
+ break;
1063
+ }
1064
+ case X3DConstants .MFNode:
1065
+ {
1066
+ generator .string += generator .Indent ();
1067
+ generator .string += '"';
1068
+ generator .string += "-children";
1069
+ generator .string += '"';
1070
+ generator .string += ':';
1071
+ generator .string += generator .TidySpace ();
1072
+
1073
+ field .toJSONStream (generator);
1074
+ break;
1075
+ }
1076
+ default:
1077
+ {
1078
+ generator .string += generator .Indent ();
1079
+ generator .string += '"';
1080
+ generator .string += "@value";
1081
+ generator .string += '"';
1082
+ generator .string += ':';
1083
+ generator .string += generator .TidySpace ();
1084
+
1085
+ field .toJSONStream (generator);
1086
+ break;
1087
+ }
1088
+ }
1089
+ }
1090
+ }
1091
+ else
1092
+ {
1093
+ if (generator .ExecutionContext ())
1094
+ references .push (field);
1095
+ }
1096
+
1097
+ generator .string += generator .TidyBreak ();
1098
+ generator .string += generator .DecIndent ();
1099
+ generator .string += generator .Indent ();
1100
+ generator .string += '}';
1101
+
1102
+ if (field !== userDefinedFields .at (-1))
1103
+ generator .string += ',';
1104
+
1105
+ generator .string += generator .TidyBreak ();
1106
+ }
1107
+
1108
+ generator .string += generator .DecIndent ();
1109
+ generator .string += generator .Indent ();
1110
+ generator .string += ']';
1111
+ generator .string += ',';
1112
+ generator .string += generator .TidyBreak ();
1113
+ }
1114
+
1115
+ // Source text
1116
+
1117
+ if (sourceText)
1118
+ {
1119
+ generator .string += generator .Indent ();
1120
+ generator .string += '"';
1121
+ generator .string += "#sourceText";
1122
+ generator .string += '"';
1123
+ generator .string += ':';
1124
+ generator .string += generator .TidySpace ();
1125
+ generator .string += '[';
1126
+ generator .string += generator .TidyBreak ();
1127
+ generator .string += generator .IncIndent ();
1128
+
1129
+ const sourceTextLines = sourceText [0] .split ("\n");
1130
+
1131
+ for (let i = 0, length = sourceTextLines .length; i < length; ++ i)
1132
+ {
1133
+ generator .string += generator .ListIndent ();
1134
+ generator .string += generator .JSONEncode (sourceTextLines [i]);
1135
+
1136
+ if (i !== length - 1)
1137
+ generator .string += ',';
1138
+
1139
+ generator .string += generator .TidyBreak ();
1140
+ }
1141
+
1142
+ generator .string += generator .DecIndent ();
1143
+ generator .string += generator .Indent ();
1144
+ generator .string += ']';
1145
+ generator .string += ',';
1146
+ generator .string += generator .TidyBreak ();
1147
+ }
1148
+
1149
+
1150
+ // IS references
1151
+
1152
+ if (references .length && !sharedNode)
1153
+ {
1154
+ generator .string += generator .Indent ();
1155
+ generator .string += '"';
1156
+ generator .string += "IS";
1157
+ generator .string += '"';
1158
+ generator .string += ':';
1159
+ generator .string += generator .TidySpace ();
1160
+ generator .string += '{';
1161
+ generator .string += generator .TidyBreak ();
1162
+ generator .string += generator .IncIndent ();
1163
+ generator .string += generator .Indent ();
1164
+ generator .string += '"';
1165
+ generator .string += "connect";
1166
+ generator .string += '"';
1167
+ generator .string += ':';
1168
+ generator .string += generator .TidySpace ();
1169
+ generator .string += '[';
1170
+ generator .string += generator .TidyBreak ();
1171
+ generator .string += generator .IncIndent ();
1172
+
1173
+ for (const field of references)
1174
+ {
1175
+ const protoFields = [... field .getReferences ()];
1176
+
1177
+ for (const protoField of protoFields)
1178
+ {
1179
+ generator .string += generator .Indent ();
1180
+ generator .string += '{';
1181
+ generator .string += generator .TidyBreak ();
1182
+ generator .string += generator .IncIndent ();
1183
+
1184
+ generator .string += generator .Indent ();
1185
+ generator .string += '"';
1186
+ generator .string += "@nodeField";
1187
+ generator .string += '"';
1188
+ generator .string += ':';
1189
+ generator .string += generator .TidySpace ();
1190
+ generator .string += generator .JSONEncode (field .getName ());
1191
+ generator .string += ',';
1192
+ generator .string += generator .TidyBreak ();
1193
+
1194
+ generator .string += generator .Indent ();
1195
+ generator .string += '"';
1196
+ generator .string += "@protoField";
1197
+ generator .string += '"';
1198
+ generator .string += ':';
1199
+ generator .string += generator .TidySpace ();
1200
+ generator .string += generator .JSONEncode (protoField .getName ());
1201
+ generator .string += generator .TidyBreak ();
1202
+
1203
+ generator .string += generator .DecIndent ();
1204
+ generator .string += generator .Indent ();
1205
+ generator .string += '}';
1206
+
1207
+ if (field === references .at (-1) && protoField === protoFields .at (-1))
1208
+ ;
1209
+ else
1210
+ {
1211
+ generator .string += ',';
1212
+ }
1213
+
1214
+ generator .string += generator .TidyBreak ();
1215
+ }
1216
+ }
1217
+
1218
+ generator .string += generator .DecIndent ();
1219
+ generator .string += generator .Indent ();
1220
+ generator .string += ']';
1221
+ generator .string += generator .TidyBreak ();
1222
+ generator .string += generator .DecIndent ();
1223
+ generator .string += generator .Indent ();
1224
+ generator .string += '}';
1225
+ generator .string += generator .TidyBreak ();
1226
+ }
1227
+
1228
+ generator .string = generator .string .replace (/,(\s*)$/s, "$1");
1229
+
1230
+ // End
1231
+
1232
+ generator .string += generator .DecIndent ();
1233
+ generator .string += generator .Indent ();
1234
+ generator .string += '}';
1235
+ generator .string += generator .TidyBreak ();
1236
+ generator .string += generator .DecIndent ();
1237
+ generator .string += generator .Indent ();
1238
+ generator .string += '}';
1239
+
1240
+ generator .LeaveScope ();
1241
+ }
1242
+ catch (error)
1243
+ {
1244
+ console .log (error)
1245
+ }
1246
+ },
784
1247
  dispose: function ()
785
1248
  {
786
1249
  const executionContext = this .getExecutionContext ();