@etothepii/satisfactory-file-parser 0.0.9 → 0.0.10

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.
Files changed (43) hide show
  1. package/package.json +2 -2
  2. package/build/index.d.ts +0 -4
  3. package/build/index.js +0 -7
  4. package/build/parser/blueprint-reader.d.ts +0 -18
  5. package/build/parser/blueprint-reader.js +0 -128
  6. package/build/parser/blueprint-writer.d.ts +0 -21
  7. package/build/parser/blueprint-writer.js +0 -64
  8. package/build/parser/byte/alignment.enum.d.ts +0 -4
  9. package/build/parser/byte/alignment.enum.js +0 -5
  10. package/build/parser/byte/byte-reader.class.d.ts +0 -38
  11. package/build/parser/byte/byte-reader.class.js +0 -128
  12. package/build/parser/byte/byte-writer.class.d.ts +0 -38
  13. package/build/parser/byte/byte-writer.class.js +0 -146
  14. package/build/parser/error/parser.error.d.ts +0 -12
  15. package/build/parser/error/parser.error.js +0 -21
  16. package/build/parser/parser.d.ts +0 -44
  17. package/build/parser/parser.js +0 -81
  18. package/build/parser/satisfactory/blueprint/blueprint.d.ts +0 -20
  19. package/build/parser/satisfactory/blueprint/blueprint.js +0 -1
  20. package/build/parser/satisfactory/level.class.d.ts +0 -21
  21. package/build/parser/satisfactory/level.class.js +0 -144
  22. package/build/parser/satisfactory/objects/DataFields.d.ts +0 -13
  23. package/build/parser/satisfactory/objects/DataFields.js +0 -245
  24. package/build/parser/satisfactory/objects/ObjectReference.d.ts +0 -9
  25. package/build/parser/satisfactory/objects/ObjectReference.js +0 -13
  26. package/build/parser/satisfactory/objects/Property.d.ts +0 -270
  27. package/build/parser/satisfactory/objects/Property.js +0 -1119
  28. package/build/parser/satisfactory/objects/SaveComponent.d.ts +0 -16
  29. package/build/parser/satisfactory/objects/SaveComponent.js +0 -27
  30. package/build/parser/satisfactory/objects/SaveEntity.d.ts +0 -25
  31. package/build/parser/satisfactory/objects/SaveEntity.js +0 -66
  32. package/build/parser/satisfactory/objects/SaveObject.d.ts +0 -14
  33. package/build/parser/satisfactory/objects/SaveObject.js +0 -25
  34. package/build/parser/satisfactory/satisfactory-save.class.d.ts +0 -57
  35. package/build/parser/satisfactory/satisfactory-save.class.js +0 -7
  36. package/build/parser/satisfactory/static-data.d.ts +0 -7
  37. package/build/parser/satisfactory/static-data.js +0 -1
  38. package/build/parser/satisfactory/structs/util.types.d.ts +0 -40
  39. package/build/parser/satisfactory/structs/util.types.js +0 -75
  40. package/build/parser/save-reader.d.ts +0 -43
  41. package/build/parser/save-reader.js +0 -243
  42. package/build/parser/save-writer.d.ts +0 -22
  43. package/build/parser/save-writer.js +0 -114
@@ -1,44 +0,0 @@
1
- /// <reference types="node" />
2
- import { SatisfactorySave } from "./satisfactory/satisfactory-save.class";
3
- import { SaveProjectionConfig } from "./save-reader";
4
- export declare class SaveParser {
5
- /**
6
- * serializes a save file into binary and reports back on individual callbacks.
7
- * @param save the save file to serialize into binary.
8
- * @param onBinaryBeforeCompressing gets called on the binary save body before it is compressed.
9
- * @param onHeader gets called on the binary save header, which is always uncompressed.
10
- * @param onChunk gets called when a chunk of the compressed save body was generated. Often, files' save bodies consist of multiple chunks.
11
- * @param onFinish gets called when all chunks have been generated. A summary of the chunk sizes and count is reported.
12
- */
13
- static WriteSave(save: SatisfactorySave, onBinaryBeforeCompressing: (buffer: ArrayBuffer) => void, onHeader: (header: Uint8Array) => void, onChunk: (chunk: Uint8Array) => void, onFinish: (summary: {
14
- errors: string[];
15
- chunkSummary: {
16
- uncompressedSize: number;
17
- compressedSize: number;
18
- }[];
19
- }) => void): void;
20
- /**
21
- * parses a save object from a binary buffer and reports back on decompressing the save body in a callback.
22
- * @param file the binary content to be parsed.
23
- * @param additionalData additional static data that is not contained in save files. For example, power slugs and resource nodes.
24
- * @param onSaveDecompressed gets called when the entire binary save body has been decompressed.
25
- * @returns a brief summary
26
- */
27
- static ParseSaveFile(file: Buffer, onSaveDecompressed?: (buffer: ArrayBuffer) => void, onProgress?: (progress: number, message?: string) => void): SatisfactorySave;
28
- /**
29
- * Does Projection on a Save Object in order to reduce it's complexity.
30
- * @param save the save object in question.
31
- * @param config the projection config to apply.
32
- * @returns a save object that has been projected / modified. Do not try to serialize it into an actual save tho! Since information has been transformed.
33
- */
34
- static ProjectSave(save: SatisfactorySave, config: SaveProjectionConfig): SatisfactorySave;
35
- /**
36
- * It JSON.stringifies any parsed content safely. The original JSON.stringify() has some flaws that get in the way, so it is custom wrapped. The original has some problems:
37
- * 1. it cannot stringify bigints. So we help out by converting it into a string.
38
- * 2. It cannot distinguish between 0 and -0. But a float32 is encoded in a uint8Array for 0 to be [0,0,0,0] (0x00000000) and -0 to be [0,0,0,128] (0x00000080) in little endian.
39
- * @param obj
40
- * @param indent
41
- * @returns a string that is safely stringified.
42
- */
43
- static JSONStringifyModified: (obj: any, indent?: number) => string;
44
- }
@@ -1,81 +0,0 @@
1
- import { Level } from "./satisfactory/level.class";
2
- import { SatisfactorySave } from "./satisfactory/satisfactory-save.class";
3
- import { SaveReader, projectionFilterApplies } from "./save-reader";
4
- import { SaveWriter } from "./save-writer";
5
- class SaveParser {
6
- /**
7
- * serializes a save file into binary and reports back on individual callbacks.
8
- * @param save the save file to serialize into binary.
9
- * @param onBinaryBeforeCompressing gets called on the binary save body before it is compressed.
10
- * @param onHeader gets called on the binary save header, which is always uncompressed.
11
- * @param onChunk gets called when a chunk of the compressed save body was generated. Often, files' save bodies consist of multiple chunks.
12
- * @param onFinish gets called when all chunks have been generated. A summary of the chunk sizes and count is reported.
13
- */
14
- static WriteSave(save, onBinaryBeforeCompressing, onHeader, onChunk, onFinish) {
15
- const writer = new SaveWriter();
16
- SaveWriter.WriteHeader(writer, save.header);
17
- const posAfterHeader = writer.getBufferPosition();
18
- SaveWriter.WriteLevels(writer, save, save.header.buildVersion);
19
- writer.endWriting();
20
- writer.generateChunks(save.compressionInfo, posAfterHeader, onBinaryBeforeCompressing, onHeader, onChunk, onFinish);
21
- }
22
- /**
23
- * parses a save object from a binary buffer and reports back on decompressing the save body in a callback.
24
- * @param file the binary content to be parsed.
25
- * @param additionalData additional static data that is not contained in save files. For example, power slugs and resource nodes.
26
- * @param onSaveDecompressed gets called when the entire binary save body has been decompressed.
27
- * @returns a brief summary
28
- */
29
- static ParseSaveFile(file, onSaveDecompressed = () => { }, onProgress = () => { }) {
30
- const reader = new SaveReader(file.buffer, onProgress);
31
- // read header
32
- const header = reader.readHeader();
33
- const save = new SatisfactorySave(header);
34
- // inflate chunks
35
- const inflateResult = reader.inflateChunks();
36
- // call callback on decompressed save body
37
- onSaveDecompressed(reader.getBuffer());
38
- // parse levels
39
- const levelParseResult = reader.readLevels();
40
- save.levels = reader.levels;
41
- save.compressionInfo = reader.compressionInfo;
42
- save.trailingCollectedObjects = reader.trailingCollectedObjects;
43
- return save;
44
- }
45
- /**
46
- * Does Projection on a Save Object in order to reduce it's complexity.
47
- * @param save the save object in question.
48
- * @param config the projection config to apply.
49
- * @returns a save object that has been projected / modified. Do not try to serialize it into an actual save tho! Since information has been transformed.
50
- */
51
- static ProjectSave(save, config) {
52
- return {
53
- header: save.header,
54
- trailingCollectedObjects: save.trailingCollectedObjects,
55
- levels: save.levels.map(level => {
56
- const lvl = new Level(level.name);
57
- lvl.collectables = level.collectables;
58
- lvl.objects = level.objects.filter(obj => projectionFilterApplies(config, obj));
59
- return lvl;
60
- })
61
- };
62
- }
63
- }
64
- /**
65
- * It JSON.stringifies any parsed content safely. The original JSON.stringify() has some flaws that get in the way, so it is custom wrapped. The original has some problems:
66
- * 1. it cannot stringify bigints. So we help out by converting it into a string.
67
- * 2. It cannot distinguish between 0 and -0. But a float32 is encoded in a uint8Array for 0 to be [0,0,0,0] (0x00000000) and -0 to be [0,0,0,128] (0x00000080) in little endian.
68
- * @param obj
69
- * @param indent
70
- * @returns a string that is safely stringified.
71
- */
72
- SaveParser.JSONStringifyModified = (obj, indent = 0) => JSON.stringify(obj, (key, value) => {
73
- if (typeof value === 'bigint') {
74
- return value.toString();
75
- }
76
- else if (value === 0 && 1 / value < 0) { // -0
77
- return '-0';
78
- }
79
- return value;
80
- }, indent);
81
- export { SaveParser };
@@ -1,20 +0,0 @@
1
- import { SaveComponent } from "../objects/SaveComponent";
2
- import { SaveEntity } from "../objects/SaveEntity";
3
- import { ChunkCompressionInfo } from "../satisfactory-save.class";
4
- import { col4 } from "../structs/util.types";
5
- export interface BlueprintConfig {
6
- description: string;
7
- color: col4;
8
- iconID: number;
9
- }
10
- export type BlueprintHeader = {
11
- itemCosts: [string, number][];
12
- recipeReferences: string[];
13
- };
14
- export interface Blueprint {
15
- name: string;
16
- compressionInfo: ChunkCompressionInfo;
17
- header: BlueprintHeader;
18
- config: BlueprintConfig;
19
- objects: (SaveEntity | SaveComponent)[];
20
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,21 +0,0 @@
1
- import { ByteReader } from "../byte/byte-reader.class";
2
- import { ByteWriter } from "../byte/byte-writer.class";
3
- import { SaveReader } from "../save-reader";
4
- import { ObjectReference } from "./objects/ObjectReference";
5
- import { SaveComponent } from "./objects/SaveComponent";
6
- import { SaveEntity } from "./objects/SaveEntity";
7
- import { SaveObject } from "./objects/SaveObject";
8
- export declare class Level {
9
- name: string;
10
- objects: (SaveEntity | SaveComponent)[];
11
- collectables: ObjectReference[];
12
- constructor(name: string);
13
- static SerializeObjectHeaders(writer: ByteWriter, objects: (SaveEntity | SaveComponent)[]): void;
14
- static WriteLevel(writer: ByteWriter, level: Level, buildVersion: number): void;
15
- static SerializeObjectContents(writer: ByteWriter, objects: (SaveEntity | SaveComponent)[], buildVersion: number): void;
16
- static ReadObjectHeaders(reader: ByteReader, objectsList: SaveObject[], onProgressCallback: (progress: number, msg?: string) => void): void;
17
- static ReadObjectContents(reader: ByteReader, objectsList: SaveObject[], buildVersion: number, onProgressCallback: (progress: number, msg?: string) => void): void;
18
- static ReadLevel(reader: SaveReader, levelName: string, buildVersion: number): Level;
19
- static SerializeCollectablesList(writer: ByteWriter, collectables: ObjectReference[]): void;
20
- static ReadCollectablesList(reader: SaveReader): ObjectReference[];
21
- }
@@ -1,144 +0,0 @@
1
- import { ObjectReference } from "./objects/ObjectReference";
2
- import { isSaveComponent, SaveComponent } from "./objects/SaveComponent";
3
- import { isSaveEntity, SaveEntity } from "./objects/SaveEntity";
4
- export class Level {
5
- constructor(name) {
6
- this.name = name;
7
- this.objects = [];
8
- this.collectables = [];
9
- }
10
- static SerializeObjectHeaders(writer, objects) {
11
- writer.writeInt32(objects.length);
12
- for (const obj of objects) {
13
- switch (obj.type) {
14
- case 'SaveEntity':
15
- writer.writeInt32(SaveEntity.TypeID);
16
- SaveEntity.SerializeHeader(writer, obj);
17
- break;
18
- case 'SaveComponent':
19
- writer.writeInt32(SaveComponent.TypeID);
20
- SaveComponent.SerializeHeader(writer, obj);
21
- break;
22
- default:
23
- console.log('Unknown object type', obj);
24
- break;
25
- }
26
- }
27
- }
28
- static WriteLevel(writer, level, buildVersion) {
29
- const lenIndicatorHeaderAndCollectableSize = writer.getBufferPosition();
30
- writer.writeInt32(0);
31
- Level.SerializeObjectHeaders(writer, level.objects);
32
- Level.SerializeCollectablesList(writer, level.collectables);
33
- // replace binary size from earlier for - object headers + collectables
34
- writer.writeBinarySizeFromPosition(lenIndicatorHeaderAndCollectableSize, lenIndicatorHeaderAndCollectableSize + 4);
35
- // write entities
36
- Level.SerializeObjectContents(writer, level.objects, buildVersion);
37
- Level.SerializeCollectablesList(writer, level.collectables);
38
- }
39
- static SerializeObjectContents(writer, objects, buildVersion) {
40
- const lenIndicatorEntities = writer.getBufferPosition();
41
- writer.writeInt32(0);
42
- writer.writeInt32(objects.length);
43
- for (const obj of objects) {
44
- const lenReplacementPosition = writer.getBufferPosition();
45
- writer.writeInt32(0);
46
- if (isSaveEntity(obj)) {
47
- SaveEntity.SerializeData(writer, obj, buildVersion);
48
- }
49
- else if (isSaveComponent(obj)) {
50
- SaveComponent.SerializeData(writer, obj, buildVersion);
51
- }
52
- writer.writeBinarySizeFromPosition(lenReplacementPosition, lenReplacementPosition + 4);
53
- }
54
- writer.writeBinarySizeFromPosition(lenIndicatorEntities, lenIndicatorEntities + 4);
55
- }
56
- static ReadObjectHeaders(reader, objectsList, onProgressCallback) {
57
- let countObjectHeaders = reader.readInt32();
58
- for (let i = 0; i < countObjectHeaders; i++) {
59
- if (i % 1000 === 0) {
60
- onProgressCallback(reader.getBufferProgress());
61
- }
62
- let objectType = reader.readInt32();
63
- switch (objectType) {
64
- case SaveEntity.TypeID:
65
- let object = new SaveEntity('', '', '', '');
66
- SaveEntity.ParseHeader(reader, object);
67
- objectsList.push(object);
68
- break;
69
- case SaveComponent.TypeID:
70
- let component = new SaveComponent('', '', '', '');
71
- SaveComponent.ParseHeader(reader, component);
72
- objectsList.push(component);
73
- break;
74
- default:
75
- console.log('Unknown object type', objectType);
76
- break;
77
- }
78
- }
79
- }
80
- static ReadObjectContents(reader, objectsList, buildVersion, onProgressCallback) {
81
- const binarySize = reader.readInt32(); // entities binary length
82
- const posBefore = reader.getBufferPosition();
83
- const countEntities = reader.readInt32();
84
- if (countEntities !== objectsList.length) {
85
- throw new Error(`possibly corrupt. entity content count ${countEntities} does not object count of ${objectsList.length}`);
86
- }
87
- // definitely after i=25467
88
- for (let i = 0; i < countEntities; i++) {
89
- if (i % 1000 === 0) {
90
- onProgressCallback(reader.getBufferProgress());
91
- }
92
- const len = reader.readInt32();
93
- const before = reader.getBufferPosition();
94
- const obj = objectsList[i];
95
- if (isSaveEntity(obj)) {
96
- SaveEntity.ParseData(obj, len, reader, buildVersion);
97
- }
98
- else if (isSaveComponent(obj)) {
99
- SaveComponent.ParseData(obj, len, reader, buildVersion);
100
- }
101
- const after = reader.getBufferPosition();
102
- if (after - before !== len) {
103
- console.warn('entity may be corrupt', this.name, i);
104
- }
105
- }
106
- const posAfter = reader.getBufferPosition();
107
- if (posAfter - posBefore !== binarySize) {
108
- //WARNING
109
- console.warn('save seems corrupt.', this.name);
110
- }
111
- }
112
- static ReadLevel(reader, levelName, buildVersion) {
113
- const level = new Level(levelName);
114
- reader.readInt32(); // object headers + collectables binary length
115
- // object headers
116
- Level.ReadObjectHeaders(reader, level.objects, reader.onProgressCallback);
117
- // collectables
118
- reader.onProgressCallback(reader.getBufferProgress());
119
- level.collectables = Level.ReadCollectablesList(reader);
120
- // objects contents
121
- Level.ReadObjectContents(reader, level.objects, buildVersion, reader.onProgressCallback);
122
- // collectables 2nd time.
123
- reader.onProgressCallback(reader.getBufferProgress());
124
- Level.ReadCollectablesList(reader);
125
- return level;
126
- }
127
- // collected stuff
128
- static SerializeCollectablesList(writer, collectables) {
129
- writer.writeInt32(collectables.length);
130
- for (const collectable of collectables) {
131
- ObjectReference.Serialize(writer, collectable);
132
- }
133
- }
134
- // collected stuff
135
- static ReadCollectablesList(reader) {
136
- let countCollected = reader.readInt32();
137
- const collected = [];
138
- for (let i = 0; i < countCollected; i++) {
139
- const collectable = ObjectReference.Parse(reader);
140
- collected.push(collectable);
141
- }
142
- return collected;
143
- }
144
- }
@@ -1,13 +0,0 @@
1
- import { ByteReader } from "../../byte/byte-reader.class";
2
- import { SaveWriter } from "../../save-writer";
3
- import { AbstractBaseProperty } from "./Property";
4
- export declare class DataFields {
5
- properties: any[];
6
- trailingData: number[];
7
- shouldBeNulled: boolean;
8
- constructor();
9
- static Parse(length: number, reader: ByteReader, buildVersion: number): DataFields;
10
- static ParseProperty(reader: ByteReader, buildVersion: number, propertyName: string): AbstractBaseProperty | null;
11
- static Serialize(writer: SaveWriter, fields: DataFields, buildVersion: number): void;
12
- static SerializeProperty(writer: SaveWriter, property: AbstractBaseProperty, propertyName: string, buildVersion: number): void;
13
- }
@@ -1,245 +0,0 @@
1
- import { ArrayProperty, BoolProperty, ByteProperty, DoubleProperty, EnumProperty, FloatProperty, Int32Property, Int64Property, Int8Property, MapProperty, ObjectProperty, SetProperty, StrProperty, StructProperty, TextProperty, Uint32Property, Uint8Property } from "./Property";
2
- export class DataFields {
3
- constructor() {
4
- this.properties = [];
5
- this.trailingData = [];
6
- this.shouldBeNulled = false;
7
- }
8
- static Parse(length, reader, buildVersion) {
9
- const start = reader.getBufferPosition();
10
- const fields = new DataFields();
11
- if (length === 0) {
12
- //WARNING
13
- fields.shouldBeNulled = true;
14
- return fields;
15
- }
16
- let propertyName = reader.readString();
17
- while (propertyName !== 'None') {
18
- const property = DataFields.ParseProperty(reader, buildVersion, propertyName);
19
- fields.properties.push(property);
20
- propertyName = reader.readString();
21
- }
22
- let int1 = reader.readInt32();
23
- if (int1 !== 0) {
24
- //WARNING
25
- }
26
- const end = reader.getBufferPosition();
27
- let remainingBytes = start + length - end;
28
- fields.trailingData = Array.from(reader.readBytes(remainingBytes));
29
- return fields;
30
- }
31
- static ParseProperty(reader, buildVersion, propertyName) {
32
- let currentProperty = {};
33
- if (currentProperty.name === 'None') {
34
- return null;
35
- }
36
- //TODO: What is this extra byte that is appearing sometime?
37
- // i dont think there is an extra byte.
38
- /*
39
- let extraByteTest = reader.readByte();
40
- if (extraByteTest !== 0) {
41
- reader.currentByte -= 1;
42
- }
43
- else {
44
- console.log('Property extra byte', currentProperty);
45
- }
46
- */
47
- //TODO assign type and index after parsing.
48
- const propertyType = reader.readString();
49
- const binarySize = reader.readInt32();
50
- const index = reader.readInt32();
51
- const before = reader.getBufferPosition();
52
- let overhead = 0;
53
- switch (propertyType) {
54
- case 'BoolProperty':
55
- currentProperty = BoolProperty.Parse(reader, propertyType, index);
56
- overhead = BoolProperty.CalcOverhead(currentProperty);
57
- break;
58
- case 'ByteProperty':
59
- currentProperty = ByteProperty.Parse(reader, propertyType, index);
60
- overhead = ByteProperty.CalcOverhead(currentProperty);
61
- break;
62
- case 'Int8Property':
63
- currentProperty = Int8Property.Parse(reader, propertyType, index);
64
- overhead = Int8Property.CalcOverhead(currentProperty);
65
- break;
66
- case 'UInt8Property':
67
- currentProperty = Uint8Property.Parse(reader, propertyType, index);
68
- overhead = Uint8Property.CalcOverhead(currentProperty);
69
- break;
70
- case 'IntProperty':
71
- case 'Int32Property':
72
- currentProperty = Int32Property.Parse(reader, propertyType, index);
73
- overhead = Int32Property.CalcOverhead(currentProperty);
74
- break;
75
- case 'UInt32Property':
76
- currentProperty = Uint32Property.Parse(reader, propertyType, index);
77
- overhead = Uint32Property.CalcOverhead(currentProperty);
78
- break;
79
- case 'Int64Property':
80
- currentProperty = Int64Property.Parse(reader, propertyType, index);
81
- overhead = Int64Property.CalcOverhead(currentProperty);
82
- break;
83
- // TODO
84
- /*
85
- case 'UInt64Property':
86
- currentProperty = Int64Property.Parse(reader, propertyType, index);
87
- break;
88
- */
89
- case 'SingleProperty':
90
- case 'FloatProperty':
91
- currentProperty = FloatProperty.Parse(reader, propertyType, index);
92
- overhead = FloatProperty.CalcOverhead(currentProperty);
93
- break;
94
- case 'DoubleProperty':
95
- currentProperty = DoubleProperty.Parse(reader, propertyType, index);
96
- overhead = DoubleProperty.CalcOverhead(currentProperty);
97
- break;
98
- case 'StrProperty':
99
- case 'NameProperty':
100
- currentProperty = StrProperty.Parse(reader, propertyType, index);
101
- overhead = StrProperty.CalcOverhead(currentProperty);
102
- break;
103
- case 'ObjectProperty':
104
- case 'InterfaceProperty':
105
- currentProperty = ObjectProperty.Parse(reader, propertyType, index);
106
- overhead = ObjectProperty.CalcOverhead(currentProperty);
107
- break;
108
- case 'EnumProperty':
109
- currentProperty = EnumProperty.Parse(reader, propertyType, index);
110
- overhead = EnumProperty.CalcOverhead(currentProperty);
111
- break;
112
- case 'StructProperty':
113
- currentProperty = StructProperty.Parse(reader, propertyType, index, binarySize);
114
- overhead = StructProperty.CalcOverhead(currentProperty);
115
- break;
116
- case 'ArrayProperty':
117
- currentProperty = ArrayProperty.Parse(reader, propertyType, index, propertyName);
118
- overhead = ArrayProperty.CalcOverhead(currentProperty);
119
- break;
120
- case 'MapProperty':
121
- //currentProperty = reader.readMapProperty(currentProperty, '');
122
- currentProperty = MapProperty.Parse(reader, propertyName, buildVersion, binarySize);
123
- overhead = MapProperty.CalcOverhead(currentProperty);
124
- break;
125
- case 'TextProperty':
126
- currentProperty = TextProperty.Parse(reader, propertyType, index);
127
- overhead = TextProperty.CalcOverhead(currentProperty);
128
- break;
129
- case 'SetProperty':
130
- currentProperty = SetProperty.Parse(reader, propertyType, index, propertyName);
131
- overhead = SetProperty.CalcOverhead(currentProperty);
132
- break;
133
- default:
134
- throw new Error(`Unimplemented type ${propertyType}`);
135
- }
136
- currentProperty.name = propertyName;
137
- const readBytes = reader.getBufferPosition() - before - overhead;
138
- if (readBytes !== binarySize) {
139
- throw new Error(`possibly corrupt. Read ${readBytes} for ${propertyType} ${propertyName}, but ${binarySize} were indicated.`);
140
- }
141
- return currentProperty;
142
- }
143
- static Serialize(writer, fields, buildVersion) {
144
- for (const property of fields.properties) {
145
- writer.writeString(property.name);
146
- DataFields.SerializeProperty(writer, property, property.name, buildVersion);
147
- }
148
- writer.writeString('None');
149
- writer.writeInt32(0);
150
- writer.writeBytesArray(fields.trailingData);
151
- }
152
- static SerializeProperty(writer, property, propertyName, buildVersion) {
153
- writer.writeString(property.ueType);
154
- // binary length indicator
155
- const lenIndicator = writer.getBufferPosition();
156
- writer.writeInt32(0);
157
- // write index if it is not 0. Since it normally is.
158
- writer.writeInt32(property.index ?? 0);
159
- const start = writer.getBufferPosition();
160
- let overhead = 0;
161
- switch (property.ueType) {
162
- case 'BoolProperty':
163
- overhead = BoolProperty.CalcOverhead(property);
164
- BoolProperty.Serialize(writer, property);
165
- break;
166
- case 'ByteProperty':
167
- overhead = ByteProperty.CalcOverhead(property);
168
- ByteProperty.Serialize(writer, property);
169
- break;
170
- case 'Int8Property':
171
- overhead = Int8Property.CalcOverhead(property);
172
- Int8Property.Serialize(writer, property);
173
- break;
174
- case 'UInt8Property':
175
- overhead = Uint8Property.CalcOverhead(property);
176
- Uint8Property.Serialize(writer, property);
177
- break;
178
- case 'IntProperty':
179
- case 'Int32Property':
180
- overhead = Int32Property.CalcOverhead(property);
181
- Int32Property.Serialize(writer, property);
182
- break;
183
- case 'UInt32Property':
184
- overhead = Uint32Property.CalcOverhead(property);
185
- Uint32Property.Serialize(writer, property);
186
- break;
187
- case 'Int64Property':
188
- overhead = Int64Property.CalcOverhead(property);
189
- Int64Property.Serialize(writer, property);
190
- break;
191
- // TODO: uint64Property
192
- case 'SingleProperty':
193
- case 'FloatProperty':
194
- overhead = FloatProperty.CalcOverhead(property);
195
- FloatProperty.Serialize(writer, property);
196
- break;
197
- case 'DoubleProperty':
198
- overhead = DoubleProperty.CalcOverhead(property);
199
- DoubleProperty.Serialize(writer, property);
200
- break;
201
- case 'StrProperty':
202
- case 'NameProperty':
203
- overhead = StrProperty.CalcOverhead(property);
204
- StrProperty.Serialize(writer, property);
205
- break;
206
- case 'ObjectProperty':
207
- case 'InterfaceProperty':
208
- overhead = ObjectProperty.CalcOverhead(property);
209
- ObjectProperty.Serialize(writer, property);
210
- break;
211
- case 'EnumProperty':
212
- overhead = EnumProperty.CalcOverhead(property);
213
- EnumProperty.Serialize(writer, property);
214
- break;
215
- case 'ByteProperty':
216
- overhead = ByteProperty.CalcOverhead(property);
217
- ByteProperty.Serialize(writer, property);
218
- break;
219
- case 'StructProperty':
220
- overhead = StructProperty.CalcOverhead(property);
221
- StructProperty.Serialize(writer, property);
222
- break;
223
- case 'ArrayProperty':
224
- overhead = ArrayProperty.CalcOverhead(property);
225
- ArrayProperty.Serialize(writer, property, propertyName);
226
- break;
227
- case 'MapProperty':
228
- overhead = MapProperty.CalcOverhead(property);
229
- MapProperty.Serialize(writer, property);
230
- break;
231
- case 'TextProperty':
232
- overhead = TextProperty.CalcOverhead(property);
233
- TextProperty.Serialize(writer, property);
234
- break;
235
- case 'SetProperty':
236
- overhead = SetProperty.CalcOverhead(property);
237
- SetProperty.Serialize(writer, property);
238
- break;
239
- default:
240
- throw new Error(`Unimplemented type ${property.type}`);
241
- }
242
- // replace len indicator.
243
- writer.writeBinarySizeFromPosition(lenIndicator, start + overhead);
244
- }
245
- }
@@ -1,9 +0,0 @@
1
- import { ByteReader } from "../../byte/byte-reader.class";
2
- import { ByteWriter } from "../../byte/byte-writer.class";
3
- export declare class ObjectReference {
4
- levelName: string;
5
- pathName: string;
6
- constructor(levelName: string, pathName: string);
7
- static Parse(reader: ByteReader): ObjectReference;
8
- static Serialize(writer: ByteWriter, ref: ObjectReference): void;
9
- }
@@ -1,13 +0,0 @@
1
- export class ObjectReference {
2
- constructor(levelName, pathName) {
3
- this.levelName = levelName;
4
- this.pathName = pathName;
5
- }
6
- static Parse(reader) {
7
- return new ObjectReference(reader.readString(), reader.readString());
8
- }
9
- static Serialize(writer, ref) {
10
- writer.writeString(ref.levelName);
11
- writer.writeString(ref.pathName);
12
- }
13
- }