@etothepii/satisfactory-file-parser 0.0.16 → 0.0.18
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 +49 -11
- package/build/index.d.ts +2 -0
- package/build/index.js +5 -1
- package/build/parser/byte/byte-reader.class.d.ts +34 -1
- package/build/parser/byte/byte-writer.class.d.ts +33 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,13 +19,15 @@ If there will be changes, those will come very soon as soon as U8 is out on Expe
|
|
|
19
19
|
|
|
20
20
|
## Installation via npm
|
|
21
21
|
`npm install @etothepii/satisfactory-file-parser`
|
|
22
|
-
|
|
23
|
-
Usage of
|
|
22
|
+
|
|
23
|
+
## Usage of Save Parsing
|
|
24
|
+
Usage of the SaveParser is easy. For reading a save file (`.sav`), just pass a Buffer to the parser with the file content.
|
|
24
25
|
```js
|
|
25
|
-
import
|
|
26
|
+
import * as fs from 'fs';
|
|
27
|
+
import { Parser } from "@etothepii/satisfactory-file-parser";
|
|
26
28
|
|
|
27
29
|
const file = fs.readFileSync('./MySave.sav') as Buffer;
|
|
28
|
-
const parsedSave =
|
|
30
|
+
const parsedSave = Parser.ParseSaveFile(file);
|
|
29
31
|
```
|
|
30
32
|
|
|
31
33
|
Consequently, writing a parsed save file back is just as easy.
|
|
@@ -33,21 +35,57 @@ The SaveParser has callbacks to assist in syncing on different occasions during
|
|
|
33
35
|
For example, when writing the header or when writing a chunk of the save body.
|
|
34
36
|
The splitting in individual chunks enables you to more easily stream the binary data to somewhere else.
|
|
35
37
|
```js
|
|
36
|
-
import
|
|
38
|
+
import * as fs from 'fs';
|
|
39
|
+
import { Parser } from "@etothepii/satisfactory-file-parser";
|
|
37
40
|
|
|
38
|
-
let header, bodyChunks;
|
|
39
|
-
|
|
41
|
+
let header, bodyChunks = [];
|
|
42
|
+
Parser.WriteSave(save, binaryBeforeCompressed => {
|
|
43
|
+
console.log('on binary data before being compressed.');
|
|
44
|
+
}, header => {
|
|
40
45
|
console.log('on save header.');
|
|
41
46
|
header = header;
|
|
42
47
|
}, chunk => {
|
|
43
48
|
console.log('on save body chunk.');
|
|
44
49
|
bodyChunks.push(chunk);
|
|
45
|
-
}
|
|
46
|
-
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// write complete sav file back to disk
|
|
53
|
+
fs.writeFileSync('./MyModifiedSave.sav', Buffer.concat([header, ...bodyChunks]));
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Usage of Blueprint Parsing
|
|
57
|
+
Blueprint parsing works very similiar. Note, that blueprints consist of 2 files. The `.sbp` main file and the config file `.sbpcfg`.
|
|
58
|
+
|
|
59
|
+
```js
|
|
60
|
+
import * as fs from 'fs';
|
|
61
|
+
import { Parser } from "@etothepii/satisfactory-file-parser";
|
|
47
62
|
|
|
48
|
-
|
|
49
|
-
|
|
63
|
+
const mainFile = fs.readFileSync('./MyBlueprint.sbp') as Buffer;
|
|
64
|
+
const configFile = fs.readFileSync('./MyBlueprint.sbpcfg') as Buffer;
|
|
65
|
+
const parsedBlueprint = Parser.ParseBlueprintFiles('MyBlueprint', mainFile, configFile);
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Consequently, writing a blueprint into binary data works the same way with getting callbacks in the same style as the save parsing.
|
|
69
|
+
```js
|
|
70
|
+
import * as fs from 'fs';
|
|
71
|
+
import { Parser } from "@etothepii/satisfactory-file-parser";
|
|
72
|
+
|
|
73
|
+
let mainFileHeader, mainFileBodyChunks = [];
|
|
74
|
+
const summary = Parser.WriteBlueprintFiles(blueprint, mainFileBinaryBeforeCompressed => {
|
|
75
|
+
console.log('on main file binary data before being compressed.');
|
|
76
|
+
}, header => {
|
|
77
|
+
console.log('on main file blueprint header.');
|
|
78
|
+
mainFileHeader = header;
|
|
79
|
+
}, chunk => {
|
|
80
|
+
console.log('on main file blueprint body chunk.');
|
|
81
|
+
mainFileBodyChunks.push(chunk);
|
|
50
82
|
});
|
|
83
|
+
|
|
84
|
+
// write complete .sbp file back to disk
|
|
85
|
+
fs.writeFileSync('./MyModifiedBlueprint.sbp', Buffer.concat([mainFileHeader, ...mainFileBodyChunks]));
|
|
86
|
+
|
|
87
|
+
// write .sbpcfg file back to disk, we get that data from the result of WriteBlueprint
|
|
88
|
+
fs.writeFileSync('./MyModifiedSave.sbpcfg', Buffer.from(summary.configFileBinary));
|
|
51
89
|
```
|
|
52
90
|
|
|
53
91
|
## License
|
package/build/index.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export { SaveEntity } from './parser/satisfactory/objects/SaveEntity';
|
|
|
7
7
|
export { Level } from './parser/satisfactory/save/level.class';
|
|
8
8
|
export { SatisfactorySave } from './parser/satisfactory/save/satisfactory-save';
|
|
9
9
|
export type * from './parser/satisfactory/save/save.types';
|
|
10
|
+
export { ByteReader } from './parser/byte/byte-reader.class';
|
|
11
|
+
export { ByteWriter } from './parser/byte/byte-writer.class';
|
|
10
12
|
export { BlueprintConfigReader, BlueprintReader } from './parser/satisfactory/blueprint/blueprint-reader';
|
|
11
13
|
export { BlueprintConfigWriter, BlueprintWriter } from './parser/satisfactory/blueprint/blueprint-writer';
|
|
12
14
|
export { SaveReader } from './parser/satisfactory/save/save-reader';
|
package/build/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.Parser = exports.UnsupportedVersionError = exports.ParserError = exports.CorruptSaveError = exports.CompressionLibraryError = exports.SaveWriter = exports.SaveReader = exports.BlueprintWriter = exports.BlueprintConfigWriter = exports.BlueprintReader = exports.BlueprintConfigReader = exports.SatisfactorySave = exports.Level = exports.SaveEntity = exports.SaveComponent = exports.ObjectReference = exports.DataFields = void 0;
|
|
17
|
+
exports.Parser = exports.UnsupportedVersionError = exports.ParserError = exports.CorruptSaveError = exports.CompressionLibraryError = 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
18
|
var DataFields_1 = require("./parser/satisfactory/objects/DataFields");
|
|
19
19
|
Object.defineProperty(exports, "DataFields", { enumerable: true, get: function () { return DataFields_1.DataFields; } });
|
|
20
20
|
var ObjectReference_1 = require("./parser/satisfactory/objects/ObjectReference");
|
|
@@ -28,6 +28,10 @@ var level_class_1 = require("./parser/satisfactory/save/level.class");
|
|
|
28
28
|
Object.defineProperty(exports, "Level", { enumerable: true, get: function () { return level_class_1.Level; } });
|
|
29
29
|
var satisfactory_save_1 = require("./parser/satisfactory/save/satisfactory-save");
|
|
30
30
|
Object.defineProperty(exports, "SatisfactorySave", { enumerable: true, get: function () { return satisfactory_save_1.SatisfactorySave; } });
|
|
31
|
+
var byte_reader_class_1 = require("./parser/byte/byte-reader.class");
|
|
32
|
+
Object.defineProperty(exports, "ByteReader", { enumerable: true, get: function () { return byte_reader_class_1.ByteReader; } });
|
|
33
|
+
var byte_writer_class_1 = require("./parser/byte/byte-writer.class");
|
|
34
|
+
Object.defineProperty(exports, "ByteWriter", { enumerable: true, get: function () { return byte_writer_class_1.ByteWriter; } });
|
|
31
35
|
var blueprint_reader_1 = require("./parser/satisfactory/blueprint/blueprint-reader");
|
|
32
36
|
Object.defineProperty(exports, "BlueprintConfigReader", { enumerable: true, get: function () { return blueprint_reader_1.BlueprintConfigReader; } });
|
|
33
37
|
Object.defineProperty(exports, "BlueprintReader", { enumerable: true, get: function () { return blueprint_reader_1.BlueprintReader; } });
|
|
@@ -1 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
import { Alignment } from "./alignment.enum";
|
|
2
|
+
export declare abstract class ByteReader {
|
|
3
|
+
protected bufferView: DataView;
|
|
4
|
+
protected fileBuffer: ArrayBuffer;
|
|
5
|
+
protected alignment: Alignment;
|
|
6
|
+
protected currentByte: number;
|
|
7
|
+
protected handledByte: number;
|
|
8
|
+
protected maxByte: number;
|
|
9
|
+
protected lastStrRead: number;
|
|
10
|
+
constructor(fileBuffer: ArrayBuffer, alignment: Alignment);
|
|
11
|
+
reset(newFileBuffer: ArrayBuffer): void;
|
|
12
|
+
skipBytes(byteLength?: number): void;
|
|
13
|
+
readByte(): number;
|
|
14
|
+
readBytes(count: number): Uint8Array;
|
|
15
|
+
readHex(hexLength: number): string;
|
|
16
|
+
readInt8(): number;
|
|
17
|
+
readUint8(): number;
|
|
18
|
+
readUint16(): number;
|
|
19
|
+
readInt32(): number;
|
|
20
|
+
readUint32(): number;
|
|
21
|
+
readLong(): bigint;
|
|
22
|
+
readFloat(): number;
|
|
23
|
+
readDouble(): number;
|
|
24
|
+
protected getStringInfo(): {
|
|
25
|
+
payload: string;
|
|
26
|
+
counter: number;
|
|
27
|
+
};
|
|
28
|
+
getBufferPosition: () => number;
|
|
29
|
+
getBufferSlice: (begin: number, end: number | undefined) => ArrayBuffer;
|
|
30
|
+
getBufferProgress: () => number;
|
|
31
|
+
getBufferLength: () => number;
|
|
32
|
+
getBuffer: () => ArrayBuffer;
|
|
33
|
+
readString(): string;
|
|
34
|
+
}
|
|
@@ -1 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
import { Alignment } from "./alignment.enum";
|
|
2
|
+
export declare abstract class ByteWriter {
|
|
3
|
+
protected alignment: Alignment;
|
|
4
|
+
protected bufferArray: ArrayBuffer;
|
|
5
|
+
protected bufferView: DataView;
|
|
6
|
+
protected currentByte: number;
|
|
7
|
+
constructor(alignment: Alignment, bufferSize?: number);
|
|
8
|
+
skipBytes(count?: number): void;
|
|
9
|
+
jumpTo(pos: number): void;
|
|
10
|
+
writeByte(value: number): void;
|
|
11
|
+
writeBytesArray(bytes: number[]): void;
|
|
12
|
+
writeBytes(bytes: Uint8Array): void;
|
|
13
|
+
writeInt8(value: number): void;
|
|
14
|
+
writeUint8(value: number): void;
|
|
15
|
+
writeInt16(value: number): void;
|
|
16
|
+
writeUint16(value: number): void;
|
|
17
|
+
writeInt32(value: number): void;
|
|
18
|
+
writeUint32(value: number): void;
|
|
19
|
+
writeInt64(value: bigint): void;
|
|
20
|
+
writeUint64(value: bigint): void;
|
|
21
|
+
writeFloat(value: number): void;
|
|
22
|
+
writeDouble(value: number): void;
|
|
23
|
+
writeString(value: string): void;
|
|
24
|
+
static IsASCIICompatible: (value: string) => boolean;
|
|
25
|
+
getBufferPosition: () => number;
|
|
26
|
+
getBufferSlice: (start: number, end?: number) => ArrayBuffer;
|
|
27
|
+
writeBinarySizeFromPosition(lenIndicatorPos: number, start: number): void;
|
|
28
|
+
protected extendBufferIfNeeded(countNeededBytes: number, factor?: number): void;
|
|
29
|
+
protected truncateBuffer(): void;
|
|
30
|
+
endWriting(): ArrayBuffer;
|
|
31
|
+
static ToInt32(num: number): Uint8Array;
|
|
32
|
+
static AppendBuffer(buffer1: ArrayBuffer, buffer2: ArrayBuffer): ArrayBuffer;
|
|
33
|
+
}
|
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.18",
|
|
5
5
|
"description": "A file parser for satisfactory files. Includes save files and blueprint files.",
|
|
6
6
|
"module": "Node16",
|
|
7
7
|
"typings": "./build/index.d.ts",
|