@etothepii/satisfactory-file-parser 1.1.1 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (656) hide show
  1. package/.github/workflows/tests.yml +24 -0
  2. package/CHANGELOG.md +95 -0
  3. package/GUIDE.md +81 -0
  4. package/README.md +96 -125
  5. package/build/index.d.ts +21 -3
  6. package/build/index.d.ts.map +1 -1
  7. package/build/index.js +21 -3
  8. package/build/index.js.map +1 -1
  9. package/build/parser/byte/byte-reader.class.d.ts +1 -1
  10. package/build/parser/byte/byte-reader.class.d.ts.map +1 -1
  11. package/build/parser/byte/byte-reader.class.js +4 -4
  12. package/build/parser/byte/byte-reader.class.js.map +1 -1
  13. package/build/parser/parser.d.ts +1 -1
  14. package/build/parser/parser.d.ts.map +1 -1
  15. package/build/parser/parser.js +1 -1
  16. package/build/parser/parser.js.map +1 -1
  17. package/build/parser/satisfactory/blueprint/blueprint-reader.d.ts.map +1 -1
  18. package/build/parser/satisfactory/blueprint/blueprint-reader.js +5 -6
  19. package/build/parser/satisfactory/blueprint/blueprint-reader.js.map +1 -1
  20. package/build/parser/satisfactory/blueprint/blueprint-writer.d.ts.map +1 -1
  21. package/build/parser/satisfactory/blueprint/blueprint-writer.js +3 -4
  22. package/build/parser/satisfactory/blueprint/blueprint-writer.js.map +1 -1
  23. package/build/parser/satisfactory/blueprint/blueprint.types.d.ts +3 -2
  24. package/build/parser/satisfactory/blueprint/blueprint.types.d.ts.map +1 -1
  25. package/build/parser/satisfactory/blueprint/blueprint.types.js.map +1 -1
  26. package/build/parser/satisfactory/edit/edit-constants.d.ts +4 -0
  27. package/build/parser/satisfactory/edit/edit-constants.d.ts.map +1 -1
  28. package/build/parser/satisfactory/edit/edit-constants.js +4 -0
  29. package/build/parser/satisfactory/edit/edit-constants.js.map +1 -1
  30. package/build/parser/satisfactory/save/level.class.d.ts.map +1 -1
  31. package/build/parser/satisfactory/save/level.class.js +3 -1
  32. package/build/parser/satisfactory/save/level.class.js.map +1 -1
  33. package/build/parser/satisfactory/types/objects/SaveObject.d.ts +1 -1
  34. package/build/parser/satisfactory/types/objects/SaveObject.d.ts.map +1 -1
  35. package/build/parser/satisfactory/types/objects/SaveObject.js.map +1 -1
  36. package/build/parser/satisfactory/types/property/PropertiesList.d.ts +2 -2
  37. package/build/parser/satisfactory/types/property/PropertiesList.d.ts.map +1 -1
  38. package/build/parser/satisfactory/types/property/PropertiesList.js +6 -6
  39. package/build/parser/satisfactory/types/property/PropertiesList.js.map +1 -1
  40. package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.d.ts +23 -0
  41. package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.d.ts.map +1 -0
  42. package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.js +14 -0
  43. package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.js.map +1 -0
  44. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ArrayProperty.d.ts +22 -0
  45. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ArrayProperty.d.ts.map +1 -0
  46. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ArrayProperty.js +128 -0
  47. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ArrayProperty.js.map +1 -0
  48. package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.d.ts +14 -0
  49. package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.d.ts.map +1 -0
  50. package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.js +23 -0
  51. package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.js.map +1 -0
  52. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.d.ts +14 -0
  53. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.d.ts.map +1 -0
  54. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.js +23 -0
  55. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.js.map +1 -0
  56. package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.d.ts +14 -0
  57. package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.d.ts.map +1 -0
  58. package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.js +23 -0
  59. package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.js.map +1 -0
  60. package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.d.ts +14 -0
  61. package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.d.ts.map +1 -0
  62. package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.js +23 -0
  63. package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.js.map +1 -0
  64. package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.d.ts +14 -0
  65. package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.d.ts.map +1 -0
  66. package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.js +23 -0
  67. package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.js.map +1 -0
  68. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.d.ts +14 -0
  69. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.d.ts.map +1 -0
  70. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.js +23 -0
  71. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.js.map +1 -0
  72. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.d.ts +14 -0
  73. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.d.ts.map +1 -0
  74. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.js +23 -0
  75. package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.js.map +1 -0
  76. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.d.ts +15 -0
  77. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.d.ts.map +1 -0
  78. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.js +23 -0
  79. package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.js.map +1 -0
  80. package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.d.ts +15 -0
  81. package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.d.ts.map +1 -0
  82. package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.js +23 -0
  83. package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.js.map +1 -0
  84. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.d.ts +14 -0
  85. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.d.ts.map +1 -0
  86. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.js +23 -0
  87. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.js.map +1 -0
  88. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.d.ts +26 -0
  89. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.d.ts.map +1 -0
  90. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.js +75 -0
  91. package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.js.map +1 -0
  92. package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.d.ts +15 -0
  93. package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.d.ts.map +1 -0
  94. package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.js +23 -0
  95. package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.js.map +1 -0
  96. package/build/parser/satisfactory/types/property/generic/BoolProperty.d.ts +11 -10
  97. package/build/parser/satisfactory/types/property/generic/BoolProperty.d.ts.map +1 -1
  98. package/build/parser/satisfactory/types/property/generic/BoolProperty.js +20 -20
  99. package/build/parser/satisfactory/types/property/generic/BoolProperty.js.map +1 -1
  100. package/build/parser/satisfactory/types/property/generic/ByteProperty.d.ts +11 -10
  101. package/build/parser/satisfactory/types/property/generic/ByteProperty.d.ts.map +1 -1
  102. package/build/parser/satisfactory/types/property/generic/ByteProperty.js +20 -21
  103. package/build/parser/satisfactory/types/property/generic/ByteProperty.js.map +1 -1
  104. package/build/parser/satisfactory/types/property/generic/DoubleProperty.d.ts +11 -10
  105. package/build/parser/satisfactory/types/property/generic/DoubleProperty.d.ts.map +1 -1
  106. package/build/parser/satisfactory/types/property/generic/DoubleProperty.js +20 -20
  107. package/build/parser/satisfactory/types/property/generic/DoubleProperty.js.map +1 -1
  108. package/build/parser/satisfactory/types/property/generic/EnumProperty.d.ts +11 -13
  109. package/build/parser/satisfactory/types/property/generic/EnumProperty.d.ts.map +1 -1
  110. package/build/parser/satisfactory/types/property/generic/EnumProperty.js +20 -21
  111. package/build/parser/satisfactory/types/property/generic/EnumProperty.js.map +1 -1
  112. package/build/parser/satisfactory/types/property/generic/FloatProperty.d.ts +11 -10
  113. package/build/parser/satisfactory/types/property/generic/FloatProperty.d.ts.map +1 -1
  114. package/build/parser/satisfactory/types/property/generic/FloatProperty.js +20 -20
  115. package/build/parser/satisfactory/types/property/generic/FloatProperty.js.map +1 -1
  116. package/build/parser/satisfactory/types/property/generic/Int32Property.d.ts +11 -10
  117. package/build/parser/satisfactory/types/property/generic/Int32Property.d.ts.map +1 -1
  118. package/build/parser/satisfactory/types/property/generic/Int32Property.js +20 -20
  119. package/build/parser/satisfactory/types/property/generic/Int32Property.js.map +1 -1
  120. package/build/parser/satisfactory/types/property/generic/Int64Property.d.ts +11 -10
  121. package/build/parser/satisfactory/types/property/generic/Int64Property.d.ts.map +1 -1
  122. package/build/parser/satisfactory/types/property/generic/Int64Property.js +20 -20
  123. package/build/parser/satisfactory/types/property/generic/Int64Property.js.map +1 -1
  124. package/build/parser/satisfactory/types/property/generic/Int8Property.d.ts +11 -10
  125. package/build/parser/satisfactory/types/property/generic/Int8Property.d.ts.map +1 -1
  126. package/build/parser/satisfactory/types/property/generic/Int8Property.js +20 -20
  127. package/build/parser/satisfactory/types/property/generic/Int8Property.js.map +1 -1
  128. package/build/parser/satisfactory/types/property/generic/MapProperty.d.ts +9 -7
  129. package/build/parser/satisfactory/types/property/generic/MapProperty.d.ts.map +1 -1
  130. package/build/parser/satisfactory/types/property/generic/MapProperty.js +24 -22
  131. package/build/parser/satisfactory/types/property/generic/MapProperty.js.map +1 -1
  132. package/build/parser/satisfactory/types/property/generic/ObjectProperty.d.ts +11 -10
  133. package/build/parser/satisfactory/types/property/generic/ObjectProperty.d.ts.map +1 -1
  134. package/build/parser/satisfactory/types/property/generic/ObjectProperty.js +20 -20
  135. package/build/parser/satisfactory/types/property/generic/ObjectProperty.js.map +1 -1
  136. package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.d.ts +14 -0
  137. package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.d.ts.map +1 -0
  138. package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.js +23 -0
  139. package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.js.map +1 -0
  140. package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.d.ts +15 -0
  141. package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.d.ts.map +1 -0
  142. package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.js +23 -0
  143. package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.js.map +1 -0
  144. package/build/parser/satisfactory/types/property/generic/SetProperty/SetProperty.d.ts +15 -0
  145. package/build/parser/satisfactory/types/property/generic/SetProperty/SetProperty.d.ts.map +1 -0
  146. package/build/parser/satisfactory/types/property/generic/SetProperty/SetProperty.js +73 -0
  147. package/build/parser/satisfactory/types/property/generic/SetProperty/SetProperty.js.map +1 -0
  148. package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.d.ts +14 -0
  149. package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.d.ts.map +1 -0
  150. package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.js +23 -0
  151. package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.js.map +1 -0
  152. package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.d.ts +14 -0
  153. package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.d.ts.map +1 -0
  154. package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.js +43 -0
  155. package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.js.map +1 -0
  156. package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.d.ts +14 -0
  157. package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.d.ts.map +1 -0
  158. package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.js +23 -0
  159. package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.js.map +1 -0
  160. package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.d.ts +11 -10
  161. package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.d.ts.map +1 -1
  162. package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.js +22 -22
  163. package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.js.map +1 -1
  164. package/build/parser/satisfactory/types/property/generic/StrProperty.d.ts +11 -10
  165. package/build/parser/satisfactory/types/property/generic/StrProperty.d.ts.map +1 -1
  166. package/build/parser/satisfactory/types/property/generic/StrProperty.js +20 -20
  167. package/build/parser/satisfactory/types/property/generic/StrProperty.js.map +1 -1
  168. package/build/parser/satisfactory/types/property/generic/StructProperty.d.ts +11 -10
  169. package/build/parser/satisfactory/types/property/generic/StructProperty.d.ts.map +1 -1
  170. package/build/parser/satisfactory/types/property/generic/StructProperty.js +27 -25
  171. package/build/parser/satisfactory/types/property/generic/StructProperty.js.map +1 -1
  172. package/build/parser/satisfactory/types/property/generic/TextProperty.d.ts +11 -10
  173. package/build/parser/satisfactory/types/property/generic/TextProperty.d.ts.map +1 -1
  174. package/build/parser/satisfactory/types/property/generic/TextProperty.js +20 -20
  175. package/build/parser/satisfactory/types/property/generic/TextProperty.js.map +1 -1
  176. package/build/parser/satisfactory/types/property/generic/Uint32Property.d.ts +11 -10
  177. package/build/parser/satisfactory/types/property/generic/Uint32Property.d.ts.map +1 -1
  178. package/build/parser/satisfactory/types/property/generic/Uint32Property.js +20 -20
  179. package/build/parser/satisfactory/types/property/generic/Uint32Property.js.map +1 -1
  180. package/build/parser/satisfactory/types/property/generic/Uint64Property.d.ts +11 -10
  181. package/build/parser/satisfactory/types/property/generic/Uint64Property.d.ts.map +1 -1
  182. package/build/parser/satisfactory/types/property/generic/Uint64Property.js +20 -20
  183. package/build/parser/satisfactory/types/property/generic/Uint64Property.js.map +1 -1
  184. package/build/parser/satisfactory/types/property/generic/Uint8Property.d.ts +11 -10
  185. package/build/parser/satisfactory/types/property/generic/Uint8Property.d.ts.map +1 -1
  186. package/build/parser/satisfactory/types/property/generic/Uint8Property.js +20 -20
  187. package/build/parser/satisfactory/types/property/generic/Uint8Property.js.map +1 -1
  188. package/build/parser/satisfactory/types/property/special/ConveyorChainActorSpecialProperties.js +1 -1
  189. package/build/parser/satisfactory/types/property/special/ConveyorChainActorSpecialProperties.js.map +1 -1
  190. package/build/parser/satisfactory/types/property/special/SpecialDroneActionProperties.d.ts +1 -1
  191. package/build/parser/satisfactory/types/property/special/SpecialDroneActionProperties.d.ts.map +1 -1
  192. package/build/parser/satisfactory/types/property/special/SpecialDroneActionProperties.js.map +1 -1
  193. package/build/parser/satisfactory/types/structs/DynamicStructPropertyValue.d.ts +1 -1
  194. package/build/parser/satisfactory/types/structs/DynamicStructPropertyValue.d.ts.map +1 -1
  195. package/build/parser/satisfactory/types/structs/DynamicStructPropertyValue.js.map +1 -1
  196. package/build/parser/stream/reworked/readable-stream-parser.d.ts +1 -1
  197. package/build/parser/stream/reworked/readable-stream-parser.d.ts.map +1 -1
  198. package/build/parser/stream/reworked/readable-stream-parser.js +1 -1
  199. package/build/parser/stream/reworked/readable-stream-parser.js.map +1 -1
  200. package/docs/assets/highlight.css +7 -0
  201. package/docs/assets/navigation.js +1 -1
  202. package/docs/assets/search.js +1 -1
  203. package/docs/classes/BlueprintConfigReader.html +5 -4
  204. package/docs/classes/BlueprintConfigWriter.html +3 -3
  205. package/docs/classes/BlueprintReader.html +5 -4
  206. package/docs/classes/BlueprintWriter.html +3 -3
  207. package/docs/classes/CompressionLibraryError.html +2 -2
  208. package/docs/classes/CorruptSaveError.html +2 -2
  209. package/docs/classes/Parser.html +7 -7
  210. package/docs/classes/ParserError.html +2 -2
  211. package/docs/classes/ReadableStreamParser.html +3 -3
  212. package/docs/classes/SatisfactorySave.html +2 -2
  213. package/docs/classes/SaveComponent.html +2 -2
  214. package/docs/classes/SaveEntity.html +2 -2
  215. package/docs/classes/SaveObject.html +14 -0
  216. package/docs/classes/SaveReader.html +5 -4
  217. package/docs/classes/SaveStreamJsonStringifier.html +2 -2
  218. package/docs/classes/SaveStreamWriter.html +2 -2
  219. package/docs/classes/SaveWriter.html +3 -3
  220. package/docs/classes/TimeoutError.html +2 -2
  221. package/docs/classes/UnimplementedError.html +2 -2
  222. package/docs/classes/UnsupportedVersionError.html +2 -2
  223. package/docs/functions/AbstractBaseProperty.Create.html +1 -0
  224. package/docs/functions/ArrayProperty.CalcOverhead.html +1 -0
  225. package/docs/functions/ArrayProperty.Parse.html +1 -0
  226. package/docs/functions/ArrayProperty.Serialize.html +1 -0
  227. package/docs/functions/BoolArrayProperty.Parse.html +1 -0
  228. package/docs/functions/BoolArrayProperty.Serialize.html +1 -0
  229. package/docs/functions/BoolProperty.CalcOverhead.html +1 -0
  230. package/docs/functions/BoolProperty.Parse.html +1 -0
  231. package/docs/functions/BoolProperty.ReadValue.html +1 -0
  232. package/docs/functions/BoolProperty.Serialize.html +1 -0
  233. package/docs/functions/BoolProperty.SerializeValue.html +1 -0
  234. package/docs/functions/BuildableSubsystemSpecialProperties.Parse.html +1 -1
  235. package/docs/functions/BuildableSubsystemSpecialProperties.Serialize.html +1 -1
  236. package/docs/functions/ByteArrayProperty.Parse.html +1 -0
  237. package/docs/functions/ByteArrayProperty.Serialize.html +1 -0
  238. package/docs/functions/ByteProperty.CalcOverhead.html +1 -0
  239. package/docs/functions/ByteProperty.Parse.html +1 -0
  240. package/docs/functions/ByteProperty.ReadValue.html +1 -0
  241. package/docs/functions/ByteProperty.Serialize.html +1 -0
  242. package/docs/functions/ByteProperty.SerializeValue.html +1 -0
  243. package/docs/functions/CircuitSpecialProperties.Parse.html +1 -1
  244. package/docs/functions/CircuitSpecialProperties.Serialize.html +1 -1
  245. package/docs/functions/ConveyorChainActorSpecialProperties.Parse.html +1 -1
  246. package/docs/functions/ConveyorChainActorSpecialProperties.Serialize.html +1 -1
  247. package/docs/functions/ConveyorSpecialProperties.Parse.html +1 -1
  248. package/docs/functions/ConveyorSpecialProperties.Serialize.html +1 -1
  249. package/docs/functions/DoubleArrayProperty.Parse.html +1 -0
  250. package/docs/functions/DoubleArrayProperty.Serialize.html +1 -0
  251. package/docs/functions/DoubleProperty.CalcOverhead.html +1 -0
  252. package/docs/functions/DoubleProperty.Parse.html +1 -0
  253. package/docs/functions/DoubleProperty.ReadValue.html +1 -0
  254. package/docs/functions/DoubleProperty.Serialize.html +1 -0
  255. package/docs/functions/DoubleProperty.SerializeValue.html +1 -0
  256. package/docs/functions/DynamicStructPropertyValue.read.html +1 -1
  257. package/docs/functions/DynamicStructPropertyValue.write.html +1 -1
  258. package/docs/functions/EmptySpecialProperties.Parse.html +1 -1
  259. package/docs/functions/EmptySpecialProperties.Serialize.html +1 -1
  260. package/docs/functions/EnumArrayProperty.Parse.html +1 -0
  261. package/docs/functions/EnumArrayProperty.Serialize.html +1 -0
  262. package/docs/functions/EnumProperty.CalcOverhead.html +1 -0
  263. package/docs/functions/EnumProperty.Parse.html +1 -0
  264. package/docs/functions/EnumProperty.ReadValue.html +1 -0
  265. package/docs/functions/EnumProperty.Serialize.html +1 -0
  266. package/docs/functions/EnumProperty.SerializeValue.html +1 -0
  267. package/docs/functions/FICFrameRange.Parse.html +1 -1
  268. package/docs/functions/FICFrameRange.Serialize.html +1 -1
  269. package/docs/functions/FloatArrayProperty.Parse.html +1 -0
  270. package/docs/functions/FloatArrayProperty.Serialize.html +1 -0
  271. package/docs/functions/FloatProperty.CalcOverhead.html +1 -0
  272. package/docs/functions/FloatProperty.Parse.html +1 -0
  273. package/docs/functions/FloatProperty.ReadValue.html +1 -0
  274. package/docs/functions/FloatProperty.Serialize.html +1 -0
  275. package/docs/functions/FloatProperty.SerializeValue.html +1 -0
  276. package/docs/functions/GUID.read.html +1 -1
  277. package/docs/functions/GUID.write.html +1 -1
  278. package/docs/functions/GUIDInfo.read.html +1 -1
  279. package/docs/functions/GUIDInfo.write.html +1 -1
  280. package/docs/functions/Int32ArrayProperty.Parse.html +1 -0
  281. package/docs/functions/Int32ArrayProperty.Serialize.html +1 -0
  282. package/docs/functions/Int32Property.CalcOverhead.html +1 -0
  283. package/docs/functions/Int32Property.Parse.html +1 -0
  284. package/docs/functions/Int32Property.ReadValue.html +1 -0
  285. package/docs/functions/Int32Property.Serialize.html +1 -0
  286. package/docs/functions/Int32Property.SerializeValue.html +1 -0
  287. package/docs/functions/Int32SetProperty.Parse.html +1 -0
  288. package/docs/functions/Int32SetProperty.Serialize.html +1 -0
  289. package/docs/functions/Int64ArrayProperty.Parse.html +1 -0
  290. package/docs/functions/Int64ArrayProperty.Serialize.html +1 -0
  291. package/docs/functions/Int64Property.CalcOverhead.html +1 -0
  292. package/docs/functions/Int64Property.Parse.html +1 -0
  293. package/docs/functions/Int64Property.ReadValue.html +1 -0
  294. package/docs/functions/Int64Property.Serialize.html +1 -0
  295. package/docs/functions/Int64Property.SerializeValue.html +1 -0
  296. package/docs/functions/Int8Property.CalcOverhead.html +1 -0
  297. package/docs/functions/Int8Property.Parse.html +1 -0
  298. package/docs/functions/Int8Property.ReadValue.html +1 -0
  299. package/docs/functions/Int8Property.Serialize.html +1 -0
  300. package/docs/functions/Int8Property.SerializeValue.html +1 -0
  301. package/docs/functions/Level.ReadAllObjectContents.html +1 -1
  302. package/docs/functions/Level.ReadAllObjectHeaders.html +1 -1
  303. package/docs/functions/Level.ReadLevel.html +1 -1
  304. package/docs/functions/Level.ReadNObjectContents.html +1 -1
  305. package/docs/functions/Level.ReadNObjectHeaders.html +1 -1
  306. package/docs/functions/Level.SerializeAllObjectContents.html +1 -1
  307. package/docs/functions/Level.SerializeAllObjectHeaders.html +1 -1
  308. package/docs/functions/Level.SerializeLevel.html +1 -1
  309. package/docs/functions/MD5Hash.read.html +1 -1
  310. package/docs/functions/MD5Hash.write.html +1 -1
  311. package/docs/functions/MapProperty.CalcOverhead.html +1 -0
  312. package/docs/functions/MapProperty.Parse.html +1 -0
  313. package/docs/functions/MapProperty.Serialize.html +1 -0
  314. package/docs/functions/ObjectArrayProperty.Parse.html +1 -0
  315. package/docs/functions/ObjectArrayProperty.Serialize.html +1 -0
  316. package/docs/functions/ObjectProperty.CalcOverhead.html +1 -0
  317. package/docs/functions/ObjectProperty.Parse.html +1 -0
  318. package/docs/functions/ObjectProperty.ReadValue.html +1 -0
  319. package/docs/functions/ObjectProperty.Serialize.html +1 -0
  320. package/docs/functions/ObjectProperty.SerializeValue.html +1 -0
  321. package/docs/functions/ObjectReference.read.html +1 -1
  322. package/docs/functions/ObjectReference.write.html +1 -1
  323. package/docs/functions/ObjectSetProperty.Parse.html +1 -0
  324. package/docs/functions/ObjectSetProperty.Serialize.html +1 -0
  325. package/docs/functions/ObjectsListSpecialProperties.Parse.html +1 -1
  326. package/docs/functions/ObjectsListSpecialProperties.Serialize.html +1 -1
  327. package/docs/functions/PlayerSpecialProperties.Parse.html +1 -1
  328. package/docs/functions/PlayerSpecialProperties.Serialize.html +1 -1
  329. package/docs/functions/PowerLineSpecialProperties.Parse.html +1 -1
  330. package/docs/functions/PowerLineSpecialProperties.Serialize.html +1 -1
  331. package/docs/functions/PropertiesList.ParseList.html +1 -1
  332. package/docs/functions/PropertiesList.ParseSingleProperty.html +1 -1
  333. package/docs/functions/PropertiesList.SerializeList.html +1 -1
  334. package/docs/functions/PropertiesList.SerializeSingleProperty.html +1 -1
  335. package/docs/functions/SetProperty.CalcOverhead.html +1 -0
  336. package/docs/functions/SetProperty.Parse.html +1 -0
  337. package/docs/functions/SetProperty.Serialize.html +1 -0
  338. package/docs/functions/SoftObjectArrayProperty.Parse.html +1 -0
  339. package/docs/functions/SoftObjectArrayProperty.Serialize.html +1 -0
  340. package/docs/functions/SoftObjectReference.read.html +1 -1
  341. package/docs/functions/SoftObjectReference.write.html +1 -1
  342. package/docs/functions/SpecialDroneActionProperties.Parse.html +1 -1
  343. package/docs/functions/SpecialDroneActionProperties.Serialize.html +1 -1
  344. package/docs/functions/SpecialProperties.ParseClassSpecificSpecialProperties.html +1 -1
  345. package/docs/functions/SpecialProperties.SerializeClassSpecificSpecialProperties.html +1 -1
  346. package/docs/functions/StrArrayProperty.Parse.html +1 -0
  347. package/docs/functions/StrArrayProperty.Serialize.html +1 -0
  348. package/docs/functions/StrProperty.CalcOverhead.html +1 -0
  349. package/docs/functions/StrProperty.Parse.html +1 -0
  350. package/docs/functions/StrProperty.ReadValue.html +1 -0
  351. package/docs/functions/StrProperty.Serialize.html +1 -0
  352. package/docs/functions/StrProperty.SerializeValue.html +1 -0
  353. package/docs/functions/StrSetProperty.Parse.html +1 -0
  354. package/docs/functions/StrSetProperty.Serialize.html +1 -0
  355. package/docs/functions/StructArrayProperty.Parse.html +1 -0
  356. package/docs/functions/StructArrayProperty.Serialize.html +1 -0
  357. package/docs/functions/StructProperty.CalcOverhead.html +1 -0
  358. package/docs/functions/StructProperty.Parse.html +1 -0
  359. package/docs/functions/StructProperty.ParseValue.html +1 -0
  360. package/docs/functions/StructProperty.Serialize.html +1 -0
  361. package/docs/functions/StructProperty.SerializeValue.html +1 -0
  362. package/docs/functions/StructSetProperty.Parse.html +1 -0
  363. package/docs/functions/StructSetProperty.Serialize.html +1 -0
  364. package/docs/functions/TextArrayProperty.Parse.html +1 -0
  365. package/docs/functions/TextArrayProperty.Serialize.html +1 -0
  366. package/docs/functions/TextProperty.CalcOverhead.html +1 -0
  367. package/docs/functions/TextProperty.Parse.html +1 -0
  368. package/docs/functions/TextProperty.ReadValue.html +1 -0
  369. package/docs/functions/TextProperty.Serialize.html +1 -0
  370. package/docs/functions/TextProperty.SerializeValue.html +1 -0
  371. package/docs/functions/Transform.Parse.html +1 -1
  372. package/docs/functions/Transform.ParseF.html +1 -1
  373. package/docs/functions/Transform.Serialize.html +1 -1
  374. package/docs/functions/Transform.SerializeF.html +1 -1
  375. package/docs/functions/Uint32Property.CalcOverhead.html +1 -0
  376. package/docs/functions/Uint32Property.Parse.html +1 -0
  377. package/docs/functions/Uint32Property.ReadValue.html +1 -0
  378. package/docs/functions/Uint32Property.Serialize.html +1 -0
  379. package/docs/functions/Uint32Property.SerializeValue.html +1 -0
  380. package/docs/functions/Uint32SetProperty.Parse.html +1 -0
  381. package/docs/functions/Uint32SetProperty.Serialize.html +1 -0
  382. package/docs/functions/Uint64Property.CalcOverhead.html +1 -0
  383. package/docs/functions/Uint64Property.Parse.html +1 -0
  384. package/docs/functions/Uint64Property.ReadValue.html +1 -0
  385. package/docs/functions/Uint64Property.Serialize.html +1 -0
  386. package/docs/functions/Uint64Property.SerializeValue.html +1 -0
  387. package/docs/functions/Uint8Property.CalcOverhead.html +1 -0
  388. package/docs/functions/Uint8Property.Parse.html +1 -0
  389. package/docs/functions/Uint8Property.ReadValue.html +1 -0
  390. package/docs/functions/Uint8Property.Serialize.html +1 -0
  391. package/docs/functions/Uint8Property.SerializeValue.html +1 -0
  392. package/docs/functions/VehicleSpecialProperties.Parse.html +1 -1
  393. package/docs/functions/VehicleSpecialProperties.Serialize.html +1 -1
  394. package/docs/functions/col4.ParseBGRA.html +1 -1
  395. package/docs/functions/col4.ParseRGBA.html +1 -1
  396. package/docs/functions/col4.SerializeBGRA.html +1 -1
  397. package/docs/functions/col4.SerializeRGBA.html +1 -1
  398. package/docs/functions/isArrayProperty.html +1 -1
  399. package/docs/functions/isBoolArrayProperty.html +1 -0
  400. package/docs/functions/isBoolProperty.html +1 -1
  401. package/docs/functions/isBuildableSubsystemSpecialProperties.html +1 -1
  402. package/docs/functions/isByteArrayProperty.html +1 -0
  403. package/docs/functions/isByteProperty.html +1 -1
  404. package/docs/functions/isCircuitSpecialProperties.html +1 -1
  405. package/docs/functions/isConveyorChainActorSpecialProperties.html +1 -1
  406. package/docs/functions/isConveyorSpecialProperties.html +1 -1
  407. package/docs/functions/isDoubleArrayProperty.html +1 -0
  408. package/docs/functions/isDoubleProperty.html +1 -1
  409. package/docs/functions/isEmptySpecialProperties.html +1 -1
  410. package/docs/functions/isEnumArrayProperty.html +1 -0
  411. package/docs/functions/isEnumProperty.html +1 -1
  412. package/docs/functions/isFloatArrayProperty.html +1 -0
  413. package/docs/functions/isFloatProperty.html +1 -1
  414. package/docs/functions/isInt32ArrayProperty.html +1 -0
  415. package/docs/functions/isInt32Property.html +1 -1
  416. package/docs/functions/isInt32SetProperty.html +1 -0
  417. package/docs/functions/isInt64ArrayProperty.html +1 -0
  418. package/docs/functions/isInt64Property.html +1 -1
  419. package/docs/functions/isInt8Property.html +1 -1
  420. package/docs/functions/isMapProperty.html +1 -1
  421. package/docs/functions/isObjectArrayProperty.html +1 -0
  422. package/docs/functions/isObjectProperty.html +1 -1
  423. package/docs/functions/isObjectSetProperty.html +1 -0
  424. package/docs/functions/isObjectsListSpecialProperties.html +1 -1
  425. package/docs/functions/isPlayerSpecialProperties.html +1 -1
  426. package/docs/functions/isPowerLineSpecialProperties.html +1 -1
  427. package/docs/functions/isSaveComponent.html +1 -1
  428. package/docs/functions/isSaveEntity.html +1 -1
  429. package/docs/functions/isSetProperty.html +1 -1
  430. package/docs/functions/isSoftObjectArrayProperty.html +1 -0
  431. package/docs/functions/isSpecialDroneActionProperties.html +1 -1
  432. package/docs/functions/isStrArrayProperty.html +1 -0
  433. package/docs/functions/isStrProperty.html +1 -1
  434. package/docs/functions/isStrSetProperty.html +1 -0
  435. package/docs/functions/isStructArrayProperty.html +1 -0
  436. package/docs/functions/isStructProperty.html +1 -1
  437. package/docs/functions/isStructSetProperty.html +1 -0
  438. package/docs/functions/isTextArrayProperty.html +1 -0
  439. package/docs/functions/isTextProperty.html +1 -1
  440. package/docs/functions/isUInt64Property.html +1 -1
  441. package/docs/functions/isUint32Property.html +1 -1
  442. package/docs/functions/isUint32SetProperty.html +1 -0
  443. package/docs/functions/isUint8Property.html +1 -1
  444. package/docs/functions/isVehicleSpecialProperties.html +1 -1
  445. package/docs/functions/vec2.Parse.html +1 -1
  446. package/docs/functions/vec2.ParseF.html +1 -1
  447. package/docs/functions/vec2.Serialize.html +1 -1
  448. package/docs/functions/vec2.SerializeF.html +1 -1
  449. package/docs/functions/vec3.Parse.html +1 -1
  450. package/docs/functions/vec3.ParseF.html +1 -1
  451. package/docs/functions/vec3.ParseInt.html +1 -1
  452. package/docs/functions/vec3.Serialize.html +1 -1
  453. package/docs/functions/vec3.SerializeF.html +1 -1
  454. package/docs/functions/vec3.SerializeInt.html +1 -1
  455. package/docs/functions/vec3.add.html +1 -1
  456. package/docs/functions/vec3.length.html +1 -1
  457. package/docs/functions/vec3.mult.html +1 -1
  458. package/docs/functions/vec3.norm.html +1 -1
  459. package/docs/functions/vec3.sub.html +1 -1
  460. package/docs/functions/vec4.Parse.html +1 -1
  461. package/docs/functions/vec4.ParseF.html +1 -1
  462. package/docs/functions/vec4.Serialize.html +1 -1
  463. package/docs/functions/vec4.SerializeF.html +1 -1
  464. package/docs/hierarchy.html +1 -1
  465. package/docs/index.html +26 -87
  466. package/docs/interfaces/Blueprint.html +2 -2
  467. package/docs/interfaces/BlueprintConfig.html +2 -2
  468. package/docs/interfaces/ModData.html +2 -2
  469. package/docs/interfaces/SatisfactoryModMetadata.html +2 -2
  470. package/docs/interfaces/SatisfactorySaveHeader.html +2 -2
  471. package/docs/interfaces/SaveComponentHeader.html +2 -2
  472. package/docs/interfaces/SaveEntityHeader.html +2 -2
  473. package/docs/interfaces/SaveObjectHeader.html +4 -0
  474. package/docs/modules/AbstractBaseProperty.html +2 -0
  475. package/docs/modules/ArrayProperty.html +5 -0
  476. package/docs/modules/BoolArrayProperty.html +3 -0
  477. package/docs/modules/BoolProperty.html +6 -0
  478. package/docs/modules/BuildableSubsystemSpecialProperties.html +1 -1
  479. package/docs/modules/ByteArrayProperty.html +3 -0
  480. package/docs/modules/ByteProperty.html +6 -0
  481. package/docs/modules/CircuitSpecialProperties.html +1 -1
  482. package/docs/modules/ConveyorChainActorSpecialProperties.html +1 -1
  483. package/docs/modules/ConveyorSpecialProperties.html +1 -1
  484. package/docs/modules/DoubleArrayProperty.html +3 -0
  485. package/docs/modules/DoubleProperty.html +6 -0
  486. package/docs/modules/DynamicStructPropertyValue.html +1 -1
  487. package/docs/modules/EmptySpecialProperties.html +1 -1
  488. package/docs/modules/EnumArrayProperty.html +3 -0
  489. package/docs/modules/EnumProperty.html +6 -0
  490. package/docs/modules/FICFrameRange.html +1 -1
  491. package/docs/modules/FloatArrayProperty.html +3 -0
  492. package/docs/modules/FloatProperty.html +6 -0
  493. package/docs/modules/GUID.html +1 -1
  494. package/docs/modules/GUIDInfo.html +1 -1
  495. package/docs/modules/Int32ArrayProperty.html +3 -0
  496. package/docs/modules/Int32Property.html +6 -0
  497. package/docs/modules/Int32SetProperty.html +3 -0
  498. package/docs/modules/Int64ArrayProperty.html +3 -0
  499. package/docs/modules/Int64Property.html +6 -0
  500. package/docs/modules/Int8Property.html +6 -0
  501. package/docs/modules/Level.html +1 -1
  502. package/docs/modules/MD5Hash.html +1 -1
  503. package/docs/modules/MapProperty.html +4 -0
  504. package/docs/modules/ObjectArrayProperty.html +3 -0
  505. package/docs/modules/ObjectProperty.html +6 -0
  506. package/docs/modules/ObjectReference.html +1 -1
  507. package/docs/modules/ObjectSetProperty.html +3 -0
  508. package/docs/modules/ObjectsListSpecialProperties.html +1 -1
  509. package/docs/modules/PlayerSpecialProperties.html +1 -1
  510. package/docs/modules/PowerLineSpecialProperties.html +1 -1
  511. package/docs/modules/PropertiesList.html +1 -1
  512. package/docs/modules/SetProperty.html +5 -0
  513. package/docs/modules/SoftObjectArrayProperty.html +3 -0
  514. package/docs/modules/SoftObjectReference.html +1 -1
  515. package/docs/modules/SpecialDroneActionProperties.html +1 -1
  516. package/docs/modules/SpecialProperties.html +1 -1
  517. package/docs/modules/StrArrayProperty.html +3 -0
  518. package/docs/modules/StrProperty.html +6 -0
  519. package/docs/modules/StrSetProperty.html +3 -0
  520. package/docs/modules/StructArrayProperty.html +3 -0
  521. package/docs/modules/StructProperty.html +6 -0
  522. package/docs/modules/StructSetProperty.html +3 -0
  523. package/docs/modules/TextArrayProperty.html +3 -0
  524. package/docs/modules/TextProperty.html +6 -0
  525. package/docs/modules/Transform.html +1 -1
  526. package/docs/modules/Uint32Property.html +6 -0
  527. package/docs/modules/Uint32SetProperty.html +3 -0
  528. package/docs/modules/Uint64Property.html +6 -0
  529. package/docs/modules/Uint8Property.html +6 -0
  530. package/docs/modules/VehicleSpecialProperties.html +1 -1
  531. package/docs/modules/col4.html +1 -1
  532. package/docs/modules/vec2.html +1 -1
  533. package/docs/modules/vec3.html +1 -1
  534. package/docs/modules/vec4.html +1 -1
  535. package/docs/modules.html +92 -24
  536. package/docs/types/AbstractBaseProperty-1.html +1 -0
  537. package/docs/types/ArrayProperty.AvailableArrayPropertyTypes.html +1 -0
  538. package/docs/types/ArrayPropertyStructValueFields.html +1 -1
  539. package/docs/types/BasicMultipleStructPropertyValue.html +1 -1
  540. package/docs/types/BasicStructPropertyValue.html +1 -1
  541. package/docs/types/BlueprintHeader.html +1 -1
  542. package/docs/types/BoolArrayProperty-1.html +1 -0
  543. package/docs/types/BoolProperty-1.html +1 -0
  544. package/docs/types/BoxStructPropertyValue.html +1 -1
  545. package/docs/types/BuildableSubsystemSpecialProperties-1.html +1 -1
  546. package/docs/types/BuildableTypeInstance.html +1 -1
  547. package/docs/types/ByteArrayProperty-1.html +1 -0
  548. package/docs/types/ByteProperty-1.html +1 -0
  549. package/docs/types/BytePropertyValue.html +1 -1
  550. package/docs/types/CircuitSpecialProperties-1.html +1 -1
  551. package/docs/types/ClientIdentityInfo.html +1 -1
  552. package/docs/types/ConveyorChainActorSpecialProperties-1.html +1 -1
  553. package/docs/types/ConveyorChainSegmentSpecialProperties.html +1 -1
  554. package/docs/types/ConveyorItemSpecialProperties.html +1 -1
  555. package/docs/types/ConveyorSpecialProperties-1.html +1 -1
  556. package/docs/types/DoubleArrayProperty-1.html +1 -0
  557. package/docs/types/DoubleProperty-1.html +1 -0
  558. package/docs/types/DynamicStructPropertyValue-1.html +1 -1
  559. package/docs/types/EmptySpecialProperties-1.html +1 -1
  560. package/docs/types/EnumArrayProperty-1.html +1 -0
  561. package/docs/types/EnumProperty-1.html +1 -0
  562. package/docs/types/FICFrameRange-1.html +1 -1
  563. package/docs/types/FICFrameRangeStructPropertyValue.html +1 -1
  564. package/docs/types/FloatArrayProperty-1.html +1 -0
  565. package/docs/types/FloatProperty-1.html +1 -0
  566. package/docs/types/GENERIC_MAP_KEY_TYPE.html +1 -1
  567. package/docs/types/GENERIC_MAP_VALUE_TYPE.html +1 -1
  568. package/docs/types/GENERIC_STRUCT_PROPERTY_VALUE.html +1 -1
  569. package/docs/types/GUID-1.html +1 -1
  570. package/docs/types/GUIDInfo-1.html +1 -1
  571. package/docs/types/Int32ArrayProperty-1.html +1 -0
  572. package/docs/types/Int32Property-1.html +1 -0
  573. package/docs/types/Int32SetProperty-1.html +1 -0
  574. package/docs/types/Int64ArrayProperty-1.html +1 -0
  575. package/docs/types/Int64Property-1.html +1 -0
  576. package/docs/types/Int8Property-1.html +1 -0
  577. package/docs/types/InventoryItemStructPropertyValue.html +1 -1
  578. package/docs/types/Level-1.html +1 -1
  579. package/docs/types/MAP_STRUCT_KEY_PROXY.html +1 -1
  580. package/docs/types/MD5Hash-1.html +1 -1
  581. package/docs/types/MapProperty-1.html +1 -0
  582. package/docs/types/ObjectArrayProperty-1.html +1 -0
  583. package/docs/types/ObjectProperty-1.html +1 -0
  584. package/docs/types/ObjectReference-1.html +1 -1
  585. package/docs/types/ObjectSetProperty-1.html +1 -0
  586. package/docs/types/ObjectsListSpecialProperties-1.html +1 -1
  587. package/docs/types/PlayerSpecialProperties-1.html +1 -1
  588. package/docs/types/PowerLineSpecialProperties-1.html +1 -1
  589. package/docs/types/PropertiesMap.html +1 -1
  590. package/docs/types/RailroadTrackPositionStructPropertyValue.html +1 -1
  591. package/docs/types/RoughSaveVersion.html +1 -1
  592. package/docs/types/SetProperty.AvailableSetPropertyTypes.html +1 -0
  593. package/docs/types/SoftObjectArrayProperty-1.html +1 -0
  594. package/docs/types/SoftObjectReference-1.html +1 -1
  595. package/docs/types/SpecialDroneAction.html +1 -1
  596. package/docs/types/SpecialDroneActionProperties-1.html +1 -1
  597. package/docs/types/SpecialProperties.AvailableSpecialPropertiesTypes.html +1 -1
  598. package/docs/types/StrArrayProperty-1.html +1 -0
  599. package/docs/types/StrProperty-1.html +1 -0
  600. package/docs/types/StrSetProperty-1.html +1 -0
  601. package/docs/types/StructArrayProperty-1.html +1 -0
  602. package/docs/types/StructProperty-1.html +1 -0
  603. package/docs/types/StructSetProperty-1.html +1 -0
  604. package/docs/types/TextArrayProperty-1.html +1 -0
  605. package/docs/types/TextProperty-1.html +1 -0
  606. package/docs/types/TextPropertyValue.html +1 -1
  607. package/docs/types/Transform-1.html +1 -1
  608. package/docs/types/Uint32Property-1.html +1 -0
  609. package/docs/types/Uint32SetProperty-1.html +1 -0
  610. package/docs/types/Uint64Property-1.html +1 -0
  611. package/docs/types/Uint8Property-1.html +1 -0
  612. package/docs/types/VehicleSpecialProperties-1.html +1 -1
  613. package/docs/types/col4-1.html +1 -1
  614. package/docs/types/vec2-1.html +1 -1
  615. package/docs/types/vec3-1.html +1 -1
  616. package/docs/types/vec4-1.html +1 -1
  617. package/docs/variables/EDIT.html +1 -1
  618. package/package.json +3 -3
  619. package/LICENSE +0 -21
  620. package/build/parser/satisfactory/types/property/generic/ArrayProperty.d.ts +0 -23
  621. package/build/parser/satisfactory/types/property/generic/ArrayProperty.d.ts.map +0 -1
  622. package/build/parser/satisfactory/types/property/generic/ArrayProperty.js +0 -172
  623. package/build/parser/satisfactory/types/property/generic/ArrayProperty.js.map +0 -1
  624. package/build/parser/satisfactory/types/property/generic/BasicProperty.d.ts +0 -26
  625. package/build/parser/satisfactory/types/property/generic/BasicProperty.d.ts.map +0 -1
  626. package/build/parser/satisfactory/types/property/generic/BasicProperty.js +0 -29
  627. package/build/parser/satisfactory/types/property/generic/BasicProperty.js.map +0 -1
  628. package/build/parser/satisfactory/types/property/generic/SetProperty.d.ts +0 -13
  629. package/build/parser/satisfactory/types/property/generic/SetProperty.d.ts.map +0 -1
  630. package/build/parser/satisfactory/types/property/generic/SetProperty.js +0 -95
  631. package/build/parser/satisfactory/types/property/generic/SetProperty.js.map +0 -1
  632. package/build/parser/satisfactory/types/property/special/SpecialAnyProperties.d.ts +0 -55
  633. package/build/parser/satisfactory/types/property/special/SpecialAnyProperties.d.ts.map +0 -1
  634. package/build/parser/satisfactory/types/property/special/SpecialAnyProperties.js +0 -3
  635. package/build/parser/satisfactory/types/property/special/SpecialAnyProperties.js.map +0 -1
  636. package/docs/classes/AbstractBaseProperty.html +0 -6
  637. package/docs/classes/AbstractProperty.html +0 -4
  638. package/docs/classes/ArrayProperty.html +0 -13
  639. package/docs/classes/BasicProperty.html +0 -7
  640. package/docs/classes/BoolProperty.html +0 -13
  641. package/docs/classes/ByteProperty.html +0 -13
  642. package/docs/classes/DoubleProperty.html +0 -13
  643. package/docs/classes/EnumProperty.html +0 -13
  644. package/docs/classes/FloatProperty.html +0 -13
  645. package/docs/classes/Int32Property.html +0 -13
  646. package/docs/classes/Int64Property.html +0 -13
  647. package/docs/classes/Int8Property.html +0 -13
  648. package/docs/classes/MapProperty.html +0 -17
  649. package/docs/classes/ObjectProperty.html +0 -13
  650. package/docs/classes/SetProperty.html +0 -12
  651. package/docs/classes/StrProperty.html +0 -13
  652. package/docs/classes/StructProperty.html +0 -18
  653. package/docs/classes/TextProperty.html +0 -13
  654. package/docs/classes/Uint32Property.html +0 -13
  655. package/docs/classes/Uint64Property.html +0 -13
  656. package/docs/classes/Uint8Property.html +0 -13
@@ -33,11 +33,11 @@ class ByteReader {
33
33
  readBytes(count) {
34
34
  return new Uint8Array(new Array(count).fill(0).map(pl => this.bufferView.getUint8(this.currentByte++)));
35
35
  }
36
- uint8ToHexRepresentation(byte) {
37
- return ('0' + byte.toString(16)).slice(-2);
36
+ bytesToHexRepresentation(bytes) {
37
+ return bytes.map(byte => ('0' + byte.toString(16)).slice(-2));
38
38
  }
39
- readHex(byteLength, hexSeparator = '') {
40
- return Array.from(this.readBytes(byteLength)).map(byte => this.uint8ToHexRepresentation(byte)).join(hexSeparator);
39
+ readHex(byteLength, hexSeparator = ' ') {
40
+ return this.bytesToHexRepresentation(Array.from(this.readBytes(byteLength))).join(hexSeparator);
41
41
  }
42
42
  readInt8() {
43
43
  let data = this.bufferView.getInt8(this.currentByte++);
@@ -1 +1 @@
1
- {"version":3,"file":"byte-reader.class.js","sourceRoot":"","sources":["../../../src/parser/byte/byte-reader.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { CorruptSaveError } from '../error/parser.error';\nimport { Alignment } from \"./alignment.enum\";\nimport { BinaryReadable } from \"./binary-readable.interface\";\n\n/** @public */\nexport abstract class ByteReader implements BinaryReadable {\n\n\tprotected bufferView!: DataView;\n\tprotected fileBuffer!: ArrayBuffer;\n\tpublic alignment: Alignment;\n\n\tprotected currentByte: number = 0;\n\tprotected handledByte: number = 0;\n\tprotected maxByte: number = 0;\n\n\tconstructor(fileBuffer: ArrayBuffer, alignment: Alignment) {\n\t\tthis.alignment = alignment;\n\t\tthis.reset(fileBuffer);\n\t}\n\n\t/**\n\t * Resets the reader on the given arraybuffer to start from the beginning.\n\t * @param newFileBuffer the new array buffer to be read.\n\t */\n\tpublic reset(newFileBuffer: ArrayBuffer) {\n\t\tthis.fileBuffer = newFileBuffer;\n\t\tthis.bufferView = new DataView(newFileBuffer, 0, this.fileBuffer.byteLength);\n\t\tthis.maxByte = newFileBuffer.byteLength;\n\t\tthis.currentByte = 0;\n\t\tthis.handledByte = 0;\n\t}\n\n\t/*\n\t * Byte Manipulation\n\t */\n\tpublic skipBytes(byteLength = 1): void {\n\t\tthis.currentByte += byteLength;\n\t\treturn;\n\t}\n\tpublic readByte(): number {\n\t\t// TODO can i not just readByte() ??\n\t\treturn parseInt(this.bufferView.getUint8(this.currentByte++).toString());\n\t}\n\tpublic readBytes(count: number): Uint8Array {\n\t\treturn new Uint8Array(new Array(count).fill(0).map(pl => this.bufferView.getUint8(this.currentByte++)));\n\t}\n\tprivate uint8ToHexRepresentation(byte: number): string {\n\t\treturn ('0' + byte.toString(16)).slice(-2);\n\t}\n\tpublic readHex(byteLength: number, hexSeparator: string = ''): string {\n\t\treturn Array.from(this.readBytes(byteLength)).map(byte => this.uint8ToHexRepresentation(byte)).join(hexSeparator);\n\t}\n\tpublic readInt8(): number {\n\t\tlet data = this.bufferView.getInt8(this.currentByte++);\n\t\treturn data;\n\t}\n\tpublic readUint8(): number {\n\t\tlet data = this.bufferView.getUint8(this.currentByte++);\n\t\treturn data;\n\t}\n\tpublic readInt16(): number {\n\t\tlet data = this.bufferView.getInt16(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 2;\n\t\treturn data;\n\t}\n\tpublic readUint16(): number {\n\t\tlet data = this.bufferView.getUint16(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 2;\n\t\treturn data;\n\t}\n\tpublic readInt32(): number {\n\t\tlet data = this.bufferView.getInt32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 4;\n\t\treturn data;\n\t}\n\tpublic readUint32(): number {\n\t\tlet data = this.bufferView.getUint32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 4;\n\t\treturn data;\n\t}\n\tpublic readLong(): bigint {\n\t\tlet data = this.bufferView.getBigInt64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 8;\n\t\treturn data;\n\t}\n\tpublic readInt64(): bigint {\n\t\treturn this.readLong();\n\t}\n\tpublic readUint64(): bigint {\n\t\tlet data = this.bufferView.getBigUint64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 8;\n\t\treturn data;\n\t}\n\n\tpublic readFloat32(): number {\n\t\tlet data = this.bufferView.getFloat32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 4;\n\t\treturn data;\n\t}\n\tpublic readDouble(): number {\n\t\tlet data = this.bufferView.getFloat64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 8;\n\t\treturn data;\n\t}\n\tpublic readString(): string {\n\t\tlet strLength = this.readInt32();\n\t\tlet startBytes = this.currentByte;\n\n\t\tif (strLength === 0) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// Range error!\n\t\tif (strLength > (this.bufferView.buffer.byteLength - this.currentByte)) {\n\t\t\tlet errorMessage = `Cannot read string of length ${strLength} at position ${this.currentByte} as it exceeds the end at ${this.bufferView.buffer.byteLength}`;\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\n\t\t// it uses UTF16 if text is non-ascii, even if it would fit into UTF8.\n\t\tif (strLength < 0) {\n\t\t\tconst string = new Array(-strLength - 1).fill('').map(c => String.fromCharCode(this.readUint16()));\n\t\t\tthis.currentByte += 2;\n\t\t\treturn string.join('');\n\t\t}\n\n\t\t//default UTF-8\n\t\ttry {\n\t\t\tconst string = new Array(strLength - 1).fill('').map(c => String.fromCharCode(this.readUint8()));\n\t\t\tthis.currentByte += 1;\n\t\t\treturn string.join('');\n\t\t}\n\t\tcatch (error) {\n\t\t\tthrow new CorruptSaveError(`Cannot read UTF8 string of length ${strLength} at position ${this.currentByte}.`);\n\t\t}\n\t}\n\n\tpublic getBufferPosition = (): number => this.currentByte;\n\n\tpublic getBufferSlice = (begin: number, end: number | undefined): ArrayBuffer => this.bufferView.buffer.slice(begin, end);\n\n\tpublic getBufferProgress = (): number => this.currentByte / this.bufferView.buffer.byteLength;\n\n\tpublic getBufferLength = (): number => this.bufferView.buffer.byteLength;\n\n\tpublic getBuffer = (): ArrayBuffer => this.bufferView.buffer;\n}"]}
1
+ {"version":3,"file":"byte-reader.class.js","sourceRoot":"","sources":["../../../src/parser/byte/byte-reader.class.ts"],"names":[],"mappings":";;;AAAA,wDAAyD;AACzD,qDAA6C;AAI7C,MAAsB,UAAU;IAU/B,YAAY,UAAuB,EAAE,SAAoB;QAJ/C,gBAAW,GAAW,CAAC,CAAC;QACxB,gBAAW,GAAW,CAAC,CAAC;QACxB,YAAO,GAAW,CAAC,CAAC;QA2HvB,sBAAiB,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;QAEnD,mBAAc,GAAG,CAAC,KAAa,EAAE,GAAuB,EAAe,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEnH,sBAAiB,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;QAEvF,oBAAe,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;QAElE,cAAS,GAAG,GAAgB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAhI5D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IAMM,KAAK,CAAC,aAA0B;QACtC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACtB,CAAC;IAKM,SAAS,CAAC,UAAU,GAAG,CAAC;QAC9B,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC;QAC/B,OAAO;IACR,CAAC;IACM,QAAQ;QAEd,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IACM,SAAS,CAAC,KAAa;QAC7B,OAAO,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IACzG,CAAC;IACM,wBAAwB,CAAC,KAAe;QAC9C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IACM,OAAO,CAAC,UAAkB,EAAE,eAAuB,GAAG;QAC5D,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjG,CAAC;IACM,QAAQ;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACb,CAAC;IACM,SAAS;QACf,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACb,CAAC;IACM,SAAS;QACf,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,0BAAS,CAAC,aAAa,CAAC,CAAC;QAClG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IACM,UAAU;QAChB,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,0BAAS,CAAC,aAAa,CAAC,CAAC;QACnG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IACM,SAAS;QACf,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,0BAAS,CAAC,aAAa,CAAC,CAAC;QAClG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IACM,UAAU;QAChB,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,0BAAS,CAAC,aAAa,CAAC,CAAC;QACnG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IACM,QAAQ;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,0BAAS,CAAC,aAAa,CAAC,CAAC;QACrG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IACM,SAAS;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IACM,UAAU;QAChB,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,0BAAS,CAAC,aAAa,CAAC,CAAC;QACtG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,WAAW;QACjB,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,0BAAS,CAAC,aAAa,CAAC,CAAC;QACpG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IACM,UAAU;QAChB,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,0BAAS,CAAC,aAAa,CAAC,CAAC;QACpG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IACM,UAAU;QAChB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QAElC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACX,CAAC;QAGD,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACxE,IAAI,YAAY,GAAG,gCAAgC,SAAS,gBAAgB,IAAI,CAAC,WAAW,6BAA6B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7J,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;QAGD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACnG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QAGD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACjG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACd,MAAM,IAAI,+BAAgB,CAAC,qCAAqC,SAAS,gBAAgB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QAC/G,CAAC;IACF,CAAC;CAWD;AA5ID,gCA4IC","sourcesContent":["import { CorruptSaveError } from '../error/parser.error';\nimport { Alignment } from \"./alignment.enum\";\nimport { BinaryReadable } from \"./binary-readable.interface\";\n\n/** @public */\nexport abstract class ByteReader implements BinaryReadable {\n\n\tprotected bufferView!: DataView;\n\tprotected fileBuffer!: ArrayBuffer;\n\tpublic alignment: Alignment;\n\n\tprotected currentByte: number = 0;\n\tprotected handledByte: number = 0;\n\tprotected maxByte: number = 0;\n\n\tconstructor(fileBuffer: ArrayBuffer, alignment: Alignment) {\n\t\tthis.alignment = alignment;\n\t\tthis.reset(fileBuffer);\n\t}\n\n\t/**\n\t * Resets the reader on the given arraybuffer to start from the beginning.\n\t * @param newFileBuffer the new array buffer to be read.\n\t */\n\tpublic reset(newFileBuffer: ArrayBuffer) {\n\t\tthis.fileBuffer = newFileBuffer;\n\t\tthis.bufferView = new DataView(newFileBuffer, 0, this.fileBuffer.byteLength);\n\t\tthis.maxByte = newFileBuffer.byteLength;\n\t\tthis.currentByte = 0;\n\t\tthis.handledByte = 0;\n\t}\n\n\t/*\n\t * Byte Manipulation\n\t */\n\tpublic skipBytes(byteLength = 1): void {\n\t\tthis.currentByte += byteLength;\n\t\treturn;\n\t}\n\tpublic readByte(): number {\n\t\t// TODO can i not just readByte() ??\n\t\treturn parseInt(this.bufferView.getUint8(this.currentByte++).toString());\n\t}\n\tpublic readBytes(count: number): Uint8Array {\n\t\treturn new Uint8Array(new Array(count).fill(0).map(pl => this.bufferView.getUint8(this.currentByte++)));\n\t}\n\tpublic bytesToHexRepresentation(bytes: number[]): string[] {\n\t\treturn bytes.map(byte => ('0' + byte.toString(16)).slice(-2));\n\t}\n\tpublic readHex(byteLength: number, hexSeparator: string = ' '): string {\n\t\treturn this.bytesToHexRepresentation(Array.from(this.readBytes(byteLength))).join(hexSeparator);\n\t}\n\tpublic readInt8(): number {\n\t\tlet data = this.bufferView.getInt8(this.currentByte++);\n\t\treturn data;\n\t}\n\tpublic readUint8(): number {\n\t\tlet data = this.bufferView.getUint8(this.currentByte++);\n\t\treturn data;\n\t}\n\tpublic readInt16(): number {\n\t\tlet data = this.bufferView.getInt16(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 2;\n\t\treturn data;\n\t}\n\tpublic readUint16(): number {\n\t\tlet data = this.bufferView.getUint16(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 2;\n\t\treturn data;\n\t}\n\tpublic readInt32(): number {\n\t\tlet data = this.bufferView.getInt32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 4;\n\t\treturn data;\n\t}\n\tpublic readUint32(): number {\n\t\tlet data = this.bufferView.getUint32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 4;\n\t\treturn data;\n\t}\n\tpublic readLong(): bigint {\n\t\tlet data = this.bufferView.getBigInt64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 8;\n\t\treturn data;\n\t}\n\tpublic readInt64(): bigint {\n\t\treturn this.readLong();\n\t}\n\tpublic readUint64(): bigint {\n\t\tlet data = this.bufferView.getBigUint64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 8;\n\t\treturn data;\n\t}\n\n\tpublic readFloat32(): number {\n\t\tlet data = this.bufferView.getFloat32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 4;\n\t\treturn data;\n\t}\n\tpublic readDouble(): number {\n\t\tlet data = this.bufferView.getFloat64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\tthis.currentByte += 8;\n\t\treturn data;\n\t}\n\tpublic readString(): string {\n\t\tlet strLength = this.readInt32();\n\t\tlet startBytes = this.currentByte;\n\n\t\tif (strLength === 0) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// Range error!\n\t\tif (strLength > (this.bufferView.buffer.byteLength - this.currentByte)) {\n\t\t\tlet errorMessage = `Cannot read string of length ${strLength} at position ${this.currentByte} as it exceeds the end at ${this.bufferView.buffer.byteLength}`;\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\n\t\t// it uses UTF16 if text is non-ascii, even if it would fit into UTF8.\n\t\tif (strLength < 0) {\n\t\t\tconst string = new Array(-strLength - 1).fill('').map(c => String.fromCharCode(this.readUint16()));\n\t\t\tthis.currentByte += 2;\n\t\t\treturn string.join('');\n\t\t}\n\n\t\t//default UTF-8\n\t\ttry {\n\t\t\tconst string = new Array(strLength - 1).fill('').map(c => String.fromCharCode(this.readUint8()));\n\t\t\tthis.currentByte += 1;\n\t\t\treturn string.join('');\n\t\t}\n\t\tcatch (error) {\n\t\t\tthrow new CorruptSaveError(`Cannot read UTF8 string of length ${strLength} at position ${this.currentByte}.`);\n\t\t}\n\t}\n\n\tpublic getBufferPosition = (): number => this.currentByte;\n\n\tpublic getBufferSlice = (begin: number, end: number | undefined): ArrayBuffer => this.bufferView.buffer.slice(begin, end);\n\n\tpublic getBufferProgress = (): number => this.currentByte / this.bufferView.buffer.byteLength;\n\n\tpublic getBufferLength = (): number => this.bufferView.buffer.byteLength;\n\n\tpublic getBuffer = (): ArrayBuffer => this.bufferView.buffer;\n}"]}
@@ -2,7 +2,7 @@ import { ChunkSummary } from "./file.types";
2
2
  import { Blueprint } from "./satisfactory/blueprint/blueprint.types";
3
3
  import { SatisfactorySave } from "./satisfactory/save/satisfactory-save";
4
4
  export declare class Parser {
5
- static ParseSave(name: string, bytes: Uint8Array, options?: Partial<{
5
+ static ParseSave(name: string, bytes: ArrayBuffer, options?: Partial<{
6
6
  onDecompressedSaveBody: (buffer: ArrayBuffer) => void;
7
7
  onProgressCallback: (progress: number, msg?: string) => void;
8
8
  }>): SatisfactorySave;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAMzE,qBAAa,MAAM;WASJ,SAAS,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EACjB,OAAO,CAAC,EAAE,OAAO,CAAC;QACjB,sBAAsB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;QACtD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAC5D,CAAC,GACA,gBAAgB;WA8CL,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAC7C,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,EACtC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACpC,OAAO,CAAC,EAAE,OAAO,CAAC;QACjB,yBAAyB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;KACzD,CAAC,GACA,YAAY,EAAE;WAuBH,mBAAmB,CAChC,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,EAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;QACjB,iCAAiC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;KACjE,CAAC,GACA;QACF,oBAAoB,EAAE,YAAY,EAAE,CAAC;QACrC,gBAAgB,EAAE,WAAW,CAAA;KAC7B;WAuCa,mBAAmB,CAChC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;QACjB,2BAA2B,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;KAC1D,CAAC,GACA,SAAS;IAmCZ,OAAc,qBAAqB,QAAS,GAAG,WAAU,MAAM,KAAO,MAAM,CAQjE;CAEX"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAMzE,qBAAa,MAAM;WASJ,SAAS,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QACjB,sBAAsB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;QACtD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAC5D,CAAC,GACA,gBAAgB;WA8CL,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAC7C,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,EACtC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACpC,OAAO,CAAC,EAAE,OAAO,CAAC;QACjB,yBAAyB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;KACzD,CAAC,GACA,YAAY,EAAE;WAuBH,mBAAmB,CAChC,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,EAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;QACjB,iCAAiC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;KACjE,CAAC,GACA;QACF,oBAAoB,EAAE,YAAY,EAAE,CAAC;QACrC,gBAAgB,EAAE,WAAW,CAAA;KAC7B;WAuCa,mBAAmB,CAChC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;QACjB,2BAA2B,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;KAC1D,CAAC,GACA,SAAS;IAmCZ,OAAc,qBAAqB,QAAS,GAAG,WAAU,MAAM,KAAO,MAAM,CAQjE;CAEX"}
@@ -9,7 +9,7 @@ const save_reader_1 = require("./satisfactory/save/save-reader");
9
9
  const save_writer_1 = require("./satisfactory/save/save-writer");
10
10
  class Parser {
11
11
  static ParseSave(name, bytes, options) {
12
- const reader = new save_reader_1.SaveReader(bytes.buffer, options?.onProgressCallback);
12
+ const reader = new save_reader_1.SaveReader(bytes, options?.onProgressCallback);
13
13
  const header = reader.readHeader();
14
14
  const save = new satisfactory_save_1.SatisfactorySave(name, header);
15
15
  const roughSaveVersion = save_reader_1.SaveReader.GetRoughSaveVersion(header.saveVersion, header.saveHeaderType);
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { UnsupportedVersionError } from './error/parser.error';\nimport { ChunkSummary } from \"./file.types\";\nimport { BlueprintConfigReader, BlueprintReader } from \"./satisfactory/blueprint/blueprint-reader\";\nimport { BlueprintConfigWriter, BlueprintWriter } from \"./satisfactory/blueprint/blueprint-writer\";\nimport { Blueprint } from \"./satisfactory/blueprint/blueprint.types\";\nimport { SatisfactorySave } from \"./satisfactory/save/satisfactory-save\";\nimport { SaveReader } from './satisfactory/save/save-reader';\nimport { SaveWriter } from \"./satisfactory/save/save-writer\";\n\n\n/** @public */\nexport class Parser {\n\n\t/**\n\t * Parses a given binary buffer as {@link SatisfactorySave}\n\t * @param name the save name. It won't be serialized, so it does not matter how you name it.\n\t * @param bytes the actual binary buffer\n\t * @param options provides callbacks. Either on the decompressed save body or on reported progress as a number [0,1] with an occasional message.\n\t * @returns \n\t */\n\tpublic static ParseSave(\n\t\tname: string,\n\t\tbytes: Uint8Array,\n\t\toptions?: Partial<{\n\t\t\tonDecompressedSaveBody: (buffer: ArrayBuffer) => void,\n\t\t\tonProgressCallback: (progress: number, msg?: string) => void\n\t\t}>\n\t): SatisfactorySave {\n\n\t\tconst reader = new SaveReader(bytes.buffer, options?.onProgressCallback);\n\n\t\tconst header = reader.readHeader();\n\t\tconst save = new SatisfactorySave(name, header);\n\n\t\t// guard save version\n\t\tconst roughSaveVersion = SaveReader.GetRoughSaveVersion(header.saveVersion, header.saveHeaderType);\n\t\tif (roughSaveVersion === '<U6') {\n\t\t\tthrow new UnsupportedVersionError('Game Version < U6 is not supported.');\n\t\t} else if (roughSaveVersion === 'U6/U7') {\n\t\t\tthrow new UnsupportedVersionError('Game Version U6/U7 is not supported in this package version. Consider downgrading to the latest package version supporting it, which is 0.0.34');\n\t\t} else if (roughSaveVersion === 'U8') {\n\t\t\tthrow new UnsupportedVersionError('Game Version U8 is not supported in this package version. Consider downgrading to the latest package version supporting it, which is 0.3.7');\n\t\t}\n\n\t\t// inflate chunks\n\t\tconst inflateResult = reader.inflateChunks();\n\t\tsave.compressionInfo = reader.compressionInfo;\n\n\t\t// call callback on decompressed save body\n\t\tif (options?.onDecompressedSaveBody !== undefined) {\n\t\t\toptions.onDecompressedSaveBody(reader.getBuffer());\n\t\t}\n\n\t\t// save body validation hash\n\t\tsave.gridHash = reader.readSaveBodyHash();\n\n\t\t// parse grids\n\t\tsave.grids = reader.readGrids();\n\n\t\t// parse levels\n\t\tsave.levels = reader.readLevels();\n\n\t\treturn save;\n\t}\n\n\t/**\n\t * serializes a {@link SatisfactorySave} into binary and reports back on individual callbacks.\n\t * @param save the {@link SatisfactorySave} to serialize into binary.\n\t * @param options provides callbacks. onBinaryBeforeCompressing gets called on the binary save body before it is compressed.\n\t * onHeader gets called on the binary save header, which is always uncompressed.\n\t * onChunk gets called when a chunk of the compressed save body was generated. Often, files' save bodies consist of multiple chunks.\n\t * @returns a summary of the generated chunks.\n\t */\n\tpublic static WriteSave(save: SatisfactorySave,\n\t\tonHeader: (header: Uint8Array) => void,\n\t\tonChunk: (chunk: Uint8Array) => void,\n\t\toptions?: Partial<{\n\t\t\tonBinaryBeforeCompressing: (buffer: ArrayBuffer) => void,\n\t\t}>\n\t): ChunkSummary[] {\n\n\t\tconst writer = new SaveWriter();\n\n\t\tSaveWriter.WriteHeader(writer, save.header);\n\t\tconst posAfterHeader = writer.getBufferPosition();\n\n\t\tSaveWriter.WriteSaveBodyHash(writer, save.gridHash);\n\t\tSaveWriter.WriteGrids(writer, save.grids);\n\t\tSaveWriter.WriteLevels(writer, save, save.header.buildVersion);\n\n\t\twriter.endWriting();\n\t\tconst chunkSummary = writer.generateChunks(save.compressionInfo!, posAfterHeader, options?.onBinaryBeforeCompressing ?? (() => { }), onHeader, onChunk);\n\t\treturn chunkSummary;\n\t}\n\n\t/**\n\t * Writes a {@link Blueprint} object to binary. And reports back on individual callbacks.\n\t * @param blueprint the blueprint to be written\n\t * @param options onMainFileBinaryBeforeCompressing gets called back when the main blueprint file binary is ready before compressing.\n\t * onMainFileHeader gets called back when the main blueprint file header is ready. onMainFileChunk gets called back when a main blueprint file chunk is ready.\n\t * @returns a chunk summary of the main file generated chunks. Plus the binary data of the config file, since it is often very small.\n\t */\n\tpublic static WriteBlueprintFiles(\n\t\tblueprint: Blueprint,\n\t\tonMainFileHeader: (header: Uint8Array) => void,\n\t\tonMainFileChunk: (chunk: Uint8Array) => void,\n\t\toptions?: Partial<{\n\t\t\tonMainFileBinaryBeforeCompressing: (binary: ArrayBuffer) => void,\n\t\t}>\n\t): {\n\t\tmainFileChunkSummary: ChunkSummary[],\n\t\tconfigFileBinary: ArrayBuffer\n\t} {\n\n\t\t// write main blueprint file\n\t\tconst blueprintWriter = new BlueprintWriter();\n\t\tBlueprintWriter.SerializeHeader(blueprintWriter, blueprint.header);\n\t\tconst saveBodyPos = blueprintWriter.getBufferPosition();\n\t\tBlueprintWriter.SerializeObjects(blueprintWriter, blueprint.objects);\n\t\tblueprintWriter.endWriting();\n\t\tlet binaryChunks: Uint8Array[] = [];\n\t\tlet binaryHeader: Uint8Array;\n\t\tconst mainFileChunkSummary = blueprintWriter.generateChunks(\n\t\t\tblueprint.compressionInfo,\n\t\t\tsaveBodyPos,\n\t\t\t{\n\t\t\t\tonBinaryBeforeCompressing: options?.onMainFileBinaryBeforeCompressing ?? (() => { }),\n\t\t\t\tonHeader: onMainFileHeader,\n\t\t\t\tonChunk: onMainFileChunk\n\t\t\t}\n\t\t);\n\n\t\t// write config as well.\n\t\tconst configWriter = new BlueprintConfigWriter();\n\t\tBlueprintConfigWriter.SerializeConfig(configWriter, blueprint.config);\n\t\tconst configFileBinary = configWriter.endWriting();\n\n\t\treturn {\n\t\t\tmainFileChunkSummary,\n\t\t\tconfigFileBinary\n\t\t}\n\t}\n\n\t/**\n\t * Parses two buffers (main blueprint file + config file) into a {@link Blueprint object}\n\t * @param name the name of the blueprint, since it is not part of the binary data and has to be passed.\n\t * @param blueprintFile the main blueprint file \".sbp\"\n\t * @param blueprintConfigFile the config blueprint file \".sbpcfg\"\n\t * @param options provides callbacks. onDecompressedBlueprintBody gets called when the body of the main blueprint file is decompressed.\n\t * @returns \n\t */\n\tpublic static ParseBlueprintFiles(\n\t\tname: string,\n\t\tblueprintFile: Buffer,\n\t\tblueprintConfigFile: Buffer,\n\t\toptions?: Partial<{\n\t\t\tonDecompressedBlueprintBody: (buffer: ArrayBuffer) => void\n\t\t}>\n\t): Blueprint {\n\n\t\t// read config file\n\t\tconst blueprintConfigReader = new BlueprintConfigReader(new Uint8Array(blueprintConfigFile).buffer);\n\t\tconst config = BlueprintConfigReader.ParseConfig(blueprintConfigReader);\n\n\t\t// read actual blueprint file\n\t\tconst blueprintReader = new BlueprintReader(new Uint8Array(blueprintFile).buffer);\n\t\tconst header = BlueprintReader.ReadHeader(blueprintReader);\n\t\tconst inflateResult = blueprintReader.inflateChunks();\n\n\t\t// call back on decompressed body.\n\t\tif (options?.onDecompressedBlueprintBody !== undefined) {\n\t\t\toptions.onDecompressedBlueprintBody(inflateResult.inflatedData);\n\t\t}\n\n\t\tconst blueprintObjects = BlueprintReader.ParseObjects(blueprintReader);\n\t\tconst blueprint: Blueprint = {\n\t\t\tname,\n\t\t\tcompressionInfo: blueprintReader.compressionInfo,\n\t\t\theader: header,\n\t\t\tconfig,\n\t\t\tobjects: blueprintObjects\n\t\t};\n\t\treturn blueprint;\n\t}\n\n\t/**\n\t * It JSON.stringifies any parsed content safely. The original JSON.stringify() has some flaws that get in the way, so it is custom wrapped. The original has some problems:\n\t * 1. it cannot stringify bigints. So we help out by converting it into a string.\n\t * 2. It cannot distinguish between 0 and -0. But a float32 is encoded in a uint8Array for 0 to be [0,0,0,0] (0x00000000) and -0 to be [0,0,0,128] (0x00000080) in little endian.\n\t * @param obj basically anything that can be stringified\n\t * @param indent the indentation, just like with the real JSON stringify.\n\t * @returns a string that is safely stringified.\n\t */\n\tpublic static JSONStringifyModified = (obj: any, indent: number = 0): string =>\n\t\tJSON.stringify(obj, (key, value) => {\n\t\t\tif (typeof value === 'bigint') {\n\t\t\t\treturn value.toString();\n\t\t\t} else if (value === 0 && 1 / value < 0) {\t// -0\n\t\t\t\treturn '-0';\n\t\t\t}\n\t\t\treturn value;\n\t\t}, indent)\n\n}"]}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { UnsupportedVersionError } from './error/parser.error';\nimport { ChunkSummary } from \"./file.types\";\nimport { BlueprintConfigReader, BlueprintReader } from \"./satisfactory/blueprint/blueprint-reader\";\nimport { BlueprintConfigWriter, BlueprintWriter } from \"./satisfactory/blueprint/blueprint-writer\";\nimport { Blueprint } from \"./satisfactory/blueprint/blueprint.types\";\nimport { SatisfactorySave } from \"./satisfactory/save/satisfactory-save\";\nimport { SaveReader } from './satisfactory/save/save-reader';\nimport { SaveWriter } from \"./satisfactory/save/save-writer\";\n\n\n/** @public */\nexport class Parser {\n\n\t/**\n\t * Parses a given binary buffer as {@link SatisfactorySave}\n\t * @param name the save name. It won't be serialized, so it does not matter how you name it.\n\t * @param bytes the actual binary buffer\n\t * @param options provides callbacks. Either on the decompressed save body or on reported progress as a number [0,1] with an occasional message.\n\t * @returns \n\t */\n\tpublic static ParseSave(\n\t\tname: string,\n\t\tbytes: ArrayBuffer,\n\t\toptions?: Partial<{\n\t\t\tonDecompressedSaveBody: (buffer: ArrayBuffer) => void,\n\t\t\tonProgressCallback: (progress: number, msg?: string) => void\n\t\t}>\n\t): SatisfactorySave {\n\n\t\tconst reader = new SaveReader(bytes, options?.onProgressCallback);\n\n\t\tconst header = reader.readHeader();\n\t\tconst save = new SatisfactorySave(name, header);\n\n\t\t// guard save version\n\t\tconst roughSaveVersion = SaveReader.GetRoughSaveVersion(header.saveVersion, header.saveHeaderType);\n\t\tif (roughSaveVersion === '<U6') {\n\t\t\tthrow new UnsupportedVersionError('Game Version < U6 is not supported.');\n\t\t} else if (roughSaveVersion === 'U6/U7') {\n\t\t\tthrow new UnsupportedVersionError('Game Version U6/U7 is not supported in this package version. Consider downgrading to the latest package version supporting it, which is 0.0.34');\n\t\t} else if (roughSaveVersion === 'U8') {\n\t\t\tthrow new UnsupportedVersionError('Game Version U8 is not supported in this package version. Consider downgrading to the latest package version supporting it, which is 0.3.7');\n\t\t}\n\n\t\t// inflate chunks\n\t\tconst inflateResult = reader.inflateChunks();\n\t\tsave.compressionInfo = reader.compressionInfo;\n\n\t\t// call callback on decompressed save body\n\t\tif (options?.onDecompressedSaveBody !== undefined) {\n\t\t\toptions.onDecompressedSaveBody(reader.getBuffer());\n\t\t}\n\n\t\t// save body validation hash\n\t\tsave.gridHash = reader.readSaveBodyHash();\n\n\t\t// parse grids\n\t\tsave.grids = reader.readGrids();\n\n\t\t// parse levels\n\t\tsave.levels = reader.readLevels();\n\n\t\treturn save;\n\t}\n\n\t/**\n\t * serializes a {@link SatisfactorySave} into binary and reports back on individual callbacks.\n\t * @param save the {@link SatisfactorySave} to serialize into binary.\n\t * @param options provides callbacks. onBinaryBeforeCompressing gets called on the binary save body before it is compressed.\n\t * onHeader gets called on the binary save header, which is always uncompressed.\n\t * onChunk gets called when a chunk of the compressed save body was generated. Often, files' save bodies consist of multiple chunks.\n\t * @returns a summary of the generated chunks.\n\t */\n\tpublic static WriteSave(save: SatisfactorySave,\n\t\tonHeader: (header: Uint8Array) => void,\n\t\tonChunk: (chunk: Uint8Array) => void,\n\t\toptions?: Partial<{\n\t\t\tonBinaryBeforeCompressing: (buffer: ArrayBuffer) => void,\n\t\t}>\n\t): ChunkSummary[] {\n\n\t\tconst writer = new SaveWriter();\n\n\t\tSaveWriter.WriteHeader(writer, save.header);\n\t\tconst posAfterHeader = writer.getBufferPosition();\n\n\t\tSaveWriter.WriteSaveBodyHash(writer, save.gridHash);\n\t\tSaveWriter.WriteGrids(writer, save.grids);\n\t\tSaveWriter.WriteLevels(writer, save, save.header.buildVersion);\n\n\t\twriter.endWriting();\n\t\tconst chunkSummary = writer.generateChunks(save.compressionInfo!, posAfterHeader, options?.onBinaryBeforeCompressing ?? (() => { }), onHeader, onChunk);\n\t\treturn chunkSummary;\n\t}\n\n\t/**\n\t * Writes a {@link Blueprint} object to binary. And reports back on individual callbacks.\n\t * @param blueprint the blueprint to be written\n\t * @param options onMainFileBinaryBeforeCompressing gets called back when the main blueprint file binary is ready before compressing.\n\t * onMainFileHeader gets called back when the main blueprint file header is ready. onMainFileChunk gets called back when a main blueprint file chunk is ready.\n\t * @returns a chunk summary of the main file generated chunks. Plus the binary data of the config file, since it is often very small.\n\t */\n\tpublic static WriteBlueprintFiles(\n\t\tblueprint: Blueprint,\n\t\tonMainFileHeader: (header: Uint8Array) => void,\n\t\tonMainFileChunk: (chunk: Uint8Array) => void,\n\t\toptions?: Partial<{\n\t\t\tonMainFileBinaryBeforeCompressing: (binary: ArrayBuffer) => void,\n\t\t}>\n\t): {\n\t\tmainFileChunkSummary: ChunkSummary[],\n\t\tconfigFileBinary: ArrayBuffer\n\t} {\n\n\t\t// write main blueprint file\n\t\tconst blueprintWriter = new BlueprintWriter();\n\t\tBlueprintWriter.SerializeHeader(blueprintWriter, blueprint.header);\n\t\tconst saveBodyPos = blueprintWriter.getBufferPosition();\n\t\tBlueprintWriter.SerializeObjects(blueprintWriter, blueprint.objects);\n\t\tblueprintWriter.endWriting();\n\t\tlet binaryChunks: Uint8Array[] = [];\n\t\tlet binaryHeader: Uint8Array;\n\t\tconst mainFileChunkSummary = blueprintWriter.generateChunks(\n\t\t\tblueprint.compressionInfo,\n\t\t\tsaveBodyPos,\n\t\t\t{\n\t\t\t\tonBinaryBeforeCompressing: options?.onMainFileBinaryBeforeCompressing ?? (() => { }),\n\t\t\t\tonHeader: onMainFileHeader,\n\t\t\t\tonChunk: onMainFileChunk\n\t\t\t}\n\t\t);\n\n\t\t// write config as well.\n\t\tconst configWriter = new BlueprintConfigWriter();\n\t\tBlueprintConfigWriter.SerializeConfig(configWriter, blueprint.config);\n\t\tconst configFileBinary = configWriter.endWriting();\n\n\t\treturn {\n\t\t\tmainFileChunkSummary,\n\t\t\tconfigFileBinary\n\t\t}\n\t}\n\n\t/**\n\t * Parses two buffers (main blueprint file + config file) into a {@link Blueprint object}\n\t * @param name the name of the blueprint, since it is not part of the binary data and has to be passed.\n\t * @param blueprintFile the main blueprint file \".sbp\"\n\t * @param blueprintConfigFile the config blueprint file \".sbpcfg\"\n\t * @param options provides callbacks. onDecompressedBlueprintBody gets called when the body of the main blueprint file is decompressed.\n\t * @returns \n\t */\n\tpublic static ParseBlueprintFiles(\n\t\tname: string,\n\t\tblueprintFile: Buffer,\n\t\tblueprintConfigFile: Buffer,\n\t\toptions?: Partial<{\n\t\t\tonDecompressedBlueprintBody: (buffer: ArrayBuffer) => void\n\t\t}>\n\t): Blueprint {\n\n\t\t// read config file\n\t\tconst blueprintConfigReader = new BlueprintConfigReader(new Uint8Array(blueprintConfigFile).buffer);\n\t\tconst config = BlueprintConfigReader.ParseConfig(blueprintConfigReader);\n\n\t\t// read actual blueprint file\n\t\tconst blueprintReader = new BlueprintReader(new Uint8Array(blueprintFile).buffer);\n\t\tconst header = BlueprintReader.ReadHeader(blueprintReader);\n\t\tconst inflateResult = blueprintReader.inflateChunks();\n\n\t\t// call back on decompressed body.\n\t\tif (options?.onDecompressedBlueprintBody !== undefined) {\n\t\t\toptions.onDecompressedBlueprintBody(inflateResult.inflatedData);\n\t\t}\n\n\t\tconst blueprintObjects = BlueprintReader.ParseObjects(blueprintReader);\n\t\tconst blueprint: Blueprint = {\n\t\t\tname,\n\t\t\tcompressionInfo: blueprintReader.compressionInfo,\n\t\t\theader: header,\n\t\t\tconfig,\n\t\t\tobjects: blueprintObjects\n\t\t};\n\t\treturn blueprint;\n\t}\n\n\t/**\n\t * It JSON.stringifies any parsed content safely. The original JSON.stringify() has some flaws that get in the way, so it is custom wrapped. The original has some problems:\n\t * 1. it cannot stringify bigints. So we help out by converting it into a string.\n\t * 2. It cannot distinguish between 0 and -0. But a float32 is encoded in a uint8Array for 0 to be [0,0,0,0] (0x00000000) and -0 to be [0,0,0,128] (0x00000080) in little endian.\n\t * @param obj basically anything that can be stringified\n\t * @param indent the indentation, just like with the real JSON stringify.\n\t * @returns a string that is safely stringified.\n\t */\n\tpublic static JSONStringifyModified = (obj: any, indent: number = 0): string =>\n\t\tJSON.stringify(obj, (key, value) => {\n\t\t\tif (typeof value === 'bigint') {\n\t\t\t\treturn value.toString();\n\t\t\t} else if (value === 0 && 1 / value < 0) {\t// -0\n\t\t\t\treturn '-0';\n\t\t\t}\n\t\t\treturn value;\n\t\t}, indent)\n\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint-reader.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-reader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAmB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,UAAU,EAAgB,MAAM,6BAA6B,CAAC;AAIvE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAErE,qBAAa,eAAgB,SAAQ,UAAU;IAEvC,eAAe,EAAE,oBAAoB,CAI1C;gBAEU,eAAe,EAAE,WAAW;WAI1B,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe;IAiC1D,aAAa,IAAI,GAAG;WA6Eb,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE;IAmB9E,OAAO,CAAC,MAAM,CAAC,2BAA2B;CAmB1C;AAED,qBAAa,qBAAsB,SAAQ,UAAU;IAEjC,qBAAqB,EAAE,WAAW;gBAAlC,qBAAqB,EAAE,WAAW;IAI9C,KAAK,QAAO,eAAe,CAA4C;WAEhE,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe;CAoBlE"}
1
+ {"version":3,"file":"blueprint-reader.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-reader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAmB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,UAAU,EAAgB,MAAM,6BAA6B,CAAC;AAKvE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAErE,qBAAa,eAAgB,SAAQ,UAAU;IAEvC,eAAe,EAAE,oBAAoB,CAI1C;gBAEU,eAAe,EAAE,WAAW;WAI1B,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe;IA+B1D,aAAa,IAAI,GAAG;WA6Eb,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE;IAmB9E,OAAO,CAAC,MAAM,CAAC,2BAA2B;CAmB1C;AAED,qBAAa,qBAAsB,SAAQ,UAAU;IAEjC,qBAAqB,EAAE,WAAW;gBAAlC,qBAAqB,EAAE,WAAW;IAI9C,KAAK,QAAO,eAAe,CAA4C;WAEhE,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe;CAoBlE"}
@@ -13,6 +13,7 @@ const save_reader_1 = require("../save/save-reader");
13
13
  const SaveComponent_1 = require("../types/objects/SaveComponent");
14
14
  const SaveEntity_1 = require("../types/objects/SaveEntity");
15
15
  const col4_1 = require("../types/structs/col4");
16
+ const ObjectReference_1 = require("../types/structs/ObjectReference");
16
17
  const vec3_1 = require("../types/structs/vec3");
17
18
  class BlueprintReader extends byte_reader_class_1.ByteReader {
18
19
  constructor(bluePrintBuffer) {
@@ -28,18 +29,16 @@ class BlueprintReader extends byte_reader_class_1.ByteReader {
28
29
  const objectVersion = reader.readBytes(2 * 4);
29
30
  const dimensions = vec3_1.vec3.ParseInt(reader);
30
31
  let itemTypeCount = reader.readInt32();
31
- const itemCosts = new Array(itemTypeCount).fill(['', 0]);
32
+ const itemCosts = new Array(itemTypeCount).fill([{ levelName: '', pathName: '' }, 0]);
32
33
  for (let i = 0; i < itemTypeCount; i++) {
33
- reader.readInt32();
34
- let itemPathName = reader.readString();
34
+ let itemPathName = ObjectReference_1.ObjectReference.read(reader);
35
35
  let itemCount = reader.readInt32();
36
36
  itemCosts[i] = [itemPathName, itemCount];
37
37
  }
38
38
  let recipeCount = reader.readInt32();
39
- const recipeRefs = new Array(recipeCount).fill('');
39
+ const recipeRefs = new Array(recipeCount).fill({ levelName: '', pathName: '' });
40
40
  for (let i = 0; i < recipeCount; i++) {
41
- reader.readInt32();
42
- const recipeName = reader.readString();
41
+ const recipeName = ObjectReference_1.ObjectReference.read(reader);
43
42
  recipeRefs[i] = recipeName;
44
43
  }
45
44
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint-reader.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-reader.ts"],"names":[],"mappings":"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","sourcesContent":["import Pako from \"pako\";\nimport { Alignment } from \"../../byte/alignment.enum\";\nimport { BinaryReadable } from \"../../byte/binary-readable.interface\";\nimport { ByteReader } from \"../../byte/byte-reader.class\";\nimport { CorruptSaveError, ParserError } from \"../../error/parser.error\";\nimport { ChunkCompressionInfo } from \"../../file.types\";\nimport { Level } from '../save/level.class';\nimport { DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE } from \"../save/save-reader\";\nimport { SaveComponent, isSaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity, isSaveEntity } from \"../types/objects/SaveEntity\";\nimport { SaveObject } from \"../types/objects/SaveObject\";\nimport { col4 } from '../types/structs/col4';\nimport { vec3 } from '../types/structs/vec3';\nimport { BlueprintConfig, BlueprintHeader } from \"./blueprint.types\";\n\nexport class BlueprintReader extends ByteReader {\n\n\tpublic compressionInfo: ChunkCompressionInfo = {\n\t\tpackageFileTag: 0,\n\t\tmaxUncompressedChunkContentSize: 0,\n\t\tchunkHeaderSize: DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE\n\t};\n\n\tconstructor(bluePrintBuffer: ArrayBuffer) {\n\t\tsuper(bluePrintBuffer, Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic static ReadHeader(reader: BinaryReadable): BlueprintHeader {\n\t\tconst alwaysTwo = reader.readBytes(4); // 02 00 00 00 - always\n\t\tconst objectVersion = reader.readBytes(2 * 4); // 24 00 00 00, 7F 3B 03 00 - varies over updates - in 1.0 it's 46 and 0x7A960500.\n\t\tconst dimensions = vec3.ParseInt(reader); // 04 00 00 00, 04 00 00 00, 04 00 00 00 - dimensions in foundation size\n\n\n\t\t// list of item costs.\n\t\tlet itemTypeCount = reader.readInt32();\n\t\tconst itemCosts = new Array<[string, number]>(itemTypeCount).fill(['', 0]);\n\t\tfor (let i = 0; i < itemTypeCount; i++) {\n\t\t\treader.readInt32();\t// 0\n\t\t\tlet itemPathName = reader.readString();\n\t\t\tlet itemCount = reader.readInt32();\n\n\t\t\titemCosts[i] = [itemPathName, itemCount];\n\t\t}\n\n\t\t// list of recipes\n\t\tlet recipeCount = reader.readInt32();\n\t\tconst recipeRefs = new Array<string>(recipeCount).fill('');\n\t\tfor (let i = 0; i < recipeCount; i++) {\n\t\t\treader.readInt32();\t// 0\n\t\t\tconst recipeName = reader.readString();\n\t\t\trecipeRefs[i] = recipeName;\n\t\t}\n\n\t\treturn {\n\t\t\tdesignerDimension: dimensions,\n\t\t\trecipeReferences: recipeRefs,\n\t\t\titemCosts\n\t\t};\n\t}\n\n\tpublic inflateChunks(): any {\n\n\t\t// free memory\n\t\tthis.fileBuffer = this.fileBuffer.slice(this.currentByte);\n\n\t\tthis.handledByte = 0;\n\t\tthis.currentByte = 0;\n\t\tthis.maxByte = this.fileBuffer.byteLength;\n\n\t\tlet currentChunks = [];\n\t\tlet totalUncompressedBodySize = 0;\n\n\t\t// read while we can handle\n\t\twhile (this.handledByte < this.maxByte) {\n\n\t\t\t// Read chunk info size...\n\t\t\tlet chunkHeader = new DataView(this.fileBuffer.slice(0, this.compressionInfo.chunkHeaderSize));\n\t\t\tthis.currentByte = this.compressionInfo.chunkHeaderSize;\n\t\t\tthis.handledByte += this.compressionInfo.chunkHeaderSize;\n\n\t\t\tif (this.compressionInfo.packageFileTag <= 0) {\n\t\t\t\tthis.compressionInfo.packageFileTag = chunkHeader.getUint32(0, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\t}\n\t\t\tif (this.compressionInfo.maxUncompressedChunkContentSize <= 0) {\n\t\t\t\tthis.compressionInfo.maxUncompressedChunkContentSize = chunkHeader.getInt32(8, this.alignment === Alignment.LITTLE_ENDIAN); //00 00 02 00 = 131072\n\t\t\t}\n\n\t\t\tconst chunkCompressedLength = chunkHeader.getInt32(33, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\tconst chunkUncompressedLength = chunkHeader.getInt32(25, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\ttotalUncompressedBodySize += chunkUncompressedLength;\n\n\n\t\t\tconst currentChunkSize = chunkCompressedLength;\n\t\t\tlet currentChunk = this.fileBuffer.slice(this.currentByte, this.currentByte + currentChunkSize);\n\t\t\tthis.handledByte += currentChunkSize;\n\t\t\tthis.currentByte += currentChunkSize;\n\n\n\t\t\t// Free memory from previous chunk...\n\t\t\tthis.fileBuffer = this.fileBuffer.slice(this.currentByte);\n\t\t\tthis.currentByte = 0;\n\n\t\t\ttry {\n\t\t\t\t// Inflate current chunk\n\t\t\t\tlet currentInflatedChunk = null;\n\t\t\t\tcurrentInflatedChunk = Pako.inflate(currentChunk);\n\t\t\t\tcurrentChunks.push(currentInflatedChunk);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthrow new ParserError('ParserError', 'An error occurred while calling pako inflate.' + err);\n\t\t\t}\n\t\t}\n\n\n\t\t//TODO we can get rid of file buffer here.\n\n\t\t// Create one big chunk out of the little chunks\n\t\tlet newChunkLength = currentChunks.map<number>(cc => cc.length).reduce((prev, cur) => prev + cur);\n\t\tconst bigWholeChunk = new Uint8Array(newChunkLength);\n\t\tlet currentLength = 0;\n\t\tfor (let i = 0; i < currentChunks.length; i++) {\n\t\t\tbigWholeChunk.set(currentChunks[i], currentLength);\n\t\t\tcurrentLength += currentChunks[i].length;\n\t\t}\n\n\t\t// reset reader on this body content.\n\t\tthis.currentByte = 0;\n\t\tthis.maxByte = bigWholeChunk.buffer.byteLength;\n\t\tthis.bufferView = new DataView(bigWholeChunk.buffer);\n\n\t\treturn {\n\t\t\tnewChunkLength,\n\t\t\tnumChunks: currentChunks.length,\n\t\t\tinflatedData: bigWholeChunk\n\t\t};\n\t}\n\n\tpublic static ParseObjects(reader: ByteReader): (SaveEntity | SaveComponent)[] {\n\n\t\tconst totalBodyRestSize = reader.readInt32();\n\n\t\t// object headers\n\t\tconst objectHeadersBinarySize = reader.readInt32();\n\t\tlet objects: (SaveEntity | SaveComponent)[] = [];\n\t\tLevel.ReadAllObjectHeaders(reader, objects);\n\n\t\tconst someChecksumThing = reader.readInt32();\n\n\t\t// objects contents\n\t\tBlueprintReader.ReadBlueprintObjectContents(reader, objects, 0);\n\n\t\treader.getBufferPosition();\n\n\t\treturn objects;\n\t}\n\n\tprivate static ReadBlueprintObjectContents(reader: BinaryReadable, objectsList: SaveObject[], buildVersion: number): void {\n\t\tconst countEntities = reader.readInt32();\n\t\tfor (let i = 0; i < countEntities; i++) {\n\n\t\t\t// binary length\n\t\t\tconst len = reader.readInt32();\n\t\t\tif (len === 0) {\n\t\t\t\tthrow new CorruptSaveError(`check number is a wrong value (${len}). This normally indicates a corrupt entity or blueprint.`);\n\t\t\t}\n\n\t\t\tconst obj = objectsList[i];\n\t\t\tif (isSaveEntity(obj)) {\n\t\t\t\tSaveEntity.ParseData(obj, len, reader, buildVersion, obj.typePath);\n\t\t\t} else if (isSaveComponent(obj)) {\n\t\t\t\tSaveComponent.ParseData(obj, len, reader, buildVersion, obj.typePath);\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nexport class BlueprintConfigReader extends ByteReader {\n\n\tconstructor(public bluePrintConfigBuffer: ArrayBuffer) {\n\t\tsuper(bluePrintConfigBuffer, Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic parse = (): BlueprintConfig => BlueprintConfigReader.ParseConfig(this);\n\n\tpublic static ParseConfig(reader: BinaryReadable): BlueprintConfig {\n\t\tconst alwaysTwo = reader.readInt32();\n\t\tconst description = reader.readString();\n\t\tconst iconID = reader.readInt32();\n\t\tconst color = col4.ParseRGBA(reader);\n\n\t\tconst config: BlueprintConfig = {\n\t\t\tdescription,\n\t\t\tcolor,\n\t\t\ticonID,\n\t\t};\n\n\t\t// since 1.0, created blueprints have those two strings\n\t\tif (reader.getBufferPosition() < reader.getBufferLength()) {\n\t\t\tconfig.referencedIconLibrary = reader.readString();\n\t\t\tconfig.iconLibraryType = reader.readString();\n\t\t}\n\n\t\treturn config;\n\t}\n}\n"]}
1
+ {"version":3,"file":"blueprint-reader.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-reader.ts"],"names":[],"mappings":"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","sourcesContent":["import Pako from \"pako\";\nimport { Alignment } from \"../../byte/alignment.enum\";\nimport { BinaryReadable } from \"../../byte/binary-readable.interface\";\nimport { ByteReader } from \"../../byte/byte-reader.class\";\nimport { CorruptSaveError, ParserError } from \"../../error/parser.error\";\nimport { ChunkCompressionInfo } from \"../../file.types\";\nimport { Level } from '../save/level.class';\nimport { DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE } from \"../save/save-reader\";\nimport { SaveComponent, isSaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity, isSaveEntity } from \"../types/objects/SaveEntity\";\nimport { SaveObject } from \"../types/objects/SaveObject\";\nimport { col4 } from '../types/structs/col4';\nimport { ObjectReference } from '../types/structs/ObjectReference';\nimport { vec3 } from '../types/structs/vec3';\nimport { BlueprintConfig, BlueprintHeader } from \"./blueprint.types\";\n\nexport class BlueprintReader extends ByteReader {\n\n\tpublic compressionInfo: ChunkCompressionInfo = {\n\t\tpackageFileTag: 0,\n\t\tmaxUncompressedChunkContentSize: 0,\n\t\tchunkHeaderSize: DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE\n\t};\n\n\tconstructor(bluePrintBuffer: ArrayBuffer) {\n\t\tsuper(bluePrintBuffer, Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic static ReadHeader(reader: BinaryReadable): BlueprintHeader {\n\t\tconst alwaysTwo = reader.readBytes(4); // 02 00 00 00 - always\n\t\tconst objectVersion = reader.readBytes(2 * 4); // 24 00 00 00, 7F 3B 03 00 - varies over updates - in 1.0 it's 46 and 0x7A960500.\n\t\tconst dimensions = vec3.ParseInt(reader); // 04 00 00 00, 04 00 00 00, 04 00 00 00 - dimensions in foundation size\n\n\n\t\t// list of item costs.\n\t\tlet itemTypeCount = reader.readInt32();\n\t\tconst itemCosts = new Array<[ObjectReference, number]>(itemTypeCount).fill([{ levelName: '', pathName: '' }, 0]);\n\t\tfor (let i = 0; i < itemTypeCount; i++) {\n\t\t\tlet itemPathName = ObjectReference.read(reader);\n\t\t\tlet itemCount = reader.readInt32();\n\n\t\t\titemCosts[i] = [itemPathName, itemCount];\n\t\t}\n\n\t\t// list of recipes\n\t\tlet recipeCount = reader.readInt32();\n\t\tconst recipeRefs = new Array<ObjectReference>(recipeCount).fill({ levelName: '', pathName: '' });\n\t\tfor (let i = 0; i < recipeCount; i++) {\n\t\t\tconst recipeName = ObjectReference.read(reader);\n\t\t\trecipeRefs[i] = recipeName;\n\t\t}\n\n\t\treturn {\n\t\t\tdesignerDimension: dimensions,\n\t\t\trecipeReferences: recipeRefs,\n\t\t\titemCosts\n\t\t};\n\t}\n\n\tpublic inflateChunks(): any {\n\n\t\t// free memory\n\t\tthis.fileBuffer = this.fileBuffer.slice(this.currentByte);\n\n\t\tthis.handledByte = 0;\n\t\tthis.currentByte = 0;\n\t\tthis.maxByte = this.fileBuffer.byteLength;\n\n\t\tlet currentChunks = [];\n\t\tlet totalUncompressedBodySize = 0;\n\n\t\t// read while we can handle\n\t\twhile (this.handledByte < this.maxByte) {\n\n\t\t\t// Read chunk info size...\n\t\t\tlet chunkHeader = new DataView(this.fileBuffer.slice(0, this.compressionInfo.chunkHeaderSize));\n\t\t\tthis.currentByte = this.compressionInfo.chunkHeaderSize;\n\t\t\tthis.handledByte += this.compressionInfo.chunkHeaderSize;\n\n\t\t\tif (this.compressionInfo.packageFileTag <= 0) {\n\t\t\t\tthis.compressionInfo.packageFileTag = chunkHeader.getUint32(0, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\t}\n\t\t\tif (this.compressionInfo.maxUncompressedChunkContentSize <= 0) {\n\t\t\t\tthis.compressionInfo.maxUncompressedChunkContentSize = chunkHeader.getInt32(8, this.alignment === Alignment.LITTLE_ENDIAN); //00 00 02 00 = 131072\n\t\t\t}\n\n\t\t\tconst chunkCompressedLength = chunkHeader.getInt32(33, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\tconst chunkUncompressedLength = chunkHeader.getInt32(25, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\ttotalUncompressedBodySize += chunkUncompressedLength;\n\n\n\t\t\tconst currentChunkSize = chunkCompressedLength;\n\t\t\tlet currentChunk = this.fileBuffer.slice(this.currentByte, this.currentByte + currentChunkSize);\n\t\t\tthis.handledByte += currentChunkSize;\n\t\t\tthis.currentByte += currentChunkSize;\n\n\n\t\t\t// Free memory from previous chunk...\n\t\t\tthis.fileBuffer = this.fileBuffer.slice(this.currentByte);\n\t\t\tthis.currentByte = 0;\n\n\t\t\ttry {\n\t\t\t\t// Inflate current chunk\n\t\t\t\tlet currentInflatedChunk = null;\n\t\t\t\tcurrentInflatedChunk = Pako.inflate(currentChunk);\n\t\t\t\tcurrentChunks.push(currentInflatedChunk);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthrow new ParserError('ParserError', 'An error occurred while calling pako inflate.' + err);\n\t\t\t}\n\t\t}\n\n\n\t\t//TODO we can get rid of file buffer here.\n\n\t\t// Create one big chunk out of the little chunks\n\t\tlet newChunkLength = currentChunks.map<number>(cc => cc.length).reduce((prev, cur) => prev + cur);\n\t\tconst bigWholeChunk = new Uint8Array(newChunkLength);\n\t\tlet currentLength = 0;\n\t\tfor (let i = 0; i < currentChunks.length; i++) {\n\t\t\tbigWholeChunk.set(currentChunks[i], currentLength);\n\t\t\tcurrentLength += currentChunks[i].length;\n\t\t}\n\n\t\t// reset reader on this body content.\n\t\tthis.currentByte = 0;\n\t\tthis.maxByte = bigWholeChunk.buffer.byteLength;\n\t\tthis.bufferView = new DataView(bigWholeChunk.buffer);\n\n\t\treturn {\n\t\t\tnewChunkLength,\n\t\t\tnumChunks: currentChunks.length,\n\t\t\tinflatedData: bigWholeChunk\n\t\t};\n\t}\n\n\tpublic static ParseObjects(reader: ByteReader): (SaveEntity | SaveComponent)[] {\n\n\t\tconst totalBodyRestSize = reader.readInt32();\n\n\t\t// object headers\n\t\tconst objectHeadersBinarySize = reader.readInt32();\n\t\tlet objects: (SaveEntity | SaveComponent)[] = [];\n\t\tLevel.ReadAllObjectHeaders(reader, objects);\n\n\t\tconst someChecksumThing = reader.readInt32();\n\n\t\t// objects contents\n\t\tBlueprintReader.ReadBlueprintObjectContents(reader, objects, 0);\n\n\t\treader.getBufferPosition();\n\n\t\treturn objects;\n\t}\n\n\tprivate static ReadBlueprintObjectContents(reader: BinaryReadable, objectsList: SaveObject[], buildVersion: number): void {\n\t\tconst countEntities = reader.readInt32();\n\t\tfor (let i = 0; i < countEntities; i++) {\n\n\t\t\t// binary length\n\t\t\tconst len = reader.readInt32();\n\t\t\tif (len === 0) {\n\t\t\t\tthrow new CorruptSaveError(`check number is a wrong value (${len}). This normally indicates a corrupt entity or blueprint.`);\n\t\t\t}\n\n\t\t\tconst obj = objectsList[i];\n\t\t\tif (isSaveEntity(obj)) {\n\t\t\t\tSaveEntity.ParseData(obj, len, reader, buildVersion, obj.typePath);\n\t\t\t} else if (isSaveComponent(obj)) {\n\t\t\t\tSaveComponent.ParseData(obj, len, reader, buildVersion, obj.typePath);\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nexport class BlueprintConfigReader extends ByteReader {\n\n\tconstructor(public bluePrintConfigBuffer: ArrayBuffer) {\n\t\tsuper(bluePrintConfigBuffer, Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic parse = (): BlueprintConfig => BlueprintConfigReader.ParseConfig(this);\n\n\tpublic static ParseConfig(reader: BinaryReadable): BlueprintConfig {\n\t\tconst alwaysTwo = reader.readInt32();\n\t\tconst description = reader.readString();\n\t\tconst iconID = reader.readInt32();\n\t\tconst color = col4.ParseRGBA(reader);\n\n\t\tconst config: BlueprintConfig = {\n\t\t\tdescription,\n\t\t\tcolor,\n\t\t\ticonID,\n\t\t};\n\n\t\t// since 1.0, created blueprints have those two strings\n\t\tif (reader.getBufferPosition() < reader.getBufferLength()) {\n\t\t\tconfig.referencedIconLibrary = reader.readString();\n\t\t\tconfig.iconLibraryType = reader.readString();\n\t\t}\n\n\t\treturn config;\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint-writer.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-writer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAAE,aAAa,EAAmB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,UAAU,EAAgB,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIrE,qBAAa,eAAgB,SAAQ,UAAU;;WAMhC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAgCzE,cAAc,CACpB,eAAe,EAAE,oBAAoB,EACrC,cAAc,EAAE,MAAM,EAEtB,OAAO,EAAE,OAAO,CAAC;QAChB,yBAAyB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;QACzD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;QACvC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;KACrC,CAAC,GACA,YAAY,EAAE;WAkBH,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE,GAAG,IAAI;WAYnF,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAoBjJ;AAED,qBAAa,qBAAsB,SAAQ,UAAU;;WAMtC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;CAQhF"}
1
+ {"version":3,"file":"blueprint-writer.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-writer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAAE,aAAa,EAAmB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,UAAU,EAAgB,MAAM,6BAA6B,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIrE,qBAAa,eAAgB,SAAQ,UAAU;;WAMhC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IA8BzE,cAAc,CACpB,eAAe,EAAE,oBAAoB,EACrC,cAAc,EAAE,MAAM,EAEtB,OAAO,EAAE,OAAO,CAAC;QAChB,yBAAyB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;QACzD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;QACvC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;KACrC,CAAC,GACA,YAAY,EAAE;WAkBH,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE,GAAG,IAAI;WAYnF,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAoBjJ;AAED,qBAAa,qBAAsB,SAAQ,UAAU;;WAMtC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;CAQhF"}
@@ -9,6 +9,7 @@ const save_writer_1 = require("../save/save-writer");
9
9
  const SaveComponent_1 = require("../types/objects/SaveComponent");
10
10
  const SaveEntity_1 = require("../types/objects/SaveEntity");
11
11
  const col4_1 = require("../types/structs/col4");
12
+ const ObjectReference_1 = require("../types/structs/ObjectReference");
12
13
  class BlueprintWriter extends byte_writer_class_1.ByteWriter {
13
14
  constructor() {
14
15
  super(alignment_enum_1.Alignment.LITTLE_ENDIAN);
@@ -27,14 +28,12 @@ class BlueprintWriter extends byte_writer_class_1.ByteWriter {
27
28
  writer.writeInt32(dimensions[2]);
28
29
  writer.writeInt32(header.itemCosts.length);
29
30
  for (const itemCost of header.itemCosts) {
30
- writer.writeInt32(0);
31
- writer.writeString(itemCost[0]);
31
+ ObjectReference_1.ObjectReference.write(writer, itemCost[0]);
32
32
  writer.writeInt32(itemCost[1]);
33
33
  }
34
34
  writer.writeInt32(header.recipeReferences.length);
35
35
  for (const recipeReference of header.recipeReferences) {
36
- writer.writeInt32(0);
37
- writer.writeString(recipeReference);
36
+ ObjectReference_1.ObjectReference.write(writer, recipeReference);
38
37
  }
39
38
  }
40
39
  generateChunks(compressionInfo, posAfterHeader, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint-writer.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-writer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Alignment } from \"../../byte/alignment.enum\";\nimport { ByteWriter } from \"../../byte/byte-writer.class\";\nimport { ParserError } from \"../../error/parser.error\";\nimport { ChunkCompressionInfo, ChunkSummary } from \"../../file.types\";\nimport { Level } from '../save/level.class';\nimport { SaveWriter } from \"../save/save-writer\";\nimport { SaveComponent, isSaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity, isSaveEntity } from \"../types/objects/SaveEntity\";\nimport { col4 } from '../types/structs/col4';\nimport { BlueprintConfig, BlueprintHeader } from \"./blueprint.types\";\n\n\n\nexport class BlueprintWriter extends ByteWriter {\n\n\tconstructor() {\n\t\tsuper(Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic static SerializeHeader(writer: ByteWriter, header: BlueprintHeader): void {\n\t\twriter.writeInt32(2); // 2\n\t\twriter.writeInt32(46); // TODO - changes with game updates. object version. - 46 in 1.0\n\t\twriter.writeInt32(366202); // TODO - some header build version? changes with game updates. // 0xECCF0300 // 0xE6060400 //0x7A960500 in 1.0\n\n\t\tlet dimensions = [\n\t\t\theader.designerDimension?.x ?? 4,\n\t\t\theader.designerDimension?.y ?? 4,\n\t\t\theader.designerDimension?.z ?? 4,\n\t\t].map(dim => dim < 4 ? 4 : dim); // dont let smaller values than 4 slip through.\n\n\t\t// designer dimensions in foundations.\n\t\twriter.writeInt32(dimensions[0]);\n\t\twriter.writeInt32(dimensions[1]);\n\t\twriter.writeInt32(dimensions[2]);\n\n\t\t// list of item costs.\n\t\twriter.writeInt32(header.itemCosts.length);\n\t\tfor (const itemCost of header.itemCosts) {\n\t\t\twriter.writeInt32(0);\n\t\t\twriter.writeString(itemCost[0]);\n\t\t\twriter.writeInt32(itemCost[1]);\n\t\t}\n\n\t\t// list of recipes.\n\t\twriter.writeInt32(header.recipeReferences.length);\n\t\tfor (const recipeReference of header.recipeReferences) {\n\t\t\twriter.writeInt32(0);\n\t\t\twriter.writeString(recipeReference);\n\t\t}\n\t}\n\n\tpublic generateChunks(\n\t\tcompressionInfo: ChunkCompressionInfo,\n\t\tposAfterHeader: number,\n\n\t\toptions: Partial<{\n\t\t\tonBinaryBeforeCompressing: (binary: ArrayBuffer) => void,\n\t\t\tonHeader: (header: Uint8Array) => void,\n\t\t\tonChunk: (chunk: Uint8Array) => void,\n\t\t}>\n\t): ChunkSummary[] {\n\n\t\tif (posAfterHeader <= 0) {\n\t\t\tthrow new ParserError('ParserError', 'seems like this buffer has no header. Please write the header first before you can generate chunks.');\n\t\t}\n\n\t\t// send plain header first.\n\t\tconst header = new Uint8Array(this.bufferArray.slice(0, posAfterHeader));\n\t\tif (options.onHeader !== undefined) {\n\t\t\toptions.onHeader(header);\n\t\t}\n\n\t\t// create save body\n\t\tthis.bufferArray = this.bufferArray.slice(posAfterHeader);\n\t\tconst chunkSummary = SaveWriter.GenerateCompressedChunksFromData(this.bufferArray, compressionInfo, options.onBinaryBeforeCompressing ?? (() => { }), options.onChunk ?? (() => { }), this.alignment);\n\t\treturn chunkSummary;\n\t}\n\n\tpublic static SerializeObjects(writer: ByteWriter, objects: (SaveEntity | SaveComponent)[]): void {\n\n\t\t// object headers\n\t\tconst headersLenIndicator = writer.getBufferPosition();\n\t\twriter.writeInt32(0);\n\t\tLevel.SerializeAllObjectHeaders(writer, objects);\n\t\twriter.writeBinarySizeFromPosition(headersLenIndicator, headersLenIndicator + 4);\n\n\t\t// objects contents\n\t\tBlueprintWriter.SerializeObjectContents(writer, objects, 0, '');\n\t}\n\n\tpublic static SerializeObjectContents(writer: ByteWriter, objects: (SaveEntity | SaveComponent)[], buildVersion: number, levelName: string): void {\n\t\tconst lenIndicatorEntities = writer.getBufferPosition();\n\t\twriter.writeInt32(0);\n\n\t\twriter.writeInt32(objects.length);\n\t\tfor (const obj of objects) {\n\n\t\t\tconst lenReplacementPosition = writer.getBufferPosition();\n\t\t\twriter.writeInt32(0);\n\n\t\t\tif (isSaveEntity(obj)) {\n\t\t\t\tSaveEntity.SerializeData(writer, obj, buildVersion);\n\t\t\t} else if (isSaveComponent(obj)) {\n\t\t\t\tSaveComponent.SerializeData(writer, obj, buildVersion);\n\t\t\t}\n\n\t\t\twriter.writeBinarySizeFromPosition(lenReplacementPosition, lenReplacementPosition + 4);\n\t\t}\n\t\twriter.writeBinarySizeFromPosition(lenIndicatorEntities, lenIndicatorEntities + 4);\n\t}\n}\n\nexport class BlueprintConfigWriter extends ByteWriter {\n\n\tconstructor() {\n\t\tsuper(Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic static SerializeConfig(writer: ByteWriter, config: BlueprintConfig): void {\n\t\twriter.writeInt32(2); // unknown, seems to always be 02.\n\t\twriter.writeString(config.description);\n\t\twriter.writeInt32(config.iconID);\n\t\tcol4.SerializeRGBA(writer, config.color);\n\t\twriter.writeString(config.referencedIconLibrary ?? '');\n\t\twriter.writeString(config.iconLibraryType ?? '');\n\t}\n}"]}
1
+ {"version":3,"file":"blueprint-writer.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-writer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Alignment } from \"../../byte/alignment.enum\";\nimport { ByteWriter } from \"../../byte/byte-writer.class\";\nimport { ParserError } from \"../../error/parser.error\";\nimport { ChunkCompressionInfo, ChunkSummary } from \"../../file.types\";\nimport { Level } from '../save/level.class';\nimport { SaveWriter } from \"../save/save-writer\";\nimport { SaveComponent, isSaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity, isSaveEntity } from \"../types/objects/SaveEntity\";\nimport { col4 } from '../types/structs/col4';\nimport { ObjectReference } from '../types/structs/ObjectReference';\nimport { BlueprintConfig, BlueprintHeader } from \"./blueprint.types\";\n\n\n\nexport class BlueprintWriter extends ByteWriter {\n\n\tconstructor() {\n\t\tsuper(Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic static SerializeHeader(writer: ByteWriter, header: BlueprintHeader): void {\n\t\twriter.writeInt32(2); // 2\n\t\twriter.writeInt32(46); // TODO - changes with game updates. object version. - 46 in 1.0\n\t\twriter.writeInt32(366202); // TODO - some header build version? changes with game updates. // 0xECCF0300 // 0xE6060400 //0x7A960500 in 1.0\n\n\t\tlet dimensions = [\n\t\t\theader.designerDimension?.x ?? 4,\n\t\t\theader.designerDimension?.y ?? 4,\n\t\t\theader.designerDimension?.z ?? 4,\n\t\t].map(dim => dim < 4 ? 4 : dim); // dont let smaller values than 4 slip through.\n\n\t\t// designer dimensions in foundations.\n\t\twriter.writeInt32(dimensions[0]);\n\t\twriter.writeInt32(dimensions[1]);\n\t\twriter.writeInt32(dimensions[2]);\n\n\t\t// list of item costs.\n\t\twriter.writeInt32(header.itemCosts.length);\n\t\tfor (const itemCost of header.itemCosts) {\n\t\t\tObjectReference.write(writer, itemCost[0])\n\t\t\twriter.writeInt32(itemCost[1]);\n\t\t}\n\n\t\t// list of recipes.\n\t\twriter.writeInt32(header.recipeReferences.length);\n\t\tfor (const recipeReference of header.recipeReferences) {\n\t\t\tObjectReference.write(writer, recipeReference);\n\t\t}\n\t}\n\n\tpublic generateChunks(\n\t\tcompressionInfo: ChunkCompressionInfo,\n\t\tposAfterHeader: number,\n\n\t\toptions: Partial<{\n\t\t\tonBinaryBeforeCompressing: (binary: ArrayBuffer) => void,\n\t\t\tonHeader: (header: Uint8Array) => void,\n\t\t\tonChunk: (chunk: Uint8Array) => void,\n\t\t}>\n\t): ChunkSummary[] {\n\n\t\tif (posAfterHeader <= 0) {\n\t\t\tthrow new ParserError('ParserError', 'seems like this buffer has no header. Please write the header first before you can generate chunks.');\n\t\t}\n\n\t\t// send plain header first.\n\t\tconst header = new Uint8Array(this.bufferArray.slice(0, posAfterHeader));\n\t\tif (options.onHeader !== undefined) {\n\t\t\toptions.onHeader(header);\n\t\t}\n\n\t\t// create save body\n\t\tthis.bufferArray = this.bufferArray.slice(posAfterHeader);\n\t\tconst chunkSummary = SaveWriter.GenerateCompressedChunksFromData(this.bufferArray, compressionInfo, options.onBinaryBeforeCompressing ?? (() => { }), options.onChunk ?? (() => { }), this.alignment);\n\t\treturn chunkSummary;\n\t}\n\n\tpublic static SerializeObjects(writer: ByteWriter, objects: (SaveEntity | SaveComponent)[]): void {\n\n\t\t// object headers\n\t\tconst headersLenIndicator = writer.getBufferPosition();\n\t\twriter.writeInt32(0);\n\t\tLevel.SerializeAllObjectHeaders(writer, objects);\n\t\twriter.writeBinarySizeFromPosition(headersLenIndicator, headersLenIndicator + 4);\n\n\t\t// objects contents\n\t\tBlueprintWriter.SerializeObjectContents(writer, objects, 0, '');\n\t}\n\n\tpublic static SerializeObjectContents(writer: ByteWriter, objects: (SaveEntity | SaveComponent)[], buildVersion: number, levelName: string): void {\n\t\tconst lenIndicatorEntities = writer.getBufferPosition();\n\t\twriter.writeInt32(0);\n\n\t\twriter.writeInt32(objects.length);\n\t\tfor (const obj of objects) {\n\n\t\t\tconst lenReplacementPosition = writer.getBufferPosition();\n\t\t\twriter.writeInt32(0);\n\n\t\t\tif (isSaveEntity(obj)) {\n\t\t\t\tSaveEntity.SerializeData(writer, obj, buildVersion);\n\t\t\t} else if (isSaveComponent(obj)) {\n\t\t\t\tSaveComponent.SerializeData(writer, obj, buildVersion);\n\t\t\t}\n\n\t\t\twriter.writeBinarySizeFromPosition(lenReplacementPosition, lenReplacementPosition + 4);\n\t\t}\n\t\twriter.writeBinarySizeFromPosition(lenIndicatorEntities, lenIndicatorEntities + 4);\n\t}\n}\n\nexport class BlueprintConfigWriter extends ByteWriter {\n\n\tconstructor() {\n\t\tsuper(Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic static SerializeConfig(writer: ByteWriter, config: BlueprintConfig): void {\n\t\twriter.writeInt32(2); // unknown, seems to always be 02.\n\t\twriter.writeString(config.description);\n\t\twriter.writeInt32(config.iconID);\n\t\tcol4.SerializeRGBA(writer, config.color);\n\t\twriter.writeString(config.referencedIconLibrary ?? '');\n\t\twriter.writeString(config.iconLibraryType ?? '');\n\t}\n}"]}
@@ -2,6 +2,7 @@ import { ChunkCompressionInfo } from "../../file.types";
2
2
  import { SaveComponent } from "../types/objects/SaveComponent";
3
3
  import { SaveEntity } from "../types/objects/SaveEntity";
4
4
  import { col4 } from '../types/structs/col4';
5
+ import { ObjectReference } from '../types/structs/ObjectReference';
5
6
  import { vec3 } from '../types/structs/vec3';
6
7
  export interface BlueprintConfig {
7
8
  description: string;
@@ -12,8 +13,8 @@ export interface BlueprintConfig {
12
13
  }
13
14
  export type BlueprintHeader = {
14
15
  designerDimension?: vec3;
15
- itemCosts: [string, number][];
16
- recipeReferences: string[];
16
+ itemCosts: [ObjectReference, number][];
17
+ recipeReferences: ObjectReference[];
17
18
  };
18
19
  export interface Blueprint {
19
20
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint.types.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAG7C,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,MAAM,eAAe,GAAG;IAC1B,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAA;AAGD,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,oBAAoB,CAAC;IACtC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE,CAAC;CAC3C"}
1
+ {"version":3,"file":"blueprint.types.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAG7C,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,MAAM,eAAe,GAAG;IAC1B,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,SAAS,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;IACvC,gBAAgB,EAAE,eAAe,EAAE,CAAC;CACvC,CAAA;AAGD,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,oBAAoB,CAAC;IACtC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE,CAAC;CAC3C"}
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint.types.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint.types.ts"],"names":[],"mappings":"","sourcesContent":["import { ChunkCompressionInfo } from \"../../file.types\";\nimport { SaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity } from \"../types/objects/SaveEntity\";\nimport { col4 } from '../types/structs/col4';\nimport { vec3 } from '../types/structs/vec3';\n\n/** @public */\nexport interface BlueprintConfig {\n description: string;\n color: col4;\n iconID: number;\n referencedIconLibrary?: string;\n iconLibraryType?: string;\n}\n\n/** @public */\nexport type BlueprintHeader = {\n designerDimension?: vec3;\n itemCosts: [string, number][];\n recipeReferences: string[];\n}\n\n/** @public */\nexport interface Blueprint {\n name: string;\n compressionInfo: ChunkCompressionInfo;\n header: BlueprintHeader;\n config: BlueprintConfig;\n objects: (SaveEntity | SaveComponent)[];\n}\n"]}
1
+ {"version":3,"file":"blueprint.types.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint.types.ts"],"names":[],"mappings":"","sourcesContent":["import { ChunkCompressionInfo } from \"../../file.types\";\nimport { SaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity } from \"../types/objects/SaveEntity\";\nimport { col4 } from '../types/structs/col4';\nimport { ObjectReference } from '../types/structs/ObjectReference';\nimport { vec3 } from '../types/structs/vec3';\n\n/** @public */\nexport interface BlueprintConfig {\n description: string;\n color: col4;\n iconID: number;\n referencedIconLibrary?: string;\n iconLibraryType?: string;\n}\n\n/** @public */\nexport type BlueprintHeader = {\n designerDimension?: vec3;\n itemCosts: [ObjectReference, number][];\n recipeReferences: ObjectReference[];\n}\n\n/** @public */\nexport interface Blueprint {\n name: string;\n compressionInfo: ChunkCompressionInfo;\n header: BlueprintHeader;\n config: BlueprintConfig;\n objects: (SaveEntity | SaveComponent)[];\n}\n"]}
@@ -1698,6 +1698,10 @@ export declare const EDIT: {
1698
1698
  readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/DroneStation/BP_DroneTransport.BP_DroneTransport_C";
1699
1699
  };
1700
1700
  };
1701
+ readonly DROP_POD: {
1702
+ readonly TYPE_PATH: "/Game/FactoryGame/World/Benefit/DropPod/BP_DropPod.BP_DropPod_C";
1703
+ readonly CLASS_NAME: "BP_DropPod_C";
1704
+ };
1701
1705
  readonly VEHICLE: {
1702
1706
  readonly DRIVING_TARGET_LIST: {
1703
1707
  readonly TYPE_PATH: "/Script/FactoryGame.FGDrivingTargetList";
@@ -1 +1 @@
1
- {"version":3,"file":"edit-constants.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/edit/edit-constants.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2zEP,CAAC"}
1
+ {"version":3,"file":"edit-constants.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/edit/edit-constants.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+zEP,CAAC"}
@@ -1704,6 +1704,10 @@ exports.EDIT = {
1704
1704
  TYPE_PATH: '/Game/FactoryGame/Buildable/Factory/DroneStation/BP_DroneTransport.BP_DroneTransport_C'
1705
1705
  },
1706
1706
  },
1707
+ DROP_POD: {
1708
+ TYPE_PATH: '/Game/FactoryGame/World/Benefit/DropPod/BP_DropPod.BP_DropPod_C',
1709
+ CLASS_NAME: 'BP_DropPod_C'
1710
+ },
1707
1711
  VEHICLE: {
1708
1712
  DRIVING_TARGET_LIST: {
1709
1713
  TYPE_PATH: '/Script/FactoryGame.FGDrivingTargetList'