wc3maptranslator 4.0.0 → 4.0.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.
Files changed (34) hide show
  1. package/.github/workflows/codeql-analysis.yml +54 -54
  2. package/CHANGELOG.md +5 -0
  3. package/LICENSE.md +23 -23
  4. package/lib/HexBuffer.ts +81 -81
  5. package/lib/W3Buffer.ts +69 -69
  6. package/lib/translators/CamerasTranslator.ts +101 -101
  7. package/lib/translators/DoodadsTranslator.ts +178 -178
  8. package/lib/translators/ImportsTranslator.ts +78 -78
  9. package/lib/translators/InfoTranslator.ts +584 -584
  10. package/lib/translators/RegionsTranslator.ts +123 -123
  11. package/lib/translators/SoundsTranslator.ts +237 -237
  12. package/lib/translators/StringsTranslator.ts +49 -49
  13. package/lib/translators/TerrainTranslator.ts +276 -276
  14. package/lib/translators/UnitsTranslator.ts +261 -261
  15. package/lib/translators/index.ts +10 -10
  16. package/package.json +2 -1
  17. package/test/HexBufferTest.ts +170 -170
  18. package/test/TranslatorReversion.ts +218 -218
  19. package/test/data/cameras.json +15 -15
  20. package/test/data/doodads.json +2729 -2729
  21. package/test/data/imports.json +385 -385
  22. package/test/data/info.json +249 -249
  23. package/test/data/obj-abilities.json +4891 -4891
  24. package/test/data/obj-buffs.json +37 -37
  25. package/test/data/obj-destructables.json +30 -30
  26. package/test/data/obj-doodads.json +37 -37
  27. package/test/data/obj-items.json +30 -30
  28. package/test/data/obj-units.json +39 -39
  29. package/test/data/obj-upgrades.json +37 -37
  30. package/test/data/regions.json +205 -205
  31. package/test/data/sounds.json +49 -49
  32. package/test/data/strings.json +114 -114
  33. package/test/data/terrain.json +1 -1
  34. package/test/data/units.json +451 -451
@@ -1,218 +1,218 @@
1
- import assert from 'assert';
2
- import * as diff from 'diff-buf';
3
- import * as fs from 'fs-extra';
4
- import * as Path from 'path';
5
-
6
- import * as Translator from '../index';
7
-
8
- const ObjectType = Translator.ObjectsTranslator.ObjectType;
9
- const war3mapDir = Path.resolve('test/data');
10
- const outputDir = Path.resolve('test/.output');
11
-
12
- function readWar3MapBuffer(filename: string) {
13
- return fs.readFileSync(Path.join(war3mapDir, filename));
14
- }
15
-
16
- function readJsonTestFile(filename: string) {
17
- return fs.readJsonSync(Path.join(war3mapDir, filename));
18
- }
19
-
20
- function writeJsonTestFile(filename: string, json: object) {
21
- return fs.writeJsonSync(Path.join(outputDir, filename), json);
22
- }
23
-
24
- function buffersAreEqual(b1: Buffer, b2: Buffer) {
25
- const comparison = diff.default(b1, b2, { string: false });
26
-
27
- // Library `diff` returns an array of objects documenting comparison
28
- // e.g. { added: undefined, removed: undefined, value: 10 }
29
- // We want all `added` and `removed` fields to be "undefined" for
30
- // the buffers to be considered equal
31
- let buffersEqual = true;
32
- comparison.forEach((compare) => {
33
- if (compare.added || compare.removed) {
34
- buffersEqual = false;
35
- }
36
- });
37
-
38
- return buffersEqual;
39
- }
40
-
41
- // Ensures that when a JSON file is converted to war3map and back again,
42
- // the two JSON files are the same; converting between the two data formats
43
- // must yield the original results back (except for some differences in rounding)
44
- describe('Reversion: json -> war -> json', () => {
45
-
46
- before(() => {
47
- fs.emptyDirSync(outputDir);
48
- fs.ensureDirSync(outputDir);
49
- });
50
-
51
- it('Doodads reversion', () => {
52
- const originalJson = readJsonTestFile('doodads.json');
53
- const translatedBuffer = Translator.DoodadsTranslator.jsonToWar(originalJson).buffer;
54
- const translatedJson = Translator.DoodadsTranslator.warToJson(translatedBuffer).json;
55
-
56
- writeJsonTestFile('doodads.json', translatedJson);
57
-
58
- assert.deepStrictEqual(originalJson, translatedJson);
59
- });
60
-
61
- it('Strings reversion', () => {
62
- const originalJson = readJsonTestFile('strings.json');
63
- const translatedBuffer = Translator.StringsTranslator.jsonToWar(originalJson).buffer;
64
- const translatedJson = Translator.StringsTranslator.warToJson(translatedBuffer).json;
65
-
66
- writeJsonTestFile('strings.json', translatedJson);
67
-
68
- assert.deepStrictEqual(originalJson, translatedJson);
69
- });
70
-
71
- it('Terrain reversion', () => {
72
- const originalJson = readJsonTestFile('terrain.json');
73
- const translatedBuffer = Translator.TerrainTranslator.jsonToWar(originalJson).buffer;
74
- const translatedJson = Translator.TerrainTranslator.warToJson(translatedBuffer).json;
75
-
76
- writeJsonTestFile('terrain.json', translatedJson);
77
-
78
- assert.deepStrictEqual(originalJson, translatedJson);
79
- });
80
-
81
- it('Units reversion', () => {
82
- const originalJson = readJsonTestFile('units.json');
83
- const translatedBuffer = Translator.UnitsTranslator.jsonToWar(originalJson).buffer;
84
- const translatedJson = Translator.UnitsTranslator.warToJson(translatedBuffer).json;
85
-
86
- writeJsonTestFile('units.json', translatedJson);
87
-
88
- assert.deepStrictEqual(originalJson, translatedJson);
89
- });
90
-
91
- it('Regions reversion', () => {
92
- const originalJson = readJsonTestFile('regions.json');
93
- const translatedBuffer = Translator.RegionsTranslator.jsonToWar(originalJson).buffer;
94
- const translatedJson = Translator.RegionsTranslator.warToJson(translatedBuffer).json;
95
-
96
- writeJsonTestFile('regions.json', translatedJson);
97
-
98
- assert.deepStrictEqual(originalJson, translatedJson);
99
- });
100
-
101
- it('Cameras reversion', () => {
102
- const originalJson = readJsonTestFile('cameras.json');
103
- const translatedBuffer = Translator.CamerasTranslator.jsonToWar(originalJson).buffer;
104
- const translatedJson = Translator.CamerasTranslator.warToJson(translatedBuffer).json;
105
-
106
- writeJsonTestFile('cameras.json', translatedJson);
107
-
108
- assert.deepStrictEqual(originalJson, translatedJson);
109
- });
110
-
111
- it('Sounds reversion', () => {
112
- const originalJson = readJsonTestFile('sounds.json');
113
- const translatedBuffer = Translator.SoundsTranslator.jsonToWar(originalJson).buffer;
114
- const translatedJson = Translator.SoundsTranslator.warToJson(translatedBuffer).json;
115
-
116
- writeJsonTestFile('sounds.json', translatedJson);
117
-
118
- assert.deepStrictEqual(originalJson, translatedJson);
119
- });
120
-
121
- it('Units (Object) reversion', () => {
122
- const originalJson = readJsonTestFile('obj-units.json');
123
- const objectType = Translator.ObjectsTranslator.ObjectType.Units;
124
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
125
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
126
-
127
- writeJsonTestFile('obj-units.json', translatedJson);
128
-
129
- assert.deepStrictEqual(originalJson, translatedJson);
130
- });
131
-
132
- it('Items (Object) reversion', () => {
133
- const originalJson = readJsonTestFile('obj-items.json');
134
- const objectType = Translator.ObjectsTranslator.ObjectType.Items;
135
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
136
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
137
-
138
- writeJsonTestFile('obj-items.json', translatedJson);
139
-
140
- assert.deepStrictEqual(originalJson, translatedJson);
141
- });
142
-
143
- it('Destructables (Object) reversion', () => {
144
- const originalJson = readJsonTestFile('obj-destructables.json');
145
- const objectType = Translator.ObjectsTranslator.ObjectType.Destructables;
146
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
147
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
148
-
149
- writeJsonTestFile('obj-destructables.json', translatedJson);
150
-
151
- assert.deepStrictEqual(originalJson, translatedJson);
152
- });
153
-
154
- it('Doodads (Object) reversion', () => {
155
- const originalJson = readJsonTestFile('obj-doodads.json');
156
- const objectType = Translator.ObjectsTranslator.ObjectType.Doodads;
157
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
158
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
159
-
160
- writeJsonTestFile('obj-doodads.json', translatedJson);
161
-
162
- assert.deepStrictEqual(originalJson, translatedJson);
163
- });
164
-
165
- it('Abilities (Object) reversion', () => {
166
- const originalJson = readJsonTestFile('obj-abilities.json');
167
- const objectType = Translator.ObjectsTranslator.ObjectType.Abilities;
168
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
169
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
170
-
171
- writeJsonTestFile('obj-abilities.json', translatedJson);
172
-
173
- assert.deepStrictEqual(originalJson, translatedJson);
174
- });
175
-
176
- it('Buffs (Object) reversion', () => {
177
- const originalJson = readJsonTestFile('obj-buffs.json');
178
- const objectType = Translator.ObjectsTranslator.ObjectType.Buffs;
179
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
180
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
181
-
182
- writeJsonTestFile('obj-buffs.json', translatedJson);
183
-
184
- assert.deepStrictEqual(originalJson, translatedJson);
185
- });
186
-
187
- it('Upgrades (Object) reversion', () => {
188
- const originalJson = readJsonTestFile('obj-upgrades.json');
189
- const objectType = Translator.ObjectsTranslator.ObjectType.Upgrades;
190
- const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
191
- const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
192
-
193
- writeJsonTestFile('obj-upgrades.json', translatedJson);
194
-
195
- assert.deepStrictEqual(originalJson, translatedJson);
196
- });
197
-
198
- it('Info reversion', () => {
199
- const originalJson = readJsonTestFile('info.json');
200
- const translatedBuffer = Translator.InfoTranslator.jsonToWar(originalJson).buffer;
201
- const translatedJson = Translator.InfoTranslator.warToJson(translatedBuffer).json;
202
-
203
- writeJsonTestFile('info.json', translatedJson);
204
-
205
- assert.deepStrictEqual(originalJson, translatedJson);
206
- });
207
-
208
- it('Imports reversion', () => {
209
- const originalJson = readJsonTestFile('imports.json');
210
- const translatedBuffer = Translator.ImportsTranslator.jsonToWar(originalJson).buffer;
211
- const translatedJson = Translator.ImportsTranslator.warToJson(translatedBuffer).json;
212
-
213
- writeJsonTestFile('imports.json', translatedJson);
214
-
215
- assert.deepStrictEqual(originalJson, translatedJson);
216
- });
217
-
218
- });
1
+ import assert from 'assert';
2
+ import * as diff from 'diff-buf';
3
+ import * as fs from 'fs-extra';
4
+ import * as Path from 'path';
5
+
6
+ import * as Translator from '../index';
7
+
8
+ const ObjectType = Translator.ObjectsTranslator.ObjectType;
9
+ const war3mapDir = Path.resolve('test/data');
10
+ const outputDir = Path.resolve('test/.output');
11
+
12
+ function readWar3MapBuffer(filename: string) {
13
+ return fs.readFileSync(Path.join(war3mapDir, filename));
14
+ }
15
+
16
+ function readJsonTestFile(filename: string) {
17
+ return fs.readJsonSync(Path.join(war3mapDir, filename));
18
+ }
19
+
20
+ function writeJsonTestFile(filename: string, json: object) {
21
+ return fs.writeJsonSync(Path.join(outputDir, filename), json);
22
+ }
23
+
24
+ function buffersAreEqual(b1: Buffer, b2: Buffer) {
25
+ const comparison = diff.default(b1, b2, { string: false });
26
+
27
+ // Library `diff` returns an array of objects documenting comparison
28
+ // e.g. { added: undefined, removed: undefined, value: 10 }
29
+ // We want all `added` and `removed` fields to be "undefined" for
30
+ // the buffers to be considered equal
31
+ let buffersEqual = true;
32
+ comparison.forEach((compare) => {
33
+ if (compare.added || compare.removed) {
34
+ buffersEqual = false;
35
+ }
36
+ });
37
+
38
+ return buffersEqual;
39
+ }
40
+
41
+ // Ensures that when a JSON file is converted to war3map and back again,
42
+ // the two JSON files are the same; converting between the two data formats
43
+ // must yield the original results back (except for some differences in rounding)
44
+ describe('Reversion: json -> war -> json', () => {
45
+
46
+ before(() => {
47
+ fs.emptyDirSync(outputDir);
48
+ fs.ensureDirSync(outputDir);
49
+ });
50
+
51
+ it('Doodads reversion', () => {
52
+ const originalJson = readJsonTestFile('doodads.json');
53
+ const translatedBuffer = Translator.DoodadsTranslator.jsonToWar(originalJson).buffer;
54
+ const translatedJson = Translator.DoodadsTranslator.warToJson(translatedBuffer).json;
55
+
56
+ writeJsonTestFile('doodads.json', translatedJson);
57
+
58
+ assert.deepStrictEqual(originalJson, translatedJson);
59
+ });
60
+
61
+ it('Strings reversion', () => {
62
+ const originalJson = readJsonTestFile('strings.json');
63
+ const translatedBuffer = Translator.StringsTranslator.jsonToWar(originalJson).buffer;
64
+ const translatedJson = Translator.StringsTranslator.warToJson(translatedBuffer).json;
65
+
66
+ writeJsonTestFile('strings.json', translatedJson);
67
+
68
+ assert.deepStrictEqual(originalJson, translatedJson);
69
+ });
70
+
71
+ it('Terrain reversion', () => {
72
+ const originalJson = readJsonTestFile('terrain.json');
73
+ const translatedBuffer = Translator.TerrainTranslator.jsonToWar(originalJson).buffer;
74
+ const translatedJson = Translator.TerrainTranslator.warToJson(translatedBuffer).json;
75
+
76
+ writeJsonTestFile('terrain.json', translatedJson);
77
+
78
+ assert.deepStrictEqual(originalJson, translatedJson);
79
+ });
80
+
81
+ it('Units reversion', () => {
82
+ const originalJson = readJsonTestFile('units.json');
83
+ const translatedBuffer = Translator.UnitsTranslator.jsonToWar(originalJson).buffer;
84
+ const translatedJson = Translator.UnitsTranslator.warToJson(translatedBuffer).json;
85
+
86
+ writeJsonTestFile('units.json', translatedJson);
87
+
88
+ assert.deepStrictEqual(originalJson, translatedJson);
89
+ });
90
+
91
+ it('Regions reversion', () => {
92
+ const originalJson = readJsonTestFile('regions.json');
93
+ const translatedBuffer = Translator.RegionsTranslator.jsonToWar(originalJson).buffer;
94
+ const translatedJson = Translator.RegionsTranslator.warToJson(translatedBuffer).json;
95
+
96
+ writeJsonTestFile('regions.json', translatedJson);
97
+
98
+ assert.deepStrictEqual(originalJson, translatedJson);
99
+ });
100
+
101
+ it('Cameras reversion', () => {
102
+ const originalJson = readJsonTestFile('cameras.json');
103
+ const translatedBuffer = Translator.CamerasTranslator.jsonToWar(originalJson).buffer;
104
+ const translatedJson = Translator.CamerasTranslator.warToJson(translatedBuffer).json;
105
+
106
+ writeJsonTestFile('cameras.json', translatedJson);
107
+
108
+ assert.deepStrictEqual(originalJson, translatedJson);
109
+ });
110
+
111
+ it('Sounds reversion', () => {
112
+ const originalJson = readJsonTestFile('sounds.json');
113
+ const translatedBuffer = Translator.SoundsTranslator.jsonToWar(originalJson).buffer;
114
+ const translatedJson = Translator.SoundsTranslator.warToJson(translatedBuffer).json;
115
+
116
+ writeJsonTestFile('sounds.json', translatedJson);
117
+
118
+ assert.deepStrictEqual(originalJson, translatedJson);
119
+ });
120
+
121
+ it('Units (Object) reversion', () => {
122
+ const originalJson = readJsonTestFile('obj-units.json');
123
+ const objectType = Translator.ObjectsTranslator.ObjectType.Units;
124
+ const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
125
+ const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
126
+
127
+ writeJsonTestFile('obj-units.json', translatedJson);
128
+
129
+ assert.deepStrictEqual(originalJson, translatedJson);
130
+ });
131
+
132
+ it('Items (Object) reversion', () => {
133
+ const originalJson = readJsonTestFile('obj-items.json');
134
+ const objectType = Translator.ObjectsTranslator.ObjectType.Items;
135
+ const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
136
+ const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
137
+
138
+ writeJsonTestFile('obj-items.json', translatedJson);
139
+
140
+ assert.deepStrictEqual(originalJson, translatedJson);
141
+ });
142
+
143
+ it('Destructables (Object) reversion', () => {
144
+ const originalJson = readJsonTestFile('obj-destructables.json');
145
+ const objectType = Translator.ObjectsTranslator.ObjectType.Destructables;
146
+ const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
147
+ const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
148
+
149
+ writeJsonTestFile('obj-destructables.json', translatedJson);
150
+
151
+ assert.deepStrictEqual(originalJson, translatedJson);
152
+ });
153
+
154
+ it('Doodads (Object) reversion', () => {
155
+ const originalJson = readJsonTestFile('obj-doodads.json');
156
+ const objectType = Translator.ObjectsTranslator.ObjectType.Doodads;
157
+ const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
158
+ const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
159
+
160
+ writeJsonTestFile('obj-doodads.json', translatedJson);
161
+
162
+ assert.deepStrictEqual(originalJson, translatedJson);
163
+ });
164
+
165
+ it('Abilities (Object) reversion', () => {
166
+ const originalJson = readJsonTestFile('obj-abilities.json');
167
+ const objectType = Translator.ObjectsTranslator.ObjectType.Abilities;
168
+ const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
169
+ const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
170
+
171
+ writeJsonTestFile('obj-abilities.json', translatedJson);
172
+
173
+ assert.deepStrictEqual(originalJson, translatedJson);
174
+ });
175
+
176
+ it('Buffs (Object) reversion', () => {
177
+ const originalJson = readJsonTestFile('obj-buffs.json');
178
+ const objectType = Translator.ObjectsTranslator.ObjectType.Buffs;
179
+ const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
180
+ const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
181
+
182
+ writeJsonTestFile('obj-buffs.json', translatedJson);
183
+
184
+ assert.deepStrictEqual(originalJson, translatedJson);
185
+ });
186
+
187
+ it('Upgrades (Object) reversion', () => {
188
+ const originalJson = readJsonTestFile('obj-upgrades.json');
189
+ const objectType = Translator.ObjectsTranslator.ObjectType.Upgrades;
190
+ const translatedBuffer = Translator.ObjectsTranslator.jsonToWar(objectType, originalJson).buffer;
191
+ const translatedJson = Translator.ObjectsTranslator.warToJson(objectType, translatedBuffer).json;
192
+
193
+ writeJsonTestFile('obj-upgrades.json', translatedJson);
194
+
195
+ assert.deepStrictEqual(originalJson, translatedJson);
196
+ });
197
+
198
+ it('Info reversion', () => {
199
+ const originalJson = readJsonTestFile('info.json');
200
+ const translatedBuffer = Translator.InfoTranslator.jsonToWar(originalJson).buffer;
201
+ const translatedJson = Translator.InfoTranslator.warToJson(translatedBuffer).json;
202
+
203
+ writeJsonTestFile('info.json', translatedJson);
204
+
205
+ assert.deepStrictEqual(originalJson, translatedJson);
206
+ });
207
+
208
+ it('Imports reversion', () => {
209
+ const originalJson = readJsonTestFile('imports.json');
210
+ const translatedBuffer = Translator.ImportsTranslator.jsonToWar(originalJson).buffer;
211
+ const translatedJson = Translator.ImportsTranslator.warToJson(translatedBuffer).json;
212
+
213
+ writeJsonTestFile('imports.json', translatedJson);
214
+
215
+ assert.deepStrictEqual(originalJson, translatedJson);
216
+ });
217
+
218
+ });
@@ -1,16 +1,16 @@
1
- [
2
- {
3
- "target": {
4
- "x": -319.01,
5
- "y": -90.18
6
- },
7
- "offsetZ": 0,
8
- "rotation": 90,
9
- "aoa": 304,
10
- "distance": 2657.34,
11
- "roll": 5,
12
- "fov": 70,
13
- "farClipping": 5000,
14
- "name": ""
15
- }
1
+ [
2
+ {
3
+ "target": {
4
+ "x": -319.01,
5
+ "y": -90.18
6
+ },
7
+ "offsetZ": 0,
8
+ "rotation": 90,
9
+ "aoa": 304,
10
+ "distance": 2657.34,
11
+ "roll": 5,
12
+ "fov": 70,
13
+ "farClipping": 5000,
14
+ "name": ""
15
+ }
16
16
  ]