@etothepii/satisfactory-file-parser 0.0.33 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -8
- package/build/index.js +41 -51
- package/build/parser/byte/alignment.enum.js +8 -18
- package/build/parser/byte/binary-operable.interface.js +2 -12
- package/build/parser/byte/binary-readable.interface.js +2 -12
- package/build/parser/byte/byte-reader.class.js +122 -132
- package/build/parser/byte/byte-writer.class.js +133 -143
- package/build/parser/error/parser.error.js +40 -50
- package/build/parser/file.types.js +2 -12
- package/build/parser/parser.js +84 -95
- package/build/parser/satisfactory/blueprint/blueprint-reader.js +109 -119
- package/build/parser/satisfactory/blueprint/blueprint-writer.js +56 -66
- package/build/parser/satisfactory/blueprint/blueprint.types.js +2 -12
- package/build/parser/satisfactory/objects/DataFields.js +306 -307
- package/build/parser/satisfactory/objects/ObjectReference.js +14 -24
- package/build/parser/satisfactory/objects/Property.js +974 -977
- package/build/parser/satisfactory/objects/SaveComponent.js +28 -38
- package/build/parser/satisfactory/objects/SaveEntity.js +69 -75
- package/build/parser/satisfactory/objects/SaveObject.js +26 -36
- package/build/parser/satisfactory/save/asynchronous-level.class.js +60 -70
- package/build/parser/satisfactory/save/level.class.d.ts +1 -1
- package/build/parser/satisfactory/save/level.class.js +147 -128
- package/build/parser/satisfactory/save/satisfactory-save.js +10 -20
- package/build/parser/satisfactory/save/save-reader.d.ts +2 -2
- package/build/parser/satisfactory/save/save-reader.js +209 -171
- package/build/parser/satisfactory/save/save-writer.js +97 -107
- package/build/parser/satisfactory/save/save.types.js +2 -12
- package/build/parser/satisfactory/structs/util.types.d.ts +6 -0
- package/build/parser/satisfactory/structs/util.types.js +122 -96
- package/build/parser/stream/byte-stream-reader.class.js +217 -227
- package/build/parser/stream/json-stream-state-writer.js +15 -25
- package/build/parser/stream/json-stream-writable.js +72 -82
- package/build/parser/stream/json-stream-writer.js +122 -132
- package/build/parser/stream/save-stream-json-stringifier.js +29 -39
- package/build/parser/stream/save-stream-reader.class.js +106 -116
- package/build/parser/stream/save-stream-writer.class.js +90 -100
- package/build/parser/stream/stream-level.class.js +93 -103
- package/package.json +2 -2
|
@@ -1,113 +1,103 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StreamLevel = void 0;
|
|
4
|
+
const __1 = require("../..");
|
|
5
|
+
const SaveComponent_1 = require("../satisfactory/objects/SaveComponent");
|
|
6
|
+
const SaveEntity_1 = require("../satisfactory/objects/SaveEntity");
|
|
7
|
+
class StreamLevel {
|
|
8
|
+
constructor(name) {
|
|
9
|
+
this.name = name;
|
|
5
10
|
}
|
|
6
|
-
|
|
7
|
-
|
|
11
|
+
static async ReadLevelAsync(reader, writer, levelName, buildVersion) {
|
|
12
|
+
const binaryLength = reader.readInt32();
|
|
13
|
+
await reader.allocate(binaryLength);
|
|
14
|
+
const objectHeaders = StreamLevel.ReadObjectHeaders(reader);
|
|
15
|
+
const collectables = __1.Level.ReadCollectablesList(reader);
|
|
16
|
+
await writer.openLevel(levelName);
|
|
17
|
+
await StreamLevel.StreamObjectContentsAsync(reader, writer, objectHeaders, buildVersion);
|
|
18
|
+
await writer.switchInLevelToCollectables();
|
|
19
|
+
await writer.writeCollectables(...collectables);
|
|
20
|
+
await writer.endLevel();
|
|
21
|
+
__1.Level.ReadCollectablesList(reader);
|
|
22
|
+
return;
|
|
8
23
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
24
|
+
static ReadObjectHeaders(reader) {
|
|
25
|
+
let countObjectHeaders = reader.readInt32();
|
|
26
|
+
const headers = [];
|
|
27
|
+
for (let i = 0; i < countObjectHeaders; i++) {
|
|
28
|
+
let objectType = reader.readInt32();
|
|
29
|
+
switch (objectType) {
|
|
30
|
+
case 1:
|
|
31
|
+
headers.push({
|
|
32
|
+
typePath: reader.readString(),
|
|
33
|
+
rootObject: reader.readString(),
|
|
34
|
+
instanceName: reader.readString(),
|
|
35
|
+
needTransform: reader.readInt32() == 1,
|
|
36
|
+
transform: (0, __1.ParseTransform)(reader),
|
|
37
|
+
wasPlacedInLevel: reader.readInt32() == 1
|
|
38
|
+
});
|
|
39
|
+
break;
|
|
40
|
+
case 0:
|
|
41
|
+
headers.push({
|
|
42
|
+
typePath: reader.readString(),
|
|
43
|
+
rootObject: reader.readString(),
|
|
44
|
+
instanceName: reader.readString(),
|
|
45
|
+
parentEntityName: reader.readString()
|
|
46
|
+
});
|
|
47
|
+
break;
|
|
48
|
+
default:
|
|
49
|
+
console.log('Unknown object type', objectType);
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
19
52
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
await writer.endLevel();
|
|
30
|
-
__1.Level.ReadCollectablesList(reader);
|
|
31
|
-
return;
|
|
53
|
+
return headers;
|
|
54
|
+
}
|
|
55
|
+
static async StreamObjectContentsAsync(reader, writer, headerList, buildVersion) {
|
|
56
|
+
const binarySize = reader.readInt32();
|
|
57
|
+
const posBefore = reader.getBufferPosition();
|
|
58
|
+
await reader.allocate(Math.min(binarySize, 300 * 1000 * 1000));
|
|
59
|
+
const countEntities = reader.readInt32();
|
|
60
|
+
if (countEntities !== headerList.length) {
|
|
61
|
+
throw new Error(`possibly corrupt. entity content count ${countEntities} does not object count of ${headerList.length}`);
|
|
32
62
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
switch (objectType) {
|
|
39
|
-
case 1:
|
|
40
|
-
headers.push({
|
|
41
|
-
typePath: reader.readString(),
|
|
42
|
-
rootObject: reader.readString(),
|
|
43
|
-
instanceName: reader.readString(),
|
|
44
|
-
needTransform: reader.readInt32() == 1,
|
|
45
|
-
transform: (0, __1.ParseTransform)(reader),
|
|
46
|
-
wasPlacedInLevel: reader.readInt32() == 1
|
|
47
|
-
});
|
|
48
|
-
break;
|
|
49
|
-
case 0:
|
|
50
|
-
headers.push({
|
|
51
|
-
typePath: reader.readString(),
|
|
52
|
-
rootObject: reader.readString(),
|
|
53
|
-
instanceName: reader.readString(),
|
|
54
|
-
parentEntityName: reader.readString()
|
|
55
|
-
});
|
|
56
|
-
break;
|
|
57
|
-
default:
|
|
58
|
-
console.log('Unknown object type', objectType);
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
63
|
+
let bufferedObjects = [];
|
|
64
|
+
for (let i = 0; i < countEntities; i++) {
|
|
65
|
+
if ((i + 1) % 10000 === 0) {
|
|
66
|
+
await writer.writeObjects(...bufferedObjects);
|
|
67
|
+
bufferedObjects = [];
|
|
61
68
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const posBefore = reader.getBufferPosition();
|
|
67
|
-
await reader.allocate(Math.min(binarySize, 300 * 1000 * 1000));
|
|
68
|
-
const countEntities = reader.readInt32();
|
|
69
|
-
if (countEntities !== headerList.length) {
|
|
70
|
-
throw new Error(`possibly corrupt. entity content count ${countEntities} does not object count of ${headerList.length}`);
|
|
69
|
+
const len = reader.readInt32();
|
|
70
|
+
if (reader.getAmountAllocatedLeft() <= len) {
|
|
71
|
+
const allocateAmount = Math.min(binarySize - (reader.getBufferPosition() - posBefore) + 4, 300 * 1000 * 1000);
|
|
72
|
+
await reader.allocate(allocateAmount);
|
|
71
73
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
bufferedObjects = [];
|
|
77
|
-
}
|
|
78
|
-
const len = reader.readInt32();
|
|
79
|
-
if (reader.getAmountAllocatedLeft() <= len) {
|
|
80
|
-
const allocateAmount = Math.min(binarySize - (reader.getBufferPosition() - posBefore) + 4, 300 * 1000 * 1000);
|
|
81
|
-
await reader.allocate(allocateAmount);
|
|
82
|
-
}
|
|
83
|
-
const before = reader.getBufferPosition();
|
|
84
|
-
const obj = headerList.shift();
|
|
85
|
-
if (!obj) {
|
|
86
|
-
throw new Error();
|
|
87
|
-
}
|
|
88
|
-
const isComponent = obj.parentEntityName !== undefined;
|
|
89
|
-
if (!isComponent) {
|
|
90
|
-
const entity = new SaveEntity_1.SaveEntity(obj.typePath, obj.rootObject, obj.instanceName, '', obj.needTransform);
|
|
91
|
-
SaveEntity_1.SaveEntity.ParseData(entity, len, reader, buildVersion, obj.typePath);
|
|
92
|
-
bufferedObjects.push(entity);
|
|
93
|
-
}
|
|
94
|
-
else if (isComponent) {
|
|
95
|
-
const component = new SaveComponent_1.SaveComponent(obj.typePath, obj.rootObject, obj.instanceName, obj.parentEntityName);
|
|
96
|
-
SaveComponent_1.SaveComponent.ParseData(component, len, reader, buildVersion, obj.typePath);
|
|
97
|
-
bufferedObjects.push(component);
|
|
98
|
-
}
|
|
99
|
-
const after = reader.getBufferPosition();
|
|
100
|
-
if (after - before !== len) {
|
|
101
|
-
console.warn('entity may be corrupt.', i);
|
|
102
|
-
}
|
|
74
|
+
const before = reader.getBufferPosition();
|
|
75
|
+
const obj = headerList.shift();
|
|
76
|
+
if (!obj) {
|
|
77
|
+
throw new Error();
|
|
103
78
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
79
|
+
const isComponent = obj.parentEntityName !== undefined;
|
|
80
|
+
if (!isComponent) {
|
|
81
|
+
const entity = new SaveEntity_1.SaveEntity(obj.typePath, obj.rootObject, obj.instanceName, '', obj.needTransform);
|
|
82
|
+
SaveEntity_1.SaveEntity.ParseData(entity, len, reader, buildVersion, obj.typePath);
|
|
83
|
+
bufferedObjects.push(entity);
|
|
109
84
|
}
|
|
85
|
+
else if (isComponent) {
|
|
86
|
+
const component = new SaveComponent_1.SaveComponent(obj.typePath, obj.rootObject, obj.instanceName, obj.parentEntityName);
|
|
87
|
+
SaveComponent_1.SaveComponent.ParseData(component, len, reader, buildVersion, obj.typePath);
|
|
88
|
+
bufferedObjects.push(component);
|
|
89
|
+
}
|
|
90
|
+
const after = reader.getBufferPosition();
|
|
91
|
+
if (after - before !== len) {
|
|
92
|
+
console.warn('entity may be corrupt.', i);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
await writer.writeObjects(...bufferedObjects);
|
|
96
|
+
bufferedObjects = [];
|
|
97
|
+
const posAfter = reader.getBufferPosition();
|
|
98
|
+
if (posAfter - posBefore !== binarySize) {
|
|
99
|
+
console.warn('save seems corrupt.', this.name);
|
|
110
100
|
}
|
|
111
101
|
}
|
|
112
|
-
|
|
113
|
-
|
|
102
|
+
}
|
|
103
|
+
exports.StreamLevel = StreamLevel;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@etothepii/satisfactory-file-parser",
|
|
3
3
|
"author": "etothepii",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.1.1",
|
|
5
5
|
"description": "A file parser for satisfactory files. Includes save files and blueprint files.",
|
|
6
6
|
"types": "./build/index.d.ts",
|
|
7
7
|
"main": "./build/index.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"typescript"
|
|
15
15
|
],
|
|
16
16
|
"scripts": {
|
|
17
|
-
"test": "jest --config=jest.config.json",
|
|
17
|
+
"test": "jest --config=jest.config.json --max_old_space_size=30720",
|
|
18
18
|
"build": "tsc && npm run bundle",
|
|
19
19
|
"bundle": "npx webpack && dts-bundle-generator -o dist/index.d.ts src/index.ts",
|
|
20
20
|
"prepublishOnly": "npm run build && npm version patch"
|