@etothepii/satisfactory-file-parser 0.1.26 → 0.1.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/build/index.js +60 -25
  2. package/build/parser/byte/alignment.enum.js +5 -2
  3. package/build/parser/byte/binary-operable.interface.js +2 -1
  4. package/build/parser/byte/binary-readable.interface.js +2 -1
  5. package/build/parser/byte/byte-reader.class.js +14 -10
  6. package/build/parser/byte/byte-writer.class.js +13 -10
  7. package/build/parser/error/parser.error.js +15 -6
  8. package/build/parser/file.types.js +5 -2
  9. package/build/parser/parser.js +26 -23
  10. package/build/parser/satisfactory/blueprint/blueprint-reader.js +36 -28
  11. package/build/parser/satisfactory/blueprint/blueprint-writer.js +25 -20
  12. package/build/parser/satisfactory/blueprint/blueprint.types.js +2 -1
  13. package/build/parser/satisfactory/objects/DataFields.js +83 -79
  14. package/build/parser/satisfactory/objects/GUIDInfo.js +8 -5
  15. package/build/parser/satisfactory/objects/ObjectReference.js +5 -2
  16. package/build/parser/satisfactory/objects/Property.js +120 -91
  17. package/build/parser/satisfactory/objects/SaveComponent.js +11 -7
  18. package/build/parser/satisfactory/objects/SaveEntity.js +17 -13
  19. package/build/parser/satisfactory/objects/SaveObject.js +8 -4
  20. package/build/parser/satisfactory/objects/ue/GUID.js +5 -2
  21. package/build/parser/satisfactory/objects/ue/MD5Hash.js +5 -2
  22. package/build/parser/satisfactory/save/asynchronous-level.class.js +16 -12
  23. package/build/parser/satisfactory/save/level.class.js +28 -24
  24. package/build/parser/satisfactory/save/satisfactory-save.js +5 -1
  25. package/build/parser/satisfactory/save/save-reader.js +34 -28
  26. package/build/parser/satisfactory/save/save-writer.js +40 -34
  27. package/build/parser/satisfactory/save/save.types.js +2 -1
  28. package/build/parser/satisfactory/structs/util.types.js +63 -37
  29. package/build/parser/stream/byte-stream-reader.class.js +21 -17
  30. package/build/parser/stream/json-stream-state-writer.js +6 -2
  31. package/build/parser/stream/json-stream-writable.js +5 -1
  32. package/build/parser/stream/json-stream-writer.js +6 -2
  33. package/build/parser/stream/reworked/readable-stream-parser.js +24 -21
  34. package/build/parser/stream/reworked/stream-parser.js +20 -17
  35. package/build/parser/stream/save-stream-json-stringifier.js +7 -3
  36. package/build/parser/stream/save-stream-reader.class.js +24 -18
  37. package/build/parser/stream/save-stream-writer.class.js +5 -1
  38. package/build/parser/stream/stream-level.class.js +15 -11
  39. package/build/parser/stream/stream-parser.js +15 -11
  40. package/package.json +1 -1
@@ -1,8 +1,12 @@
1
- import { SaveObject } from "./SaveObject";
2
- export const isSaveComponent = (obj) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SaveComponent = exports.isSaveComponent = void 0;
4
+ const SaveObject_1 = require("./SaveObject");
5
+ const isSaveComponent = (obj) => {
3
6
  return obj.type === 'SaveComponent';
4
7
  };
5
- class SaveComponent extends SaveObject {
8
+ exports.isSaveComponent = isSaveComponent;
9
+ class SaveComponent extends SaveObject_1.SaveObject {
6
10
  constructor(typePath, rootObject, instanceName, parentEntityName = '') {
7
11
  super(typePath, rootObject, instanceName);
8
12
  this.typePath = typePath;
@@ -12,16 +16,16 @@ class SaveComponent extends SaveObject {
12
16
  this.type = 'SaveComponent';
13
17
  }
14
18
  static ParseHeader(reader, obj) {
15
- SaveObject.ParseHeader(reader, obj);
19
+ SaveObject_1.SaveObject.ParseHeader(reader, obj);
16
20
  obj.parentEntityName = reader.readString();
17
21
  }
18
22
  static SerializeHeader(writer, component) {
19
- SaveObject.SerializeHeader(writer, component);
23
+ SaveObject_1.SaveObject.SerializeHeader(writer, component);
20
24
  writer.writeString(component.parentEntityName);
21
25
  }
22
26
  static ParseData(component, length, reader, buildVersion, typePath) {
23
- SaveObject.ParseData(component, length, reader, buildVersion, typePath);
27
+ SaveObject_1.SaveObject.ParseData(component, length, reader, buildVersion, typePath);
24
28
  }
25
29
  }
26
30
  SaveComponent.TypeID = 0;
27
- export { SaveComponent };
31
+ exports.SaveComponent = SaveComponent;
@@ -1,10 +1,14 @@
1
- import { ParseTransform, SerializeTransform } from "../structs/util.types";
2
- import { ObjectReference } from "./ObjectReference";
3
- import { SaveObject } from "./SaveObject";
4
- export const isSaveEntity = (obj) => {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SaveEntity = exports.isSaveEntity = void 0;
4
+ const util_types_1 = require("../structs/util.types");
5
+ const ObjectReference_1 = require("./ObjectReference");
6
+ const SaveObject_1 = require("./SaveObject");
7
+ const isSaveEntity = (obj) => {
5
8
  return obj.type === 'SaveEntity';
6
9
  };
7
- class SaveEntity extends SaveObject {
10
+ exports.isSaveEntity = isSaveEntity;
11
+ class SaveEntity extends SaveObject_1.SaveObject {
8
12
  constructor(typePath, rootObject, instanceName, parentEntityName = '', needsTransform = false) {
9
13
  super(typePath, rootObject, instanceName);
10
14
  this.typePath = typePath;
@@ -24,9 +28,9 @@ class SaveEntity extends SaveObject {
24
28
  this.components = [];
25
29
  }
26
30
  static ParseHeader(reader, obj) {
27
- SaveObject.ParseHeader(reader, obj);
31
+ SaveObject_1.SaveObject.ParseHeader(reader, obj);
28
32
  obj.needTransform = reader.readInt32() == 1;
29
- obj.transform = ParseTransform(reader);
33
+ obj.transform = (0, util_types_1.ParseTransform)(reader);
30
34
  obj.wasPlacedInLevel = reader.readInt32() == 1;
31
35
  }
32
36
  static ParseData(entity, length, reader, buildVersion, typePath) {
@@ -35,16 +39,16 @@ class SaveEntity extends SaveObject {
35
39
  entity.parentObjectName = reader.readString();
36
40
  var componentCount = reader.readInt32();
37
41
  for (let i = 0; i < componentCount; i++) {
38
- var componentRef = ObjectReference.read(reader);
42
+ var componentRef = ObjectReference_1.ObjectReference.read(reader);
39
43
  entity.components.push(componentRef);
40
44
  }
41
45
  const remainingSize = length - (reader.getBufferPosition() - afterSizeIndicator);
42
- return SaveObject.ParseData(entity, remainingSize, reader, buildVersion, typePath);
46
+ return SaveObject_1.SaveObject.ParseData(entity, remainingSize, reader, buildVersion, typePath);
43
47
  }
44
48
  static SerializeHeader(writer, entity) {
45
- SaveObject.SerializeHeader(writer, entity);
49
+ SaveObject_1.SaveObject.SerializeHeader(writer, entity);
46
50
  writer.writeInt32(entity.needTransform ? 1 : 0);
47
- SerializeTransform(writer, entity.transform);
51
+ (0, util_types_1.SerializeTransform)(writer, entity.transform);
48
52
  writer.writeInt32(entity.wasPlacedInLevel ? 1 : 0);
49
53
  }
50
54
  static SerializeData(writer, entity, buildVersion) {
@@ -55,8 +59,8 @@ class SaveEntity extends SaveObject {
55
59
  writer.writeString(com.levelName);
56
60
  writer.writeString(com.pathName);
57
61
  }
58
- SaveObject.SerializeData(writer, entity, buildVersion);
62
+ SaveObject_1.SaveObject.SerializeData(writer, entity, buildVersion);
59
63
  }
60
64
  }
61
65
  SaveEntity.TypeID = 1;
62
- export { SaveEntity };
66
+ exports.SaveEntity = SaveEntity;
@@ -1,5 +1,8 @@
1
- import { DataFields } from "./DataFields";
2
- export class SaveObject {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SaveObject = void 0;
4
+ const DataFields_1 = require("./DataFields");
5
+ class SaveObject {
3
6
  constructor(typePath, rootObject, instanceName) {
4
7
  this.typePath = typePath;
5
8
  this.rootObject = rootObject;
@@ -21,9 +24,10 @@ export class SaveObject {
21
24
  writer.writeString(obj.instanceName);
22
25
  }
23
26
  static ParseData(obj, length, reader, buildVersion, typePath) {
24
- DataFields.ParseProperties(obj, length, reader, buildVersion, typePath);
27
+ DataFields_1.DataFields.ParseProperties(obj, length, reader, buildVersion, typePath);
25
28
  }
26
29
  static SerializeData(writer, obj, buildVersion) {
27
- DataFields.Serialize(obj, writer, buildVersion, obj.typePath);
30
+ DataFields_1.DataFields.Serialize(obj, writer, buildVersion, obj.typePath);
28
31
  }
29
32
  }
33
+ exports.SaveObject = SaveObject;
@@ -1,4 +1,7 @@
1
- export var GUID;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GUID = void 0;
4
+ var GUID;
2
5
  (function (GUID) {
3
6
  GUID.read = (reader) => {
4
7
  return [
@@ -14,5 +17,5 @@ export var GUID;
14
17
  writer.writeUint32(guid[2]);
15
18
  writer.writeUint32(guid[3]);
16
19
  };
17
- })(GUID || (GUID = {}));
20
+ })(GUID = exports.GUID || (exports.GUID = {}));
18
21
  ;
@@ -1,4 +1,7 @@
1
- export var MD5Hash;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MD5Hash = void 0;
4
+ var MD5Hash;
2
5
  (function (MD5Hash) {
3
6
  MD5Hash.read = (reader) => {
4
7
  const md5Hash = { isValid: false };
@@ -14,5 +17,5 @@ export var MD5Hash;
14
17
  writer.writeBytesArray(md5Hash.hash);
15
18
  }
16
19
  };
17
- })(MD5Hash || (MD5Hash = {}));
20
+ })(MD5Hash = exports.MD5Hash || (exports.MD5Hash = {}));
18
21
  ;
@@ -1,7 +1,10 @@
1
- import { isSaveComponent, SaveComponent } from "../objects/SaveComponent";
2
- import { isSaveEntity, SaveEntity } from "../objects/SaveEntity";
3
- import { Level } from "./level.class";
4
- export class AsynchronousLevel {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AsynchronousLevel = void 0;
4
+ const SaveComponent_1 = require("../objects/SaveComponent");
5
+ const SaveEntity_1 = require("../objects/SaveEntity");
6
+ const level_class_1 = require("./level.class");
7
+ class AsynchronousLevel {
5
8
  static async StreamReadObjectContents(reader, objectsList, buildVersion, writer, onProgressCallback) {
6
9
  const binarySize = reader.readInt32();
7
10
  const posBefore = reader.getBufferPosition();
@@ -24,11 +27,11 @@ export class AsynchronousLevel {
24
27
  await reader.allocate(Math.max(before - binarySize, 300 * 1000 * 1000));
25
28
  }
26
29
  const obj = objectsList[i];
27
- if (isSaveEntity(obj)) {
28
- SaveEntity.ParseData(obj, len, reader, buildVersion, obj.typePath);
30
+ if ((0, SaveEntity_1.isSaveEntity)(obj)) {
31
+ SaveEntity_1.SaveEntity.ParseData(obj, len, reader, buildVersion, obj.typePath);
29
32
  }
30
- else if (isSaveComponent(obj)) {
31
- SaveComponent.ParseData(obj, len, reader, buildVersion, obj.typePath);
33
+ else if ((0, SaveComponent_1.isSaveComponent)(obj)) {
34
+ SaveComponent_1.SaveComponent.ParseData(obj, len, reader, buildVersion, obj.typePath);
32
35
  }
33
36
  dynamicObjectBatch.push(obj);
34
37
  const after = reader.getBufferPosition();
@@ -43,20 +46,21 @@ export class AsynchronousLevel {
43
46
  }
44
47
  }
45
48
  static async StreamReadLevel(reader, levelName, buildVersion, writer) {
46
- const level = new Level(levelName);
49
+ const level = new level_class_1.Level(levelName);
47
50
  const binaryLength = reader.readInt32();
48
51
  await reader.allocate(binaryLength);
49
52
  await writer.openLevel(levelName);
50
- Level.ReadObjectHeaders(reader, level.objects, reader.onProgressCallback);
53
+ level_class_1.Level.ReadObjectHeaders(reader, level.objects, reader.onProgressCallback);
51
54
  reader.onProgressCallback(reader.getBufferProgress());
52
- level.collectables = Level.ReadCollectablesList(reader, undefined);
55
+ level.collectables = level_class_1.Level.ReadCollectablesList(reader, undefined);
53
56
  console.log(`before object contents buffer pos ${reader.getBufferPosition()}`);
54
57
  await AsynchronousLevel.StreamReadObjectContents(reader, level.objects, buildVersion, writer, reader.onProgressCallback);
55
58
  await writer.switchInLevelToCollectables();
56
59
  await writer.writeCollectables(...level.collectables);
57
60
  reader.onProgressCallback(reader.getBufferProgress());
58
- Level.ReadCollectablesList(reader, undefined);
61
+ level_class_1.Level.ReadCollectablesList(reader, undefined);
59
62
  await writer.endLevel();
60
63
  return level;
61
64
  }
62
65
  }
66
+ exports.AsynchronousLevel = AsynchronousLevel;
@@ -1,7 +1,10 @@
1
- import { ObjectReference } from "../objects/ObjectReference";
2
- import { SaveComponent, isSaveComponent } from "../objects/SaveComponent";
3
- import { SaveEntity, isSaveEntity } from "../objects/SaveEntity";
4
- export class Level {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Level = void 0;
4
+ const ObjectReference_1 = require("../objects/ObjectReference");
5
+ const SaveComponent_1 = require("../objects/SaveComponent");
6
+ const SaveEntity_1 = require("../objects/SaveEntity");
7
+ class Level {
5
8
  constructor(name) {
6
9
  this.name = name;
7
10
  this.objects = [];
@@ -13,12 +16,12 @@ export class Level {
13
16
  for (const obj of objects) {
14
17
  switch (obj.type) {
15
18
  case 'SaveEntity':
16
- writer.writeInt32(SaveEntity.TypeID);
17
- SaveEntity.SerializeHeader(writer, obj);
19
+ writer.writeInt32(SaveEntity_1.SaveEntity.TypeID);
20
+ SaveEntity_1.SaveEntity.SerializeHeader(writer, obj);
18
21
  break;
19
22
  case 'SaveComponent':
20
- writer.writeInt32(SaveComponent.TypeID);
21
- SaveComponent.SerializeHeader(writer, obj);
23
+ writer.writeInt32(SaveComponent_1.SaveComponent.TypeID);
24
+ SaveComponent_1.SaveComponent.SerializeHeader(writer, obj);
22
25
  break;
23
26
  default:
24
27
  console.log('Unknown object type', obj);
@@ -46,11 +49,11 @@ export class Level {
46
49
  writer.writeInt32(obj.unknownType2);
47
50
  const lenReplacementPosition = writer.getBufferPosition();
48
51
  writer.writeInt32(0);
49
- if (isSaveEntity(obj)) {
50
- SaveEntity.SerializeData(writer, obj, buildVersion);
52
+ if ((0, SaveEntity_1.isSaveEntity)(obj)) {
53
+ SaveEntity_1.SaveEntity.SerializeData(writer, obj, buildVersion);
51
54
  }
52
- else if (isSaveComponent(obj)) {
53
- SaveComponent.SerializeData(writer, obj, buildVersion);
55
+ else if ((0, SaveComponent_1.isSaveComponent)(obj)) {
56
+ SaveComponent_1.SaveComponent.SerializeData(writer, obj, buildVersion);
54
57
  }
55
58
  writer.writeBinarySizeFromPosition(lenReplacementPosition, lenReplacementPosition + 4);
56
59
  }
@@ -64,14 +67,14 @@ export class Level {
64
67
  }
65
68
  let objectType = reader.readInt32();
66
69
  switch (objectType) {
67
- case SaveEntity.TypeID:
68
- let object = new SaveEntity('', '', '', '');
69
- SaveEntity.ParseHeader(reader, object);
70
+ case SaveEntity_1.SaveEntity.TypeID:
71
+ let object = new SaveEntity_1.SaveEntity('', '', '', '');
72
+ SaveEntity_1.SaveEntity.ParseHeader(reader, object);
70
73
  objectsList.push(object);
71
74
  break;
72
- case SaveComponent.TypeID:
73
- let component = new SaveComponent('', '', '', '');
74
- SaveComponent.ParseHeader(reader, component);
75
+ case SaveComponent_1.SaveComponent.TypeID:
76
+ let component = new SaveComponent_1.SaveComponent('', '', '', '');
77
+ SaveComponent_1.SaveComponent.ParseHeader(reader, component);
75
78
  objectsList.push(component);
76
79
  break;
77
80
  default:
@@ -94,11 +97,11 @@ export class Level {
94
97
  obj.unknownType2 = reader.readInt32();
95
98
  const binarySize = reader.readInt32();
96
99
  const before = reader.getBufferPosition();
97
- if (isSaveEntity(obj)) {
98
- SaveEntity.ParseData(obj, binarySize, reader, buildVersion, obj.typePath);
100
+ if ((0, SaveEntity_1.isSaveEntity)(obj)) {
101
+ SaveEntity_1.SaveEntity.ParseData(obj, binarySize, reader, buildVersion, obj.typePath);
99
102
  }
100
- else if (isSaveComponent(obj)) {
101
- SaveComponent.ParseData(obj, binarySize, reader, buildVersion, obj.typePath);
103
+ else if ((0, SaveComponent_1.isSaveComponent)(obj)) {
104
+ SaveComponent_1.SaveComponent.ParseData(obj, binarySize, reader, buildVersion, obj.typePath);
102
105
  }
103
106
  const after = reader.getBufferPosition();
104
107
  if (after - before !== binarySize) {
@@ -138,7 +141,7 @@ export class Level {
138
141
  static SerializeCollectablesList(writer, collectables) {
139
142
  writer.writeInt32(collectables.length);
140
143
  for (const collectable of collectables) {
141
- ObjectReference.write(writer, collectable);
144
+ ObjectReference_1.ObjectReference.write(writer, collectable);
142
145
  }
143
146
  }
144
147
  static ReadCollectablesList(reader, printSmthWhenItsCollectables) {
@@ -146,7 +149,7 @@ export class Level {
146
149
  let countSmthing = reader.readInt32();
147
150
  if (countSmthing > 0) {
148
151
  for (let i = 0; i < countSmthing; i++) {
149
- const collectable = ObjectReference.read(reader);
152
+ const collectable = ObjectReference_1.ObjectReference.read(reader);
150
153
  collected.push(collectable);
151
154
  }
152
155
  if (process.env.NODE_ENV === 'debug' && countSmthing > 0) {
@@ -156,3 +159,4 @@ export class Level {
156
159
  return collected;
157
160
  }
158
161
  }
162
+ exports.Level = Level;
@@ -1,4 +1,7 @@
1
- export class SatisfactorySave {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SatisfactorySave = void 0;
4
+ class SatisfactorySave {
2
5
  constructor(name, header) {
3
6
  this.gridHash = [0, 0, 0, 0];
4
7
  this.grids = {};
@@ -8,3 +11,4 @@ export class SatisfactorySave {
8
11
  this.header = header;
9
12
  }
10
13
  }
14
+ exports.SatisfactorySave = SatisfactorySave;
@@ -1,21 +1,27 @@
1
- import Pako from "pako";
2
- import { Alignment } from "../../byte/alignment.enum";
3
- import { ByteReader } from "../../byte/byte-reader.class";
4
- import { CompressionLibraryError, CorruptSaveError, ParserError, UnsupportedVersionError } from "../../error/parser.error";
5
- import { MD5Hash } from '../objects/ue/MD5Hash';
6
- import { AsynchronousLevel } from "./asynchronous-level.class";
7
- import { Level } from "./level.class";
8
- export const DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE = 49;
9
- class SaveReader extends ByteReader {
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SaveReader = exports.DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE = void 0;
7
+ const pako_1 = __importDefault(require("pako"));
8
+ const alignment_enum_1 = require("../../byte/alignment.enum");
9
+ const byte_reader_class_1 = require("../../byte/byte-reader.class");
10
+ const parser_error_1 = require("../../error/parser.error");
11
+ const MD5Hash_1 = require("../objects/ue/MD5Hash");
12
+ const asynchronous_level_class_1 = require("./asynchronous-level.class");
13
+ const level_class_1 = require("./level.class");
14
+ exports.DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE = 49;
15
+ class SaveReader extends byte_reader_class_1.ByteReader {
10
16
  constructor(fileBuffer, onProgressCallback = () => { }) {
11
- super(fileBuffer, Alignment.LITTLE_ENDIAN);
17
+ super(fileBuffer, alignment_enum_1.Alignment.LITTLE_ENDIAN);
12
18
  this.onProgressCallback = onProgressCallback;
13
19
  this.levels = [];
14
20
  this.trailingCollectedObjects = [];
15
21
  this.compressionInfo = {
16
22
  packageFileTag: 0,
17
23
  maxUncompressedChunkContentSize: 0,
18
- chunkHeaderSize: DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE
24
+ chunkHeaderSize: exports.DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE
19
25
  };
20
26
  this.readSaveBodyHash = () => {
21
27
  const unk = this.readInt32();
@@ -92,7 +98,7 @@ class SaveReader extends ByteReader {
92
98
  this.header.partitionEnabledFlag = this.readInt32() === 1;
93
99
  }
94
100
  if (this.header.saveHeaderType >= 12) {
95
- this.header.consistencyHashBytes = MD5Hash.read(this);
101
+ this.header.consistencyHashBytes = MD5Hash_1.MD5Hash.read(this);
96
102
  }
97
103
  if (this.header.saveHeaderType >= 13) {
98
104
  this.header.creativeModeEnabled = this.readInt32() == 1;
@@ -100,7 +106,7 @@ class SaveReader extends ByteReader {
100
106
  if (this.header.saveVersion >= 21) {
101
107
  }
102
108
  else {
103
- throw new UnsupportedVersionError("The save version is too old to support encoding currently. Save in newer game version.");
109
+ throw new parser_error_1.UnsupportedVersionError("The save version is too old to support encoding currently. Save in newer game version.");
104
110
  }
105
111
  return this.header;
106
112
  }
@@ -116,13 +122,13 @@ class SaveReader extends ByteReader {
116
122
  this.currentByte = this.compressionInfo.chunkHeaderSize;
117
123
  this.handledByte += this.compressionInfo.chunkHeaderSize;
118
124
  if (this.compressionInfo.packageFileTag <= 0) {
119
- this.compressionInfo.packageFileTag = chunkHeader.getUint32(0, this.alignment === Alignment.LITTLE_ENDIAN);
125
+ this.compressionInfo.packageFileTag = chunkHeader.getUint32(0, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
120
126
  }
121
127
  if (this.compressionInfo.maxUncompressedChunkContentSize <= 0) {
122
- this.compressionInfo.maxUncompressedChunkContentSize = chunkHeader.getInt32(8, this.alignment === Alignment.LITTLE_ENDIAN);
128
+ this.compressionInfo.maxUncompressedChunkContentSize = chunkHeader.getInt32(8, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
123
129
  }
124
- const chunkCompressedLength = chunkHeader.getInt32(33, this.alignment === Alignment.LITTLE_ENDIAN);
125
- const chunkUncompressedLength = chunkHeader.getInt32(25, this.alignment === Alignment.LITTLE_ENDIAN);
130
+ const chunkCompressedLength = chunkHeader.getInt32(33, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
131
+ const chunkUncompressedLength = chunkHeader.getInt32(25, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
126
132
  totalUncompressedBodySize += chunkUncompressedLength;
127
133
  const currentChunkSize = chunkCompressedLength;
128
134
  let currentChunk = this.fileBuffer.slice(this.currentByte, this.currentByte + currentChunkSize);
@@ -132,11 +138,11 @@ class SaveReader extends ByteReader {
132
138
  this.currentByte = 0;
133
139
  try {
134
140
  let currentInflatedChunk = null;
135
- currentInflatedChunk = Pako.inflate(currentChunk);
141
+ currentInflatedChunk = pako_1.default.inflate(currentChunk);
136
142
  currentChunks.push(currentInflatedChunk);
137
143
  }
138
144
  catch (err) {
139
- throw new CompressionLibraryError("Failed to inflate compressed save data. " + err);
145
+ throw new parser_error_1.CompressionLibraryError("Failed to inflate compressed save data. " + err);
140
146
  }
141
147
  }
142
148
  let newChunkLength = currentChunks.map(cc => cc.length).reduce((prev, cur) => prev + cur);
@@ -151,7 +157,7 @@ class SaveReader extends ByteReader {
151
157
  this.bufferView = new DataView(bigWholeChunk.buffer);
152
158
  const dataLength = this.readInt32();
153
159
  if (totalUncompressedBodySize !== dataLength + 8) {
154
- throw new CorruptSaveError(`Possibly corrupt. Indicated size of total save body (${dataLength + 8}) does not match the uncompressed real size of ${totalUncompressedBodySize}.`);
160
+ throw new parser_error_1.CorruptSaveError(`Possibly corrupt. Indicated size of total save body (${dataLength + 8}) does not match the uncompressed real size of ${totalUncompressedBodySize}.`);
155
161
  }
156
162
  return {
157
163
  concatenatedChunkLength: newChunkLength,
@@ -160,13 +166,13 @@ class SaveReader extends ByteReader {
160
166
  }
161
167
  readLevels() {
162
168
  if (!this.header) {
163
- throw new ParserError('ParserError', 'Header must be set before objects can be read.');
169
+ throw new parser_error_1.ParserError('ParserError', 'Header must be set before objects can be read.');
164
170
  }
165
171
  if (this.header.saveVersion < 29) {
166
- throw new UnsupportedVersionError('Game Version < U6 is not supported.');
172
+ throw new parser_error_1.UnsupportedVersionError('Game Version < U6 is not supported.');
167
173
  }
168
174
  if (this.header.saveHeaderType < 13) {
169
- throw new UnsupportedVersionError('Game Version < U8 is not supported in this package version. Consider downgrading to the latest package version supporting it, which is 0.0.34');
175
+ throw new parser_error_1.UnsupportedVersionError('Game Version < U8 is not supported in this package version. Consider downgrading to the latest package version supporting it, which is 0.0.34');
170
176
  }
171
177
  const levels = [];
172
178
  const levelCount = this.readInt32();
@@ -176,10 +182,10 @@ class SaveReader extends ByteReader {
176
182
  if (i % 500 === 0) {
177
183
  this.onProgressCallback(this.getBufferProgress(), `reading level [${(i + 1)}/${(levelCount + 1)}] ${levelSingleName}`);
178
184
  }
179
- levels.push(Level.ReadLevel(this, levelSingleName, this.header.buildVersion));
185
+ levels.push(level_class_1.Level.ReadLevel(this, levelSingleName, this.header.buildVersion));
180
186
  }
181
- levels.push(Level.ReadLevel(this, this.header.mapName, this.header.buildVersion));
182
- const trailingStuffToIgnore = Level.ReadCollectablesList(this, 'collectables 6!');
187
+ levels.push(level_class_1.Level.ReadLevel(this, this.header.mapName, this.header.buildVersion));
188
+ const trailingStuffToIgnore = level_class_1.Level.ReadCollectablesList(this, 'collectables 6!');
183
189
  this.onProgressCallback(this.getBufferProgress(), 'finished parsing.');
184
190
  return levels;
185
191
  }
@@ -190,7 +196,7 @@ class SaveReader extends ByteReader {
190
196
  for (let j = 0; j <= numSubLevels; j++) {
191
197
  let levelName = (j === numSubLevels) ? '' + this.header.mapName : this.readString();
192
198
  this.onProgressCallback(this.getBufferProgress(), `reading level [${(j + 1)}/${(numSubLevels + 1)}] ${levelName}`);
193
- this.levels[j] = await AsynchronousLevel.StreamReadLevel(this, levelName, this.header.buildVersion, writer);
199
+ this.levels[j] = await asynchronous_level_class_1.AsynchronousLevel.StreamReadLevel(this, levelName, this.header.buildVersion, writer);
194
200
  }
195
201
  await writer.endLevels();
196
202
  return this.levels;
@@ -208,4 +214,4 @@ SaveReader.getRoughSaveVersion = (saveVersion, headerTypeVersion) => {
208
214
  return '<U6';
209
215
  }
210
216
  };
211
- export { SaveReader };
217
+ exports.SaveReader = SaveReader;
@@ -1,14 +1,20 @@
1
- import Pako from "pako";
2
- import { Alignment } from "../../byte/alignment.enum";
3
- import { ByteWriter } from "../../byte/byte-writer.class";
4
- import { CompressionLibraryError, ParserError, UnsupportedVersionError } from "../../error/parser.error";
5
- import { CompressionAlgorithmCode } from "../../file.types";
6
- import { MD5Hash } from '../objects/ue/MD5Hash';
7
- import { Level } from "./level.class";
8
- import { SaveReader } from "./save-reader";
9
- class SaveWriter extends ByteWriter {
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SaveWriter = void 0;
7
+ const pako_1 = __importDefault(require("pako"));
8
+ const alignment_enum_1 = require("../../byte/alignment.enum");
9
+ const byte_writer_class_1 = require("../../byte/byte-writer.class");
10
+ const parser_error_1 = require("../../error/parser.error");
11
+ const file_types_1 = require("../../file.types");
12
+ const MD5Hash_1 = require("../objects/ue/MD5Hash");
13
+ const level_class_1 = require("./level.class");
14
+ const save_reader_1 = require("./save-reader");
15
+ class SaveWriter extends byte_writer_class_1.ByteWriter {
10
16
  constructor() {
11
- super(Alignment.LITTLE_ENDIAN);
17
+ super(alignment_enum_1.Alignment.LITTLE_ENDIAN);
12
18
  }
13
19
  static WriteHeader(writer, header) {
14
20
  writer.writeInt32(header.saveHeaderType);
@@ -18,7 +24,7 @@ class SaveWriter extends ByteWriter {
18
24
  writer.writeString(header.mapOptions);
19
25
  writer.writeString(header.sessionName);
20
26
  writer.writeInt32(header.playDurationSeconds);
21
- writer.writeInt64(BigInt(header.saveDateTime) * 10000n + SaveReader.EPOCH_TICKS);
27
+ writer.writeInt64(BigInt(header.saveDateTime) * 10000n + save_reader_1.SaveReader.EPOCH_TICKS);
22
28
  writer.writeByte(header.sessionVisibility);
23
29
  if (header.saveHeaderType >= 7) {
24
30
  writer.writeInt32(header.fEditorObjectVersion);
@@ -39,7 +45,7 @@ class SaveWriter extends ByteWriter {
39
45
  writer.writeInt32(header.partitionEnabledFlag ? 1 : 0);
40
46
  }
41
47
  if (header.saveHeaderType >= 12) {
42
- MD5Hash.write(writer, header.consistencyHashBytes);
48
+ MD5Hash_1.MD5Hash.write(writer, header.consistencyHashBytes);
43
49
  }
44
50
  if (header.saveHeaderType >= 13) {
45
51
  writer.writeInt32(header.creativeModeEnabled ? 1 : 0);
@@ -47,7 +53,7 @@ class SaveWriter extends ByteWriter {
47
53
  if (header.saveVersion >= 21) {
48
54
  }
49
55
  else {
50
- throw new UnsupportedVersionError("The save version is too old to be supported currently.");
56
+ throw new parser_error_1.UnsupportedVersionError("The save version is too old to be supported currently.");
51
57
  }
52
58
  }
53
59
  static WriteLevels(writer, save, buildVersion) {
@@ -56,17 +62,17 @@ class SaveWriter extends ByteWriter {
56
62
  if (level.name !== save.header.mapName) {
57
63
  writer.writeString(level.name);
58
64
  }
59
- Level.WriteLevel(writer, level, buildVersion);
65
+ level_class_1.Level.WriteLevel(writer, level, buildVersion);
60
66
  }
61
- Level.SerializeCollectablesList(writer, save.trailingCollectedObjects ?? []);
67
+ level_class_1.Level.SerializeCollectablesList(writer, save.trailingCollectedObjects ?? []);
62
68
  }
63
- static GenerateCompressedChunksFromData(bufferArray, compressionInfo, onBinaryBeforeCompressing, onChunk, alignment = Alignment.LITTLE_ENDIAN) {
69
+ static GenerateCompressedChunksFromData(bufferArray, compressionInfo, onBinaryBeforeCompressing, onChunk, alignment = alignment_enum_1.Alignment.LITTLE_ENDIAN) {
64
70
  const errors = [];
65
71
  const totalUncompressedSize = bufferArray.byteLength;
66
72
  const saveBody = new Uint8Array(bufferArray.byteLength + 8);
67
73
  saveBody.set(new Uint8Array(bufferArray), 4);
68
74
  const miniView = new DataView(saveBody.buffer);
69
- miniView.setInt32(0, totalUncompressedSize, alignment === Alignment.LITTLE_ENDIAN);
75
+ miniView.setInt32(0, totalUncompressedSize, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
70
76
  onBinaryBeforeCompressing(saveBody.buffer);
71
77
  let handledByte = 0;
72
78
  const chunkSummary = [];
@@ -75,27 +81,27 @@ class SaveWriter extends ByteWriter {
75
81
  const uncompressedChunk = saveBody.buffer.slice(handledByte, handledByte + uncompressedContentSize);
76
82
  let compressedChunk = new Uint8Array(0);
77
83
  try {
78
- compressedChunk = Pako.deflate(uncompressedChunk);
84
+ compressedChunk = pako_1.default.deflate(uncompressedChunk);
79
85
  }
80
86
  catch (err) {
81
- throw new CompressionLibraryError("Could not compress save data. " + err);
87
+ throw new parser_error_1.CompressionLibraryError("Could not compress save data. " + err);
82
88
  }
83
89
  const chunk = new Uint8Array(compressionInfo.chunkHeaderSize + compressedChunk.byteLength);
84
90
  chunk.set(compressedChunk, compressionInfo.chunkHeaderSize);
85
91
  const view = new DataView(chunk.buffer);
86
- view.setInt32(0, compressionInfo.packageFileTag, alignment === Alignment.LITTLE_ENDIAN);
87
- view.setInt32(4, 0x22222222, alignment === Alignment.LITTLE_ENDIAN);
88
- view.setInt32(8, compressionInfo.maxUncompressedChunkContentSize, alignment === Alignment.LITTLE_ENDIAN);
89
- view.setInt32(12, 0, alignment === Alignment.LITTLE_ENDIAN);
90
- view.setUint8(16, CompressionAlgorithmCode.ZLIB);
91
- view.setInt32(17, compressedChunk.byteLength, alignment === Alignment.LITTLE_ENDIAN);
92
- view.setInt32(21, 0, alignment === Alignment.LITTLE_ENDIAN);
93
- view.setInt32(25, uncompressedContentSize, alignment === Alignment.LITTLE_ENDIAN);
94
- view.setInt32(29, 0, alignment === Alignment.LITTLE_ENDIAN);
95
- view.setInt32(33, compressedChunk.byteLength, alignment === Alignment.LITTLE_ENDIAN);
96
- view.setInt32(37, 0, alignment === Alignment.LITTLE_ENDIAN);
97
- view.setInt32(41, uncompressedContentSize, alignment === Alignment.LITTLE_ENDIAN);
98
- view.setInt32(45, 0, alignment === Alignment.LITTLE_ENDIAN);
92
+ view.setInt32(0, compressionInfo.packageFileTag, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
93
+ view.setInt32(4, 0x22222222, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
94
+ view.setInt32(8, compressionInfo.maxUncompressedChunkContentSize, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
95
+ view.setInt32(12, 0, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
96
+ view.setUint8(16, file_types_1.CompressionAlgorithmCode.ZLIB);
97
+ view.setInt32(17, compressedChunk.byteLength, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
98
+ view.setInt32(21, 0, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
99
+ view.setInt32(25, uncompressedContentSize, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
100
+ view.setInt32(29, 0, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
101
+ view.setInt32(33, compressedChunk.byteLength, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
102
+ view.setInt32(37, 0, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
103
+ view.setInt32(41, uncompressedContentSize, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
104
+ view.setInt32(45, 0, alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
99
105
  onChunk(chunk);
100
106
  chunkSummary.push({
101
107
  uncompressedSize: uncompressedContentSize + compressionInfo.chunkHeaderSize,
@@ -107,7 +113,7 @@ class SaveWriter extends ByteWriter {
107
113
  }
108
114
  generateChunks(compressionInfo, posAfterHeader, onBinaryBeforeCompressing, onHeader, onChunk) {
109
115
  if (posAfterHeader <= 0) {
110
- throw new ParserError('ParserError', 'Seems like this buffer has no header. Please write the header first before you can generate chunks.');
116
+ throw new parser_error_1.ParserError('ParserError', 'Seems like this buffer has no header. Please write the header first before you can generate chunks.');
111
117
  }
112
118
  const header = new Uint8Array(this.bufferArray.slice(0, posAfterHeader));
113
119
  onHeader(header);
@@ -138,4 +144,4 @@ SaveWriter.WriteGrids = (writer, grids) => {
138
144
  }
139
145
  writer.writeInt32(0);
140
146
  };
141
- export { SaveWriter };
147
+ exports.SaveWriter = SaveWriter;
@@ -1 +1,2 @@
1
- export {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });