@etothepii/satisfactory-file-parser 3.3.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/GUIDE.md +11 -7
  3. package/README.md +4 -4
  4. package/build/index.d.ts +112 -102
  5. package/build/index.d.ts.map +1 -1
  6. package/build/index.js +42 -40
  7. package/build/index.js.map +1 -1
  8. package/build/parser/byte/binary-readable.interface.d.ts +1 -0
  9. package/build/parser/byte/binary-readable.interface.d.ts.map +1 -1
  10. package/build/parser/byte/binary-readable.interface.js.map +1 -1
  11. package/build/parser/byte/byte-reader.class.d.ts +1 -0
  12. package/build/parser/byte/byte-reader.class.d.ts.map +1 -1
  13. package/build/parser/byte/byte-reader.class.js +6 -2
  14. package/build/parser/byte/byte-reader.class.js.map +1 -1
  15. package/build/parser/byte/byte-writer.class.d.ts +1 -0
  16. package/build/parser/byte/byte-writer.class.d.ts.map +1 -1
  17. package/build/parser/byte/byte-writer.class.js +6 -0
  18. package/build/parser/byte/byte-writer.class.js.map +1 -1
  19. package/build/parser/context/context-reader.d.ts +1 -1
  20. package/build/parser/context/context-reader.d.ts.map +1 -1
  21. package/build/parser/context/context-reader.js.map +1 -1
  22. package/build/parser/context/context-writer.d.ts +1 -1
  23. package/build/parser/context/context-writer.d.ts.map +1 -1
  24. package/build/parser/context/context-writer.js.map +1 -1
  25. package/build/parser/context/hierarchical-version-context.d.ts +11 -0
  26. package/build/parser/context/hierarchical-version-context.d.ts.map +1 -0
  27. package/build/parser/context/hierarchical-version-context.js +24 -0
  28. package/build/parser/context/hierarchical-version-context.js.map +1 -0
  29. package/build/parser/context/{context.d.ts → reader-writer-context.d.ts} +5 -3
  30. package/build/parser/context/reader-writer-context.d.ts.map +1 -0
  31. package/build/parser/context/{context.js → reader-writer-context.js} +1 -1
  32. package/build/parser/context/reader-writer-context.js.map +1 -0
  33. package/build/parser/parser.d.ts.map +1 -1
  34. package/build/parser/parser.js +29 -15
  35. package/build/parser/parser.js.map +1 -1
  36. package/build/parser/satisfactory/blueprint/blueprint-config-version.d.ts +4 -2
  37. package/build/parser/satisfactory/blueprint/blueprint-config-version.d.ts.map +1 -1
  38. package/build/parser/satisfactory/blueprint/blueprint-config-version.js +4 -2
  39. package/build/parser/satisfactory/blueprint/blueprint-config-version.js.map +1 -1
  40. package/build/parser/satisfactory/blueprint/blueprint-config.d.ts +4 -5
  41. package/build/parser/satisfactory/blueprint/blueprint-config.d.ts.map +1 -1
  42. package/build/parser/satisfactory/blueprint/blueprint-config.js +16 -14
  43. package/build/parser/satisfactory/blueprint/blueprint-config.js.map +1 -1
  44. package/build/parser/satisfactory/blueprint/blueprint-header.d.ts +2 -0
  45. package/build/parser/satisfactory/blueprint/blueprint-header.d.ts.map +1 -1
  46. package/build/parser/satisfactory/blueprint/blueprint-header.js +18 -2
  47. package/build/parser/satisfactory/blueprint/blueprint-header.js.map +1 -1
  48. package/build/parser/satisfactory/blueprint/blueprint-reader.d.ts.map +1 -1
  49. package/build/parser/satisfactory/blueprint/blueprint-reader.js +6 -2
  50. package/build/parser/satisfactory/blueprint/blueprint-reader.js.map +1 -1
  51. package/build/parser/satisfactory/blueprint/blueprint-writer.d.ts.map +1 -1
  52. package/build/parser/satisfactory/blueprint/blueprint-writer.js +5 -2
  53. package/build/parser/satisfactory/blueprint/blueprint-writer.js.map +1 -1
  54. package/build/parser/satisfactory/save/data-blob.d.ts +17 -0
  55. package/build/parser/satisfactory/save/data-blob.d.ts.map +1 -0
  56. package/build/parser/satisfactory/save/data-blob.js +137 -0
  57. package/build/parser/satisfactory/save/data-blob.js.map +1 -0
  58. package/build/parser/satisfactory/save/level.d.ts +5 -10
  59. package/build/parser/satisfactory/save/level.d.ts.map +1 -1
  60. package/build/parser/satisfactory/save/level.js +52 -180
  61. package/build/parser/satisfactory/save/level.js.map +1 -1
  62. package/build/parser/satisfactory/save/satisfactory-save-header.d.ts.map +1 -1
  63. package/build/parser/satisfactory/save/satisfactory-save-header.js +5 -3
  64. package/build/parser/satisfactory/save/satisfactory-save-header.js.map +1 -1
  65. package/build/parser/satisfactory/save/satisfactory-save.d.ts +3 -1
  66. package/build/parser/satisfactory/save/satisfactory-save.d.ts.map +1 -1
  67. package/build/parser/satisfactory/save/satisfactory-save.js.map +1 -1
  68. package/build/parser/satisfactory/save/save-body-chunks.js +2 -2
  69. package/build/parser/satisfactory/save/save-body-chunks.js.map +1 -1
  70. package/build/parser/satisfactory/save/save-custom-version.d.ts +8 -2
  71. package/build/parser/satisfactory/save/save-custom-version.d.ts.map +1 -1
  72. package/build/parser/satisfactory/save/save-custom-version.js +8 -2
  73. package/build/parser/satisfactory/save/save-custom-version.js.map +1 -1
  74. package/build/parser/satisfactory/save/save-reader.d.ts +2 -2
  75. package/build/parser/satisfactory/save/save-reader.d.ts.map +1 -1
  76. package/build/parser/satisfactory/save/save-reader.js +16 -13
  77. package/build/parser/satisfactory/save/save-reader.js.map +1 -1
  78. package/build/parser/satisfactory/save/save-writer.d.ts.map +1 -1
  79. package/build/parser/satisfactory/save/save-writer.js +4 -1
  80. package/build/parser/satisfactory/save/save-writer.js.map +1 -1
  81. package/build/parser/satisfactory/save/save.types.d.ts +1 -1
  82. package/build/parser/satisfactory/save/save.types.d.ts.map +1 -1
  83. package/build/parser/satisfactory/save/save.types.js.map +1 -1
  84. package/build/parser/satisfactory/save/toc-blob.d.ts +18 -0
  85. package/build/parser/satisfactory/save/toc-blob.d.ts.map +1 -0
  86. package/build/parser/satisfactory/save/toc-blob.js +97 -0
  87. package/build/parser/satisfactory/save/toc-blob.js.map +1 -0
  88. package/build/parser/satisfactory/types/objects/SaveObject.d.ts +4 -0
  89. package/build/parser/satisfactory/types/objects/SaveObject.d.ts.map +1 -1
  90. package/build/parser/satisfactory/types/objects/SaveObject.js +19 -5
  91. package/build/parser/satisfactory/types/objects/SaveObject.js.map +1 -1
  92. package/build/parser/satisfactory/types/property/PropertiesList.d.ts +4 -4
  93. package/build/parser/satisfactory/types/property/PropertiesList.d.ts.map +1 -1
  94. package/build/parser/satisfactory/types/property/PropertiesList.js +73 -114
  95. package/build/parser/satisfactory/types/property/PropertiesList.js.map +1 -1
  96. package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.d.ts +9 -12
  97. package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.d.ts.map +1 -1
  98. package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.js +12 -7
  99. package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.js.map +1 -1
  100. package/build/parser/satisfactory/types/property/generic/BoolProperty.d.ts +10 -5
  101. package/build/parser/satisfactory/types/property/generic/BoolProperty.d.ts.map +1 -1
  102. package/build/parser/satisfactory/types/property/generic/BoolProperty.js +20 -23
  103. package/build/parser/satisfactory/types/property/generic/BoolProperty.js.map +1 -1
  104. package/build/parser/satisfactory/types/property/generic/ByteProperty.d.ts +12 -7
  105. package/build/parser/satisfactory/types/property/generic/ByteProperty.d.ts.map +1 -1
  106. package/build/parser/satisfactory/types/property/generic/ByteProperty.js +37 -34
  107. package/build/parser/satisfactory/types/property/generic/ByteProperty.js.map +1 -1
  108. package/build/parser/satisfactory/types/property/generic/DoubleProperty.d.ts +9 -5
  109. package/build/parser/satisfactory/types/property/generic/DoubleProperty.d.ts.map +1 -1
  110. package/build/parser/satisfactory/types/property/generic/DoubleProperty.js +15 -23
  111. package/build/parser/satisfactory/types/property/generic/DoubleProperty.js.map +1 -1
  112. package/build/parser/satisfactory/types/property/generic/EnumProperty.d.ts +10 -5
  113. package/build/parser/satisfactory/types/property/generic/EnumProperty.d.ts.map +1 -1
  114. package/build/parser/satisfactory/types/property/generic/EnumProperty.js +17 -23
  115. package/build/parser/satisfactory/types/property/generic/EnumProperty.js.map +1 -1
  116. package/build/parser/satisfactory/types/property/generic/FloatProperty.d.ts +9 -5
  117. package/build/parser/satisfactory/types/property/generic/FloatProperty.d.ts.map +1 -1
  118. package/build/parser/satisfactory/types/property/generic/FloatProperty.js +15 -23
  119. package/build/parser/satisfactory/types/property/generic/FloatProperty.js.map +1 -1
  120. package/build/parser/satisfactory/types/property/generic/Int64Property.d.ts +9 -5
  121. package/build/parser/satisfactory/types/property/generic/Int64Property.d.ts.map +1 -1
  122. package/build/parser/satisfactory/types/property/generic/Int64Property.js +15 -23
  123. package/build/parser/satisfactory/types/property/generic/Int64Property.js.map +1 -1
  124. package/build/parser/satisfactory/types/property/generic/Int8Property.d.ts +8 -4
  125. package/build/parser/satisfactory/types/property/generic/Int8Property.d.ts.map +1 -1
  126. package/build/parser/satisfactory/types/property/generic/Int8Property.js +11 -20
  127. package/build/parser/satisfactory/types/property/generic/Int8Property.js.map +1 -1
  128. package/build/parser/satisfactory/types/property/generic/IntProperty.d.ts +20 -0
  129. package/build/parser/satisfactory/types/property/generic/IntProperty.d.ts.map +1 -0
  130. package/build/parser/satisfactory/types/property/generic/IntProperty.js +25 -0
  131. package/build/parser/satisfactory/types/property/generic/IntProperty.js.map +1 -0
  132. package/build/parser/satisfactory/types/property/generic/InterfaceProperty.d.ts +21 -0
  133. package/build/parser/satisfactory/types/property/generic/InterfaceProperty.d.ts.map +1 -0
  134. package/build/parser/satisfactory/types/property/generic/InterfaceProperty.js +26 -0
  135. package/build/parser/satisfactory/types/property/generic/InterfaceProperty.js.map +1 -0
  136. package/build/parser/satisfactory/types/property/generic/NameProperty.d.ts +20 -0
  137. package/build/parser/satisfactory/types/property/generic/NameProperty.d.ts.map +1 -0
  138. package/build/parser/satisfactory/types/property/generic/NameProperty.js +25 -0
  139. package/build/parser/satisfactory/types/property/generic/NameProperty.js.map +1 -0
  140. package/build/parser/satisfactory/types/property/generic/ObjectProperty.d.ts +9 -5
  141. package/build/parser/satisfactory/types/property/generic/ObjectProperty.d.ts.map +1 -1
  142. package/build/parser/satisfactory/types/property/generic/ObjectProperty.js +15 -23
  143. package/build/parser/satisfactory/types/property/generic/ObjectProperty.js.map +1 -1
  144. package/build/parser/satisfactory/types/property/generic/SingleProperty.d.ts +20 -0
  145. package/build/parser/satisfactory/types/property/generic/SingleProperty.d.ts.map +1 -0
  146. package/build/parser/satisfactory/types/property/generic/SingleProperty.js +25 -0
  147. package/build/parser/satisfactory/types/property/generic/SingleProperty.js.map +1 -0
  148. package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.d.ts +9 -5
  149. package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.d.ts.map +1 -1
  150. package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.js +15 -23
  151. package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.js.map +1 -1
  152. package/build/parser/satisfactory/types/property/generic/StrProperty.d.ts +9 -5
  153. package/build/parser/satisfactory/types/property/generic/StrProperty.d.ts.map +1 -1
  154. package/build/parser/satisfactory/types/property/generic/StrProperty.js +15 -23
  155. package/build/parser/satisfactory/types/property/generic/StrProperty.js.map +1 -1
  156. package/build/parser/satisfactory/types/property/generic/TextProperty.d.ts +9 -5
  157. package/build/parser/satisfactory/types/property/generic/TextProperty.d.ts.map +1 -1
  158. package/build/parser/satisfactory/types/property/generic/TextProperty.js +38 -45
  159. package/build/parser/satisfactory/types/property/generic/TextProperty.js.map +1 -1
  160. package/build/parser/satisfactory/types/property/generic/Uint32Property.d.ts +9 -5
  161. package/build/parser/satisfactory/types/property/generic/Uint32Property.d.ts.map +1 -1
  162. package/build/parser/satisfactory/types/property/generic/Uint32Property.js +15 -23
  163. package/build/parser/satisfactory/types/property/generic/Uint32Property.js.map +1 -1
  164. package/build/parser/satisfactory/types/property/generic/Uint64Property.d.ts +9 -5
  165. package/build/parser/satisfactory/types/property/generic/Uint64Property.d.ts.map +1 -1
  166. package/build/parser/satisfactory/types/property/generic/Uint64Property.js +14 -22
  167. package/build/parser/satisfactory/types/property/generic/Uint64Property.js.map +1 -1
  168. package/build/parser/satisfactory/types/property/generic/Uint8Property.d.ts +9 -5
  169. package/build/parser/satisfactory/types/property/generic/Uint8Property.d.ts.map +1 -1
  170. package/build/parser/satisfactory/types/property/generic/Uint8Property.js +14 -22
  171. package/build/parser/satisfactory/types/property/generic/Uint8Property.js.map +1 -1
  172. package/build/parser/satisfactory/types/property/generic/containers/ArrayProperty.d.ts +15 -0
  173. package/build/parser/satisfactory/types/property/generic/containers/ArrayProperty.d.ts.map +1 -0
  174. package/build/parser/satisfactory/types/property/generic/containers/ArrayProperty.js +129 -0
  175. package/build/parser/satisfactory/types/property/generic/containers/ArrayProperty.js.map +1 -0
  176. package/build/parser/satisfactory/types/property/generic/containers/ArrayPropertySpecificTypes.d.ts +55 -0
  177. package/build/parser/satisfactory/types/property/generic/containers/ArrayPropertySpecificTypes.d.ts.map +1 -0
  178. package/build/parser/satisfactory/types/property/generic/containers/ArrayPropertySpecificTypes.js +24 -0
  179. package/build/parser/satisfactory/types/property/generic/containers/ArrayPropertySpecificTypes.js.map +1 -0
  180. package/build/parser/satisfactory/types/property/generic/containers/MapProperty.d.ts +20 -0
  181. package/build/parser/satisfactory/types/property/generic/containers/MapProperty.d.ts.map +1 -0
  182. package/build/parser/satisfactory/types/property/generic/{MapProperty.js → containers/MapProperty.js} +52 -61
  183. package/build/parser/satisfactory/types/property/generic/containers/MapProperty.js.map +1 -0
  184. package/build/parser/satisfactory/types/property/generic/containers/SetProperty.d.ts +14 -0
  185. package/build/parser/satisfactory/types/property/generic/containers/SetProperty.d.ts.map +1 -0
  186. package/build/parser/satisfactory/types/property/generic/containers/SetProperty.js +90 -0
  187. package/build/parser/satisfactory/types/property/generic/containers/SetProperty.js.map +1 -0
  188. package/build/parser/satisfactory/types/property/generic/containers/SetPropertySpecificTypes.d.ts +34 -0
  189. package/build/parser/satisfactory/types/property/generic/containers/SetPropertySpecificTypes.d.ts.map +1 -0
  190. package/build/parser/satisfactory/types/property/generic/containers/SetPropertySpecificTypes.js +17 -0
  191. package/build/parser/satisfactory/types/property/generic/containers/SetPropertySpecificTypes.js.map +1 -0
  192. package/build/parser/satisfactory/types/property/generic/containers/StructProperty.d.ts +59 -0
  193. package/build/parser/satisfactory/types/property/generic/containers/StructProperty.d.ts.map +1 -0
  194. package/build/parser/satisfactory/types/property/generic/{StructProperty.js → containers/StructProperty.js} +61 -84
  195. package/build/parser/satisfactory/types/property/generic/containers/StructProperty.js.map +1 -0
  196. package/build/parser/satisfactory/types/property/special/BuildableSubsystemSpecialProperties.d.ts +2 -0
  197. package/build/parser/satisfactory/types/property/special/BuildableSubsystemSpecialProperties.d.ts.map +1 -1
  198. package/build/parser/satisfactory/types/property/special/BuildableSubsystemSpecialProperties.js +14 -5
  199. package/build/parser/satisfactory/types/property/special/BuildableSubsystemSpecialProperties.js.map +1 -1
  200. package/build/parser/satisfactory/types/property/special/PlayerSpecialProperties.d.ts.map +1 -1
  201. package/build/parser/satisfactory/types/property/special/PlayerSpecialProperties.js.map +1 -1
  202. package/build/parser/satisfactory/types/property/special/PowerLineSpecialProperties.js +2 -2
  203. package/build/parser/satisfactory/types/property/special/PowerLineSpecialProperties.js.map +1 -1
  204. package/build/parser/satisfactory/types/property/special/runtime-buildable-instance-data-version.d.ts +4 -2
  205. package/build/parser/satisfactory/types/property/special/runtime-buildable-instance-data-version.d.ts.map +1 -1
  206. package/build/parser/satisfactory/types/property/special/runtime-buildable-instance-data-version.js +4 -2
  207. package/build/parser/satisfactory/types/property/special/runtime-buildable-instance-data-version.js.map +1 -1
  208. package/build/parser/satisfactory/types/structs/GUIDInfo.d.ts +4 -4
  209. package/build/parser/satisfactory/types/structs/GUIDInfo.d.ts.map +1 -1
  210. package/build/parser/satisfactory/types/structs/GUIDInfo.js +6 -6
  211. package/build/parser/satisfactory/types/structs/GUIDInfo.js.map +1 -1
  212. package/build/parser/satisfactory/types/structs/SaveBodyValidation.d.ts.map +1 -1
  213. package/build/parser/satisfactory/types/structs/SaveBodyValidation.js +0 -2
  214. package/build/parser/satisfactory/types/structs/SaveBodyValidation.js.map +1 -1
  215. package/build/parser/satisfactory/types/structs/SoftObjectReference.d.ts +1 -1
  216. package/build/parser/satisfactory/types/structs/SoftObjectReference.d.ts.map +1 -1
  217. package/build/parser/satisfactory/types/structs/SoftObjectReference.js +2 -2
  218. package/build/parser/satisfactory/types/structs/SoftObjectReference.js.map +1 -1
  219. package/build/parser/satisfactory/types/structs/binary/FCustomVersion.d.ts +12 -0
  220. package/build/parser/satisfactory/types/structs/binary/FCustomVersion.d.ts.map +1 -0
  221. package/build/parser/satisfactory/types/structs/binary/FCustomVersion.js +21 -0
  222. package/build/parser/satisfactory/types/structs/binary/FCustomVersion.js.map +1 -0
  223. package/build/parser/satisfactory/types/structs/binary/FCustomVersionContainer.d.ts +11 -0
  224. package/build/parser/satisfactory/types/structs/binary/FCustomVersionContainer.d.ts.map +1 -0
  225. package/build/parser/satisfactory/types/structs/binary/FCustomVersionContainer.js +22 -0
  226. package/build/parser/satisfactory/types/structs/binary/FCustomVersionContainer.js.map +1 -0
  227. package/build/parser/satisfactory/types/structs/binary/FEngineVersion.d.ts +14 -0
  228. package/build/parser/satisfactory/types/structs/binary/FEngineVersion.d.ts.map +1 -0
  229. package/build/parser/satisfactory/types/structs/binary/FEngineVersion.js +24 -0
  230. package/build/parser/satisfactory/types/structs/binary/FEngineVersion.js.map +1 -0
  231. package/build/parser/satisfactory/types/structs/binary/FLocalUserNetIdBundle.d.ts +12 -0
  232. package/build/parser/satisfactory/types/structs/binary/FLocalUserNetIdBundle.d.ts.map +1 -0
  233. package/build/parser/satisfactory/types/structs/binary/FLocalUserNetIdBundle.js +22 -0
  234. package/build/parser/satisfactory/types/structs/binary/FLocalUserNetIdBundle.js.map +1 -0
  235. package/build/parser/satisfactory/types/structs/binary/FPackageFileVersion.d.ts +11 -0
  236. package/build/parser/satisfactory/types/structs/binary/FPackageFileVersion.d.ts.map +1 -0
  237. package/build/parser/satisfactory/types/structs/binary/FPackageFileVersion.js +18 -0
  238. package/build/parser/satisfactory/types/structs/binary/FPackageFileVersion.js.map +1 -0
  239. package/build/parser/satisfactory/types/structs/binary/FPlayerInfoHandle.d.ts +11 -0
  240. package/build/parser/satisfactory/types/structs/binary/FPlayerInfoHandle.d.ts.map +1 -0
  241. package/build/parser/satisfactory/types/structs/binary/FPlayerInfoHandle.js +38 -0
  242. package/build/parser/satisfactory/types/structs/binary/FPlayerInfoHandle.js.map +1 -0
  243. package/build/parser/satisfactory/types/structs/binary/FPropertyTag.d.ts +30 -0
  244. package/build/parser/satisfactory/types/structs/binary/FPropertyTag.d.ts.map +1 -0
  245. package/build/parser/satisfactory/types/structs/binary/FPropertyTag.js +182 -0
  246. package/build/parser/satisfactory/types/structs/binary/FPropertyTag.js.map +1 -0
  247. package/build/parser/satisfactory/types/structs/binary/FPropertyTagNode.d.ts +11 -0
  248. package/build/parser/satisfactory/types/structs/binary/FPropertyTagNode.d.ts.map +1 -0
  249. package/build/parser/satisfactory/types/structs/binary/FPropertyTagNode.js +26 -0
  250. package/build/parser/satisfactory/types/structs/binary/FPropertyTagNode.js.map +1 -0
  251. package/build/parser/satisfactory/types/structs/binary/FSaveObjectVersionData.d.ts +17 -0
  252. package/build/parser/satisfactory/types/structs/binary/FSaveObjectVersionData.d.ts.map +1 -0
  253. package/build/parser/satisfactory/types/structs/binary/FSaveObjectVersionData.js +27 -0
  254. package/build/parser/satisfactory/types/structs/binary/FSaveObjectVersionData.js.map +1 -0
  255. package/build/parser/satisfactory/types/structs/binary/FUniqueNetIdRepl.d.ts +11 -0
  256. package/build/parser/satisfactory/types/structs/binary/FUniqueNetIdRepl.d.ts.map +1 -0
  257. package/build/parser/satisfactory/types/structs/binary/FUniqueNetIdRepl.js +21 -0
  258. package/build/parser/satisfactory/types/structs/binary/FUniqueNetIdRepl.js.map +1 -0
  259. package/build/parser/satisfactory/types/structs/binary/LBBalancerIndexing.d.ts +12 -0
  260. package/build/parser/satisfactory/types/structs/binary/LBBalancerIndexing.d.ts.map +1 -0
  261. package/build/parser/satisfactory/types/structs/binary/LBBalancerIndexing.js +22 -0
  262. package/build/parser/satisfactory/types/structs/binary/LBBalancerIndexing.js.map +1 -0
  263. package/build/parser/stream/reworked/readable-stream-parser.d.ts +2 -3
  264. package/build/parser/stream/reworked/readable-stream-parser.d.ts.map +1 -1
  265. package/build/parser/stream/reworked/readable-stream-parser.js +82 -44
  266. package/build/parser/stream/reworked/readable-stream-parser.js.map +1 -1
  267. package/build/parser/unreal-engine/ETextHistoryType.d.ts +17 -0
  268. package/build/parser/unreal-engine/ETextHistoryType.d.ts.map +1 -0
  269. package/build/parser/unreal-engine/ETextHistoryType.js +21 -0
  270. package/build/parser/unreal-engine/ETextHistoryType.js.map +1 -0
  271. package/build/parser/unreal-engine/EUnrealEngineObjectUE5Version.d.ts +24 -0
  272. package/build/parser/unreal-engine/EUnrealEngineObjectUE5Version.d.ts.map +1 -0
  273. package/build/parser/unreal-engine/EUnrealEngineObjectUE5Version.js +29 -0
  274. package/build/parser/unreal-engine/EUnrealEngineObjectUE5Version.js.map +1 -0
  275. package/package.json +3 -3
  276. package/build/parser/context/context.d.ts.map +0 -1
  277. package/build/parser/context/context.js.map +0 -1
  278. package/build/parser/file.types.d.ts +0 -14
  279. package/build/parser/file.types.d.ts.map +0 -1
  280. package/build/parser/file.types.js +0 -8
  281. package/build/parser/file.types.js.map +0 -1
  282. package/build/parser/satisfactory/save/level.class.d.ts +0 -29
  283. package/build/parser/satisfactory/save/level.class.d.ts.map +0 -1
  284. package/build/parser/satisfactory/save/level.class.js +0 -204
  285. package/build/parser/satisfactory/save/level.class.js.map +0 -1
  286. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ArrayProperty.d.ts +0 -22
  287. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ArrayProperty.d.ts.map +0 -1
  288. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ArrayProperty.js +0 -127
  289. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ArrayProperty.js.map +0 -1
  290. package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.d.ts +0 -14
  291. package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.d.ts.map +0 -1
  292. package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.js +0 -23
  293. package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.js.map +0 -1
  294. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.d.ts +0 -14
  295. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.d.ts.map +0 -1
  296. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.js +0 -23
  297. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.js.map +0 -1
  298. package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.d.ts +0 -14
  299. package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.d.ts.map +0 -1
  300. package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.js +0 -23
  301. package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.js.map +0 -1
  302. package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.d.ts +0 -14
  303. package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.d.ts.map +0 -1
  304. package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.js +0 -23
  305. package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.js.map +0 -1
  306. package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.d.ts +0 -14
  307. package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.d.ts.map +0 -1
  308. package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.js +0 -23
  309. package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.js.map +0 -1
  310. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.d.ts +0 -14
  311. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.d.ts.map +0 -1
  312. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.js +0 -23
  313. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.js.map +0 -1
  314. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.d.ts +0 -14
  315. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.d.ts.map +0 -1
  316. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.js +0 -23
  317. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.js.map +0 -1
  318. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.d.ts +0 -15
  319. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.d.ts.map +0 -1
  320. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.js +0 -23
  321. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.js.map +0 -1
  322. package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.d.ts +0 -15
  323. package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.d.ts.map +0 -1
  324. package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.js +0 -23
  325. package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.js.map +0 -1
  326. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.d.ts +0 -14
  327. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.d.ts.map +0 -1
  328. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.js +0 -23
  329. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.js.map +0 -1
  330. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.d.ts +0 -26
  331. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.d.ts.map +0 -1
  332. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.js +0 -75
  333. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.js.map +0 -1
  334. package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.d.ts +0 -15
  335. package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.d.ts.map +0 -1
  336. package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.js +0 -23
  337. package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.js.map +0 -1
  338. package/build/parser/satisfactory/types/property/generic/Int32Property.d.ts +0 -16
  339. package/build/parser/satisfactory/types/property/generic/Int32Property.d.ts.map +0 -1
  340. package/build/parser/satisfactory/types/property/generic/Int32Property.js +0 -33
  341. package/build/parser/satisfactory/types/property/generic/Int32Property.js.map +0 -1
  342. package/build/parser/satisfactory/types/property/generic/MapProperty.d.ts +0 -25
  343. package/build/parser/satisfactory/types/property/generic/MapProperty.d.ts.map +0 -1
  344. package/build/parser/satisfactory/types/property/generic/MapProperty.js.map +0 -1
  345. package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.d.ts +0 -14
  346. package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.d.ts.map +0 -1
  347. package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.js +0 -23
  348. package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.js.map +0 -1
  349. package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.d.ts +0 -15
  350. package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.d.ts.map +0 -1
  351. package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.js +0 -23
  352. package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.js.map +0 -1
  353. package/build/parser/satisfactory/types/property/generic/SetProperty/SetProperty.d.ts +0 -15
  354. package/build/parser/satisfactory/types/property/generic/SetProperty/SetProperty.d.ts.map +0 -1
  355. package/build/parser/satisfactory/types/property/generic/SetProperty/SetProperty.js +0 -75
  356. package/build/parser/satisfactory/types/property/generic/SetProperty/SetProperty.js.map +0 -1
  357. package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.d.ts +0 -14
  358. package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.d.ts.map +0 -1
  359. package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.js +0 -23
  360. package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.js.map +0 -1
  361. package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.d.ts +0 -14
  362. package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.d.ts.map +0 -1
  363. package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.js +0 -42
  364. package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.js.map +0 -1
  365. package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.d.ts +0 -14
  366. package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.d.ts.map +0 -1
  367. package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.js +0 -23
  368. package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.js.map +0 -1
  369. package/build/parser/satisfactory/types/property/generic/StructProperty.d.ts +0 -60
  370. package/build/parser/satisfactory/types/property/generic/StructProperty.d.ts.map +0 -1
  371. package/build/parser/satisfactory/types/property/generic/StructProperty.js.map +0 -1
  372. package/build/parser/satisfactory/types/structs/GUID.d.ts +0 -8
  373. package/build/parser/satisfactory/types/structs/GUID.d.ts.map +0 -1
  374. package/build/parser/satisfactory/types/structs/GUID.js +0 -22
  375. package/build/parser/satisfactory/types/structs/GUID.js.map +0 -1
  376. package/build/parser/stream/reworked/save-stream-json-stringifier.d.ts +0 -6
  377. package/build/parser/stream/reworked/save-stream-json-stringifier.d.ts.map +0 -1
  378. package/build/parser/stream/reworked/save-stream-json-stringifier.js +0 -35
  379. package/build/parser/stream/reworked/save-stream-json-stringifier.js.map +0 -1
  380. package/build/parser/stream/reworked/save-stream-writer.class.d.ts +0 -28
  381. package/build/parser/stream/reworked/save-stream-writer.class.d.ts.map +0 -1
  382. package/build/parser/stream/reworked/save-stream-writer.class.js +0 -84
  383. package/build/parser/stream/reworked/save-stream-writer.class.js.map +0 -1
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LBBalancerIndexing = void 0;
4
+ var LBBalancerIndexing;
5
+ (function (LBBalancerIndexing) {
6
+ function read(reader) {
7
+ return {
8
+ mNormalIndex: reader.readInt32(),
9
+ mOverflowIndex: reader.readInt32(),
10
+ mFilterIndex: reader.readInt32()
11
+ };
12
+ }
13
+ LBBalancerIndexing.read = read;
14
+ function write(writer, handle) {
15
+ writer.writeInt32(handle.mNormalIndex);
16
+ writer.writeInt32(handle.mOverflowIndex);
17
+ writer.writeInt32(handle.mFilterIndex);
18
+ }
19
+ LBBalancerIndexing.write = write;
20
+ })(LBBalancerIndexing || (exports.LBBalancerIndexing = LBBalancerIndexing = {}));
21
+ ;
22
+ //# sourceMappingURL=LBBalancerIndexing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LBBalancerIndexing.js","sourceRoot":"","sources":["../../../../../../src/parser/satisfactory/types/structs/binary/LBBalancerIndexing.ts"],"names":[],"mappings":";;;AASA,IAAiB,kBAAkB,CAclC;AAdD,WAAiB,kBAAkB;IAC/B,SAAgB,IAAI,CAAC,MAAqB;QACtC,OAAO;YACH,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE;YAChC,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE;YAClC,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE;SACnC,CAAC;IACN,CAAC;IANe,uBAAI,OAMnB,CAAA;IAED,SAAgB,KAAK,CAAC,MAAqB,EAAE,MAA0B;QACnE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IAJe,wBAAK,QAIpB,CAAA;AACL,CAAC,EAdgB,kBAAkB,kCAAlB,kBAAkB,QAclC;AAAA,CAAC","sourcesContent":["import { ContextReader } from \"../../../../context/context-reader\";\nimport { ContextWriter } from \"../../../../context/context-writer\";\n\nexport type LBBalancerIndexing = {\n mNormalIndex: number;\n mOverflowIndex: number;\n mFilterIndex: number;\n}\n\nexport namespace LBBalancerIndexing {\n export function read(reader: ContextReader): LBBalancerIndexing {\n return {\n mNormalIndex: reader.readInt32(),\n mOverflowIndex: reader.readInt32(),\n mFilterIndex: reader.readInt32()\n };\n }\n\n export function write(writer: ContextWriter, handle: LBBalancerIndexing): void {\n writer.writeInt32(handle.mNormalIndex);\n writer.writeInt32(handle.mOverflowIndex);\n writer.writeInt32(handle.mFilterIndex);\n }\n};"]}
@@ -1,14 +1,13 @@
1
- import { ReadableStream } from "stream/web";
2
1
  export declare class ReadableStreamParser {
3
2
  private static CreateReadableStreamForParsingSave;
4
3
  static CreateReadableStreamFromSaveToJson: (name: string, bytes: ArrayBufferLike, options?: Partial<{
5
4
  onDecompressedSaveBody: (buffer: ArrayBufferLike) => void;
6
5
  onProgress: (progress: number, message?: string) => void;
7
6
  }>) => {
8
- stream: ReadableStream<string>;
7
+ stream: any;
9
8
  startStreaming: () => Promise<void>;
10
9
  };
11
- private static WriteHeaderAndSaveBodyValidation;
10
+ private static WriteHeaderAndFieldsBeforeLevel;
12
11
  private static ReadWriteLevels;
13
12
  }
14
13
  //# sourceMappingURL=readable-stream-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"readable-stream-parser.d.ts","sourceRoot":"","sources":["../../../../src/parser/stream/reworked/readable-stream-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAAmC,MAAM,YAAY,CAAC;AAyD9F,qBAAa,oBAAoB;IAEhC,OAAO,CAAC,MAAM,CAAC,kCAAkC,CAgC/C;IAUF,OAAc,kCAAkC,SACzC,MAAM,SACL,eAAe,YACZ,OAAO,CAAC;QACjB,sBAAsB,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;QAC1D,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KACxD,CAAC,KACA;QAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAAC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CA6FzE;IAGD,OAAO,CAAC,MAAM,CAAC,gCAAgC,CAQ9C;mBAEoB,eAAe;CA0IpC"}
1
+ {"version":3,"file":"readable-stream-parser.d.ts","sourceRoot":"","sources":["../../../../src/parser/stream/reworked/readable-stream-parser.ts"],"names":[],"mappings":"AAkFA,qBAAa,oBAAoB;IAEhC,OAAO,CAAC,MAAM,CAAC,kCAAkC,CAgC/C;IAUF,OAAc,kCAAkC,SACzC,MAAM,SACL,eAAe,YACZ,OAAO,CAAC;QACjB,sBAAsB,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;QAC1D,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KACxD,CAAC,KACA;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAsGtD;IAGD,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAY7C;mBAEoB,eAAe;CA+IpC"}
@@ -2,17 +2,36 @@
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.ReadableStreamParser = void 0;
5
- const web_1 = require("stream/web");
5
+ const hierarchical_version_context_1 = require("../../context/hierarchical-version-context");
6
6
  const parser_error_1 = require("../../error/parser.error");
7
- const level_1 = require("../../satisfactory/save/level");
7
+ const data_blob_1 = require("../../satisfactory/save/data-blob");
8
8
  const level_to_destroyed_actors_map_1 = require("../../satisfactory/save/level-to-destroyed-actors-map");
9
9
  const object_references_list_1 = require("../../satisfactory/save/object-references-list");
10
10
  const satisfactory_save_1 = require("../../satisfactory/save/satisfactory-save");
11
11
  const satisfactory_save_header_1 = require("../../satisfactory/save/satisfactory-save-header");
12
12
  const save_custom_version_1 = require("../../satisfactory/save/save-custom-version");
13
13
  const save_reader_1 = require("../../satisfactory/save/save-reader");
14
+ const toc_blob_1 = require("../../satisfactory/save/toc-blob");
14
15
  const ObjectReference_1 = require("../../satisfactory/types/structs/ObjectReference");
15
16
  const SaveBodyValidation_1 = require("../../satisfactory/types/structs/SaveBodyValidation");
17
+ const FSaveObjectVersionData_1 = require("../../satisfactory/types/structs/binary/FSaveObjectVersionData");
18
+ const streamWeb = (() => {
19
+ try {
20
+ return require('stream/web');
21
+ }
22
+ catch {
23
+ try {
24
+ return require('web-streams-polyfill');
25
+ }
26
+ catch {
27
+ return {
28
+ ReadableStream: globalThis.ReadableStream,
29
+ QueuingStrategy: globalThis.QueuingStrategy,
30
+ ReadableStreamDefaultController: globalThis.ReadableStreamDefaultController
31
+ };
32
+ }
33
+ }
34
+ })();
16
35
  const DEFAULT_BYTE_HIGHWATERMARK = 1024 * 1024 * 200;
17
36
  const createStringLengthQueuingStrategy = (highWaterMark = DEFAULT_BYTE_HIGHWATERMARK / 4) => ({
18
37
  highWaterMark,
@@ -59,52 +78,77 @@ class ReadableStreamParser {
59
78
  let destroyedActorsMap = {};
60
79
  for (let j = 0; j <= levelCount; j++) {
61
80
  let levelName = (j === levelCount) ? '' + mapName : reader.readString();
81
+ const level = {
82
+ name: levelName,
83
+ objects: [],
84
+ collectables: [],
85
+ writesDestroyedActorsInTOCBlob: false
86
+ };
62
87
  const isPersistentLevel = levelName === mapName;
63
88
  if (j % 500 === 0) {
64
89
  reader.onProgressCallback(reader.getBufferProgress(), `reading level [${(j + 1)}/${(levelCount + 1)}] ${levelName}`);
65
90
  }
66
- await write(`${j > 0 ? ', ' : ''}"${levelName}": {"name": "${levelName}", "objects": [`, false);
67
- const headersBinLen = reader.readInt32();
68
- if (reader.context.saveVersion >= save_custom_version_1.SaveCustomVersion.UnrealEngine5) {
69
- reader.readInt32Zero();
91
+ await write(`${j > 0 ? ', ' : ''}"${levelName}": {"name": "${levelName}",`, false);
92
+ const tocBlobMarker = toc_blob_1.TOCBlob.SkipOver(reader);
93
+ const dataBlobMarker = data_blob_1.DataBlob.SkipOver(reader);
94
+ if (!isPersistentLevel) {
95
+ if (reader.context.saveVersion.header >= save_custom_version_1.SaveCustomVersion.SerializePerStreamableLevelTOCVersion) {
96
+ level.saveCustomVersion = reader.readInt32();
97
+ await write(`"saveCustomVersion": ${level.saveCustomVersion},`, false);
98
+ }
99
+ }
100
+ if (isPersistentLevel) {
101
+ const destroyedActorsMap = level_to_destroyed_actors_map_1.LevelToDestroyedActorsMap.read(reader);
102
+ await write(`"destroyedActorsMap": ${JSON.stringify(destroyedActorsMap)},`, false);
103
+ }
104
+ else {
105
+ level.collectables = object_references_list_1.ObjectReferencesList.ReadList(reader);
106
+ if (reader.context.saveVersion.header >= save_custom_version_1.SaveCustomVersion.SerializeDataPackageVersionAndCustomVersions) {
107
+ const shouldSerializePerObjectVersionData = reader.readInt32() >= 1;
108
+ if (shouldSerializePerObjectVersionData) {
109
+ level.objectVersionData = FSaveObjectVersionData_1.FSaveObjectVersionData.read(reader);
110
+ await write(`"objectVersionData": ${JSON.stringify(level.objectVersionData)},`, false);
111
+ }
112
+ }
70
113
  }
71
- const posBeforeHeaders = reader.getBufferPosition();
72
- const afterAllHeaders = posBeforeHeaders + headersBinLen;
114
+ await write(`"collectables": [${level.collectables.map(obj => JSON.stringify(obj)).join(', ')}],`, false);
115
+ hierarchical_version_context_1.HierarchyVersion.SetOnLevel(reader.context.saveVersion, level.saveCustomVersion);
116
+ hierarchical_version_context_1.HierarchyVersion.SetOnLevel(reader.context.packageFileVersionUE5, level.objectVersionData?.packageFileVersion.ue5Version);
117
+ const endOfLevelPosition = reader.getBufferPosition();
118
+ await write(`"objects": [`, false);
119
+ reader.jumpTo(tocBlobMarker.position);
73
120
  let countObjectHeaders = reader.readInt32();
74
121
  let totalReadObjectsInLevel = 0;
75
122
  let writtenObjectsInLevel = 0;
76
123
  let afterHeadersOfBatch = reader.getBufferPosition();
77
124
  let afterObjectsOfBatch = -1;
78
125
  do {
79
- reader.skipBytes(afterHeadersOfBatch - reader.getBufferPosition());
126
+ reader.jumpTo(afterHeadersOfBatch);
80
127
  const objectCountToRead = Math.min(countObjectHeaders - totalReadObjectsInLevel, batchingSizeOfObjects);
81
- const objects = level_1.Level.ReadNObjectHeaders(reader, objectCountToRead);
128
+ const objects = toc_blob_1.TOCBlob.ReadNObjectHeaders(reader, objectCountToRead);
82
129
  afterHeadersOfBatch = reader.getBufferPosition();
83
130
  if (countObjectHeaders === totalReadObjectsInLevel + objects.length) {
84
- const bytesLeft = afterAllHeaders - reader.getBufferPosition();
85
- if (bytesLeft > 0) {
131
+ let remainingSize = tocBlobMarker.length - (reader.getBufferPosition() - tocBlobMarker.position);
132
+ if (remainingSize > 0) {
86
133
  if (isPersistentLevel) {
87
134
  destroyedActorsMap = level_to_destroyed_actors_map_1.LevelToDestroyedActorsMap.read(reader);
88
135
  }
89
136
  else {
90
137
  collectables = object_references_list_1.ObjectReferencesList.ReadList(reader);
91
138
  }
139
+ level.writesDestroyedActorsInTOCBlob = true;
92
140
  }
93
141
  }
94
142
  if (totalReadObjectsInLevel === 0) {
95
- reader.skipBytes(afterAllHeaders - reader.getBufferPosition());
96
- const objectContentsBinLen = reader.readInt32();
97
- if (reader.context.saveVersion >= save_custom_version_1.SaveCustomVersion.UnrealEngine5) {
98
- reader.readInt32Zero();
99
- }
143
+ reader.jumpTo(dataBlobMarker.position);
100
144
  const posBeforeContents = reader.getBufferPosition();
101
145
  const countEntities = reader.readInt32();
102
146
  afterObjectsOfBatch = reader.getBufferPosition();
103
147
  }
104
148
  else {
105
- reader.skipBytes(afterObjectsOfBatch - reader.getBufferPosition());
149
+ reader.jumpTo(afterObjectsOfBatch);
106
150
  }
107
- level_1.Level.ReadNObjectContents(reader, objectCountToRead, objects, 0);
151
+ data_blob_1.DataBlob.ReadNObjectContents(reader, objectCountToRead, objects, 0);
108
152
  afterObjectsOfBatch = reader.getBufferPosition();
109
153
  totalReadObjectsInLevel += objectCountToRead;
110
154
  if (countObjectHeaders > 10000 && totalReadObjectsInLevel % 10000 === 0) {
@@ -120,22 +164,8 @@ class ReadableStreamParser {
120
164
  writtenObjectsInLevel += objectCountToRead;
121
165
  } while (totalReadObjectsInLevel < countObjectHeaders);
122
166
  await write('], ', false);
123
- if (!isPersistentLevel) {
124
- if (reader.context.saveVersion >= save_custom_version_1.SaveCustomVersion.SerializePerStreamableLevelTOCVersion) {
125
- const saveCustomVersion = reader.readInt32();
126
- await write(`"saveCustomVersion": ${saveCustomVersion}, `, false);
127
- }
128
- }
129
- if (isPersistentLevel) {
130
- destroyedActorsMap = level_to_destroyed_actors_map_1.LevelToDestroyedActorsMap.read(reader);
131
- await write(`"destroyedActorsMap": ${JSON.stringify(destroyedActorsMap)}, `, false);
132
- }
133
- await write('"collectables": [', false);
134
- if (!isPersistentLevel) {
135
- collectables = object_references_list_1.ObjectReferencesList.ReadList(reader);
136
- }
137
- await write(`${collectables.map(obj => JSON.stringify(obj)).join(', ')}`, true);
138
- await write(']', false);
167
+ await write(`"writesDestroyedActorsInTOCBlob": ${JSON.stringify(level.writesDestroyedActorsInTOCBlob)}`, false);
168
+ reader.jumpTo(endOfLevelPosition);
139
169
  await write('}', false);
140
170
  }
141
171
  }
@@ -144,7 +174,7 @@ exports.ReadableStreamParser = ReadableStreamParser;
144
174
  _a = ReadableStreamParser;
145
175
  ReadableStreamParser.CreateReadableStreamForParsingSave = (onStart, onCancel, onPullRequest, highWaterMark = DEFAULT_BYTE_HIGHWATERMARK / 4) => {
146
176
  let ourController = null;
147
- const stream = new web_1.ReadableStream({
177
+ const stream = new streamWeb.ReadableStream({
148
178
  start: (controller) => {
149
179
  ourController = controller;
150
180
  onStart(ourController);
@@ -188,7 +218,7 @@ ReadableStreamParser.CreateReadableStreamFromSaveToJson = (name, bytes, options)
188
218
  const reader = new save_reader_1.SaveReader(bytes, options?.onProgress);
189
219
  const header = satisfactory_save_header_1.SatisfactorySaveHeader.Parse(reader);
190
220
  const save = new satisfactory_save_1.SatisfactorySave(name, header);
191
- const roughSaveVersion = save_reader_1.SaveReader.GetRoughSaveVersion(header.saveVersion);
221
+ const roughSaveVersion = save_reader_1.SaveReader.GetApproximateSaveVersion(header.saveVersion);
192
222
  if (roughSaveVersion === '<U6') {
193
223
  throw new parser_error_1.UnsupportedVersionError('Game Version < U6 is not supported in the parser. Please save the file in a newer game version.');
194
224
  }
@@ -197,11 +227,19 @@ ReadableStreamParser.CreateReadableStreamFromSaveToJson = (name, bytes, options)
197
227
  if (options?.onDecompressedSaveBody !== undefined) {
198
228
  options.onDecompressedSaveBody(reader.getBuffer());
199
229
  }
230
+ if (reader.context.saveVersion.header >= save_custom_version_1.SaveCustomVersion.UnrealEngine5) {
231
+ reader.readInt32();
232
+ }
233
+ let saveObjectVersionData = save.objectVersionData;
234
+ if (reader.context.saveVersion.header >= save_custom_version_1.SaveCustomVersion.SerializeDataPackageVersionAndCustomVersions) {
235
+ saveObjectVersionData = FSaveObjectVersionData_1.FSaveObjectVersionData.read(reader);
236
+ reader.context.packageFileVersionUE5 = hierarchical_version_context_1.HierarchyVersion.CreateOnHeader(saveObjectVersionData.packageFileVersion.ue5Version);
237
+ }
200
238
  let saveBodyValidation = save.saveBodyValidation;
201
- if (reader.context.saveVersion >= save_custom_version_1.SaveCustomVersion.IntroducedWorldPartition) {
239
+ if (reader.context.saveVersion.header >= save_custom_version_1.SaveCustomVersion.IntroducedWorldPartition) {
202
240
  saveBodyValidation = SaveBodyValidation_1.SaveBodyValidation.Parse(reader);
203
241
  }
204
- await _a.WriteHeaderAndSaveBodyValidation(write, name, inflateResult.compressionInfo, header, saveBodyValidation);
242
+ await _a.WriteHeaderAndFieldsBeforeLevel(write, name, inflateResult.compressionInfo, header, saveBodyValidation, saveObjectVersionData);
205
243
  await _a.ReadWriteLevels(write, reader, save.header.mapName, save.header.buildVersion);
206
244
  await write(`}`, false);
207
245
  if (reader.getBufferPosition() < reader.getBufferLength()) {
@@ -214,9 +252,6 @@ ReadableStreamParser.CreateReadableStreamFromSaveToJson = (name, bytes, options)
214
252
  await write(`, "unresolvedWorldSaveData": ${JSON.stringify(save.unresolvedWorldSaveData)} `, false);
215
253
  }
216
254
  }
217
- if (save.name !== undefined) {
218
- await write(`, "name": "${save.name}" `, false);
219
- }
220
255
  if (options?.onProgress !== undefined) {
221
256
  options.onProgress(1, 'finished parsing.');
222
257
  }
@@ -225,7 +260,10 @@ ReadableStreamParser.CreateReadableStreamFromSaveToJson = (name, bytes, options)
225
260
  };
226
261
  return { stream, startStreaming };
227
262
  };
228
- ReadableStreamParser.WriteHeaderAndSaveBodyValidation = async (write, name, compressionInfo, header, saveBodyValidation) => {
229
- return write(`{"header": ${JSON.stringify(header)}, "name": "${name}", "compressionInfo": ${JSON.stringify(compressionInfo)}, "saveBodyValidation": ${JSON.stringify(saveBodyValidation)}, "levels": {`, false);
263
+ ReadableStreamParser.WriteHeaderAndFieldsBeforeLevel = async (write, name, compressionInfo, header, saveBodyValidation, saveObjectVersionData) => {
264
+ const compressionInfoEntry = `"compressionInfo": ${JSON.stringify(compressionInfo)}`;
265
+ const saveBodyValidationEntry = saveBodyValidation !== undefined ? `, "saveBodyValidation": ${JSON.stringify(saveBodyValidation)}` : '';
266
+ const saveObjectVersionDataEntry = saveObjectVersionData !== undefined ? `, "objectVersionData": ${JSON.stringify(saveObjectVersionData)}` : '';
267
+ return write(`{"header": ${JSON.stringify(header)}, "name": "${name}", ${compressionInfoEntry}${saveBodyValidationEntry}${saveObjectVersionDataEntry}, "levels": {`, false);
230
268
  };
231
269
  //# sourceMappingURL=readable-stream-parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"readable-stream-parser.js","sourceRoot":"","sources":["../../../../src/parser/stream/reworked/readable-stream-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { QueuingStrategy, ReadableStream, ReadableStreamDefaultController } from \"stream/web\";\nimport { UnsupportedVersionError } from '../../error/parser.error';\nimport { Level } from '../../satisfactory/save/level';\nimport { LevelToDestroyedActorsMap } from '../../satisfactory/save/level-to-destroyed-actors-map';\nimport { ObjectReferencesList } from '../../satisfactory/save/object-references-list';\nimport { SatisfactorySave } from \"../../satisfactory/save/satisfactory-save\";\nimport { SatisfactorySaveHeader } from '../../satisfactory/save/satisfactory-save-header';\nimport { ChunkCompressionInfo } from \"../../satisfactory/save/save-body-chunks\";\nimport { SaveCustomVersion } from '../../satisfactory/save/save-custom-version';\nimport { SaveReader } from '../../satisfactory/save/save-reader';\nimport { ObjectReference } from '../../satisfactory/types/structs/ObjectReference';\nimport { SaveBodyValidation } from \"../../satisfactory/types/structs/SaveBodyValidation\";\n\nconst DEFAULT_BYTE_HIGHWATERMARK = 1024 * 1024 * 200;\t// 200MiB\nconst createStringLengthQueuingStrategy = (highWaterMark: number = DEFAULT_BYTE_HIGHWATERMARK / 4): QueuingStrategy<string> => ({\n\thighWaterMark,\n\tsize: (chunk: string | undefined) => {\n\t\tif (chunk === undefined) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn chunk.length;\n\t}\n});\n\nclass SimpleWaitForConsumerLock {\n\tlocked: boolean = false;\n\tunlockWasCalledInTheMeantime: boolean = false;\n\texecutionFn: (() => void) | undefined = undefined;\n\n\t/** activate lock and set function to execute on unlock.\n\t * If at least 1 unlock was called before this call, immediately unlock.\n\t */\n\tpublic lock(executionFn: () => void) {\n\t\tthis.executionFn = executionFn;\n\t\tthis.locked = true;\n\t\tif (this.unlockWasCalledInTheMeantime) {\n\t\t\tthis.unlock();\n\t\t}\n\t}\n\n\t/**\n\t * unlock and execute stored function if present.\n\t */\n\tpublic unlock() {\n\t\tthis.locked = false;\n\t\tif (this.executionFn) {\n\t\t\tthis.executionFn();\n\t\t\tthis.executionFn = undefined;\n\t\t} else {\n\t\t\tthis.unlockWasCalledInTheMeantime = true;\n\t\t}\n\t}\n};\n\n/**\n * Creates a ReadableStream from Binary file, that actually waits until the reading operator has caught up before it pushes more.\n */\nexport class ReadableStreamParser {\n\n\tprivate static CreateReadableStreamForParsingSave = (\n\t\tonStart: (controller: ReadableStreamDefaultController<string>) => void,\n\t\tonCancel: (reason: any) => void,\n\t\tonPullRequest: (desiredSize: number) => void,\n\t\thighWaterMark = DEFAULT_BYTE_HIGHWATERMARK / 4\n\t) => {\n\t\tlet ourController: ReadableStreamDefaultController<string> | null = null;\n\t\tconst stream = new ReadableStream<string>({\n\t\t\tstart: (controller: ReadableStreamDefaultController<string>) => {\n\t\t\t\tourController = controller;\n\t\t\t\tonStart(ourController);\n\t\t\t},\n\t\t\tpull: (controller: ReadableStreamDefaultController<string>) => {\n\t\t\t\tonPullRequest(ourController!.desiredSize ?? 1);\n\t\t\t},\n\t\t\tcancel: (reason) => {\n\t\t\t\tconsole.warn('parsing stream was canceled!', reason);\n\t\t\t\tif (ourController !== null) {\n\t\t\t\t\tourController.close();\n\t\t\t\t}\n\t\t\t\tonCancel(reason);\n\t\t\t}\n\t\t}, createStringLengthQueuingStrategy(highWaterMark));\n\n\t\t// create handle to close source.\n\t\tconst finish = () => {\n\t\t\tif (ourController !== null) {\n\t\t\t\tourController?.close();\n\t\t\t}\n\t\t}\n\n\t\treturn { stream, controller: ourController!, finish };\n\t};\n\n\t/**\n\t * the more elegant way to parse saves, instead of using the plain ParseSave. Since streaming will not hold the converted JSON in memory at once.\n\t * @param name the save name\n\t * @param bytes the save file as UInt8Array\n\t * @param onDecompressedSaveBody a callback to report back on the decompressed binary save body.\n\t * @param onProgress a callback to report back on the parsing progress. Optionally contains a message.\n\t * @returns a WHATWG compliant readable stream of strings (They are valid JSON and represent a {@link SatisfactorySave} object). And a method to actually start the streaming for more precise control.\n\t */\n\tpublic static CreateReadableStreamFromSaveToJson = (\n\t\tname: string,\n\t\tbytes: ArrayBufferLike,\n\t\toptions?: Partial<{\n\t\t\tonDecompressedSaveBody: (buffer: ArrayBufferLike) => void,\n\t\t\tonProgress: (progress: number, message?: string) => void\n\t\t}>\n\t): { stream: ReadableStream<string>, startStreaming: () => Promise<void> } => {\n\n\t\t// create a simple lock to sync with consumer of the stream. Aka handle backpressure.\n\t\tconst waitForConsumerLock = new SimpleWaitForConsumerLock();\n\t\tconst waitForConsumer = async () => {\n\t\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\t\twaitForConsumerLock.lock(resolve);\n\t\t\t});\n\t\t}\n\n\t\tconst { stream, controller, finish } = ReadableStreamParser.CreateReadableStreamForParsingSave(\n\t\t\t(controller) => {\n\t\t\t\t//startStreaming();\n\t\t\t},\n\t\t\t(reason) => { },\n\t\t\t(desiredSize) => {\n\t\t\t\t// consumer (to be more correct, the internal buffer!) is ready, unlock syncing lock.\n\t\t\t\twaitForConsumerLock.unlock();\n\t\t\t},\n\t\t);\n\n\t\t/**\n\t\t * pushes a value into the readable stream. Optionally waits for the \"pull\" signal of the stream before writing.\n\t\t * @param value the value to write\n\t\t * @param waitForConsumerToBeReady whether the process should wait until the \"pull\" signal of the stream.\n\t\t */\n\t\tconst write = async (value: string, waitForConsumerToBeReady = true): Promise<void> => {\n\t\t\tif (waitForConsumerToBeReady) {\n\t\t\t\tawait waitForConsumer();\n\t\t\t}\n\t\t\tcontroller.enqueue(value);\n\t\t}\n\n\t\tconst startStreaming = async (): Promise<void> => {\n\n\t\t\tconst reader = new SaveReader(bytes, options?.onProgress);\n\n\t\t\t// read header\n\t\t\tconst header = SatisfactorySaveHeader.Parse(reader);\n\t\t\tconst save = new SatisfactorySave(name, header);\n\n\t\t\t// guard save version\n\t\t\tconst roughSaveVersion = SaveReader.GetRoughSaveVersion(header.saveVersion);\n\t\t\tif (roughSaveVersion === '<U6') {\n\t\t\t\tthrow new UnsupportedVersionError('Game Version < U6 is not supported in the parser. Please save the file in a newer game version.');\n\t\t\t}\n\n\t\t\t// inflate chunks\n\t\t\tconst inflateResult = reader.inflateChunks();\n\t\t\tsave.compressionInfo = inflateResult.compressionInfo;\n\n\t\t\t// call callback on decompressed save body\n\t\t\tif (options?.onDecompressedSaveBody !== undefined) {\n\t\t\t\toptions.onDecompressedSaveBody(reader.getBuffer());\n\t\t\t}\n\n\t\t\tlet saveBodyValidation = save.saveBodyValidation;\n\t\t\tif (reader.context.saveVersion >= SaveCustomVersion.IntroducedWorldPartition) {\n\t\t\t\tsaveBodyValidation = SaveBodyValidation.Parse(reader);\n\t\t\t}\n\n\t\t\tawait ReadableStreamParser.WriteHeaderAndSaveBodyValidation(write, name, inflateResult.compressionInfo, header, saveBodyValidation);\n\n\t\t\t// parse levels\n\t\t\tawait ReadableStreamParser.ReadWriteLevels(write, reader, save.header.mapName, save.header.buildVersion);\n\t\t\tawait write(`}`, false);\n\n\t\t\t// unresolved data\n\t\t\tif (reader.getBufferPosition() < reader.getBufferLength()) {\n\t\t\t\tconst countUnresolvedWorldSaveData = reader.readInt32();\n\t\t\t\tif (countUnresolvedWorldSaveData) {\n\t\t\t\t\tsave.unresolvedWorldSaveData = [];\n\t\t\t\t\tfor (let i = 0; i < countUnresolvedWorldSaveData; i++) {\n\t\t\t\t\t\tsave.unresolvedWorldSaveData.push(ObjectReference.read(reader));\n\t\t\t\t\t}\n\t\t\t\t\tawait write(`, \"unresolvedWorldSaveData\": ${JSON.stringify(save.unresolvedWorldSaveData)} `, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (save.name !== undefined) {\n\t\t\t\tawait write(`, \"name\": \"${save.name}\" `, false);\n\t\t\t}\n\n\t\t\tif (options?.onProgress !== undefined) {\n\t\t\t\toptions.onProgress(1, 'finished parsing.');\n\t\t\t}\n\n\t\t\t// close save object.\n\t\t\tawait write(`}`, true);\n\t\t\tfinish();\n\t\t};\n\n\t\treturn { stream, startStreaming };\n\t}\n\n\n\tprivate static WriteHeaderAndSaveBodyValidation = async (\n\t\twrite: (value: string, waitTilConsumingEndIsReady?: boolean) => Promise<void>,\n\t\tname: string,\n\t\tcompressionInfo: ChunkCompressionInfo,\n\t\theader: SatisfactorySaveHeader,\n\t\tsaveBodyValidation: SaveBodyValidation\n\t) => {\n\t\treturn write(`{\"header\": ${JSON.stringify(header)}, \"name\": \"${name}\", \"compressionInfo\": ${JSON.stringify(compressionInfo)}, \"saveBodyValidation\": ${JSON.stringify(saveBodyValidation)}, \"levels\": {`, false);\n\t}\n\n\tprivate static async ReadWriteLevels(\n\t\twrite: (value: string, waitTilConsumingEndIsReady?: boolean) => Promise<void>,\n\t\treader: SaveReader,\n\t\tmapName: string,\n\t\tbuildVersion: number,\n\t): Promise<void> {\n\n\t\tconst batchingSizeOfObjects = 1000;\n\t\tconst thresholdOfWrittenObjectsUntilWaitingForConsumerAgain = 3 * batchingSizeOfObjects;\n\n\t\tconst levelCount = reader.readInt32();\n\t\treader.onProgressCallback(reader.getBufferProgress(), `reading pack of ${levelCount + 1} levels.`);\n\n\t\tlet writtenTotalObjectsSinceConsumerSync = 0;\n\t\tlet collectables: ObjectReference[] = [];\n\t\tlet destroyedActorsMap: LevelToDestroyedActorsMap = {};\n\t\tfor (let j = 0; j <= levelCount; j++) {\n\t\t\tlet levelName = (j === levelCount) ? '' + mapName : reader.readString();\n\t\t\tconst isPersistentLevel = levelName === mapName;\n\n\t\t\tif (j % 500 === 0) {\n\t\t\t\treader.onProgressCallback(reader.getBufferProgress(), `reading level [${(j + 1)}/${(levelCount + 1)}] ${levelName}`);\n\t\t\t}\n\n\t\t\t// we will intentionally NOT wait for next pull request, since these few characters don't make waiting useful.\n\t\t\tawait write(`${j > 0 ? ', ' : ''}\"${levelName}\": {\"name\": \"${levelName}\", \"objects\": [`, false);\n\n\n\t\t\t// object headers\n\t\t\tconst headersBinLen = reader.readInt32(); // object headers + destroyed colelctables\n\t\t\tif (reader.context.saveVersion >= SaveCustomVersion.UnrealEngine5) {\n\t\t\t\treader.readInt32Zero();\n\t\t\t}\n\n\t\t\tconst posBeforeHeaders = reader.getBufferPosition();\n\t\t\tconst afterAllHeaders = posBeforeHeaders + headersBinLen;\n\t\t\tlet countObjectHeaders = reader.readInt32();\n\n\t\t\tlet totalReadObjectsInLevel = 0;\n\t\t\tlet writtenObjectsInLevel = 0;\n\t\t\tlet afterHeadersOfBatch = reader.getBufferPosition();\t// at first no batch is read.\n\t\t\tlet afterObjectsOfBatch = -1;\n\n\t\t\tdo {\n\n\t\t\t\t// jump to after last read batch\n\t\t\t\treader.skipBytes(afterHeadersOfBatch - reader.getBufferPosition());\n\n\t\t\t\t// read batch\n\t\t\t\tconst objectCountToRead = Math.min(countObjectHeaders - totalReadObjectsInLevel, batchingSizeOfObjects);\n\t\t\t\tconst objects = Level.ReadNObjectHeaders(reader, objectCountToRead);\n\n\t\t\t\tafterHeadersOfBatch = reader.getBufferPosition();\n\n\n\t\t\t\t// after headers, there MAY be destroyed entities. don't have to.\n\t\t\t\t// But either way, we can safely ignore them.\n\t\t\t\tif (countObjectHeaders === totalReadObjectsInLevel + objects.length) {\n\t\t\t\t\tconst bytesLeft = afterAllHeaders - reader.getBufferPosition();\n\t\t\t\t\tif (bytesLeft > 0) {\n\t\t\t\t\t\tif (isPersistentLevel) {\n\t\t\t\t\t\t\tdestroyedActorsMap = LevelToDestroyedActorsMap.read(reader);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcollectables = ObjectReferencesList.ReadList(reader);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t\tif (totalReadObjectsInLevel === 0) {\n\n\t\t\t\t\t// jump to after all headers\n\t\t\t\t\treader.skipBytes(afterAllHeaders - reader.getBufferPosition());\n\n\t\t\t\t\tconst objectContentsBinLen = reader.readInt32();\n\t\t\t\t\tif (reader.context.saveVersion >= SaveCustomVersion.UnrealEngine5) {\n\t\t\t\t\t\treader.readInt32Zero();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst posBeforeContents = reader.getBufferPosition();\n\t\t\t\t\tconst countEntities = reader.readInt32();\n\t\t\t\t\tafterObjectsOfBatch = reader.getBufferPosition();\t// at first no batch is read.\n\t\t\t\t} else {\n\t\t\t\t\treader.skipBytes(afterObjectsOfBatch - reader.getBufferPosition());\n\t\t\t\t}\n\n\t\t\t\tLevel.ReadNObjectContents(reader, objectCountToRead, objects, 0);\n\t\t\t\tafterObjectsOfBatch = reader.getBufferPosition();\n\n\t\t\t\ttotalReadObjectsInLevel += objectCountToRead;\n\t\t\t\tif (countObjectHeaders > 10000 && totalReadObjectsInLevel % 10000 === 0) {\n\t\t\t\t\treader.onProgressCallback(reader.getBufferProgress(), `read object count [${(totalReadObjectsInLevel + 1)}/${(countObjectHeaders + 1)}] in level ${levelName}`);\n\t\t\t\t}\n\n\t\t\t\t// we should wait even if the objects of many levels accumulate to several hundred.\n\t\t\t\tlet shouldWait = false;\n\t\t\t\tif (writtenTotalObjectsSinceConsumerSync >= thresholdOfWrittenObjectsUntilWaitingForConsumerAgain) {\n\t\t\t\t\t// will wait til consumer catches up. Because we wrote ${writtenTotalObjectsSinceConsumerSync} objects without waiting.\n\t\t\t\t\tshouldWait = true;\n\t\t\t\t\twrittenTotalObjectsSinceConsumerSync = 0;\n\t\t\t\t}\n\t\t\t\tawait write(`${writtenObjectsInLevel > 0 ? ', ' : ''}${objects.filter(Boolean).map(obj => JSON.stringify(obj)).join(', ')}`, shouldWait);\n\t\t\t\twrittenTotalObjectsSinceConsumerSync += objectCountToRead;\n\t\t\t\twrittenObjectsInLevel += objectCountToRead;\n\n\t\t\t} while (totalReadObjectsInLevel < countObjectHeaders)\n\n\n\t\t\tawait write('], ', false);\n\n\t\t\t// only NOT in the persistent level, we have saveVersion\n\t\t\tif (!isPersistentLevel) {\n\t\t\t\tif (reader.context.saveVersion >= SaveCustomVersion.SerializePerStreamableLevelTOCVersion) {\n\t\t\t\t\tconst saveCustomVersion = reader.readInt32();\n\t\t\t\t\tawait write(`\"saveCustomVersion\": ${saveCustomVersion}, `, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// only in persistent level, we have LevelToDestroyedActorsMap\n\t\t\tif (isPersistentLevel) {\n\t\t\t\tdestroyedActorsMap = LevelToDestroyedActorsMap.read(reader);\n\t\t\t\tawait write(`\"destroyedActorsMap\": ${JSON.stringify(destroyedActorsMap)}, `, false);\n\t\t\t}\n\n\t\t\tawait write('\"collectables\": [', false);\n\n\t\t\t// only NOT in the persistent level, we have 2nd collectables.\n\t\t\tif (!isPersistentLevel) {\n\t\t\t\tcollectables = ObjectReferencesList.ReadList(reader);\n\t\t\t}\n\n\t\t\tawait write(`${collectables.map(obj => JSON.stringify(obj)).join(', ')}`, true);\n\n\t\t\tawait write(']', false);\n\t\t\tawait write('}', false);\n\t\t}\n\t}\n}"]}
1
+ {"version":3,"file":"readable-stream-parser.js","sourceRoot":"","sources":["../../../../src/parser/stream/reworked/readable-stream-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { HierarchyVersion } from \"../../context/hierarchical-version-context\";\nimport { UnsupportedVersionError } from '../../error/parser.error';\nimport { DataBlob } from \"../../satisfactory/save/data-blob\";\nimport { Level } from \"../../satisfactory/save/level\";\nimport { LevelToDestroyedActorsMap } from '../../satisfactory/save/level-to-destroyed-actors-map';\nimport { ObjectReferencesList } from '../../satisfactory/save/object-references-list';\nimport { SatisfactorySave } from \"../../satisfactory/save/satisfactory-save\";\nimport { SatisfactorySaveHeader } from '../../satisfactory/save/satisfactory-save-header';\nimport { ChunkCompressionInfo } from \"../../satisfactory/save/save-body-chunks\";\nimport { SaveCustomVersion } from '../../satisfactory/save/save-custom-version';\nimport { SaveReader } from '../../satisfactory/save/save-reader';\nimport { TOCBlob } from \"../../satisfactory/save/toc-blob\";\nimport { ObjectReference } from '../../satisfactory/types/structs/ObjectReference';\nimport { SaveBodyValidation } from \"../../satisfactory/types/structs/SaveBodyValidation\";\nimport { FSaveObjectVersionData } from \"../../satisfactory/types/structs/binary/FSaveObjectVersionData\";\n\ninterface StreamWeb {\n\tReadableStream: any;\n\tQueuingStrategy: any;\n\tReadableStreamDefaultController: any;\n}\n\nconst streamWeb: StreamWeb = (() => {\n\ttry {\n\t\treturn require('stream/web');\n\t} catch {\n\t\ttry {\n\t\t\treturn require('web-streams-polyfill');\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tReadableStream: (globalThis as any).ReadableStream as any,\n\t\t\t\tQueuingStrategy: (globalThis as any).QueuingStrategy as any,\n\t\t\t\tReadableStreamDefaultController: (globalThis as any).ReadableStreamDefaultController as any\n\t\t\t};\n\t\t}\n\t}\n})();\n\nconst DEFAULT_BYTE_HIGHWATERMARK = 1024 * 1024 * 200;\t// 200MiB\nconst createStringLengthQueuingStrategy = (highWaterMark: number = DEFAULT_BYTE_HIGHWATERMARK / 4): any => ({\n\thighWaterMark,\n\tsize: (chunk: string | undefined) => {\n\t\tif (chunk === undefined) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn chunk.length;\n\t}\n});\n\nclass SimpleWaitForConsumerLock {\n\tlocked: boolean = false;\n\tunlockWasCalledInTheMeantime: boolean = false;\n\texecutionFn: (() => void) | undefined = undefined;\n\n\t/** activate lock and set function to execute on unlock.\n\t * If at least 1 unlock was called before this call, immediately unlock.\n\t */\n\tpublic lock(executionFn: () => void) {\n\t\tthis.executionFn = executionFn;\n\t\tthis.locked = true;\n\t\tif (this.unlockWasCalledInTheMeantime) {\n\t\t\tthis.unlock();\n\t\t}\n\t}\n\n\t/**\n\t * unlock and execute stored function if present.\n\t */\n\tpublic unlock() {\n\t\tthis.locked = false;\n\t\tif (this.executionFn) {\n\t\t\tthis.executionFn();\n\t\t\tthis.executionFn = undefined;\n\t\t} else {\n\t\t\tthis.unlockWasCalledInTheMeantime = true;\n\t\t}\n\t}\n};\n\n/**\n * Creates a ReadableStream from Binary file, that actually waits until the reading operator has caught up before it pushes more.\n */\nexport class ReadableStreamParser {\n\n\tprivate static CreateReadableStreamForParsingSave = (\n\t\tonStart: (controller: any) => void,\n\t\tonCancel: (reason: any) => void,\n\t\tonPullRequest: (desiredSize: number) => void,\n\t\thighWaterMark = DEFAULT_BYTE_HIGHWATERMARK / 4\n\t) => {\n\t\tlet ourController: any = null;\n\t\tconst stream = new (streamWeb.ReadableStream as any)({\n\t\t\tstart: (controller: any) => {\n\t\t\t\tourController = controller;\n\t\t\t\tonStart(ourController);\n\t\t\t},\n\t\t\tpull: (controller: any) => {\n\t\t\t\tonPullRequest(ourController!.desiredSize ?? 1);\n\t\t\t},\n\t\t\tcancel: (reason: any) => {\n\t\t\t\tconsole.warn('parsing stream was canceled!', reason);\n\t\t\t\tif (ourController !== null) {\n\t\t\t\t\tourController.close();\n\t\t\t\t}\n\t\t\t\tonCancel(reason);\n\t\t\t}\n\t\t}, createStringLengthQueuingStrategy(highWaterMark));\n\n\t\t// create handle to close source.\n\t\tconst finish = () => {\n\t\t\tif (ourController !== null) {\n\t\t\t\tourController?.close();\n\t\t\t}\n\t\t}\n\n\t\treturn { stream, controller: ourController!, finish };\n\t};\n\n\t/**\n\t * the more elegant way to parse saves, instead of using the plain ParseSave. Since streaming will not hold the converted JSON in memory at once.\n\t * @param name the save name\n\t * @param bytes the save file as UInt8Array\n\t * @param onDecompressedSaveBody a callback to report back on the decompressed binary save body.\n\t * @param onProgress a callback to report back on the parsing progress. Optionally contains a message.\n\t * @returns a WHATWG compliant readable stream of strings (They are valid JSON and represent a {@link SatisfactorySave} object). And a method to actually start the streaming for more precise control.\n\t */\n\tpublic static CreateReadableStreamFromSaveToJson = (\n\t\tname: string,\n\t\tbytes: ArrayBufferLike,\n\t\toptions?: Partial<{\n\t\t\tonDecompressedSaveBody: (buffer: ArrayBufferLike) => void,\n\t\t\tonProgress: (progress: number, message?: string) => void\n\t\t}>\n\t): { stream: any, startStreaming: () => Promise<void> } => {\n\n\t\t// create a simple lock to sync with consumer of the stream. Aka handle backpressure.\n\t\tconst waitForConsumerLock = new SimpleWaitForConsumerLock();\n\t\tconst waitForConsumer = async () => {\n\t\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\t\twaitForConsumerLock.lock(resolve);\n\t\t\t});\n\t\t}\n\n\t\tconst { stream, controller, finish } = ReadableStreamParser.CreateReadableStreamForParsingSave(\n\t\t\t(controller) => {\n\t\t\t\t//startStreaming();\n\t\t\t},\n\t\t\t(reason) => { },\n\t\t\t(desiredSize) => {\n\t\t\t\t// consumer (to be more correct, the internal buffer!) is ready, unlock syncing lock.\n\t\t\t\twaitForConsumerLock.unlock();\n\t\t\t},\n\t\t);\n\n\t\t/**\n\t\t * pushes a value into the readable stream. Optionally waits for the \"pull\" signal of the stream before writing.\n\t\t * @param value the value to write\n\t\t * @param waitForConsumerToBeReady whether the process should wait until the \"pull\" signal of the stream.\n\t\t */\n\t\tconst write = async (value: string, waitForConsumerToBeReady = true): Promise<void> => {\n\t\t\tif (waitForConsumerToBeReady) {\n\t\t\t\tawait waitForConsumer();\n\t\t\t}\n\t\t\tcontroller.enqueue(value);\n\t\t}\n\n\t\tconst startStreaming = async (): Promise<void> => {\n\n\t\t\tconst reader = new SaveReader(bytes, options?.onProgress);\n\n\t\t\t// read header\n\t\t\tconst header = SatisfactorySaveHeader.Parse(reader);\n\t\t\tconst save = new SatisfactorySave(name, header);\n\n\t\t\t// guard save version\n\t\t\tconst roughSaveVersion = SaveReader.GetApproximateSaveVersion(header.saveVersion);\n\t\t\tif (roughSaveVersion === '<U6') {\n\t\t\t\tthrow new UnsupportedVersionError('Game Version < U6 is not supported in the parser. Please save the file in a newer game version.');\n\t\t\t}\n\n\t\t\t// inflate chunks\n\t\t\tconst inflateResult = reader.inflateChunks();\n\t\t\tsave.compressionInfo = inflateResult.compressionInfo;\n\n\t\t\t// call callback on decompressed save body\n\t\t\tif (options?.onDecompressedSaveBody !== undefined) {\n\t\t\t\toptions.onDecompressedSaveBody(reader.getBuffer());\n\t\t\t}\n\n\t\t\t// might be padding?\n\t\t\tif (reader.context.saveVersion.header >= SaveCustomVersion.UnrealEngine5) {\n\t\t\t\treader.readInt32();\n\t\t\t}\n\n\t\t\t// read FSaveObjectVersionData\n\t\t\tlet saveObjectVersionData = save.objectVersionData;\n\t\t\tif (reader.context.saveVersion.header >= SaveCustomVersion.SerializeDataPackageVersionAndCustomVersions) {\n\t\t\t\tsaveObjectVersionData = FSaveObjectVersionData.read(reader);\n\t\t\t\treader.context.packageFileVersionUE5 = HierarchyVersion.CreateOnHeader(saveObjectVersionData.packageFileVersion.ue5Version);\n\t\t\t}\n\n\t\t\t// world partition and validation\n\t\t\tlet saveBodyValidation = save.saveBodyValidation;\n\t\t\tif (reader.context.saveVersion.header >= SaveCustomVersion.IntroducedWorldPartition) {\n\t\t\t\tsaveBodyValidation = SaveBodyValidation.Parse(reader);\n\t\t\t}\n\t\t\tawait ReadableStreamParser.WriteHeaderAndFieldsBeforeLevel(write, name, inflateResult.compressionInfo, header, saveBodyValidation, saveObjectVersionData);\n\n\n\t\t\t// parse levels\n\t\t\tawait ReadableStreamParser.ReadWriteLevels(write, reader, save.header.mapName, save.header.buildVersion);\n\t\t\tawait write(`}`, false);\n\n\t\t\t// unresolved data\n\t\t\tif (reader.getBufferPosition() < reader.getBufferLength()) {\n\t\t\t\tconst countUnresolvedWorldSaveData = reader.readInt32();\n\t\t\t\tif (countUnresolvedWorldSaveData) {\n\t\t\t\t\tsave.unresolvedWorldSaveData = [];\n\t\t\t\t\tfor (let i = 0; i < countUnresolvedWorldSaveData; i++) {\n\t\t\t\t\t\tsave.unresolvedWorldSaveData.push(ObjectReference.read(reader));\n\t\t\t\t\t}\n\t\t\t\t\tawait write(`, \"unresolvedWorldSaveData\": ${JSON.stringify(save.unresolvedWorldSaveData)} `, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options?.onProgress !== undefined) {\n\t\t\t\toptions.onProgress(1, 'finished parsing.');\n\t\t\t}\n\n\t\t\t// close save object.\n\t\t\tawait write(`}`, true);\n\t\t\tfinish();\n\t\t};\n\n\t\treturn { stream, startStreaming };\n\t}\n\n\n\tprivate static WriteHeaderAndFieldsBeforeLevel = async (\n\t\twrite: (value: string, waitTilConsumingEndIsReady?: boolean) => Promise<void>,\n\t\tname: string,\n\t\tcompressionInfo: ChunkCompressionInfo,\n\t\theader: SatisfactorySaveHeader,\n\t\tsaveBodyValidation: SaveBodyValidation,\n\t\tsaveObjectVersionData?: FSaveObjectVersionData\n\t) => {\n\t\tconst compressionInfoEntry = `\"compressionInfo\": ${JSON.stringify(compressionInfo)}`;\n\t\tconst saveBodyValidationEntry = saveBodyValidation !== undefined ? `, \"saveBodyValidation\": ${JSON.stringify(saveBodyValidation)}` : '';\n\t\tconst saveObjectVersionDataEntry = saveObjectVersionData !== undefined ? `, \"objectVersionData\": ${JSON.stringify(saveObjectVersionData)}` : '';\n\t\treturn write(`{\"header\": ${JSON.stringify(header)}, \"name\": \"${name}\", ${compressionInfoEntry}${saveBodyValidationEntry}${saveObjectVersionDataEntry}, \"levels\": {`, false);\n\t}\n\n\tprivate static async ReadWriteLevels(\n\t\twrite: (value: string, waitTilConsumingEndIsReady?: boolean) => Promise<void>,\n\t\treader: SaveReader,\n\t\tmapName: string,\n\t\tbuildVersion: number,\n\t): Promise<void> {\n\n\t\tconst batchingSizeOfObjects = 1000;\n\t\tconst thresholdOfWrittenObjectsUntilWaitingForConsumerAgain = 3 * batchingSizeOfObjects;\n\n\t\tconst levelCount = reader.readInt32();\n\t\treader.onProgressCallback(reader.getBufferProgress(), `reading pack of ${levelCount + 1} levels.`);\n\n\t\tlet writtenTotalObjectsSinceConsumerSync = 0;\n\t\tlet collectables: ObjectReference[] = [];\n\t\tlet destroyedActorsMap: LevelToDestroyedActorsMap = {};\n\t\tfor (let j = 0; j <= levelCount; j++) {\n\t\t\tlet levelName = (j === levelCount) ? '' + mapName : reader.readString();\n\t\t\tconst level: Level = {\n\t\t\t\tname: levelName,\n\t\t\t\tobjects: [],\n\t\t\t\tcollectables: [],\n\t\t\t\twritesDestroyedActorsInTOCBlob: false\n\t\t\t}\n\t\t\tconst isPersistentLevel = levelName === mapName;\n\n\t\t\tif (j % 500 === 0) {\n\t\t\t\treader.onProgressCallback(reader.getBufferProgress(), `reading level [${(j + 1)}/${(levelCount + 1)}] ${levelName}`);\n\t\t\t}\n\t\t\tawait write(`${j > 0 ? ', ' : ''}\"${levelName}\": {\"name\": \"${levelName}\",`, false);\n\n\t\t\t// read blobs later\n\t\t\tconst tocBlobMarker = TOCBlob.SkipOver(reader);\n\t\t\tconst dataBlobMarker = DataBlob.SkipOver(reader);\n\n\t\t\t// save Version in Streaming level\n\t\t\tif (!isPersistentLevel) {\n\t\t\t\tif (reader.context.saveVersion.header >= SaveCustomVersion.SerializePerStreamableLevelTOCVersion) {\n\t\t\t\t\tlevel.saveCustomVersion = reader.readInt32();\n\t\t\t\t\tawait write(`\"saveCustomVersion\": ${level.saveCustomVersion},`, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// for persistent level, we have LevelToDestroyedActorsMap, else collectibles + object version data\n\t\t\t// 2nd appearance of destroyed actors / collectables. the lists are equal at both locations\n\t\t\tif (isPersistentLevel) {\n\t\t\t\tconst destroyedActorsMap = LevelToDestroyedActorsMap.read(reader);\n\t\t\t\tawait write(`\"destroyedActorsMap\": ${JSON.stringify(destroyedActorsMap)},`, false);\n\t\t\t} else {\n\t\t\t\tlevel.collectables = ObjectReferencesList.ReadList(reader);\n\n\t\t\t\tif (reader.context.saveVersion.header >= SaveCustomVersion.SerializeDataPackageVersionAndCustomVersions) {\n\t\t\t\t\tconst shouldSerializePerObjectVersionData = reader.readInt32() >= 1;\n\t\t\t\t\tif (shouldSerializePerObjectVersionData) {\n\t\t\t\t\t\tlevel.objectVersionData = FSaveObjectVersionData.read(reader);\n\t\t\t\t\t\tawait write(`\"objectVersionData\": ${JSON.stringify(level.objectVersionData)},`, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait write(`\"collectables\": [${level.collectables.map(obj => JSON.stringify(obj)).join(', ')}],`, false);\n\n\t\t\t// set appropriate version context.\n\t\t\tHierarchyVersion.SetOnLevel(reader.context.saveVersion, level.saveCustomVersion);\n\t\t\tHierarchyVersion.SetOnLevel(reader.context.packageFileVersionUE5, level.objectVersionData?.packageFileVersion.ue5Version);\n\n\t\t\t// jump back and read TOCBlob, DataBlob with accurate save version\n\t\t\tconst endOfLevelPosition = reader.getBufferPosition();\n\n\n\t\t\t// we will intentionally NOT wait for next pull request, since these few characters don't make waiting useful.\n\t\t\tawait write(`\"objects\": [`, false);\n\t\t\treader.jumpTo(tocBlobMarker.position);\n\n\n\t\t\t// we do the same as TOCBlob.read & DataBlob.read. but jumping back and forth between batches.\n\t\t\tlet countObjectHeaders = reader.readInt32();\n\t\t\tlet totalReadObjectsInLevel = 0;\n\t\t\tlet writtenObjectsInLevel = 0;\n\t\t\tlet afterHeadersOfBatch = reader.getBufferPosition();\t// at first no batch is read.\n\t\t\tlet afterObjectsOfBatch = -1;\n\n\t\t\tdo {\n\n\t\t\t\t// jump to after last read batch\n\t\t\t\treader.jumpTo(afterHeadersOfBatch);\n\n\t\t\t\t// read batch\n\t\t\t\tconst objectCountToRead = Math.min(countObjectHeaders - totalReadObjectsInLevel, batchingSizeOfObjects);\n\t\t\t\tconst objects = TOCBlob.ReadNObjectHeaders(reader, objectCountToRead);\n\t\t\t\tafterHeadersOfBatch = reader.getBufferPosition();\n\n\t\t\t\t// 1st lsit of collectables / destroyed actors in toc blob.\n\t\t\t\tif (countObjectHeaders === totalReadObjectsInLevel + objects.length) {\n\t\t\t\t\tlet remainingSize = tocBlobMarker.length - (reader.getBufferPosition() - tocBlobMarker.position);\n\t\t\t\t\tif (remainingSize > 0) {\n\t\t\t\t\t\tif (isPersistentLevel) {\n\t\t\t\t\t\t\tdestroyedActorsMap = LevelToDestroyedActorsMap.read(reader);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcollectables = ObjectReferencesList.ReadList(reader);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlevel.writesDestroyedActorsInTOCBlob = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (totalReadObjectsInLevel === 0) {\n\n\t\t\t\t\t// jump to after all headers\n\t\t\t\t\treader.jumpTo(dataBlobMarker.position);\n\t\t\t\t\tconst posBeforeContents = reader.getBufferPosition();\n\t\t\t\t\tconst countEntities = reader.readInt32();\n\t\t\t\t\tafterObjectsOfBatch = reader.getBufferPosition();\t// at first no batch is read.\n\t\t\t\t} else {\n\t\t\t\t\treader.jumpTo(afterObjectsOfBatch);\n\t\t\t\t}\n\n\t\t\t\tDataBlob.ReadNObjectContents(reader, objectCountToRead, objects, 0);\n\t\t\t\tafterObjectsOfBatch = reader.getBufferPosition();\n\t\t\t\ttotalReadObjectsInLevel += objectCountToRead;\n\t\t\t\tif (countObjectHeaders > 10000 && totalReadObjectsInLevel % 10000 === 0) {\n\t\t\t\t\treader.onProgressCallback(reader.getBufferProgress(), `read object count [${(totalReadObjectsInLevel + 1)}/${(countObjectHeaders + 1)}] in level ${levelName}`);\n\t\t\t\t}\n\n\t\t\t\t// we should wait even if the objects of many levels accumulate to several hundred.\n\t\t\t\tlet shouldWait = false;\n\t\t\t\tif (writtenTotalObjectsSinceConsumerSync >= thresholdOfWrittenObjectsUntilWaitingForConsumerAgain) {\n\t\t\t\t\t// will wait til consumer catches up. Because we wrote ${writtenTotalObjectsSinceConsumerSync} objects without waiting.\n\t\t\t\t\tshouldWait = true;\n\t\t\t\t\twrittenTotalObjectsSinceConsumerSync = 0;\n\t\t\t\t}\n\t\t\t\tawait write(`${writtenObjectsInLevel > 0 ? ', ' : ''}${objects.filter(Boolean).map(obj => JSON.stringify(obj)).join(', ')}`, shouldWait);\n\t\t\t\twrittenTotalObjectsSinceConsumerSync += objectCountToRead;\n\t\t\t\twrittenObjectsInLevel += objectCountToRead;\n\n\t\t\t} while (totalReadObjectsInLevel < countObjectHeaders)\n\n\n\t\t\tawait write('], ', false);\n\t\t\tawait write(`\"writesDestroyedActorsInTOCBlob\": ${JSON.stringify(level.writesDestroyedActorsInTOCBlob)}`, false);\n\n\t\t\treader.jumpTo(endOfLevelPosition);\n\t\t\tawait write('}', false);\n\t\t}\n\t}\n}"]}
@@ -0,0 +1,17 @@
1
+ export declare enum ETextHistoryType {
2
+ None = -1,
3
+ Base = 0,
4
+ NamedFormat = 1,
5
+ OrderedFormat = 2,
6
+ ArgumentFormat = 3,
7
+ AsNumber = 4,
8
+ AsPercent = 5,
9
+ AsCurrency = 6,
10
+ AsDate = 7,
11
+ AsTime = 8,
12
+ AsDateTime = 9,
13
+ Transform = 10,
14
+ StringTableEntry = 11,
15
+ TextGenerator = 12
16
+ }
17
+ //# sourceMappingURL=ETextHistoryType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ETextHistoryType.d.ts","sourceRoot":"","sources":["../../../src/parser/unreal-engine/ETextHistoryType.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IACxB,IAAI,KAAK;IACT,IAAI,IAAI;IACR,WAAW,IAAA;IACX,aAAa,IAAA;IACb,cAAc,IAAA;IACd,QAAQ,IAAA;IACR,SAAS,IAAA;IACT,UAAU,IAAA;IACV,MAAM,IAAA;IACN,MAAM,IAAA;IACN,UAAU,IAAA;IACV,SAAS,KAAA;IACT,gBAAgB,KAAA;IAChB,aAAa,KAAA;CAChB"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ETextHistoryType = void 0;
4
+ var ETextHistoryType;
5
+ (function (ETextHistoryType) {
6
+ ETextHistoryType[ETextHistoryType["None"] = -1] = "None";
7
+ ETextHistoryType[ETextHistoryType["Base"] = 0] = "Base";
8
+ ETextHistoryType[ETextHistoryType["NamedFormat"] = 1] = "NamedFormat";
9
+ ETextHistoryType[ETextHistoryType["OrderedFormat"] = 2] = "OrderedFormat";
10
+ ETextHistoryType[ETextHistoryType["ArgumentFormat"] = 3] = "ArgumentFormat";
11
+ ETextHistoryType[ETextHistoryType["AsNumber"] = 4] = "AsNumber";
12
+ ETextHistoryType[ETextHistoryType["AsPercent"] = 5] = "AsPercent";
13
+ ETextHistoryType[ETextHistoryType["AsCurrency"] = 6] = "AsCurrency";
14
+ ETextHistoryType[ETextHistoryType["AsDate"] = 7] = "AsDate";
15
+ ETextHistoryType[ETextHistoryType["AsTime"] = 8] = "AsTime";
16
+ ETextHistoryType[ETextHistoryType["AsDateTime"] = 9] = "AsDateTime";
17
+ ETextHistoryType[ETextHistoryType["Transform"] = 10] = "Transform";
18
+ ETextHistoryType[ETextHistoryType["StringTableEntry"] = 11] = "StringTableEntry";
19
+ ETextHistoryType[ETextHistoryType["TextGenerator"] = 12] = "TextGenerator";
20
+ })(ETextHistoryType || (exports.ETextHistoryType = ETextHistoryType = {}));
21
+ //# sourceMappingURL=ETextHistoryType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ETextHistoryType.js","sourceRoot":"","sources":["../../../src/parser/unreal-engine/ETextHistoryType.ts"],"names":[],"mappings":";;;AAAA,IAAY,gBAeX;AAfD,WAAY,gBAAgB;IACxB,wDAAS,CAAA;IACT,uDAAQ,CAAA;IACR,qEAAW,CAAA;IACX,yEAAa,CAAA;IACb,2EAAc,CAAA;IACd,+DAAQ,CAAA;IACR,iEAAS,CAAA;IACT,mEAAU,CAAA;IACV,2DAAM,CAAA;IACN,2DAAM,CAAA;IACN,mEAAU,CAAA;IACV,kEAAS,CAAA;IACT,gFAAgB,CAAA;IAChB,0EAAa,CAAA;AACjB,CAAC,EAfW,gBAAgB,gCAAhB,gBAAgB,QAe3B","sourcesContent":["export enum ETextHistoryType {\n None = -1,\n Base = 0,\n NamedFormat,\n OrderedFormat,\n ArgumentFormat,\n AsNumber,\n AsPercent,\n AsCurrency,\n AsDate,\n AsTime,\n AsDateTime,\n Transform,\n StringTableEntry,\n TextGenerator\n}"]}
@@ -0,0 +1,24 @@
1
+ export declare enum EUnrealEngineObjectUE5Version {
2
+ INITIAL_VERSION = 1000,
3
+ NAMES_REFERENCED_FROM_EXPORT_DATA = 1001,
4
+ PAYLOAD_TOC = 1002,
5
+ OPTIONAL_RESOURCES = 1003,
6
+ LARGE_WORLD_COORDINATES = 1004,
7
+ REMOVE_OBJECT_EXPORT_PACKAGE_GUID = 1005,
8
+ TRACK_OBJECT_EXPORT_IS_INHERITED = 1006,
9
+ FSOFTOBJECTPATH_REMOVE_ASSET_PATH_FNAMES = 1007,
10
+ ADD_SOFTOBJECTPATH_LIST = 1008,
11
+ DATA_RESOURCES = 1009,
12
+ SCRIPT_SERIALIZATION_OFFSET = 1010,
13
+ PROPERTY_TAG_EXTENSION_AND_OVERRIDABLE_SERIALIZATION = 1011,
14
+ PROPERTY_TAG_COMPLETE_TYPE_NAME = 1012,
15
+ ASSETREGISTRY_PACKAGEBUILDDEPENDENCIES = 1013,
16
+ METADATA_SERIALIZATION_OFFSET = 1014,
17
+ VERSE_CELLS = 1015,
18
+ PACKAGE_SAVED_HASH = 1016,
19
+ OS_SUB_OBJECT_SHADOW_SERIALIZATION = 1017,
20
+ IMPORT_TYPE_HIERARCHIES = 1018,
21
+ AUTOMATIC_VERSION_PLUS_ONE = 1019,
22
+ AUTOMATIC_VERSION = 1018
23
+ }
24
+ //# sourceMappingURL=EUnrealEngineObjectUE5Version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EUnrealEngineObjectUE5Version.d.ts","sourceRoot":"","sources":["../../../src/parser/unreal-engine/EUnrealEngineObjectUE5Version.ts"],"names":[],"mappings":"AAIA,oBAAY,6BAA6B;IAMrC,eAAe,OAAO;IAGtB,iCAAiC,OAAA;IAGjC,WAAW,OAAA;IAGX,kBAAkB,OAAA;IAGlB,uBAAuB,OAAA;IAGvB,iCAAiC,OAAA;IAGjC,gCAAgC,OAAA;IAGhC,wCAAwC,OAAA;IAGxC,uBAAuB,OAAA;IAGvB,cAAc,OAAA;IAGd,2BAA2B,OAAA;IAK3B,oDAAoD,OAAA;IAGpD,+BAA+B,OAAA;IAG/B,sCAAsC,OAAA;IAGtC,6BAA6B,OAAA;IAG7B,WAAW,OAAA;IAGX,kBAAkB,OAAA;IAGlB,kCAAkC,OAAA;IAGlC,uBAAuB,OAAA;IAIvB,0BAA0B,OAAA;IAC1B,iBAAiB,OAAiC;CACrD"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EUnrealEngineObjectUE5Version = void 0;
4
+ var EUnrealEngineObjectUE5Version;
5
+ (function (EUnrealEngineObjectUE5Version) {
6
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["INITIAL_VERSION"] = 1000] = "INITIAL_VERSION";
7
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["NAMES_REFERENCED_FROM_EXPORT_DATA"] = 1001] = "NAMES_REFERENCED_FROM_EXPORT_DATA";
8
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["PAYLOAD_TOC"] = 1002] = "PAYLOAD_TOC";
9
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["OPTIONAL_RESOURCES"] = 1003] = "OPTIONAL_RESOURCES";
10
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["LARGE_WORLD_COORDINATES"] = 1004] = "LARGE_WORLD_COORDINATES";
11
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["REMOVE_OBJECT_EXPORT_PACKAGE_GUID"] = 1005] = "REMOVE_OBJECT_EXPORT_PACKAGE_GUID";
12
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["TRACK_OBJECT_EXPORT_IS_INHERITED"] = 1006] = "TRACK_OBJECT_EXPORT_IS_INHERITED";
13
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["FSOFTOBJECTPATH_REMOVE_ASSET_PATH_FNAMES"] = 1007] = "FSOFTOBJECTPATH_REMOVE_ASSET_PATH_FNAMES";
14
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["ADD_SOFTOBJECTPATH_LIST"] = 1008] = "ADD_SOFTOBJECTPATH_LIST";
15
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["DATA_RESOURCES"] = 1009] = "DATA_RESOURCES";
16
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["SCRIPT_SERIALIZATION_OFFSET"] = 1010] = "SCRIPT_SERIALIZATION_OFFSET";
17
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["PROPERTY_TAG_EXTENSION_AND_OVERRIDABLE_SERIALIZATION"] = 1011] = "PROPERTY_TAG_EXTENSION_AND_OVERRIDABLE_SERIALIZATION";
18
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["PROPERTY_TAG_COMPLETE_TYPE_NAME"] = 1012] = "PROPERTY_TAG_COMPLETE_TYPE_NAME";
19
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["ASSETREGISTRY_PACKAGEBUILDDEPENDENCIES"] = 1013] = "ASSETREGISTRY_PACKAGEBUILDDEPENDENCIES";
20
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["METADATA_SERIALIZATION_OFFSET"] = 1014] = "METADATA_SERIALIZATION_OFFSET";
21
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["VERSE_CELLS"] = 1015] = "VERSE_CELLS";
22
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["PACKAGE_SAVED_HASH"] = 1016] = "PACKAGE_SAVED_HASH";
23
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["OS_SUB_OBJECT_SHADOW_SERIALIZATION"] = 1017] = "OS_SUB_OBJECT_SHADOW_SERIALIZATION";
24
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["IMPORT_TYPE_HIERARCHIES"] = 1018] = "IMPORT_TYPE_HIERARCHIES";
25
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["AUTOMATIC_VERSION_PLUS_ONE"] = 1019] = "AUTOMATIC_VERSION_PLUS_ONE";
26
+ EUnrealEngineObjectUE5Version[EUnrealEngineObjectUE5Version["AUTOMATIC_VERSION"] = 1018] = "AUTOMATIC_VERSION";
27
+ })(EUnrealEngineObjectUE5Version || (exports.EUnrealEngineObjectUE5Version = EUnrealEngineObjectUE5Version = {}));
28
+ ;
29
+ //# sourceMappingURL=EUnrealEngineObjectUE5Version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EUnrealEngineObjectUE5Version.js","sourceRoot":"","sources":["../../../src/parser/unreal-engine/EUnrealEngineObjectUE5Version.ts"],"names":[],"mappings":";;;AAIA,IAAY,6BAoEX;AApED,WAAY,6BAA6B;IAMrC,0GAAsB,CAAA;IAGtB,8IAAiC,CAAA;IAGjC,kGAAW,CAAA;IAGX,gHAAkB,CAAA;IAGlB,0HAAuB,CAAA;IAGvB,8IAAiC,CAAA;IAGjC,4IAAgC,CAAA;IAGhC,4JAAwC,CAAA;IAGxC,0HAAuB,CAAA;IAGvB,wGAAc,CAAA;IAGd,kIAA2B,CAAA;IAK3B,oLAAoD,CAAA;IAGpD,0IAA+B,CAAA;IAG/B,wJAAsC,CAAA;IAGtC,sIAA6B,CAAA;IAG7B,kGAAW,CAAA;IAGX,gHAAkB,CAAA;IAGlB,gJAAkC,CAAA;IAGlC,0HAAuB,CAAA;IAIvB,gIAA0B,CAAA;IAC1B,8GAAkD,CAAA;AACtD,CAAC,EApEW,6BAA6B,6CAA7B,6BAA6B,QAoExC;AAAA,CAAC","sourcesContent":["\n/**\n * Source: https://github.com/EpicGames/UnrealEngine/blob/260bb2e1c5610b31c63a36206eedd289409c5f11/Engine/Source/Runtime/Core/Public/UObject/ObjectVersion.h#L40\n */\nexport enum EUnrealEngineObjectUE5Version {\n // Note that currently the oldest loadable package version is EUnrealEngineObjectUEVersion::VER_UE4_OLDEST_LOADABLE_PACKAGE\n // this can be enabled should we ever deprecate UE4 versions entirely\n //OLDEST_LOADABLE_PACKAGE = ???,\n\n // The original UE5 version, at the time this was added the UE4 version was 522, so UE5 will start from 1000 to show a clear difference\n INITIAL_VERSION = 1000,\n\n // Support stripping names that are not referenced from export data\n NAMES_REFERENCED_FROM_EXPORT_DATA,\n\n // Added a payload table of contents to the package summary\n PAYLOAD_TOC,\n\n // Added data to identify references from and to optional package\n OPTIONAL_RESOURCES,\n\n // Large world coordinates converts a number of core types to double components by default.\n LARGE_WORLD_COORDINATES,\n\n // Remove package GUID from FObjectExport\n REMOVE_OBJECT_EXPORT_PACKAGE_GUID,\n\n // Add IsInherited to the FObjectExport entry\n TRACK_OBJECT_EXPORT_IS_INHERITED,\n\n // Replace FName asset path in FSoftObjectPath with (package name, asset name) pair FTopLevelAssetPath\n FSOFTOBJECTPATH_REMOVE_ASSET_PATH_FNAMES,\n\n // Add a soft object path list to the package summary for fast remap\n ADD_SOFTOBJECTPATH_LIST,\n\n // Added bulk/data resource table\n DATA_RESOURCES,\n\n // Added script property serialization offset to export table entries for saved, versioned packages\n SCRIPT_SERIALIZATION_OFFSET,\n\n // Adding property tag extension,\n // Support for overridable serialization on UObject,\n // Support for overridable logic in containers\n PROPERTY_TAG_EXTENSION_AND_OVERRIDABLE_SERIALIZATION,\n\n // Added property tag complete type name and serialization type\n PROPERTY_TAG_COMPLETE_TYPE_NAME,\n\n // Changed UE::AssetRegistry::WritePackageData to include PackageBuildDependencies\n ASSETREGISTRY_PACKAGEBUILDDEPENDENCIES,\n\n // Added meta data serialization offset to for saved, versioned packages\n METADATA_SERIALIZATION_OFFSET,\n\n // Added VCells to the object graph\n VERSE_CELLS,\n\n // Changed PackageFileSummary to write FIoHash PackageSavedHash instead of FGuid Guid\n PACKAGE_SAVED_HASH,\n\n // OS shadow serialization of subobjects\n OS_SUB_OBJECT_SHADOW_SERIALIZATION,\n\n // Adds a table of hierarchical type information for imports in a package\n IMPORT_TYPE_HIERARCHIES,\n\n // -----<new versions can be added before this line>-------------------------------------------------\n // - this needs to be the last line (see note below)\n AUTOMATIC_VERSION_PLUS_ONE,\n AUTOMATIC_VERSION = AUTOMATIC_VERSION_PLUS_ONE - 1\n};"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@etothepii/satisfactory-file-parser",
3
3
  "author": "etothepii",
4
- "version": "3.3.1",
4
+ "version": "4.0.0",
5
5
  "description": "A file parser for satisfactory files. Includes save files and blueprint files.",
6
6
  "types": "./build/index.d.ts",
7
7
  "main": "./build/index.js",
@@ -36,8 +36,8 @@
36
36
  "jest": "^29.5.0",
37
37
  "ts-jest": "^29.0.5",
38
38
  "ts-node": "^10.9.1",
39
- "typedoc": "^0.26.10",
40
- "typescript": "^5.0.2"
39
+ "typedoc": "^0.28.19",
40
+ "typescript": "^5.6.0"
41
41
  },
42
42
  "dependencies": {
43
43
  "pako": "^2.1.0"
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/parser/context/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAK7E,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GAAG,4BAA4B,CAAA;AAOxF,MAAM,MAAM,uBAAuB,GAAG;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,oBAAoB,CAAC;CAC1C,CAAA;AAKD,MAAM,MAAM,4BAA4B,GAAG;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,MAAM,CAAC;CAClC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/parser/context/context.ts"],"names":[],"mappings":"","sourcesContent":["import { ChunkCompressionInfo } from \"../satisfactory/save/save-body-chunks\";\n\n/**\n * Merged Context Type for Saves and Blueprints.\n */\nexport type ReaderWriterContext = SaveReaderWriterContext & BlueprintReaderWriterContext\n\n/**\n * Context for reading/writing save files.\n * \n * @param mods describes a list of mod names to their versions. Some mods have special needs.\n */\nexport type SaveReaderWriterContext = {\n throwErrors: boolean;\n saveHeaderType: number;\n saveVersion: number;\n buildVersion: number;\n mods: Record<string, string>;\n mapName?: string;\n compressionInfo?: ChunkCompressionInfo;\n}\n\n/**\n * Context for reading/writing blueprint files.\n */\nexport type BlueprintReaderWriterContext = {\n throwErrors: boolean;\n headerVersion: number;\n saveVersion: number;\n buildVersion: number;\n blueprintConfigVersion: number;\n}"]}
@@ -1,14 +0,0 @@
1
- export declare enum CompressionAlgorithmCode {
2
- ZLIB = 3
3
- }
4
- export type ChunkCompressionInfo = {
5
- compressionAlgorithm?: CompressionAlgorithmCode;
6
- chunkHeaderSize: number;
7
- packageFileTag: number;
8
- maxUncompressedChunkContentSize: number;
9
- };
10
- export type ChunkSummary = {
11
- uncompressedSize: number;
12
- compressedSize: number;
13
- };
14
- //# sourceMappingURL=file.types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file.types.d.ts","sourceRoot":"","sources":["../../src/parser/file.types.ts"],"names":[],"mappings":"AACA,oBAAY,wBAAwB;IAChC,IAAI,IAAI;CACX;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,+BAA+B,EAAE,MAAM,CAAC;CAC3C,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAA;CACzB,CAAA"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CompressionAlgorithmCode = void 0;
4
- var CompressionAlgorithmCode;
5
- (function (CompressionAlgorithmCode) {
6
- CompressionAlgorithmCode[CompressionAlgorithmCode["ZLIB"] = 3] = "ZLIB";
7
- })(CompressionAlgorithmCode || (exports.CompressionAlgorithmCode = CompressionAlgorithmCode = {}));
8
- //# sourceMappingURL=file.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file.types.js","sourceRoot":"","sources":["../../src/parser/file.types.ts"],"names":[],"mappings":";;;AACA,IAAY,wBAEX;AAFD,WAAY,wBAAwB;IAChC,uEAAQ,CAAA;AACZ,CAAC,EAFW,wBAAwB,wCAAxB,wBAAwB,QAEnC","sourcesContent":["\nexport enum CompressionAlgorithmCode {\n ZLIB = 3,\n}\n\nexport type ChunkCompressionInfo = {\n compressionAlgorithm?: CompressionAlgorithmCode;\n chunkHeaderSize: number;\n packageFileTag: number;\n maxUncompressedChunkContentSize: number;\n}\n\nexport type ChunkSummary = {\n uncompressedSize: number,\n compressedSize: number\n}\n"]}