@etothepii/satisfactory-file-parser 0.0.32 → 0.0.33
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/parser/parser.d.ts
CHANGED
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
import { TransformStream, WritableStream } from "stream/web";
|
|
4
2
|
import { ChunkSummary } from "./file.types";
|
|
5
3
|
import { Blueprint } from "./satisfactory/blueprint/blueprint.types";
|
|
6
4
|
import { SatisfactorySave } from "./satisfactory/save/satisfactory-save";
|
|
7
5
|
import { SaveProjectionConfig } from "./satisfactory/save/save-reader";
|
|
8
|
-
export declare class PassthroughWebTransform extends TransformStream<Uint8Array, Uint8Array> {
|
|
9
|
-
constructor();
|
|
10
|
-
}
|
|
11
6
|
export declare class Parser {
|
|
12
7
|
static WriteSave(save: SatisfactorySave, onBinaryBeforeCompressing: (buffer: ArrayBuffer) => void, onHeader: (header: Uint8Array) => void, onChunk: (chunk: Uint8Array) => void): ChunkSummary[];
|
|
13
|
-
private static ParseSaveFileStream;
|
|
14
|
-
private static ParseStreamSave;
|
|
15
|
-
private static DecompressStreamSave;
|
|
16
8
|
static ParseSaveFile(file: Buffer, onDecompressedSaveBody?: (buffer: ArrayBuffer) => void, onProgress?: (progress: number, message?: string) => void): SatisfactorySave;
|
|
17
|
-
static ParseSaveFileAsynchronousToOutput(file: Buffer, outputJson: WritableStream<string>, onDecompressedSaveBody?: (buffer: ArrayBuffer) => void, onProgress?: (progress: number, message?: string) => void): Promise<SatisfactorySave>;
|
|
18
9
|
static WriteBlueprintFiles(blueprint: Blueprint, onMainFileBinaryBeforeCompressing?: (binary: ArrayBuffer) => void, onMainFileHeader?: (header: Uint8Array) => void, onMainFileChunk?: (chunk: Uint8Array) => void): {
|
|
19
10
|
mainFileChunkSummary: ChunkSummary[];
|
|
20
11
|
configFileBinary: ArrayBuffer;
|
package/build/parser/parser.js
CHANGED
|
@@ -4,37 +4,18 @@
|
|
|
4
4
|
if (v !== undefined) module.exports = v;
|
|
5
5
|
}
|
|
6
6
|
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define(["require", "exports", "
|
|
7
|
+
define(["require", "exports", "./satisfactory/blueprint/blueprint-reader", "./satisfactory/blueprint/blueprint-writer", "./satisfactory/save/level.class", "./satisfactory/save/satisfactory-save", "./satisfactory/save/save-reader", "./satisfactory/save/save-writer"], factory);
|
|
8
8
|
}
|
|
9
9
|
})(function (require, exports) {
|
|
10
10
|
"use strict";
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.Parser =
|
|
13
|
-
const web_1 = require("stream/web");
|
|
12
|
+
exports.Parser = void 0;
|
|
14
13
|
const blueprint_reader_1 = require("./satisfactory/blueprint/blueprint-reader");
|
|
15
14
|
const blueprint_writer_1 = require("./satisfactory/blueprint/blueprint-writer");
|
|
16
15
|
const level_class_1 = require("./satisfactory/save/level.class");
|
|
17
16
|
const satisfactory_save_1 = require("./satisfactory/save/satisfactory-save");
|
|
18
17
|
const save_reader_1 = require("./satisfactory/save/save-reader");
|
|
19
18
|
const save_writer_1 = require("./satisfactory/save/save-writer");
|
|
20
|
-
const save_stream_reader_class_1 = require("./stream/save-stream-reader.class");
|
|
21
|
-
const save_stream_writer_class_1 = require("./stream/save-stream-writer.class");
|
|
22
|
-
class PassthroughWebTransform extends web_1.TransformStream {
|
|
23
|
-
constructor() {
|
|
24
|
-
super({
|
|
25
|
-
start: (controller) => {
|
|
26
|
-
},
|
|
27
|
-
transform: async (chunk, controller) => {
|
|
28
|
-
chunk = await chunk;
|
|
29
|
-
controller.enqueue(chunk);
|
|
30
|
-
},
|
|
31
|
-
flush: (controller) => {
|
|
32
|
-
console.log('on passthrough dispose.');
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
exports.PassthroughWebTransform = PassthroughWebTransform;
|
|
38
19
|
class Parser {
|
|
39
20
|
static WriteSave(save, onBinaryBeforeCompressing, onHeader, onChunk) {
|
|
40
21
|
const writer = new save_writer_1.SaveWriter();
|
|
@@ -45,68 +26,6 @@
|
|
|
45
26
|
const chunkSummary = writer.generateChunks(save.compressionInfo, posAfterHeader, onBinaryBeforeCompressing, onHeader, onChunk);
|
|
46
27
|
return chunkSummary;
|
|
47
28
|
}
|
|
48
|
-
static async ParseSaveFileStream(input, output, binaryOutput) {
|
|
49
|
-
return new Promise(async (resolve, reject) => {
|
|
50
|
-
if (input.locked || output.locked || (binaryOutput !== undefined ? binaryOutput.locked : false)) {
|
|
51
|
-
throw new Error('One of the input/output streams is locked. Aborting save parsing.');
|
|
52
|
-
}
|
|
53
|
-
const binaryOutWriter = binaryOutput ? binaryOutput.getWriter() : undefined;
|
|
54
|
-
const writer = new save_stream_writer_class_1.SaveStreamWriter(output.getWriter());
|
|
55
|
-
const reader = new save_stream_reader_class_1.SaveStreamReader(input.getReader(), 500 * 1000 * 1000);
|
|
56
|
-
const passthrough = new PassthroughWebTransform();
|
|
57
|
-
const passthroughWriter = passthrough.writable.getWriter();
|
|
58
|
-
const passthroughReader = new save_stream_reader_class_1.SaveStreamReader(passthrough.readable.getReader(), 3000 * 1000 * 1000);
|
|
59
|
-
await writer.beginSave();
|
|
60
|
-
const header = await reader.readHeader();
|
|
61
|
-
await writer.writeHeader(header);
|
|
62
|
-
let contentParsingPromise;
|
|
63
|
-
const decompressionPromise = Parser.DecompressStreamSave(reader, writer, passthroughWriter, async () => {
|
|
64
|
-
console.log('start streaming content');
|
|
65
|
-
passthroughReader.debug = true;
|
|
66
|
-
contentParsingPromise = await Parser.ParseStreamSave(passthroughReader, writer, header);
|
|
67
|
-
await writer.close();
|
|
68
|
-
return resolve();
|
|
69
|
-
}, binaryOutWriter);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
static async ParseStreamSave(reader, jsonWriter, header) {
|
|
73
|
-
return new Promise(async (resolve, reject) => {
|
|
74
|
-
reader.onCloseCallback = async () => {
|
|
75
|
-
console.log('content reader closes.');
|
|
76
|
-
await jsonWriter.endLevels();
|
|
77
|
-
await jsonWriter.endSave();
|
|
78
|
-
return resolve();
|
|
79
|
-
};
|
|
80
|
-
console.log('before open levels');
|
|
81
|
-
await jsonWriter.openLevels();
|
|
82
|
-
const dataLength = await reader.readInt32();
|
|
83
|
-
await reader.allocate(Math.min(1000, dataLength));
|
|
84
|
-
console.log(`incoming body size should be ${dataLength} bytes big.`);
|
|
85
|
-
await reader.streamLevelsToOutput(jsonWriter, header);
|
|
86
|
-
await reader.close();
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
static async DecompressStreamSave(reader, jsonWriter, outputWriter, onDecompressionInfoWritten, debugAdditionalBinaryOutputWriter) {
|
|
90
|
-
return new Promise(async (resolve, reject) => {
|
|
91
|
-
reader.onCloseCallback = async () => {
|
|
92
|
-
console.log('decompress reader closes.');
|
|
93
|
-
return resolve();
|
|
94
|
-
};
|
|
95
|
-
let first = true;
|
|
96
|
-
while (reader.hasInput()) {
|
|
97
|
-
const decompressedChunk = await reader.readBodyChunk();
|
|
98
|
-
if (first && reader.compressionInfo) {
|
|
99
|
-
await jsonWriter.writeCompressionInfo(reader.compressionInfo);
|
|
100
|
-
onDecompressionInfoWritten();
|
|
101
|
-
first = false;
|
|
102
|
-
}
|
|
103
|
-
if (debugAdditionalBinaryOutputWriter) {
|
|
104
|
-
debugAdditionalBinaryOutputWriter.write(decompressedChunk);
|
|
105
|
-
}
|
|
106
|
-
outputWriter.write(decompressedChunk);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
29
|
static ParseSaveFile(file, onDecompressedSaveBody = () => { }, onProgress = () => { }) {
|
|
111
30
|
const reader = new save_reader_1.SaveReader(new Uint8Array(file).buffer, onProgress);
|
|
112
31
|
const header = reader.readHeader();
|
|
@@ -119,23 +38,6 @@
|
|
|
119
38
|
save.trailingCollectedObjects = reader.trailingCollectedObjects;
|
|
120
39
|
return save;
|
|
121
40
|
}
|
|
122
|
-
static async ParseSaveFileAsynchronousToOutput(file, outputJson, onDecompressedSaveBody = () => { }, onProgress = () => { }) {
|
|
123
|
-
const reader = new save_reader_1.SaveReader(new Uint8Array(file).buffer, onProgress);
|
|
124
|
-
const writer = new save_stream_writer_class_1.SaveStreamWriter(outputJson.getWriter());
|
|
125
|
-
await writer.beginSave();
|
|
126
|
-
const header = reader.readHeader();
|
|
127
|
-
const save = new satisfactory_save_1.SatisfactorySave(header);
|
|
128
|
-
await writer.writeHeader(save.header);
|
|
129
|
-
await writer.writeCompressionInfo({});
|
|
130
|
-
const inflateResult = reader.inflateChunks();
|
|
131
|
-
onDecompressedSaveBody(reader.getBuffer());
|
|
132
|
-
const levelParseResult = await reader.readLevelsAsynchronously(writer);
|
|
133
|
-
save.levels = reader.levels;
|
|
134
|
-
save.compressionInfo = reader.compressionInfo;
|
|
135
|
-
save.trailingCollectedObjects = reader.trailingCollectedObjects;
|
|
136
|
-
await writer.endSave();
|
|
137
|
-
return save;
|
|
138
|
-
}
|
|
139
41
|
static WriteBlueprintFiles(blueprint, onMainFileBinaryBeforeCompressing = () => { }, onMainFileHeader = () => { }, onMainFileChunk = () => { }) {
|
|
140
42
|
const blueprintWriter = new blueprint_writer_1.BlueprintWriter();
|
|
141
43
|
blueprint_writer_1.BlueprintWriter.SerializeHeader(blueprintWriter, blueprint.header);
|
|
@@ -123,7 +123,6 @@
|
|
|
123
123
|
Level.ReadObjectHeaders(reader, level.objects, reader.onProgressCallback);
|
|
124
124
|
reader.onProgressCallback(reader.getBufferProgress());
|
|
125
125
|
level.collectables = Level.ReadCollectablesList(reader);
|
|
126
|
-
console.log(`before object contents buffer pos ${reader.getBufferPosition()}`);
|
|
127
126
|
Level.ReadObjectContents(reader, level.objects, buildVersion, reader.onProgressCallback);
|
|
128
127
|
reader.onProgressCallback(reader.getBufferProgress());
|
|
129
128
|
Level.ReadCollectablesList(reader);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@etothepii/satisfactory-file-parser",
|
|
3
3
|
"author": "etothepii",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.33",
|
|
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",
|