@etothepii/satisfactory-file-parser 0.0.30 → 0.0.31

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 (47) hide show
  1. package/build/index.d.ts +19 -0
  2. package/build/index.js +65 -0
  3. package/build/parser/byte/alignment.enum.d.ts +4 -0
  4. package/build/parser/byte/alignment.enum.js +18 -0
  5. package/build/parser/byte/byte-reader.class.d.ts +34 -0
  6. package/build/parser/byte/byte-reader.class.js +131 -0
  7. package/build/parser/byte/byte-writer.class.d.ts +33 -0
  8. package/build/parser/byte/byte-writer.class.js +149 -0
  9. package/build/parser/error/parser.error.d.ts +12 -0
  10. package/build/parser/error/parser.error.js +38 -0
  11. package/build/parser/file.types.d.ts +9 -0
  12. package/build/parser/file.types.js +12 -0
  13. package/build/parser/parser.d.ts +16 -0
  14. package/build/parser/parser.js +98 -0
  15. package/build/parser/satisfactory/blueprint/blueprint-reader.d.ts +18 -0
  16. package/build/parser/satisfactory/blueprint/blueprint-reader.js +134 -0
  17. package/build/parser/satisfactory/blueprint/blueprint-writer.d.ts +15 -0
  18. package/build/parser/satisfactory/blueprint/blueprint-writer.js +73 -0
  19. package/build/parser/satisfactory/blueprint/blueprint.types.d.ts +20 -0
  20. package/build/parser/satisfactory/blueprint/blueprint.types.js +12 -0
  21. package/build/parser/satisfactory/objects/DataFields.d.ts +13 -0
  22. package/build/parser/satisfactory/objects/DataFields.js +234 -0
  23. package/build/parser/satisfactory/objects/ObjectReference.d.ts +9 -0
  24. package/build/parser/satisfactory/objects/ObjectReference.js +27 -0
  25. package/build/parser/satisfactory/objects/Property.d.ts +270 -0
  26. package/build/parser/satisfactory/objects/Property.js +1011 -0
  27. package/build/parser/satisfactory/objects/SaveComponent.d.ts +16 -0
  28. package/build/parser/satisfactory/objects/SaveComponent.js +41 -0
  29. package/build/parser/satisfactory/objects/SaveEntity.d.ts +25 -0
  30. package/build/parser/satisfactory/objects/SaveEntity.js +80 -0
  31. package/build/parser/satisfactory/objects/SaveObject.d.ts +14 -0
  32. package/build/parser/satisfactory/objects/SaveObject.js +39 -0
  33. package/build/parser/satisfactory/save/level.class.d.ts +21 -0
  34. package/build/parser/satisfactory/save/level.class.js +148 -0
  35. package/build/parser/satisfactory/save/satisfactory-save.d.ts +11 -0
  36. package/build/parser/satisfactory/save/satisfactory-save.js +21 -0
  37. package/build/parser/satisfactory/save/save-reader.d.ts +44 -0
  38. package/build/parser/satisfactory/save/save-reader.js +243 -0
  39. package/build/parser/satisfactory/save/save-writer.d.ts +12 -0
  40. package/build/parser/satisfactory/save/save-writer.js +122 -0
  41. package/build/parser/satisfactory/save/save.types.d.ts +49 -0
  42. package/build/parser/satisfactory/save/save.types.js +12 -0
  43. package/build/parser/satisfactory/structs/util.types.d.ts +40 -0
  44. package/build/parser/satisfactory/structs/util.types.js +105 -0
  45. package/package.json +3 -3
  46. package/dist/index.d.ts +0 -610
  47. package/dist/index.js +0 -1
@@ -0,0 +1,18 @@
1
+ import { ByteReader } from "../../byte/byte-reader.class";
2
+ import { ChunkCompressionInfo } from "../../file.types";
3
+ import { SaveComponent } from "../objects/SaveComponent";
4
+ import { SaveEntity } from "../objects/SaveEntity";
5
+ import { BlueprintConfig, BlueprintHeader } from "./blueprint.types";
6
+ export declare class BlueprintReader extends ByteReader {
7
+ compressionInfo: ChunkCompressionInfo;
8
+ constructor(bluePrintBuffer: ArrayBuffer);
9
+ static ReadHeader(reader: ByteReader): BlueprintHeader;
10
+ inflateChunks(): any;
11
+ static ParseObjects(reader: ByteReader): (SaveEntity | SaveComponent)[];
12
+ }
13
+ export declare class BlueprintConfigReader extends ByteReader {
14
+ bluePrintConfigBuffer: ArrayBuffer;
15
+ constructor(bluePrintConfigBuffer: ArrayBuffer);
16
+ parse: () => BlueprintConfig;
17
+ static ParseConfig(reader: ByteReader): BlueprintConfig;
18
+ }
@@ -0,0 +1,134 @@
1
+ var __importDefault = (this && this.__importDefault) || function (mod) {
2
+ return (mod && mod.__esModule) ? mod : { "default": mod };
3
+ };
4
+ (function (factory) {
5
+ if (typeof module === "object" && typeof module.exports === "object") {
6
+ var v = factory(require, exports);
7
+ if (v !== undefined) module.exports = v;
8
+ }
9
+ else if (typeof define === "function" && define.amd) {
10
+ define(["require", "exports", "pako", "../../byte/alignment.enum", "../../byte/byte-reader.class", "../../error/parser.error", "../save/level.class", "../structs/util.types"], factory);
11
+ }
12
+ })(function (require, exports) {
13
+ "use strict";
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.BlueprintConfigReader = exports.BlueprintReader = void 0;
16
+ const pako_1 = __importDefault(require("pako"));
17
+ const alignment_enum_1 = require("../../byte/alignment.enum");
18
+ const byte_reader_class_1 = require("../../byte/byte-reader.class");
19
+ const parser_error_1 = require("../../error/parser.error");
20
+ const level_class_1 = require("../save/level.class");
21
+ const util_types_1 = require("../structs/util.types");
22
+ class BlueprintReader extends byte_reader_class_1.ByteReader {
23
+ constructor(bluePrintBuffer) {
24
+ super(bluePrintBuffer, alignment_enum_1.Alignment.LITTLE_ENDIAN);
25
+ this.compressionInfo = {
26
+ packageFileTag: 0,
27
+ maxChunkContentSize: 0,
28
+ chunkHeaderSize: 48
29
+ };
30
+ }
31
+ static ReadHeader(reader) {
32
+ const unk = reader.readBytes(3 * 4);
33
+ const positionThingOrWhat = (0, util_types_1.ParseVec3)(reader);
34
+ let itemTypeCount = reader.readInt32();
35
+ const itemCosts = new Array(itemTypeCount).fill(['', 0]);
36
+ for (let i = 0; i < itemTypeCount; i++) {
37
+ let indexOrWhat = reader.readInt32();
38
+ let itemPathName = reader.readString();
39
+ let itemCount = reader.readInt32();
40
+ itemCosts[i] = [itemPathName, itemCount];
41
+ }
42
+ let recipeCount = reader.readInt32();
43
+ const recipeRefs = new Array(recipeCount).fill('');
44
+ for (let i = 0; i < recipeCount; i++) {
45
+ let indexOrWhat = reader.readInt32();
46
+ const recipeName = reader.readString();
47
+ recipeRefs[i] = recipeName;
48
+ }
49
+ return {
50
+ recipeReferences: recipeRefs,
51
+ itemCosts
52
+ };
53
+ }
54
+ inflateChunks() {
55
+ this.fileBuffer = this.fileBuffer.slice(this.currentByte);
56
+ this.handledByte = 0;
57
+ this.currentByte = 0;
58
+ this.maxByte = this.fileBuffer.byteLength;
59
+ let currentChunks = [];
60
+ let totalUncompressedBodySize = 0;
61
+ while (this.handledByte < this.maxByte) {
62
+ let chunkHeader = new DataView(this.fileBuffer.slice(0, this.compressionInfo.chunkHeaderSize));
63
+ this.currentByte = this.compressionInfo.chunkHeaderSize;
64
+ this.handledByte += this.compressionInfo.chunkHeaderSize;
65
+ if (this.compressionInfo.packageFileTag <= 0) {
66
+ this.compressionInfo.packageFileTag = chunkHeader.getUint32(0, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
67
+ }
68
+ if (this.compressionInfo.maxChunkContentSize <= 0) {
69
+ this.compressionInfo.maxChunkContentSize = chunkHeader.getInt32(8, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
70
+ }
71
+ const chunkCompressedLength = chunkHeader.getInt32(32, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
72
+ const chunkUncompressedLength = chunkHeader.getInt32(40, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
73
+ totalUncompressedBodySize += chunkUncompressedLength;
74
+ const currentChunkSize = chunkCompressedLength;
75
+ let currentChunk = this.fileBuffer.slice(this.currentByte, this.currentByte + currentChunkSize);
76
+ this.handledByte += currentChunkSize;
77
+ this.currentByte += currentChunkSize;
78
+ this.fileBuffer = this.fileBuffer.slice(this.currentByte);
79
+ this.currentByte = 0;
80
+ try {
81
+ let currentInflatedChunk = null;
82
+ currentInflatedChunk = pako_1.default.inflate(currentChunk);
83
+ currentChunks.push(currentInflatedChunk);
84
+ }
85
+ catch (err) {
86
+ throw new parser_error_1.ParserError('ParserError', 'An error occurred while calling pako inflate.' + err);
87
+ }
88
+ }
89
+ let newChunkLength = currentChunks.map(cc => cc.length).reduce((prev, cur) => prev + cur);
90
+ const bigWholeChunk = new Uint8Array(newChunkLength);
91
+ let currentLength = 0;
92
+ for (let i = 0; i < currentChunks.length; i++) {
93
+ bigWholeChunk.set(currentChunks[i], currentLength);
94
+ currentLength += currentChunks[i].length;
95
+ }
96
+ this.currentByte = 0;
97
+ this.maxByte = bigWholeChunk.buffer.byteLength;
98
+ this.bufferView = new DataView(bigWholeChunk.buffer);
99
+ return {
100
+ newChunkLength,
101
+ numChunks: currentChunks.length,
102
+ inflatedData: bigWholeChunk
103
+ };
104
+ }
105
+ static ParseObjects(reader) {
106
+ const totalBodyRestSize = reader.readInt32();
107
+ const objectHeadersBinarySize = reader.readInt32();
108
+ let objects = [];
109
+ level_class_1.Level.ReadObjectHeaders(reader, objects, () => { });
110
+ level_class_1.Level.ReadObjectContents(reader, objects, 0, () => { });
111
+ return objects;
112
+ }
113
+ }
114
+ exports.BlueprintReader = BlueprintReader;
115
+ class BlueprintConfigReader extends byte_reader_class_1.ByteReader {
116
+ constructor(bluePrintConfigBuffer) {
117
+ super(bluePrintConfigBuffer, alignment_enum_1.Alignment.LITTLE_ENDIAN);
118
+ this.bluePrintConfigBuffer = bluePrintConfigBuffer;
119
+ this.parse = () => BlueprintConfigReader.ParseConfig(this);
120
+ }
121
+ static ParseConfig(reader) {
122
+ const unk = reader.readInt32();
123
+ const description = reader.readString();
124
+ const unk3 = reader.readInt32();
125
+ const colorMaybe = (0, util_types_1.ParseCol4RGBA)(reader);
126
+ return {
127
+ description,
128
+ color: colorMaybe,
129
+ iconID: unk3
130
+ };
131
+ }
132
+ }
133
+ exports.BlueprintConfigReader = BlueprintConfigReader;
134
+ });
@@ -0,0 +1,15 @@
1
+ import { ByteWriter } from "../../byte/byte-writer.class";
2
+ import { ChunkCompressionInfo, ChunkSummary } from "../../file.types";
3
+ import { SaveComponent } from "../objects/SaveComponent";
4
+ import { SaveEntity } from "../objects/SaveEntity";
5
+ import { BlueprintConfig, BlueprintHeader } from "./blueprint.types";
6
+ export declare class BlueprintWriter extends ByteWriter {
7
+ constructor();
8
+ static SerializeHeader(writer: ByteWriter, header: BlueprintHeader): void;
9
+ generateChunks(compressionInfo: ChunkCompressionInfo, posAfterHeader: number, onBinaryBeforeCompressing: (binary: ArrayBuffer) => void, onHeader: (header: Uint8Array) => void, onChunk: (chunk: Uint8Array) => void): ChunkSummary[];
10
+ static SerializeObjects(writer: ByteWriter, objects: (SaveEntity | SaveComponent)[]): void;
11
+ }
12
+ export declare class BlueprintConfigWriter extends ByteWriter {
13
+ constructor();
14
+ static SerializeConfig(writer: ByteWriter, config: BlueprintConfig): void;
15
+ }
@@ -0,0 +1,73 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "../../byte/alignment.enum", "../../byte/byte-writer.class", "../../error/parser.error", "../save/level.class", "../save/save-writer", "../structs/util.types"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BlueprintConfigWriter = exports.BlueprintWriter = void 0;
13
+ const alignment_enum_1 = require("../../byte/alignment.enum");
14
+ const byte_writer_class_1 = require("../../byte/byte-writer.class");
15
+ const parser_error_1 = require("../../error/parser.error");
16
+ const level_class_1 = require("../save/level.class");
17
+ const save_writer_1 = require("../save/save-writer");
18
+ const util_types_1 = require("../structs/util.types");
19
+ class BlueprintWriter extends byte_writer_class_1.ByteWriter {
20
+ constructor() {
21
+ super(alignment_enum_1.Alignment.LITTLE_ENDIAN);
22
+ }
23
+ static SerializeHeader(writer, header) {
24
+ writer.writeInt32(2);
25
+ writer.writeInt32(36);
26
+ writer.writeInt32(211839);
27
+ writer.writeInt32(4);
28
+ writer.writeInt32(4);
29
+ writer.writeInt32(4);
30
+ writer.writeInt32(header.itemCosts.length);
31
+ for (const itemCost of header.itemCosts) {
32
+ writer.writeInt32(0);
33
+ writer.writeString(itemCost[0]);
34
+ writer.writeInt32(itemCost[1]);
35
+ }
36
+ writer.writeInt32(header.recipeReferences.length);
37
+ for (const recipeReference of header.recipeReferences) {
38
+ writer.writeInt32(0);
39
+ writer.writeString(recipeReference);
40
+ }
41
+ }
42
+ generateChunks(compressionInfo, posAfterHeader, onBinaryBeforeCompressing, onHeader, onChunk) {
43
+ if (posAfterHeader <= 0) {
44
+ throw new parser_error_1.ParserError('ParserError', 'seems like this buffer has no header. Please write the header first before you can generate chunks.');
45
+ }
46
+ const header = new Uint8Array(this.bufferArray.slice(0, posAfterHeader));
47
+ onHeader(header);
48
+ this.bufferArray = this.bufferArray.slice(posAfterHeader);
49
+ const chunkSummary = save_writer_1.SaveWriter.GenerateCompressedChunksFromData(this.bufferArray, compressionInfo, onBinaryBeforeCompressing, onChunk, this.alignment);
50
+ return chunkSummary;
51
+ }
52
+ static SerializeObjects(writer, objects) {
53
+ const headersLenIndicator = writer.getBufferPosition();
54
+ writer.writeInt32(0);
55
+ level_class_1.Level.SerializeObjectHeaders(writer, objects);
56
+ writer.writeBinarySizeFromPosition(headersLenIndicator, headersLenIndicator + 4);
57
+ level_class_1.Level.SerializeObjectContents(writer, objects, 0);
58
+ }
59
+ }
60
+ exports.BlueprintWriter = BlueprintWriter;
61
+ class BlueprintConfigWriter extends byte_writer_class_1.ByteWriter {
62
+ constructor() {
63
+ super(alignment_enum_1.Alignment.LITTLE_ENDIAN);
64
+ }
65
+ static SerializeConfig(writer, config) {
66
+ writer.writeInt32(2);
67
+ writer.writeString(config.description);
68
+ writer.writeInt32(config.iconID);
69
+ (0, util_types_1.SerializeCol4RGBA)(writer, config.color);
70
+ }
71
+ }
72
+ exports.BlueprintConfigWriter = BlueprintConfigWriter;
73
+ });
@@ -0,0 +1,20 @@
1
+ import { ChunkCompressionInfo } from "../../file.types";
2
+ import { SaveComponent } from "../objects/SaveComponent";
3
+ import { SaveEntity } from "../objects/SaveEntity";
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
+ }
@@ -0,0 +1,12 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ });
@@ -0,0 +1,13 @@
1
+ import { ByteReader } from "../../byte/byte-reader.class";
2
+ import { SaveWriter } from "../save/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
+ }
@@ -0,0 +1,234 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "./Property"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DataFields = void 0;
13
+ const Property_1 = require("./Property");
14
+ class DataFields {
15
+ constructor() {
16
+ this.properties = [];
17
+ this.trailingData = [];
18
+ this.shouldBeNulled = false;
19
+ }
20
+ static Parse(length, reader, buildVersion) {
21
+ const start = reader.getBufferPosition();
22
+ const fields = new DataFields();
23
+ if (length === 0) {
24
+ fields.shouldBeNulled = true;
25
+ return fields;
26
+ }
27
+ let propertyName = reader.readString();
28
+ while (propertyName !== 'None') {
29
+ const property = DataFields.ParseProperty(reader, buildVersion, propertyName);
30
+ fields.properties.push(property);
31
+ propertyName = reader.readString();
32
+ }
33
+ let int1 = reader.readInt32();
34
+ if (int1 !== 0) {
35
+ }
36
+ const end = reader.getBufferPosition();
37
+ let remainingBytes = start + length - end;
38
+ fields.trailingData = Array.from(reader.readBytes(remainingBytes));
39
+ return fields;
40
+ }
41
+ static ParseProperty(reader, buildVersion, propertyName) {
42
+ let currentProperty = {};
43
+ if (currentProperty.name === 'None') {
44
+ return null;
45
+ }
46
+ const propertyType = reader.readString();
47
+ const binarySize = reader.readInt32();
48
+ const index = reader.readInt32();
49
+ const before = reader.getBufferPosition();
50
+ let overhead = 0;
51
+ switch (propertyType) {
52
+ case 'BoolProperty':
53
+ currentProperty = Property_1.BoolProperty.Parse(reader, propertyType, index);
54
+ overhead = Property_1.BoolProperty.CalcOverhead(currentProperty);
55
+ break;
56
+ case 'ByteProperty':
57
+ currentProperty = Property_1.ByteProperty.Parse(reader, propertyType, index);
58
+ overhead = Property_1.ByteProperty.CalcOverhead(currentProperty);
59
+ break;
60
+ case 'Int8Property':
61
+ currentProperty = Property_1.Int8Property.Parse(reader, propertyType, index);
62
+ overhead = Property_1.Int8Property.CalcOverhead(currentProperty);
63
+ break;
64
+ case 'UInt8Property':
65
+ currentProperty = Property_1.Uint8Property.Parse(reader, propertyType, index);
66
+ overhead = Property_1.Uint8Property.CalcOverhead(currentProperty);
67
+ break;
68
+ case 'IntProperty':
69
+ case 'Int32Property':
70
+ currentProperty = Property_1.Int32Property.Parse(reader, propertyType, index);
71
+ overhead = Property_1.Int32Property.CalcOverhead(currentProperty);
72
+ break;
73
+ case 'UInt32Property':
74
+ currentProperty = Property_1.Uint32Property.Parse(reader, propertyType, index);
75
+ overhead = Property_1.Uint32Property.CalcOverhead(currentProperty);
76
+ break;
77
+ case 'Int64Property':
78
+ currentProperty = Property_1.Int64Property.Parse(reader, propertyType, index);
79
+ overhead = Property_1.Int64Property.CalcOverhead(currentProperty);
80
+ break;
81
+ case 'SingleProperty':
82
+ case 'FloatProperty':
83
+ currentProperty = Property_1.FloatProperty.Parse(reader, propertyType, index);
84
+ overhead = Property_1.FloatProperty.CalcOverhead(currentProperty);
85
+ break;
86
+ case 'DoubleProperty':
87
+ currentProperty = Property_1.DoubleProperty.Parse(reader, propertyType, index);
88
+ overhead = Property_1.DoubleProperty.CalcOverhead(currentProperty);
89
+ break;
90
+ case 'StrProperty':
91
+ case 'NameProperty':
92
+ currentProperty = Property_1.StrProperty.Parse(reader, propertyType, index);
93
+ overhead = Property_1.StrProperty.CalcOverhead(currentProperty);
94
+ break;
95
+ case 'ObjectProperty':
96
+ case 'InterfaceProperty':
97
+ currentProperty = Property_1.ObjectProperty.Parse(reader, propertyType, index);
98
+ overhead = Property_1.ObjectProperty.CalcOverhead(currentProperty);
99
+ break;
100
+ case 'EnumProperty':
101
+ currentProperty = Property_1.EnumProperty.Parse(reader, propertyType, index);
102
+ overhead = Property_1.EnumProperty.CalcOverhead(currentProperty);
103
+ break;
104
+ case 'StructProperty':
105
+ currentProperty = Property_1.StructProperty.Parse(reader, propertyType, index, binarySize);
106
+ overhead = Property_1.StructProperty.CalcOverhead(currentProperty);
107
+ break;
108
+ case 'ArrayProperty':
109
+ currentProperty = Property_1.ArrayProperty.Parse(reader, propertyType, index, propertyName);
110
+ overhead = Property_1.ArrayProperty.CalcOverhead(currentProperty);
111
+ break;
112
+ case 'MapProperty':
113
+ currentProperty = Property_1.MapProperty.Parse(reader, propertyName, buildVersion, binarySize);
114
+ overhead = Property_1.MapProperty.CalcOverhead(currentProperty);
115
+ break;
116
+ case 'TextProperty':
117
+ currentProperty = Property_1.TextProperty.Parse(reader, propertyType, index);
118
+ overhead = Property_1.TextProperty.CalcOverhead(currentProperty);
119
+ break;
120
+ case 'SetProperty':
121
+ currentProperty = Property_1.SetProperty.Parse(reader, propertyType, index, propertyName);
122
+ overhead = Property_1.SetProperty.CalcOverhead(currentProperty);
123
+ break;
124
+ default:
125
+ throw new Error(`Unimplemented type ${propertyType}`);
126
+ }
127
+ currentProperty.name = propertyName;
128
+ const readBytes = reader.getBufferPosition() - before - overhead;
129
+ if (readBytes !== binarySize) {
130
+ throw new Error(`possibly corrupt. Read ${readBytes} for ${propertyType} ${propertyName}, but ${binarySize} were indicated.`);
131
+ }
132
+ return currentProperty;
133
+ }
134
+ static Serialize(writer, fields, buildVersion) {
135
+ for (const property of fields.properties) {
136
+ writer.writeString(property.name);
137
+ DataFields.SerializeProperty(writer, property, property.name, buildVersion);
138
+ }
139
+ writer.writeString('None');
140
+ writer.writeInt32(0);
141
+ writer.writeBytesArray(fields.trailingData);
142
+ }
143
+ static SerializeProperty(writer, property, propertyName, buildVersion) {
144
+ writer.writeString(property.ueType);
145
+ const lenIndicator = writer.getBufferPosition();
146
+ writer.writeInt32(0);
147
+ writer.writeInt32(property.index ?? 0);
148
+ const start = writer.getBufferPosition();
149
+ let overhead = 0;
150
+ switch (property.ueType) {
151
+ case 'BoolProperty':
152
+ overhead = Property_1.BoolProperty.CalcOverhead(property);
153
+ Property_1.BoolProperty.Serialize(writer, property);
154
+ break;
155
+ case 'ByteProperty':
156
+ overhead = Property_1.ByteProperty.CalcOverhead(property);
157
+ Property_1.ByteProperty.Serialize(writer, property);
158
+ break;
159
+ case 'Int8Property':
160
+ overhead = Property_1.Int8Property.CalcOverhead(property);
161
+ Property_1.Int8Property.Serialize(writer, property);
162
+ break;
163
+ case 'UInt8Property':
164
+ overhead = Property_1.Uint8Property.CalcOverhead(property);
165
+ Property_1.Uint8Property.Serialize(writer, property);
166
+ break;
167
+ case 'IntProperty':
168
+ case 'Int32Property':
169
+ overhead = Property_1.Int32Property.CalcOverhead(property);
170
+ Property_1.Int32Property.Serialize(writer, property);
171
+ break;
172
+ case 'UInt32Property':
173
+ overhead = Property_1.Uint32Property.CalcOverhead(property);
174
+ Property_1.Uint32Property.Serialize(writer, property);
175
+ break;
176
+ case 'Int64Property':
177
+ overhead = Property_1.Int64Property.CalcOverhead(property);
178
+ Property_1.Int64Property.Serialize(writer, property);
179
+ break;
180
+ case 'SingleProperty':
181
+ case 'FloatProperty':
182
+ overhead = Property_1.FloatProperty.CalcOverhead(property);
183
+ Property_1.FloatProperty.Serialize(writer, property);
184
+ break;
185
+ case 'DoubleProperty':
186
+ overhead = Property_1.DoubleProperty.CalcOverhead(property);
187
+ Property_1.DoubleProperty.Serialize(writer, property);
188
+ break;
189
+ case 'StrProperty':
190
+ case 'NameProperty':
191
+ overhead = Property_1.StrProperty.CalcOverhead(property);
192
+ Property_1.StrProperty.Serialize(writer, property);
193
+ break;
194
+ case 'ObjectProperty':
195
+ case 'InterfaceProperty':
196
+ overhead = Property_1.ObjectProperty.CalcOverhead(property);
197
+ Property_1.ObjectProperty.Serialize(writer, property);
198
+ break;
199
+ case 'EnumProperty':
200
+ overhead = Property_1.EnumProperty.CalcOverhead(property);
201
+ Property_1.EnumProperty.Serialize(writer, property);
202
+ break;
203
+ case 'ByteProperty':
204
+ overhead = Property_1.ByteProperty.CalcOverhead(property);
205
+ Property_1.ByteProperty.Serialize(writer, property);
206
+ break;
207
+ case 'StructProperty':
208
+ overhead = Property_1.StructProperty.CalcOverhead(property);
209
+ Property_1.StructProperty.Serialize(writer, property);
210
+ break;
211
+ case 'ArrayProperty':
212
+ overhead = Property_1.ArrayProperty.CalcOverhead(property);
213
+ Property_1.ArrayProperty.Serialize(writer, property, propertyName);
214
+ break;
215
+ case 'MapProperty':
216
+ overhead = Property_1.MapProperty.CalcOverhead(property);
217
+ Property_1.MapProperty.Serialize(writer, property);
218
+ break;
219
+ case 'TextProperty':
220
+ overhead = Property_1.TextProperty.CalcOverhead(property);
221
+ Property_1.TextProperty.Serialize(writer, property);
222
+ break;
223
+ case 'SetProperty':
224
+ overhead = Property_1.SetProperty.CalcOverhead(property);
225
+ Property_1.SetProperty.Serialize(writer, property);
226
+ break;
227
+ default:
228
+ throw new Error(`Unimplemented type ${property.type}`);
229
+ }
230
+ writer.writeBinarySizeFromPosition(lenIndicator, start + overhead);
231
+ }
232
+ }
233
+ exports.DataFields = DataFields;
234
+ });
@@ -0,0 +1,9 @@
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
+ }
@@ -0,0 +1,27 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ObjectReference = void 0;
13
+ class ObjectReference {
14
+ constructor(levelName, pathName) {
15
+ this.levelName = levelName;
16
+ this.pathName = pathName;
17
+ }
18
+ static Parse(reader) {
19
+ return new ObjectReference(reader.readString(), reader.readString());
20
+ }
21
+ static Serialize(writer, ref) {
22
+ writer.writeString(ref.levelName);
23
+ writer.writeString(ref.pathName);
24
+ }
25
+ }
26
+ exports.ObjectReference = ObjectReference;
27
+ });