@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.
- 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 -1
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SerializeTransform = exports.ParseTransform = exports.SerializeVec2f = exports.ParseVec2f = exports.SerializeVec2 = exports.ParseVec2 = exports.SerializeVec3f = exports.ParseVec3f = exports.SerializeVec3 = exports.ParseVec3 = exports.norm = exports.mult = exports.length = exports.add = exports.sub = exports.SerializeVec4f = exports.ParseVec4f = exports.SerializeVec4 = exports.ParseVec4 = exports.ParseCol4BGRA = exports.SerializeCol4BGRA = exports.ParseCol4RGBA = exports.SerializeCol4RGBA = void 0;
|
|
4
|
+
const SerializeCol4RGBA = (writer, value) => {
|
|
2
5
|
writer.writeFloat(value.r);
|
|
3
6
|
writer.writeFloat(value.g);
|
|
4
7
|
writer.writeFloat(value.b);
|
|
5
8
|
writer.writeFloat(value.a);
|
|
6
9
|
};
|
|
7
|
-
|
|
10
|
+
exports.SerializeCol4RGBA = SerializeCol4RGBA;
|
|
11
|
+
const ParseCol4RGBA = (reader) => {
|
|
8
12
|
return {
|
|
9
13
|
r: reader.readFloat32(),
|
|
10
14
|
g: reader.readFloat32(),
|
|
@@ -12,13 +16,15 @@ export const ParseCol4RGBA = (reader) => {
|
|
|
12
16
|
a: reader.readFloat32(),
|
|
13
17
|
};
|
|
14
18
|
};
|
|
15
|
-
|
|
19
|
+
exports.ParseCol4RGBA = ParseCol4RGBA;
|
|
20
|
+
const SerializeCol4BGRA = (writer, value) => {
|
|
16
21
|
writer.writeByte(value.b);
|
|
17
22
|
writer.writeByte(value.g);
|
|
18
23
|
writer.writeByte(value.r);
|
|
19
24
|
writer.writeByte(value.a);
|
|
20
25
|
};
|
|
21
|
-
|
|
26
|
+
exports.SerializeCol4BGRA = SerializeCol4BGRA;
|
|
27
|
+
const ParseCol4BGRA = (reader) => {
|
|
22
28
|
return {
|
|
23
29
|
b: reader.readByte(),
|
|
24
30
|
g: reader.readByte(),
|
|
@@ -26,80 +32,100 @@ export const ParseCol4BGRA = (reader) => {
|
|
|
26
32
|
a: reader.readByte(),
|
|
27
33
|
};
|
|
28
34
|
};
|
|
29
|
-
|
|
35
|
+
exports.ParseCol4BGRA = ParseCol4BGRA;
|
|
36
|
+
const ParseVec4 = (reader) => {
|
|
30
37
|
return {
|
|
31
|
-
...(ParseVec3(reader)),
|
|
38
|
+
...((0, exports.ParseVec3)(reader)),
|
|
32
39
|
w: reader.readDouble()
|
|
33
40
|
};
|
|
34
41
|
};
|
|
35
|
-
|
|
36
|
-
|
|
42
|
+
exports.ParseVec4 = ParseVec4;
|
|
43
|
+
const SerializeVec4 = (writer, vec) => {
|
|
44
|
+
(0, exports.SerializeVec3)(writer, vec);
|
|
37
45
|
writer.writeDouble(vec.w);
|
|
38
46
|
};
|
|
39
|
-
|
|
47
|
+
exports.SerializeVec4 = SerializeVec4;
|
|
48
|
+
const ParseVec4f = (reader) => {
|
|
40
49
|
return {
|
|
41
|
-
...(ParseVec3f(reader)),
|
|
50
|
+
...((0, exports.ParseVec3f)(reader)),
|
|
42
51
|
w: reader.readFloat32()
|
|
43
52
|
};
|
|
44
53
|
};
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
exports.ParseVec4f = ParseVec4f;
|
|
55
|
+
const SerializeVec4f = (writer, vec) => {
|
|
56
|
+
(0, exports.SerializeVec3f)(writer, vec);
|
|
47
57
|
writer.writeFloat(vec.w);
|
|
48
58
|
};
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
59
|
+
exports.SerializeVec4f = SerializeVec4f;
|
|
60
|
+
const sub = (other, vec) => ({ x: other.x - vec.x, y: other.y - vec.y, z: other.z - vec.z });
|
|
61
|
+
exports.sub = sub;
|
|
62
|
+
const add = (vec, other) => ({ x: vec.x + other.x, y: vec.y + other.y, z: vec.z + other.z });
|
|
63
|
+
exports.add = add;
|
|
64
|
+
const length = (vec) => Math.sqrt(vec.x ** 2 + vec.y ** 2 + vec.z ** 2);
|
|
65
|
+
exports.length = length;
|
|
66
|
+
const mult = (vec, scale) => ({ x: vec.x * scale, y: vec.y * scale, z: vec.z * scale });
|
|
67
|
+
exports.mult = mult;
|
|
68
|
+
const norm = (vec) => (0, exports.mult)(vec, 1. / (0, exports.length)(vec));
|
|
69
|
+
exports.norm = norm;
|
|
70
|
+
const ParseVec3 = (reader) => {
|
|
55
71
|
return {
|
|
56
|
-
...(ParseVec2(reader)),
|
|
72
|
+
...((0, exports.ParseVec2)(reader)),
|
|
57
73
|
z: reader.readDouble()
|
|
58
74
|
};
|
|
59
75
|
};
|
|
60
|
-
|
|
61
|
-
|
|
76
|
+
exports.ParseVec3 = ParseVec3;
|
|
77
|
+
const SerializeVec3 = (writer, vec) => {
|
|
78
|
+
(0, exports.SerializeVec2)(writer, vec);
|
|
62
79
|
writer.writeDouble(vec.z);
|
|
63
80
|
};
|
|
64
|
-
|
|
81
|
+
exports.SerializeVec3 = SerializeVec3;
|
|
82
|
+
const ParseVec3f = (reader) => {
|
|
65
83
|
return {
|
|
66
|
-
...(ParseVec2f(reader)),
|
|
84
|
+
...((0, exports.ParseVec2f)(reader)),
|
|
67
85
|
z: reader.readFloat32()
|
|
68
86
|
};
|
|
69
87
|
};
|
|
70
|
-
|
|
71
|
-
|
|
88
|
+
exports.ParseVec3f = ParseVec3f;
|
|
89
|
+
const SerializeVec3f = (writer, vec) => {
|
|
90
|
+
(0, exports.SerializeVec2f)(writer, vec);
|
|
72
91
|
writer.writeFloat(vec.z);
|
|
73
92
|
};
|
|
74
|
-
|
|
93
|
+
exports.SerializeVec3f = SerializeVec3f;
|
|
94
|
+
const ParseVec2 = (reader) => {
|
|
75
95
|
return {
|
|
76
96
|
x: reader.readDouble(),
|
|
77
97
|
y: reader.readDouble(),
|
|
78
98
|
};
|
|
79
99
|
};
|
|
80
|
-
|
|
100
|
+
exports.ParseVec2 = ParseVec2;
|
|
101
|
+
const SerializeVec2 = (writer, vec) => {
|
|
81
102
|
writer.writeDouble(vec.x);
|
|
82
103
|
writer.writeDouble(vec.y);
|
|
83
104
|
};
|
|
84
|
-
|
|
105
|
+
exports.SerializeVec2 = SerializeVec2;
|
|
106
|
+
const ParseVec2f = (reader) => {
|
|
85
107
|
return {
|
|
86
108
|
x: reader.readFloat32(),
|
|
87
109
|
y: reader.readFloat32(),
|
|
88
110
|
};
|
|
89
111
|
};
|
|
90
|
-
|
|
112
|
+
exports.ParseVec2f = ParseVec2f;
|
|
113
|
+
const SerializeVec2f = (writer, vec) => {
|
|
91
114
|
writer.writeFloat(vec.x);
|
|
92
115
|
writer.writeFloat(vec.y);
|
|
93
116
|
};
|
|
94
|
-
|
|
117
|
+
exports.SerializeVec2f = SerializeVec2f;
|
|
118
|
+
const ParseTransform = (reader) => {
|
|
95
119
|
return {
|
|
96
|
-
rotation: ParseVec4f(reader),
|
|
97
|
-
translation: ParseVec3f(reader),
|
|
98
|
-
scale3d: ParseVec3f(reader),
|
|
120
|
+
rotation: (0, exports.ParseVec4f)(reader),
|
|
121
|
+
translation: (0, exports.ParseVec3f)(reader),
|
|
122
|
+
scale3d: (0, exports.ParseVec3f)(reader),
|
|
99
123
|
};
|
|
100
124
|
};
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
SerializeVec3f(writer, transform.
|
|
125
|
+
exports.ParseTransform = ParseTransform;
|
|
126
|
+
const SerializeTransform = (writer, transform) => {
|
|
127
|
+
(0, exports.SerializeVec4f)(writer, transform.rotation);
|
|
128
|
+
(0, exports.SerializeVec3f)(writer, transform.translation);
|
|
129
|
+
(0, exports.SerializeVec3f)(writer, transform.scale3d);
|
|
105
130
|
};
|
|
131
|
+
exports.SerializeTransform = SerializeTransform;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ByteStreamReader = 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
|
+
class ByteStreamReader {
|
|
8
|
+
constructor(reader, onCloseCallback, timeout = 30000, maxBufferThreshold = 100 * 1000 * 1000, alignment = alignment_enum_1.Alignment.LITTLE_ENDIAN) {
|
|
6
9
|
this.reader = reader;
|
|
7
10
|
this.onCloseCallback = onCloseCallback;
|
|
8
11
|
this.timeout = timeout;
|
|
@@ -18,7 +21,7 @@ export class ByteStreamReader {
|
|
|
18
21
|
if (!this.inputStreamIsDone) {
|
|
19
22
|
if (value) {
|
|
20
23
|
const trailingPos = Math.max(0, this.currentByte - this.trailingBufferSize);
|
|
21
|
-
this.operatingStreamBuffer = new Uint8Array(ByteWriter.AppendBuffer(this.operatingStreamBuffer.slice(trailingPos), value));
|
|
24
|
+
this.operatingStreamBuffer = new Uint8Array(byte_writer_class_1.ByteWriter.AppendBuffer(this.operatingStreamBuffer.slice(trailingPos), value));
|
|
22
25
|
this.operatingDataView = new DataView(this.operatingStreamBuffer.buffer);
|
|
23
26
|
this.currentByte = Math.min(this.currentByte, this.trailingBufferSize);
|
|
24
27
|
if (this.operatingStreamBuffer.byteLength > this.maxBufferThreshold) {
|
|
@@ -76,7 +79,7 @@ export class ByteStreamReader {
|
|
|
76
79
|
}
|
|
77
80
|
if (this.getAmountAllocatedLeft() < count) {
|
|
78
81
|
if (this.inputStreamIsDone) {
|
|
79
|
-
throw new CorruptSaveError('Input Stream has finished before needed data was received.');
|
|
82
|
+
throw new parser_error_1.CorruptSaveError('Input Stream has finished before needed data was received.');
|
|
80
83
|
}
|
|
81
84
|
if (this.paused) {
|
|
82
85
|
this.resume();
|
|
@@ -106,7 +109,7 @@ export class ByteStreamReader {
|
|
|
106
109
|
}
|
|
107
110
|
this.waitingTimeoutHandle = setTimeout(() => {
|
|
108
111
|
if (!this.inputStreamIsDone) {
|
|
109
|
-
reject(new TimeoutError(`Timed out before ${this.neededNextAmountOfBytes} bytes were available to read next.`));
|
|
112
|
+
reject(new parser_error_1.TimeoutError(`Timed out before ${this.neededNextAmountOfBytes} bytes were available to read next.`));
|
|
110
113
|
}
|
|
111
114
|
return resolve();
|
|
112
115
|
}, this.timeout);
|
|
@@ -146,31 +149,31 @@ export class ByteStreamReader {
|
|
|
146
149
|
}
|
|
147
150
|
readInt16() {
|
|
148
151
|
this.totalNumberOfBytesRead += 2;
|
|
149
|
-
let data = this.operatingDataView.getInt16(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
152
|
+
let data = this.operatingDataView.getInt16(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
150
153
|
this.currentByte += 2;
|
|
151
154
|
return data;
|
|
152
155
|
}
|
|
153
156
|
readUint16() {
|
|
154
157
|
this.totalNumberOfBytesRead += 2;
|
|
155
|
-
let data = this.operatingDataView.getUint16(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
158
|
+
let data = this.operatingDataView.getUint16(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
156
159
|
this.currentByte += 2;
|
|
157
160
|
return data;
|
|
158
161
|
}
|
|
159
162
|
readInt32() {
|
|
160
163
|
this.totalNumberOfBytesRead += 4;
|
|
161
|
-
let data = this.operatingDataView.getInt32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
164
|
+
let data = this.operatingDataView.getInt32(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
162
165
|
this.currentByte += 4;
|
|
163
166
|
return data;
|
|
164
167
|
}
|
|
165
168
|
readUint32() {
|
|
166
169
|
this.totalNumberOfBytesRead += 4;
|
|
167
|
-
let data = this.operatingDataView.getUint32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
170
|
+
let data = this.operatingDataView.getUint32(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
168
171
|
this.currentByte += 4;
|
|
169
172
|
return data;
|
|
170
173
|
}
|
|
171
174
|
readLong() {
|
|
172
175
|
this.totalNumberOfBytesRead += 8;
|
|
173
|
-
let data = this.operatingDataView.getBigInt64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
176
|
+
let data = this.operatingDataView.getBigInt64(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
174
177
|
this.currentByte += 8;
|
|
175
178
|
return data;
|
|
176
179
|
}
|
|
@@ -179,19 +182,19 @@ export class ByteStreamReader {
|
|
|
179
182
|
}
|
|
180
183
|
readUint64() {
|
|
181
184
|
this.totalNumberOfBytesRead += 8;
|
|
182
|
-
let data = this.operatingDataView.getBigUint64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
185
|
+
let data = this.operatingDataView.getBigUint64(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
183
186
|
this.currentByte += 8;
|
|
184
187
|
return data;
|
|
185
188
|
}
|
|
186
189
|
readFloat32() {
|
|
187
190
|
this.totalNumberOfBytesRead += 4;
|
|
188
|
-
let data = this.operatingDataView.getFloat32(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
191
|
+
let data = this.operatingDataView.getFloat32(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
189
192
|
this.currentByte += 4;
|
|
190
193
|
return data;
|
|
191
194
|
}
|
|
192
195
|
readDouble() {
|
|
193
196
|
this.totalNumberOfBytesRead += 8;
|
|
194
|
-
let data = this.operatingDataView.getFloat64(this.currentByte, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
197
|
+
let data = this.operatingDataView.getFloat64(this.currentByte, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
195
198
|
this.currentByte += 8;
|
|
196
199
|
return data;
|
|
197
200
|
}
|
|
@@ -226,7 +229,7 @@ export class ByteStreamReader {
|
|
|
226
229
|
return this.totalNumberOfBytesRead;
|
|
227
230
|
}
|
|
228
231
|
getBufferProgress() {
|
|
229
|
-
throw new UnimplementedError();
|
|
232
|
+
throw new parser_error_1.UnimplementedError();
|
|
230
233
|
}
|
|
231
234
|
getBufferLength() {
|
|
232
235
|
return this.operatingStreamBuffer.byteLength;
|
|
@@ -235,3 +238,4 @@ export class ByteStreamReader {
|
|
|
235
238
|
return this.operatingStreamBuffer.byteLength - this.currentByte;
|
|
236
239
|
}
|
|
237
240
|
}
|
|
241
|
+
exports.ByteStreamReader = ByteStreamReader;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonStreamStateWriter = void 0;
|
|
4
|
+
const json_stream_writable_1 = require("./json-stream-writable");
|
|
5
|
+
class JsonStreamStateWriter extends json_stream_writable_1.JsonStreamWritable {
|
|
3
6
|
constructor(pushWritable, startState) {
|
|
4
7
|
super(pushWritable);
|
|
5
8
|
this.currentState = startState;
|
|
@@ -12,3 +15,4 @@ export class JsonStreamStateWriter extends JsonStreamWritable {
|
|
|
12
15
|
this.currentState = transition.assignOnFinish;
|
|
13
16
|
}
|
|
14
17
|
}
|
|
18
|
+
exports.JsonStreamStateWriter = JsonStreamStateWriter;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonStreamWritable = void 0;
|
|
4
|
+
class JsonStreamWritable {
|
|
2
5
|
constructor(pushWritable) {
|
|
3
6
|
this.pushWritable = pushWritable;
|
|
4
7
|
this.isValid = () => this.openedSymbols.length === 0;
|
|
@@ -77,3 +80,4 @@ export class JsonStreamWritable {
|
|
|
77
80
|
return;
|
|
78
81
|
}
|
|
79
82
|
}
|
|
83
|
+
exports.JsonStreamWritable = JsonStreamWritable;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonStreamWriter = void 0;
|
|
4
|
+
const json_stream_state_writer_1 = require("./json-stream-state-writer");
|
|
5
|
+
class JsonStreamWriter extends json_stream_state_writer_1.JsonStreamStateWriter {
|
|
3
6
|
constructor(writer) {
|
|
4
7
|
super(async (value) => await writer.write(value), 'BEFORE_START');
|
|
5
8
|
this.writer = writer;
|
|
@@ -121,3 +124,4 @@ export class JsonStreamWriter extends JsonStreamStateWriter {
|
|
|
121
124
|
await this.useTransition(this.stateMachine.closeSave);
|
|
122
125
|
}
|
|
123
126
|
}
|
|
127
|
+
exports.JsonStreamWriter = JsonStreamWriter;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var _a;
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ReadableStreamParser = void 0;
|
|
5
|
+
const satisfactory_save_1 = require("../../satisfactory/save/satisfactory-save");
|
|
6
|
+
const save_reader_1 = require("../../satisfactory/save/save-reader");
|
|
7
|
+
const web_streams_polyfill_1 = require("web-streams-polyfill");
|
|
8
|
+
const SaveComponent_1 = require("../../satisfactory/objects/SaveComponent");
|
|
9
|
+
const SaveEntity_1 = require("../../satisfactory/objects/SaveEntity");
|
|
10
|
+
const level_class_1 = require("../../satisfactory/save/level.class");
|
|
8
11
|
const DEFAULT_BYTE_HIGHWATERMARK = 1024 * 1024 * 200;
|
|
9
12
|
const createStringLengthQueuingStrategy = (highWaterMark = DEFAULT_BYTE_HIGHWATERMARK / 4) => ({
|
|
10
13
|
highWaterMark,
|
|
@@ -94,7 +97,7 @@ class ReadableStreamParser {
|
|
|
94
97
|
writtenObjectsInLevel += objectCountToRead;
|
|
95
98
|
} while (totalReadObjectsInLevel < countObjectHeaders);
|
|
96
99
|
await write('], "collectables": [', false);
|
|
97
|
-
const collectables = Level.ReadCollectablesList(reader);
|
|
100
|
+
const collectables = level_class_1.Level.ReadCollectablesList(reader);
|
|
98
101
|
await write(`${collectables.map(obj => JSON.stringify(obj)).join(', ')}`, true);
|
|
99
102
|
await write(']', false);
|
|
100
103
|
await write('}', false);
|
|
@@ -104,7 +107,7 @@ class ReadableStreamParser {
|
|
|
104
107
|
_a = ReadableStreamParser;
|
|
105
108
|
ReadableStreamParser.CreateReadableStreamForParsingSave = (onStart, onCancel, onPullRequest, highWaterMark = DEFAULT_BYTE_HIGHWATERMARK / 4) => {
|
|
106
109
|
let ourController = null;
|
|
107
|
-
const stream = new ReadableStream({
|
|
110
|
+
const stream = new web_streams_polyfill_1.ReadableStream({
|
|
108
111
|
start: (controller) => {
|
|
109
112
|
ourController = controller;
|
|
110
113
|
onStart(ourController);
|
|
@@ -145,9 +148,9 @@ ReadableStreamParser.CreateReadableStreamFromSaveToJson = (name, bytes, onDecomp
|
|
|
145
148
|
controller.enqueue(value);
|
|
146
149
|
};
|
|
147
150
|
const startStreaming = async () => {
|
|
148
|
-
const reader = new SaveReader(bytes.buffer, onProgress);
|
|
151
|
+
const reader = new save_reader_1.SaveReader(bytes.buffer, onProgress);
|
|
149
152
|
const header = reader.readHeader();
|
|
150
|
-
const save = new SatisfactorySave(name, header);
|
|
153
|
+
const save = new satisfactory_save_1.SatisfactorySave(name, header);
|
|
151
154
|
const inflateResult = reader.inflateChunks();
|
|
152
155
|
onDecompressedSaveBody(reader.getBuffer());
|
|
153
156
|
const gridHash = reader.readSaveBodyHash();
|
|
@@ -169,13 +172,13 @@ ReadableStreamParser.ReadNObjectHeaders = (reader, count) => {
|
|
|
169
172
|
let obj;
|
|
170
173
|
let objectType = reader.readInt32();
|
|
171
174
|
switch (objectType) {
|
|
172
|
-
case SaveEntity.TypeID:
|
|
173
|
-
obj = new SaveEntity('', '', '', '');
|
|
174
|
-
SaveEntity.ParseHeader(reader, obj);
|
|
175
|
+
case SaveEntity_1.SaveEntity.TypeID:
|
|
176
|
+
obj = new SaveEntity_1.SaveEntity('', '', '', '');
|
|
177
|
+
SaveEntity_1.SaveEntity.ParseHeader(reader, obj);
|
|
175
178
|
break;
|
|
176
|
-
case SaveComponent.TypeID:
|
|
177
|
-
obj = new SaveComponent('', '', '', '');
|
|
178
|
-
SaveComponent.ParseHeader(reader, obj);
|
|
179
|
+
case SaveComponent_1.SaveComponent.TypeID:
|
|
180
|
+
obj = new SaveComponent_1.SaveComponent('', '', '', '');
|
|
181
|
+
SaveComponent_1.SaveComponent.ParseHeader(reader, obj);
|
|
179
182
|
break;
|
|
180
183
|
default:
|
|
181
184
|
throw new Error('Unknown object type' + objectType);
|
|
@@ -190,12 +193,12 @@ ReadableStreamParser.ReadNObjects = (reader, count, objects, buildVersion) => {
|
|
|
190
193
|
objects[i].unknownType2 = reader.readInt32();
|
|
191
194
|
const binarySize = reader.readInt32();
|
|
192
195
|
const before = reader.getBufferPosition();
|
|
193
|
-
if (isSaveEntity(objects[i])) {
|
|
194
|
-
SaveEntity.ParseData(objects[i], binarySize, reader, buildVersion, objects[i].typePath);
|
|
196
|
+
if ((0, SaveEntity_1.isSaveEntity)(objects[i])) {
|
|
197
|
+
SaveEntity_1.SaveEntity.ParseData(objects[i], binarySize, reader, buildVersion, objects[i].typePath);
|
|
195
198
|
}
|
|
196
|
-
else if (isSaveComponent(objects[i])) {
|
|
197
|
-
SaveComponent.ParseData(objects[i], binarySize, reader, buildVersion, objects[i].typePath);
|
|
199
|
+
else if ((0, SaveComponent_1.isSaveComponent)(objects[i])) {
|
|
200
|
+
SaveComponent_1.SaveComponent.ParseData(objects[i], binarySize, reader, buildVersion, objects[i].typePath);
|
|
198
201
|
}
|
|
199
202
|
}
|
|
200
203
|
};
|
|
201
|
-
|
|
204
|
+
exports.ReadableStreamParser = ReadableStreamParser;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StreamParser = void 0;
|
|
4
|
+
const __1 = require("../../..");
|
|
5
|
+
const SaveComponent_1 = require("../../satisfactory/objects/SaveComponent");
|
|
6
|
+
const SaveEntity_1 = require("../../satisfactory/objects/SaveEntity");
|
|
4
7
|
class StreamParser {
|
|
5
8
|
static async ParseSaveFileToJsonStream(name, bytes, outputJson, onDecompressedSaveBody = () => { }, onProgress = () => { }) {
|
|
6
|
-
const reader = new SaveReader(bytes.buffer, onProgress);
|
|
9
|
+
const reader = new __1.SaveReader(bytes.buffer, onProgress);
|
|
7
10
|
const writer = outputJson.getWriter();
|
|
8
11
|
const header = reader.readHeader();
|
|
9
|
-
const save = new SatisfactorySave(name, header);
|
|
12
|
+
const save = new __1.SatisfactorySave(name, header);
|
|
10
13
|
const inflateResult = reader.inflateChunks();
|
|
11
14
|
onDecompressedSaveBody(reader.getBuffer());
|
|
12
15
|
const gridHash = reader.readSaveBodyHash();
|
|
@@ -60,7 +63,7 @@ class StreamParser {
|
|
|
60
63
|
await writer.write(`${objects.map(obj => JSON.stringify(obj)).join(', ')}`);
|
|
61
64
|
} while (totalReadObjects < countObjectHeaders);
|
|
62
65
|
await writer.write('], "collectables": [');
|
|
63
|
-
const collectables = Level.ReadCollectablesList(reader);
|
|
66
|
+
const collectables = __1.Level.ReadCollectablesList(reader);
|
|
64
67
|
await writer.write(`${collectables.map(obj => JSON.stringify(obj)).join(', ')}`);
|
|
65
68
|
await writer.write(']');
|
|
66
69
|
await writer.write('}');
|
|
@@ -74,13 +77,13 @@ StreamParser.ReadNObjectHeaders = (reader, count) => {
|
|
|
74
77
|
let obj;
|
|
75
78
|
let objectType = reader.readInt32();
|
|
76
79
|
switch (objectType) {
|
|
77
|
-
case SaveEntity.TypeID:
|
|
78
|
-
obj = new SaveEntity('', '', '', '');
|
|
79
|
-
SaveEntity.ParseHeader(reader, obj);
|
|
80
|
+
case __1.SaveEntity.TypeID:
|
|
81
|
+
obj = new __1.SaveEntity('', '', '', '');
|
|
82
|
+
__1.SaveEntity.ParseHeader(reader, obj);
|
|
80
83
|
break;
|
|
81
|
-
case SaveComponent.TypeID:
|
|
82
|
-
obj = new SaveComponent('', '', '', '');
|
|
83
|
-
SaveComponent.ParseHeader(reader, obj);
|
|
84
|
+
case __1.SaveComponent.TypeID:
|
|
85
|
+
obj = new __1.SaveComponent('', '', '', '');
|
|
86
|
+
__1.SaveComponent.ParseHeader(reader, obj);
|
|
84
87
|
break;
|
|
85
88
|
default:
|
|
86
89
|
throw new Error('Unknown object type' + objectType);
|
|
@@ -95,12 +98,12 @@ StreamParser.ReadNObjects = (reader, count, objects, buildVersion) => {
|
|
|
95
98
|
objects[i].unknownType2 = reader.readInt32();
|
|
96
99
|
const binarySize = reader.readInt32();
|
|
97
100
|
const before = reader.getBufferPosition();
|
|
98
|
-
if (isSaveEntity(objects[i])) {
|
|
99
|
-
SaveEntity.ParseData(objects[i], binarySize, reader, buildVersion, objects[i].typePath);
|
|
101
|
+
if ((0, SaveEntity_1.isSaveEntity)(objects[i])) {
|
|
102
|
+
__1.SaveEntity.ParseData(objects[i], binarySize, reader, buildVersion, objects[i].typePath);
|
|
100
103
|
}
|
|
101
|
-
else if (isSaveComponent(objects[i])) {
|
|
102
|
-
SaveComponent.ParseData(objects[i], binarySize, reader, buildVersion, objects[i].typePath);
|
|
104
|
+
else if ((0, SaveComponent_1.isSaveComponent)(objects[i])) {
|
|
105
|
+
__1.SaveComponent.ParseData(objects[i], binarySize, reader, buildVersion, objects[i].typePath);
|
|
103
106
|
}
|
|
104
107
|
}
|
|
105
108
|
};
|
|
106
|
-
|
|
109
|
+
exports.StreamParser = StreamParser;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SaveStreamJsonStringifier = void 0;
|
|
4
|
+
const save_stream_writer_class_1 = require("./save-stream-writer.class");
|
|
5
|
+
class SaveStreamJsonStringifier {
|
|
3
6
|
static async StreamStringifySave(save, output) {
|
|
4
|
-
const writer = new SaveStreamWriter(output.getWriter());
|
|
7
|
+
const writer = new save_stream_writer_class_1.SaveStreamWriter(output.getWriter());
|
|
5
8
|
await writer.beginSave();
|
|
6
9
|
await writer.writeHeader(save.header);
|
|
7
10
|
if (save.compressionInfo) {
|
|
@@ -29,3 +32,4 @@ export class SaveStreamJsonStringifier {
|
|
|
29
32
|
await writer.close();
|
|
30
33
|
}
|
|
31
34
|
}
|
|
35
|
+
exports.SaveStreamJsonStringifier = SaveStreamJsonStringifier;
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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.SaveStreamReader = void 0;
|
|
7
|
+
const pako_1 = __importDefault(require("pako"));
|
|
8
|
+
const __1 = require("../..");
|
|
9
|
+
const alignment_enum_1 = require("../byte/alignment.enum");
|
|
10
|
+
const byte_stream_reader_class_1 = require("./byte-stream-reader.class");
|
|
11
|
+
const stream_level_class_1 = require("./stream-level.class");
|
|
12
|
+
class SaveStreamReader extends byte_stream_reader_class_1.ByteStreamReader {
|
|
7
13
|
constructor(reader, maxBufferThreshold, onCloseCallback = async () => { }) {
|
|
8
|
-
super(reader, onCloseCallback, 30000, maxBufferThreshold, Alignment.LITTLE_ENDIAN);
|
|
14
|
+
super(reader, onCloseCallback, 30000, maxBufferThreshold, alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
9
15
|
this.compressionInfo = {
|
|
10
16
|
packageFileTag: 0,
|
|
11
17
|
maxUncompressedChunkContentSize: 0,
|
|
@@ -55,7 +61,7 @@ class SaveStreamReader extends ByteStreamReader {
|
|
|
55
61
|
if (header.saveVersion >= 21) {
|
|
56
62
|
}
|
|
57
63
|
else {
|
|
58
|
-
throw new UnsupportedVersionError("The save version is too old to support encoding currently. Save in newer game version.");
|
|
64
|
+
throw new __1.UnsupportedVersionError("The save version is too old to support encoding currently. Save in newer game version.");
|
|
59
65
|
}
|
|
60
66
|
return header;
|
|
61
67
|
}
|
|
@@ -65,22 +71,22 @@ class SaveStreamReader extends ByteStreamReader {
|
|
|
65
71
|
this.operatingDataView = new DataView(this.operatingStreamBuffer.buffer);
|
|
66
72
|
this.currentByte = 0;
|
|
67
73
|
if (this.compressionInfo.packageFileTag <= 0) {
|
|
68
|
-
this.compressionInfo.packageFileTag = this.operatingDataView.getInt32(0, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
74
|
+
this.compressionInfo.packageFileTag = this.operatingDataView.getInt32(0, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
69
75
|
}
|
|
70
76
|
if (this.compressionInfo.maxUncompressedChunkContentSize <= 0) {
|
|
71
|
-
this.compressionInfo.maxUncompressedChunkContentSize = this.operatingDataView.getInt32(8, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
77
|
+
this.compressionInfo.maxUncompressedChunkContentSize = this.operatingDataView.getInt32(8, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
72
78
|
}
|
|
73
|
-
const chunkCompressedLength = this.operatingDataView.getInt32(32, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
74
|
-
const chunkUncompressedLength = this.operatingDataView.getInt32(40, this.alignment === Alignment.LITTLE_ENDIAN);
|
|
79
|
+
const chunkCompressedLength = this.operatingDataView.getInt32(32, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
80
|
+
const chunkUncompressedLength = this.operatingDataView.getInt32(40, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
75
81
|
this.currentByte = this.compressionInfo.chunkHeaderSize;
|
|
76
82
|
await this.allocate(chunkCompressedLength);
|
|
77
83
|
let currentChunk = this.operatingStreamBuffer.slice(this.currentByte, this.currentByte + chunkCompressedLength);
|
|
78
84
|
this.currentByte += chunkCompressedLength;
|
|
79
85
|
this.totalNumberOfBytesRead += chunkUncompressedLength;
|
|
80
86
|
try {
|
|
81
|
-
const uncompressedChunk =
|
|
87
|
+
const uncompressedChunk = pako_1.default.inflate(currentChunk);
|
|
82
88
|
if (uncompressedChunk.byteLength !== chunkUncompressedLength) {
|
|
83
|
-
throw new CorruptSaveError('indicated save body chunk size does not match the inflated result. Save is possibly corrupt.');
|
|
89
|
+
throw new __1.CorruptSaveError('indicated save body chunk size does not match the inflated result. Save is possibly corrupt.');
|
|
84
90
|
}
|
|
85
91
|
if (this.debug) {
|
|
86
92
|
console.log(`${new Date().toString()}: decompressed a chunk from ${currentChunk.byteLength} to ${uncompressedChunk.byteLength} bytes.`);
|
|
@@ -88,7 +94,7 @@ class SaveStreamReader extends ByteStreamReader {
|
|
|
88
94
|
return uncompressedChunk;
|
|
89
95
|
}
|
|
90
96
|
catch (err) {
|
|
91
|
-
throw new CompressionLibraryError("Failed to inflate compressed save data. " + err);
|
|
97
|
+
throw new __1.CompressionLibraryError("Failed to inflate compressed save data. " + err);
|
|
92
98
|
}
|
|
93
99
|
}
|
|
94
100
|
debugInfo() {
|
|
@@ -96,7 +102,7 @@ class SaveStreamReader extends ByteStreamReader {
|
|
|
96
102
|
}
|
|
97
103
|
async streamLevelsToOutput(writer, header) {
|
|
98
104
|
if (header.saveVersion < 29) {
|
|
99
|
-
throw new UnsupportedVersionError('Support for < U6 is not yet implemented.');
|
|
105
|
+
throw new __1.UnsupportedVersionError('Support for < U6 is not yet implemented.');
|
|
100
106
|
}
|
|
101
107
|
await this.allocate(100);
|
|
102
108
|
const numSubLevels = this.readInt32();
|
|
@@ -105,11 +111,11 @@ class SaveStreamReader extends ByteStreamReader {
|
|
|
105
111
|
if (this.debug) {
|
|
106
112
|
console.log(`${new Date().toString()}: reading level [${(j)}/${numSubLevels}] ${levelName}`);
|
|
107
113
|
}
|
|
108
|
-
await StreamLevel.ReadLevelAsync(this, writer, levelName, header.buildVersion);
|
|
114
|
+
await stream_level_class_1.StreamLevel.ReadLevelAsync(this, writer, levelName, header.buildVersion);
|
|
109
115
|
}
|
|
110
116
|
return;
|
|
111
117
|
}
|
|
112
118
|
}
|
|
113
119
|
SaveStreamReader.EPOCH_TICKS = 621355968000000000n;
|
|
114
120
|
SaveStreamReader.DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE = 48;
|
|
115
|
-
|
|
121
|
+
exports.SaveStreamReader = SaveStreamReader;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SaveStreamWriter = void 0;
|
|
1
4
|
class ModeStateTracker {
|
|
2
5
|
constructor(mode) {
|
|
3
6
|
this.mode = mode;
|
|
@@ -11,7 +14,7 @@ class ModeStateTracker {
|
|
|
11
14
|
this.mode = newMode;
|
|
12
15
|
}
|
|
13
16
|
}
|
|
14
|
-
|
|
17
|
+
class SaveStreamWriter {
|
|
15
18
|
constructor(writer) {
|
|
16
19
|
this.writer = writer;
|
|
17
20
|
this.createExecutionFunction = async (allowedInputModes, fn, targetMode) => {
|
|
@@ -80,3 +83,4 @@ export class SaveStreamWriter {
|
|
|
80
83
|
return this.writer.close();
|
|
81
84
|
}
|
|
82
85
|
}
|
|
86
|
+
exports.SaveStreamWriter = SaveStreamWriter;
|