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