@etothepii/satisfactory-file-parser 0.1.26 → 0.1.28
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/build/index.js +60 -25
- package/build/parser/byte/alignment.enum.js +5 -2
- package/build/parser/byte/binary-operable.interface.js +2 -1
- package/build/parser/byte/binary-readable.interface.js +2 -1
- package/build/parser/byte/byte-reader.class.js +14 -10
- package/build/parser/byte/byte-writer.class.js +13 -10
- package/build/parser/error/parser.error.js +15 -6
- package/build/parser/file.types.js +5 -2
- package/build/parser/parser.js +26 -23
- package/build/parser/satisfactory/blueprint/blueprint-reader.js +36 -28
- package/build/parser/satisfactory/blueprint/blueprint-writer.js +25 -20
- package/build/parser/satisfactory/blueprint/blueprint.types.js +2 -1
- package/build/parser/satisfactory/objects/DataFields.js +83 -79
- package/build/parser/satisfactory/objects/GUIDInfo.js +8 -5
- package/build/parser/satisfactory/objects/ObjectReference.js +5 -2
- package/build/parser/satisfactory/objects/Property.js +120 -91
- package/build/parser/satisfactory/objects/SaveComponent.js +11 -7
- package/build/parser/satisfactory/objects/SaveEntity.js +17 -13
- package/build/parser/satisfactory/objects/SaveObject.js +8 -4
- package/build/parser/satisfactory/objects/ue/GUID.js +5 -2
- package/build/parser/satisfactory/objects/ue/MD5Hash.js +5 -2
- package/build/parser/satisfactory/save/asynchronous-level.class.js +16 -12
- package/build/parser/satisfactory/save/level.class.js +28 -24
- package/build/parser/satisfactory/save/satisfactory-save.js +5 -1
- package/build/parser/satisfactory/save/save-reader.js +34 -28
- package/build/parser/satisfactory/save/save-writer.js +40 -34
- package/build/parser/satisfactory/save/save.types.js +2 -1
- package/build/parser/satisfactory/structs/util.types.js +63 -37
- package/build/parser/stream/byte-stream-reader.class.js +21 -17
- package/build/parser/stream/json-stream-state-writer.js +6 -2
- package/build/parser/stream/json-stream-writable.js +5 -1
- package/build/parser/stream/json-stream-writer.js +6 -2
- package/build/parser/stream/reworked/readable-stream-parser.js +24 -21
- package/build/parser/stream/reworked/stream-parser.js +20 -17
- package/build/parser/stream/save-stream-json-stringifier.js +7 -3
- package/build/parser/stream/save-stream-reader.class.js +24 -18
- package/build/parser/stream/save-stream-writer.class.js +5 -1
- package/build/parser/stream/stream-level.class.js +15 -11
- package/build/parser/stream/stream-parser.js +15 -11
- package/package.json +1 -2
package/build/index.js
CHANGED
|
@@ -1,25 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.ReadableStreamParser = exports.Parser = exports.SaveStreamWriter = exports.SaveStreamJsonStringifier = exports.SaveWriter = exports.SaveReader = exports.BlueprintWriter = exports.BlueprintConfigWriter = exports.BlueprintReader = exports.BlueprintConfigReader = exports.ByteWriter = exports.ByteReader = exports.SatisfactorySave = exports.Level = exports.SaveEntity = exports.SaveComponent = exports.ObjectReference = exports.DataFields = void 0;
|
|
18
|
+
__exportStar(require("./parser/satisfactory/blueprint/blueprint.types"), exports);
|
|
19
|
+
var DataFields_1 = require("./parser/satisfactory/objects/DataFields");
|
|
20
|
+
Object.defineProperty(exports, "DataFields", { enumerable: true, get: function () { return DataFields_1.DataFields; } });
|
|
21
|
+
__exportStar(require("./parser/satisfactory/objects/GUIDInfo"), exports);
|
|
22
|
+
var ObjectReference_1 = require("./parser/satisfactory/objects/ObjectReference");
|
|
23
|
+
Object.defineProperty(exports, "ObjectReference", { enumerable: true, get: function () { return ObjectReference_1.ObjectReference; } });
|
|
24
|
+
__exportStar(require("./parser/satisfactory/objects/Property"), exports);
|
|
25
|
+
var SaveComponent_1 = require("./parser/satisfactory/objects/SaveComponent");
|
|
26
|
+
Object.defineProperty(exports, "SaveComponent", { enumerable: true, get: function () { return SaveComponent_1.SaveComponent; } });
|
|
27
|
+
var SaveEntity_1 = require("./parser/satisfactory/objects/SaveEntity");
|
|
28
|
+
Object.defineProperty(exports, "SaveEntity", { enumerable: true, get: function () { return SaveEntity_1.SaveEntity; } });
|
|
29
|
+
__exportStar(require("./parser/satisfactory/objects/ue/GUID"), exports);
|
|
30
|
+
__exportStar(require("./parser/satisfactory/objects/ue/MD5Hash"), exports);
|
|
31
|
+
var level_class_1 = require("./parser/satisfactory/save/level.class");
|
|
32
|
+
Object.defineProperty(exports, "Level", { enumerable: true, get: function () { return level_class_1.Level; } });
|
|
33
|
+
var satisfactory_save_1 = require("./parser/satisfactory/save/satisfactory-save");
|
|
34
|
+
Object.defineProperty(exports, "SatisfactorySave", { enumerable: true, get: function () { return satisfactory_save_1.SatisfactorySave; } });
|
|
35
|
+
__exportStar(require("./parser/satisfactory/save/save.types"), exports);
|
|
36
|
+
var byte_reader_class_1 = require("./parser/byte/byte-reader.class");
|
|
37
|
+
Object.defineProperty(exports, "ByteReader", { enumerable: true, get: function () { return byte_reader_class_1.ByteReader; } });
|
|
38
|
+
var byte_writer_class_1 = require("./parser/byte/byte-writer.class");
|
|
39
|
+
Object.defineProperty(exports, "ByteWriter", { enumerable: true, get: function () { return byte_writer_class_1.ByteWriter; } });
|
|
40
|
+
var blueprint_reader_1 = require("./parser/satisfactory/blueprint/blueprint-reader");
|
|
41
|
+
Object.defineProperty(exports, "BlueprintConfigReader", { enumerable: true, get: function () { return blueprint_reader_1.BlueprintConfigReader; } });
|
|
42
|
+
Object.defineProperty(exports, "BlueprintReader", { enumerable: true, get: function () { return blueprint_reader_1.BlueprintReader; } });
|
|
43
|
+
var blueprint_writer_1 = require("./parser/satisfactory/blueprint/blueprint-writer");
|
|
44
|
+
Object.defineProperty(exports, "BlueprintConfigWriter", { enumerable: true, get: function () { return blueprint_writer_1.BlueprintConfigWriter; } });
|
|
45
|
+
Object.defineProperty(exports, "BlueprintWriter", { enumerable: true, get: function () { return blueprint_writer_1.BlueprintWriter; } });
|
|
46
|
+
var save_reader_1 = require("./parser/satisfactory/save/save-reader");
|
|
47
|
+
Object.defineProperty(exports, "SaveReader", { enumerable: true, get: function () { return save_reader_1.SaveReader; } });
|
|
48
|
+
var save_writer_1 = require("./parser/satisfactory/save/save-writer");
|
|
49
|
+
Object.defineProperty(exports, "SaveWriter", { enumerable: true, get: function () { return save_writer_1.SaveWriter; } });
|
|
50
|
+
__exportStar(require("./parser/satisfactory/structs/util.types"), exports);
|
|
51
|
+
var save_stream_json_stringifier_1 = require("./parser/stream/save-stream-json-stringifier");
|
|
52
|
+
Object.defineProperty(exports, "SaveStreamJsonStringifier", { enumerable: true, get: function () { return save_stream_json_stringifier_1.SaveStreamJsonStringifier; } });
|
|
53
|
+
var save_stream_writer_class_1 = require("./parser/stream/save-stream-writer.class");
|
|
54
|
+
Object.defineProperty(exports, "SaveStreamWriter", { enumerable: true, get: function () { return save_stream_writer_class_1.SaveStreamWriter; } });
|
|
55
|
+
__exportStar(require("./parser/error/parser.error"), exports);
|
|
56
|
+
__exportStar(require("./parser/file.types"), exports);
|
|
57
|
+
var parser_1 = require("./parser/parser");
|
|
58
|
+
Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return parser_1.Parser; } });
|
|
59
|
+
var readable_stream_parser_1 = require("./parser/stream/reworked/readable-stream-parser");
|
|
60
|
+
Object.defineProperty(exports, "ReadableStreamParser", { enumerable: true, get: function () { return readable_stream_parser_1.ReadableStreamParser; } });
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Alignment = void 0;
|
|
4
|
+
var Alignment;
|
|
2
5
|
(function (Alignment) {
|
|
3
6
|
Alignment[Alignment["BIG_ENDIAN"] = 0] = "BIG_ENDIAN";
|
|
4
7
|
Alignment[Alignment["LITTLE_ENDIAN"] = 1] = "LITTLE_ENDIAN";
|
|
5
|
-
})(Alignment || (Alignment = {}));
|
|
8
|
+
})(Alignment = exports.Alignment || (exports.Alignment = {}));
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ByteReader = void 0;
|
|
4
|
+
const alignment_enum_1 = require("./alignment.enum");
|
|
5
|
+
class ByteReader {
|
|
3
6
|
constructor(fileBuffer, alignment) {
|
|
4
7
|
this.debug = false;
|
|
5
8
|
this.currentByte = 0;
|
|
@@ -46,27 +49,27 @@ export class ByteReader {
|
|
|
46
49
|
return data;
|
|
47
50
|
}
|
|
48
51
|
readInt16() {
|
|
49
|
-
let data = this.bufferView.getInt16(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
52
|
+
let data = this.bufferView.getInt16(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
50
53
|
this.currentByte += 2;
|
|
51
54
|
return data;
|
|
52
55
|
}
|
|
53
56
|
readUint16() {
|
|
54
|
-
let data = this.bufferView.getUint16(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
57
|
+
let data = this.bufferView.getUint16(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
55
58
|
this.currentByte += 2;
|
|
56
59
|
return data;
|
|
57
60
|
}
|
|
58
61
|
readInt32() {
|
|
59
|
-
let data = this.bufferView.getInt32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
62
|
+
let data = this.bufferView.getInt32(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
60
63
|
this.currentByte += 4;
|
|
61
64
|
return data;
|
|
62
65
|
}
|
|
63
66
|
readUint32() {
|
|
64
|
-
let data = this.bufferView.getUint32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
67
|
+
let data = this.bufferView.getUint32(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
65
68
|
this.currentByte += 4;
|
|
66
69
|
return data;
|
|
67
70
|
}
|
|
68
71
|
readLong() {
|
|
69
|
-
let data = this.bufferView.getBigInt64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
72
|
+
let data = this.bufferView.getBigInt64(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
70
73
|
this.currentByte += 8;
|
|
71
74
|
return data;
|
|
72
75
|
}
|
|
@@ -74,17 +77,17 @@ export class ByteReader {
|
|
|
74
77
|
return this.readLong();
|
|
75
78
|
}
|
|
76
79
|
readUint64() {
|
|
77
|
-
let data = this.bufferView.getBigUint64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
80
|
+
let data = this.bufferView.getBigUint64(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
78
81
|
this.currentByte += 8;
|
|
79
82
|
return data;
|
|
80
83
|
}
|
|
81
84
|
readFloat32() {
|
|
82
|
-
let data = this.bufferView.getFloat32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
85
|
+
let data = this.bufferView.getFloat32(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
83
86
|
this.currentByte += 4;
|
|
84
87
|
return data;
|
|
85
88
|
}
|
|
86
89
|
readDouble() {
|
|
87
|
-
let data = this.bufferView.getFloat64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
90
|
+
let data = this.bufferView.getFloat64(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
88
91
|
this.currentByte += 8;
|
|
89
92
|
return data;
|
|
90
93
|
}
|
|
@@ -121,3 +124,4 @@ export class ByteReader {
|
|
|
121
124
|
return Promise.resolve();
|
|
122
125
|
}
|
|
123
126
|
}
|
|
127
|
+
exports.ByteReader = ByteReader;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ByteWriter = void 0;
|
|
4
|
+
const alignment_enum_1 = require("./alignment.enum");
|
|
2
5
|
class ByteWriter {
|
|
3
6
|
constructor(alignment, bufferSize = 500) {
|
|
4
7
|
this.getBufferPosition = () => this.currentByte;
|
|
@@ -38,42 +41,42 @@ class ByteWriter {
|
|
|
38
41
|
}
|
|
39
42
|
writeInt16(value) {
|
|
40
43
|
this.extendBufferIfNeeded(2);
|
|
41
|
-
this.bufferView.setInt16(this.currentByte, value, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
44
|
+
this.bufferView.setInt16(this.currentByte, value, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
42
45
|
this.currentByte += 2;
|
|
43
46
|
}
|
|
44
47
|
writeUint16(value) {
|
|
45
48
|
this.extendBufferIfNeeded(2);
|
|
46
|
-
this.bufferView.setUint16(this.currentByte, value, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
49
|
+
this.bufferView.setUint16(this.currentByte, value, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
47
50
|
this.currentByte += 2;
|
|
48
51
|
}
|
|
49
52
|
writeInt32(value) {
|
|
50
53
|
this.extendBufferIfNeeded(4);
|
|
51
|
-
this.bufferView.setInt32(this.currentByte, value, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
54
|
+
this.bufferView.setInt32(this.currentByte, value, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
52
55
|
this.currentByte += 4;
|
|
53
56
|
}
|
|
54
57
|
writeUint32(value) {
|
|
55
58
|
this.extendBufferIfNeeded(4);
|
|
56
|
-
this.bufferView.setUint32(this.currentByte, value, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
59
|
+
this.bufferView.setUint32(this.currentByte, value, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
57
60
|
this.currentByte += 4;
|
|
58
61
|
}
|
|
59
62
|
writeInt64(value) {
|
|
60
63
|
this.extendBufferIfNeeded(8);
|
|
61
|
-
this.bufferView.setBigInt64(this.currentByte, value, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
64
|
+
this.bufferView.setBigInt64(this.currentByte, value, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
62
65
|
this.currentByte += 8;
|
|
63
66
|
}
|
|
64
67
|
writeUint64(value) {
|
|
65
68
|
this.extendBufferIfNeeded(8);
|
|
66
|
-
this.bufferView.setBigUint64(this.currentByte, value, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
69
|
+
this.bufferView.setBigUint64(this.currentByte, value, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
67
70
|
this.currentByte += 8;
|
|
68
71
|
}
|
|
69
72
|
writeFloat(value) {
|
|
70
73
|
this.extendBufferIfNeeded(4);
|
|
71
|
-
this.bufferView.setFloat32(this.currentByte, value, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
74
|
+
this.bufferView.setFloat32(this.currentByte, value, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
72
75
|
this.currentByte += 4;
|
|
73
76
|
}
|
|
74
77
|
writeDouble(value) {
|
|
75
78
|
this.extendBufferIfNeeded(8);
|
|
76
|
-
this.bufferView.setFloat64(this.currentByte, value, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
79
|
+
this.bufferView.setFloat64(this.currentByte, value, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
77
80
|
this.currentByte += 8;
|
|
78
81
|
}
|
|
79
82
|
writeString(value) {
|
|
@@ -133,4 +136,4 @@ class ByteWriter {
|
|
|
133
136
|
;
|
|
134
137
|
}
|
|
135
138
|
ByteWriter.IsASCIICompatible = (value) => /^[\x00-\x7F]*$/.test(value);
|
|
136
|
-
|
|
139
|
+
exports.ByteWriter = ByteWriter;
|
|
@@ -1,31 +1,40 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnimplementedError = exports.TimeoutError = exports.CompressionLibraryError = exports.CorruptSaveError = exports.UnsupportedVersionError = exports.ParserError = void 0;
|
|
4
|
+
class ParserError extends Error {
|
|
2
5
|
constructor(name, message) {
|
|
3
6
|
super(message);
|
|
4
7
|
this.name = name;
|
|
5
8
|
}
|
|
6
9
|
}
|
|
7
|
-
|
|
10
|
+
exports.ParserError = ParserError;
|
|
11
|
+
class UnsupportedVersionError extends ParserError {
|
|
8
12
|
constructor(message) {
|
|
9
13
|
super('UnsupportedVersionError', message ?? 'This save version is not supported.');
|
|
10
14
|
}
|
|
11
15
|
}
|
|
12
|
-
|
|
16
|
+
exports.UnsupportedVersionError = UnsupportedVersionError;
|
|
17
|
+
class CorruptSaveError extends ParserError {
|
|
13
18
|
constructor(message) {
|
|
14
19
|
super('CorruptSaveError', message ?? 'This save data is most likely corrupt.');
|
|
15
20
|
}
|
|
16
21
|
}
|
|
17
|
-
|
|
22
|
+
exports.CorruptSaveError = CorruptSaveError;
|
|
23
|
+
class CompressionLibraryError extends ParserError {
|
|
18
24
|
constructor(message) {
|
|
19
25
|
super('CompressionLibraryError', message ?? 'Failed to compress/decompress save data.');
|
|
20
26
|
}
|
|
21
27
|
}
|
|
22
|
-
|
|
28
|
+
exports.CompressionLibraryError = CompressionLibraryError;
|
|
29
|
+
class TimeoutError extends ParserError {
|
|
23
30
|
constructor(message) {
|
|
24
31
|
super('TimeoutError', message ?? 'Operation timed out.');
|
|
25
32
|
}
|
|
26
33
|
}
|
|
27
|
-
|
|
34
|
+
exports.TimeoutError = TimeoutError;
|
|
35
|
+
class UnimplementedError extends ParserError {
|
|
28
36
|
constructor(message) {
|
|
29
37
|
super('UnimplementedError', message ?? 'Unimplemented Operation.');
|
|
30
38
|
}
|
|
31
39
|
}
|
|
40
|
+
exports.UnimplementedError = UnimplementedError;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompressionAlgorithmCode = void 0;
|
|
4
|
+
var CompressionAlgorithmCode;
|
|
2
5
|
(function (CompressionAlgorithmCode) {
|
|
3
6
|
CompressionAlgorithmCode[CompressionAlgorithmCode["ZLIB"] = 3] = "ZLIB";
|
|
4
|
-
})(CompressionAlgorithmCode || (CompressionAlgorithmCode = {}));
|
|
7
|
+
})(CompressionAlgorithmCode = exports.CompressionAlgorithmCode || (exports.CompressionAlgorithmCode = {}));
|
package/build/parser/parser.js
CHANGED
|
@@ -1,24 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Parser = void 0;
|
|
4
|
+
const blueprint_reader_1 = require("./satisfactory/blueprint/blueprint-reader");
|
|
5
|
+
const blueprint_writer_1 = require("./satisfactory/blueprint/blueprint-writer");
|
|
6
|
+
const satisfactory_save_1 = require("./satisfactory/save/satisfactory-save");
|
|
7
|
+
const save_reader_1 = require("./satisfactory/save/save-reader");
|
|
8
|
+
const save_writer_1 = require("./satisfactory/save/save-writer");
|
|
6
9
|
class Parser {
|
|
7
10
|
static WriteSave(save, onBinaryBeforeCompressing, onHeader, onChunk) {
|
|
8
|
-
const writer = new SaveWriter();
|
|
9
|
-
SaveWriter.WriteHeader(writer, save.header);
|
|
11
|
+
const writer = new save_writer_1.SaveWriter();
|
|
12
|
+
save_writer_1.SaveWriter.WriteHeader(writer, save.header);
|
|
10
13
|
const posAfterHeader = writer.getBufferPosition();
|
|
11
|
-
SaveWriter.WriteSaveBodyHash(writer, save.gridHash);
|
|
12
|
-
SaveWriter.WriteGrids(writer, save.grids);
|
|
13
|
-
SaveWriter.WriteLevels(writer, save, save.header.buildVersion);
|
|
14
|
+
save_writer_1.SaveWriter.WriteSaveBodyHash(writer, save.gridHash);
|
|
15
|
+
save_writer_1.SaveWriter.WriteGrids(writer, save.grids);
|
|
16
|
+
save_writer_1.SaveWriter.WriteLevels(writer, save, save.header.buildVersion);
|
|
14
17
|
writer.endWriting();
|
|
15
18
|
const chunkSummary = writer.generateChunks(save.compressionInfo, posAfterHeader, onBinaryBeforeCompressing, onHeader, onChunk);
|
|
16
19
|
return chunkSummary;
|
|
17
20
|
}
|
|
18
21
|
static ParseSaveFile(name, file, onDecompressedSaveBody = () => { }, onProgress = () => { }) {
|
|
19
|
-
const reader = new SaveReader(new Uint8Array(file).buffer, onProgress);
|
|
22
|
+
const reader = new save_reader_1.SaveReader(new Uint8Array(file).buffer, onProgress);
|
|
20
23
|
const header = reader.readHeader();
|
|
21
|
-
const save = new SatisfactorySave(name, header);
|
|
24
|
+
const save = new satisfactory_save_1.SatisfactorySave(name, header);
|
|
22
25
|
const inflateResult = reader.inflateChunks();
|
|
23
26
|
onDecompressedSaveBody(reader.getBuffer());
|
|
24
27
|
const gridHash = reader.readSaveBodyHash();
|
|
@@ -31,16 +34,16 @@ class Parser {
|
|
|
31
34
|
return save;
|
|
32
35
|
}
|
|
33
36
|
static WriteBlueprintFiles(blueprint, onMainFileBinaryBeforeCompressing = () => { }, onMainFileHeader = () => { }, onMainFileChunk = () => { }) {
|
|
34
|
-
const blueprintWriter = new BlueprintWriter();
|
|
35
|
-
BlueprintWriter.SerializeHeader(blueprintWriter, blueprint.header);
|
|
37
|
+
const blueprintWriter = new blueprint_writer_1.BlueprintWriter();
|
|
38
|
+
blueprint_writer_1.BlueprintWriter.SerializeHeader(blueprintWriter, blueprint.header);
|
|
36
39
|
const saveBodyPos = blueprintWriter.getBufferPosition();
|
|
37
|
-
BlueprintWriter.SerializeObjects(blueprintWriter, blueprint.objects);
|
|
40
|
+
blueprint_writer_1.BlueprintWriter.SerializeObjects(blueprintWriter, blueprint.objects);
|
|
38
41
|
blueprintWriter.endWriting();
|
|
39
42
|
let binaryChunks = [];
|
|
40
43
|
let binaryHeader;
|
|
41
44
|
const mainFileChunkSummary = blueprintWriter.generateChunks(blueprint.compressionInfo, saveBodyPos, onMainFileBinaryBeforeCompressing, onMainFileHeader, onMainFileChunk);
|
|
42
|
-
const configWriter = new BlueprintConfigWriter();
|
|
43
|
-
BlueprintConfigWriter.SerializeConfig(configWriter, blueprint.config);
|
|
45
|
+
const configWriter = new blueprint_writer_1.BlueprintConfigWriter();
|
|
46
|
+
blueprint_writer_1.BlueprintConfigWriter.SerializeConfig(configWriter, blueprint.config);
|
|
44
47
|
const configFileBinary = configWriter.endWriting();
|
|
45
48
|
return {
|
|
46
49
|
mainFileChunkSummary,
|
|
@@ -48,13 +51,13 @@ class Parser {
|
|
|
48
51
|
};
|
|
49
52
|
}
|
|
50
53
|
static ParseBlueprintFiles(name, blueprintFile, blueprintConfigFile, onDecompressedBlueprintBody = () => { }) {
|
|
51
|
-
const blueprintConfigReader = new BlueprintConfigReader(new Uint8Array(blueprintConfigFile).buffer);
|
|
52
|
-
const config = BlueprintConfigReader.ParseConfig(blueprintConfigReader);
|
|
53
|
-
const blueprintReader = new BlueprintReader(new Uint8Array(blueprintFile).buffer);
|
|
54
|
-
const header = BlueprintReader.ReadHeader(blueprintReader);
|
|
54
|
+
const blueprintConfigReader = new blueprint_reader_1.BlueprintConfigReader(new Uint8Array(blueprintConfigFile).buffer);
|
|
55
|
+
const config = blueprint_reader_1.BlueprintConfigReader.ParseConfig(blueprintConfigReader);
|
|
56
|
+
const blueprintReader = new blueprint_reader_1.BlueprintReader(new Uint8Array(blueprintFile).buffer);
|
|
57
|
+
const header = blueprint_reader_1.BlueprintReader.ReadHeader(blueprintReader);
|
|
55
58
|
const inflateResult = blueprintReader.inflateChunks();
|
|
56
59
|
onDecompressedBlueprintBody(inflateResult.inflatedData);
|
|
57
|
-
const blueprintObjects = BlueprintReader.ParseObjects(blueprintReader);
|
|
60
|
+
const blueprintObjects = blueprint_reader_1.BlueprintReader.ParseObjects(blueprintReader);
|
|
58
61
|
const blueprint = {
|
|
59
62
|
name,
|
|
60
63
|
compressionInfo: blueprintReader.compressionInfo,
|
|
@@ -74,4 +77,4 @@ Parser.JSONStringifyModified = (obj, indent = 0) => JSON.stringify(obj, (key, va
|
|
|
74
77
|
}
|
|
75
78
|
return value;
|
|
76
79
|
}, indent);
|
|
77
|
-
|
|
80
|
+
exports.Parser = Parser;
|
|
@@ -1,25 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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.BlueprintConfigReader = exports.BlueprintReader = 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 SaveComponent_1 = require("../objects/SaveComponent");
|
|
12
|
+
const SaveEntity_1 = require("../objects/SaveEntity");
|
|
13
|
+
const level_class_1 = require("../save/level.class");
|
|
14
|
+
const save_reader_1 = require("../save/save-reader");
|
|
15
|
+
const util_types_1 = require("../structs/util.types");
|
|
16
|
+
class BlueprintReader extends byte_reader_class_1.ByteReader {
|
|
11
17
|
constructor(bluePrintBuffer) {
|
|
12
|
-
super(bluePrintBuffer, Alignment.LITTLE_ENDIAN);
|
|
18
|
+
super(bluePrintBuffer, alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
13
19
|
this.compressionInfo = {
|
|
14
20
|
packageFileTag: 0,
|
|
15
21
|
maxUncompressedChunkContentSize: 0,
|
|
16
|
-
chunkHeaderSize: DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE
|
|
22
|
+
chunkHeaderSize: save_reader_1.DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE
|
|
17
23
|
};
|
|
18
24
|
}
|
|
19
25
|
static ReadHeader(reader) {
|
|
20
26
|
const blueprintTypeOrWhat = reader.readBytes(4);
|
|
21
27
|
const versionThing = reader.readBytes(2 * 4);
|
|
22
|
-
const dimensions = ParseVec3f(reader);
|
|
28
|
+
const dimensions = (0, util_types_1.ParseVec3f)(reader);
|
|
23
29
|
let itemTypeCount = reader.readInt32();
|
|
24
30
|
const itemCosts = new Array(itemTypeCount).fill(['', 0]);
|
|
25
31
|
for (let i = 0; i < itemTypeCount; i++) {
|
|
@@ -53,13 +59,13 @@ export class BlueprintReader extends ByteReader {
|
|
|
53
59
|
this.currentByte = this.compressionInfo.chunkHeaderSize;
|
|
54
60
|
this.handledByte += this.compressionInfo.chunkHeaderSize;
|
|
55
61
|
if (this.compressionInfo.packageFileTag <= 0) {
|
|
56
|
-
this.compressionInfo.packageFileTag = chunkHeader.getUint32(0, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
62
|
+
this.compressionInfo.packageFileTag = chunkHeader.getUint32(0, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
57
63
|
}
|
|
58
64
|
if (this.compressionInfo.maxUncompressedChunkContentSize <= 0) {
|
|
59
|
-
this.compressionInfo.maxUncompressedChunkContentSize = chunkHeader.getInt32(8, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
65
|
+
this.compressionInfo.maxUncompressedChunkContentSize = chunkHeader.getInt32(8, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
60
66
|
}
|
|
61
|
-
const chunkCompressedLength = chunkHeader.getInt32(33, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
62
|
-
const chunkUncompressedLength = chunkHeader.getInt32(25, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
67
|
+
const chunkCompressedLength = chunkHeader.getInt32(33, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
68
|
+
const chunkUncompressedLength = chunkHeader.getInt32(25, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
63
69
|
totalUncompressedBodySize += chunkUncompressedLength;
|
|
64
70
|
const currentChunkSize = chunkCompressedLength;
|
|
65
71
|
let currentChunk = this.fileBuffer.slice(this.currentByte, this.currentByte + currentChunkSize);
|
|
@@ -69,11 +75,11 @@ export class BlueprintReader extends ByteReader {
|
|
|
69
75
|
this.currentByte = 0;
|
|
70
76
|
try {
|
|
71
77
|
let currentInflatedChunk = null;
|
|
72
|
-
currentInflatedChunk =
|
|
78
|
+
currentInflatedChunk = pako_1.default.inflate(currentChunk);
|
|
73
79
|
currentChunks.push(currentInflatedChunk);
|
|
74
80
|
}
|
|
75
81
|
catch (err) {
|
|
76
|
-
throw new ParserError('ParserError', 'An error occurred while calling pako inflate.' + err);
|
|
82
|
+
throw new parser_error_1.ParserError('ParserError', 'An error occurred while calling pako inflate.' + err);
|
|
77
83
|
}
|
|
78
84
|
}
|
|
79
85
|
let newChunkLength = currentChunks.map(cc => cc.length).reduce((prev, cur) => prev + cur);
|
|
@@ -96,7 +102,7 @@ export class BlueprintReader extends ByteReader {
|
|
|
96
102
|
const totalBodyRestSize = reader.readInt32();
|
|
97
103
|
const objectHeadersBinarySize = reader.readInt32();
|
|
98
104
|
let objects = [];
|
|
99
|
-
Level.ReadObjectHeaders(reader, objects, () => { });
|
|
105
|
+
level_class_1.Level.ReadObjectHeaders(reader, objects, () => { });
|
|
100
106
|
const someChecksumThing = reader.readInt32();
|
|
101
107
|
BlueprintReader.ReadBlueprintObjectContents(reader, objects, 0);
|
|
102
108
|
const pos = reader.getBufferPosition();
|
|
@@ -107,21 +113,22 @@ export class BlueprintReader extends ByteReader {
|
|
|
107
113
|
for (let i = 0; i < countEntities; i++) {
|
|
108
114
|
const len = reader.readInt32();
|
|
109
115
|
if (len === 0) {
|
|
110
|
-
throw new CorruptSaveError(`check number is a wrong value (${len}). This normally indicates a corrupt entity or blueprint.`);
|
|
116
|
+
throw new parser_error_1.CorruptSaveError(`check number is a wrong value (${len}). This normally indicates a corrupt entity or blueprint.`);
|
|
111
117
|
}
|
|
112
118
|
const obj = objectsList[i];
|
|
113
|
-
if (isSaveEntity(obj)) {
|
|
114
|
-
SaveEntity.ParseData(obj, len, reader, buildVersion, obj.typePath);
|
|
119
|
+
if ((0, SaveEntity_1.isSaveEntity)(obj)) {
|
|
120
|
+
SaveEntity_1.SaveEntity.ParseData(obj, len, reader, buildVersion, obj.typePath);
|
|
115
121
|
}
|
|
116
|
-
else if (isSaveComponent(obj)) {
|
|
117
|
-
SaveComponent.ParseData(obj, len, reader, buildVersion, obj.typePath);
|
|
122
|
+
else if ((0, SaveComponent_1.isSaveComponent)(obj)) {
|
|
123
|
+
SaveComponent_1.SaveComponent.ParseData(obj, len, reader, buildVersion, obj.typePath);
|
|
118
124
|
}
|
|
119
125
|
}
|
|
120
126
|
}
|
|
121
127
|
}
|
|
122
|
-
|
|
128
|
+
exports.BlueprintReader = BlueprintReader;
|
|
129
|
+
class BlueprintConfigReader extends byte_reader_class_1.ByteReader {
|
|
123
130
|
constructor(bluePrintConfigBuffer) {
|
|
124
|
-
super(bluePrintConfigBuffer, Alignment.LITTLE_ENDIAN);
|
|
131
|
+
super(bluePrintConfigBuffer, alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
125
132
|
this.bluePrintConfigBuffer = bluePrintConfigBuffer;
|
|
126
133
|
this.parse = () => BlueprintConfigReader.ParseConfig(this);
|
|
127
134
|
}
|
|
@@ -129,7 +136,7 @@ export class BlueprintConfigReader extends ByteReader {
|
|
|
129
136
|
const unk = reader.readInt32();
|
|
130
137
|
const description = reader.readString();
|
|
131
138
|
const unk3 = reader.readInt32();
|
|
132
|
-
const colorMaybe = ParseCol4RGBA(reader);
|
|
139
|
+
const colorMaybe = (0, util_types_1.ParseCol4RGBA)(reader);
|
|
133
140
|
return {
|
|
134
141
|
description,
|
|
135
142
|
color: colorMaybe,
|
|
@@ -137,3 +144,4 @@ export class BlueprintConfigReader extends ByteReader {
|
|
|
137
144
|
};
|
|
138
145
|
}
|
|
139
146
|
}
|
|
147
|
+
exports.BlueprintConfigReader = BlueprintConfigReader;
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BlueprintConfigWriter = exports.BlueprintWriter = void 0;
|
|
4
|
+
const alignment_enum_1 = require("../../byte/alignment.enum");
|
|
5
|
+
const byte_writer_class_1 = require("../../byte/byte-writer.class");
|
|
6
|
+
const parser_error_1 = require("../../error/parser.error");
|
|
7
|
+
const SaveComponent_1 = require("../objects/SaveComponent");
|
|
8
|
+
const SaveEntity_1 = require("../objects/SaveEntity");
|
|
9
|
+
const level_class_1 = require("../save/level.class");
|
|
10
|
+
const save_writer_1 = require("../save/save-writer");
|
|
11
|
+
const util_types_1 = require("../structs/util.types");
|
|
12
|
+
class BlueprintWriter extends byte_writer_class_1.ByteWriter {
|
|
10
13
|
constructor() {
|
|
11
|
-
super(Alignment.LITTLE_ENDIAN);
|
|
14
|
+
super(alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
12
15
|
}
|
|
13
16
|
static SerializeHeader(writer, header) {
|
|
14
17
|
writer.writeInt32(2);
|
|
@@ -36,18 +39,18 @@ export class BlueprintWriter extends ByteWriter {
|
|
|
36
39
|
}
|
|
37
40
|
generateChunks(compressionInfo, posAfterHeader, onBinaryBeforeCompressing, onHeader, onChunk) {
|
|
38
41
|
if (posAfterHeader <= 0) {
|
|
39
|
-
throw new ParserError('ParserError', 'seems like this buffer has no header. Please write the header first before you can generate chunks.');
|
|
42
|
+
throw new parser_error_1.ParserError('ParserError', 'seems like this buffer has no header. Please write the header first before you can generate chunks.');
|
|
40
43
|
}
|
|
41
44
|
const header = new Uint8Array(this.bufferArray.slice(0, posAfterHeader));
|
|
42
45
|
onHeader(header);
|
|
43
46
|
this.bufferArray = this.bufferArray.slice(posAfterHeader);
|
|
44
|
-
const chunkSummary = SaveWriter.GenerateCompressedChunksFromData(this.bufferArray, compressionInfo, onBinaryBeforeCompressing, onChunk, this.alignment);
|
|
47
|
+
const chunkSummary = save_writer_1.SaveWriter.GenerateCompressedChunksFromData(this.bufferArray, compressionInfo, onBinaryBeforeCompressing, onChunk, this.alignment);
|
|
45
48
|
return chunkSummary;
|
|
46
49
|
}
|
|
47
50
|
static SerializeObjects(writer, objects) {
|
|
48
51
|
const headersLenIndicator = writer.getBufferPosition();
|
|
49
52
|
writer.writeInt32(0);
|
|
50
|
-
Level.SerializeObjectHeaders(writer, objects);
|
|
53
|
+
level_class_1.Level.SerializeObjectHeaders(writer, objects);
|
|
51
54
|
writer.writeBinarySizeFromPosition(headersLenIndicator, headersLenIndicator + 4);
|
|
52
55
|
BlueprintWriter.SerializeObjectContents(writer, objects, 0, '');
|
|
53
56
|
}
|
|
@@ -58,25 +61,27 @@ export class BlueprintWriter extends ByteWriter {
|
|
|
58
61
|
for (const obj of objects) {
|
|
59
62
|
const lenReplacementPosition = writer.getBufferPosition();
|
|
60
63
|
writer.writeInt32(0);
|
|
61
|
-
if (isSaveEntity(obj)) {
|
|
62
|
-
SaveEntity.SerializeData(writer, obj, buildVersion);
|
|
64
|
+
if ((0, SaveEntity_1.isSaveEntity)(obj)) {
|
|
65
|
+
SaveEntity_1.SaveEntity.SerializeData(writer, obj, buildVersion);
|
|
63
66
|
}
|
|
64
|
-
else if (isSaveComponent(obj)) {
|
|
65
|
-
SaveComponent.SerializeData(writer, obj, buildVersion);
|
|
67
|
+
else if ((0, SaveComponent_1.isSaveComponent)(obj)) {
|
|
68
|
+
SaveComponent_1.SaveComponent.SerializeData(writer, obj, buildVersion);
|
|
66
69
|
}
|
|
67
70
|
writer.writeBinarySizeFromPosition(lenReplacementPosition, lenReplacementPosition + 4);
|
|
68
71
|
}
|
|
69
72
|
writer.writeBinarySizeFromPosition(lenIndicatorEntities, lenIndicatorEntities + 4);
|
|
70
73
|
}
|
|
71
74
|
}
|
|
72
|
-
|
|
75
|
+
exports.BlueprintWriter = BlueprintWriter;
|
|
76
|
+
class BlueprintConfigWriter extends byte_writer_class_1.ByteWriter {
|
|
73
77
|
constructor() {
|
|
74
|
-
super(Alignment.LITTLE_ENDIAN);
|
|
78
|
+
super(alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
75
79
|
}
|
|
76
80
|
static SerializeConfig(writer, config) {
|
|
77
81
|
writer.writeInt32(2);
|
|
78
82
|
writer.writeString(config.description);
|
|
79
83
|
writer.writeInt32(config.iconID);
|
|
80
|
-
SerializeCol4RGBA(writer, config.color);
|
|
84
|
+
(0, util_types_1.SerializeCol4RGBA)(writer, config.color);
|
|
81
85
|
}
|
|
82
86
|
}
|
|
87
|
+
exports.BlueprintConfigWriter = BlueprintConfigWriter;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|