parse-tmx 2.39.0 → 3.0.0

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 CHANGED
@@ -59,10 +59,10 @@ const loadMap = async () => {
59
59
  nextobjectid: 165,
60
60
  orientation: "orthogonal",
61
61
  renderorder: "right-down",
62
- properties: {
63
- property1: 'value',
64
- property2: 0.5
65
- },
62
+ properties: [
63
+ {name: 'property1', value: 'value'},
64
+ {name: 'property2', value: 0.5}
65
+ ],
66
66
  layers: [{
67
67
  id: 1,
68
68
  name: "layer name",
@@ -79,20 +79,20 @@ const loadMap = async () => {
79
79
  width: 512,
80
80
  height: 128,
81
81
  opacity: 0.77,
82
- properties: {
83
- property1: 'value',
84
- property2: false
85
- }
82
+ properties: [
83
+ {name: 'property1', value: 'value'},
84
+ {name: 'property2', value: false}
85
+ ]
86
86
  }, {
87
87
  id: 2,
88
88
  name: "objects",
89
89
  type: "objectgroup",
90
90
  visible: 1,
91
91
  objects: [{…}, {…}, {…}],
92
- properties: {
93
- property1: 'value',
94
- property2: false
95
- }
92
+ properties: [
93
+ {name: 'property1', value: 'value'},
94
+ {name: 'property2', value: false}
95
+ ]
96
96
  }, {
97
97
  …
98
98
  }],
package/dist/index.d.ts CHANGED
@@ -1,5 +1,16 @@
1
+ //#region src/models/tmx/shared/TMXExportShared.d.ts
2
+ export interface TMXExportShared {
3
+ format: string;
4
+ target: string;
5
+ }
6
+ //#endregion
7
+ //#region src/models/tmx/parsed/TMXExportParsed.d.ts
8
+ export interface TMXExportParsed extends TMXExportShared {}
9
+ //#endregion
1
10
  //#region src/models/tmx/parsed/TMXEditorSettingsParsed.d.ts
2
- export interface TMXEditorSettingsParsed extends Record<string, unknown> {}
11
+ export interface TMXEditorSettingsParsed {
12
+ export?: TMXExportParsed;
13
+ }
3
14
  //#endregion
4
15
  //#region src/models/tmx/parsed/TMXFlipsParsed.d.ts
5
16
  export interface TMXFlipsParsed {
@@ -26,8 +37,14 @@ export declare enum Shape {
26
37
  Rectangle = "rectangle"
27
38
  }
28
39
  //#endregion
40
+ //#region src/models/tmx/parsed/TMXPropertyParsed.d.ts
41
+ export interface TMXPropertyParsed {
42
+ name: string;
43
+ value: boolean | number | string;
44
+ }
45
+ //#endregion
29
46
  //#region src/models/tmx/parsed/TMXPropertiesParsed.d.ts
30
- export type TMXPropertiesParsed = Record<string, unknown>[];
47
+ export type TMXPropertiesParsed = TMXPropertyParsed[];
31
48
  //#endregion
32
49
  //#region src/models/tmx/shared/TMXObjectShared.d.ts
33
50
  export interface TMXObjectShared {
@@ -243,7 +260,7 @@ export interface TMXImageNode extends TMXNode<TMXImageShared> {}
243
260
  //#region src/models/tmx/node/TMXPropertyNode.d.ts
244
261
  export interface TMXPropertyNode extends TMXNode<{
245
262
  name: string;
246
- value?: string;
263
+ value?: boolean | number | string;
247
264
  }> {
248
265
  _: string;
249
266
  }
@@ -251,6 +268,11 @@ export interface TMXPropertyNode extends TMXNode<{
251
268
  //#region src/models/tmx/node/TMXPropertiesNode.d.ts
252
269
  export interface TMXPropertiesNode extends TMXNode<Record<string, never>, TMXPropertyNode> {}
253
270
  //#endregion
271
+ //#region src/models/tmx/node/TMXTextNode.d.ts
272
+ export interface TMXTextNode extends TMXNode<Record<string, boolean | number | string> | undefined> {
273
+ _: string;
274
+ }
275
+ //#endregion
254
276
  //#region src/models/tmx/node/TMXObjectNode.d.ts
255
277
  export interface TMXObjectNode extends TMXNode<TMXObjectShared, TMXDataNode | TMXPropertiesNode> {
256
278
  polygon?: TMXNode<{
@@ -259,7 +281,7 @@ export interface TMXObjectNode extends TMXNode<TMXObjectShared, TMXDataNode | TM
259
281
  properties?: {
260
282
  property: TMXPropertyNode[];
261
283
  }[];
262
- text?: TMXDataNode[];
284
+ text?: TMXTextNode[];
263
285
  }
264
286
  //#endregion
265
287
  //#region src/models/tmx/node/TMXTileNode.d.ts
@@ -352,12 +374,6 @@ export declare const parseXmlValue: (value: string) => boolean | number | string
352
374
  //#region src/util/unpackTileBytes.d.ts
353
375
  export declare const unpackTileBytes: (bytes: Uint8Array, expectedCount: number) => number[];
354
376
  //#endregion
355
- //#region src/models/tmx/shared/TMXExportShared.d.ts
356
- export interface TMXExportShared {
357
- format: string;
358
- target: string;
359
- }
360
- //#endregion
361
377
  //#region src/models/tmx/node/TMXExportNode.d.ts
362
378
  export interface TMXExportNode extends TMXNode<TMXExportShared> {}
363
379
  //#endregion
@@ -371,7 +387,4 @@ export interface TMXMapNode extends TMXNode<TMXMapShared, TMXEditorSettingsNode
371
387
  export interface TMX {
372
388
  map: TMXMapNode;
373
389
  }
374
- //#endregion
375
- //#region src/models/tmx/parsed/TMXExportParsed.d.ts
376
- export interface TMXExportParsed extends TMXExportShared {}
377
390
  //#endregion
package/dist/index.js CHANGED
@@ -102,17 +102,13 @@ const parseObjectShape = (node) => {
102
102
  };
103
103
  //#endregion
104
104
  //#region src/util/parseProperties.ts
105
- const parseProperties = (properties) => properties.map(({ property }) => {
106
- const { $, _ } = takeOne(property);
107
- const { name, value } = $;
108
- return {
109
- name,
110
- value: value ?? _
111
- };
112
- });
105
+ const parseProperties = (properties) => properties.flatMap(({ property }) => property.map(({ $: { name, value }, _ }) => ({
106
+ name,
107
+ value: value ?? _
108
+ })));
113
109
  //#endregion
114
110
  //#region src/util/parseTileId.ts
115
- const FLIPPED_MASK = ~Flippeds.reduce((acc, curr) => acc | curr, 0);
111
+ const FLIPPED_MASK = ~Flippeds.reduce((accumulator, flipped) => accumulator | flipped, 0);
116
112
  const parseTileId = (gid) => gid & FLIPPED_MASK;
117
113
  //#endregion
118
114
  //#region src/util/parseObject.ts
@@ -130,7 +126,10 @@ const parseObject = (node) => {
130
126
  if (text) {
131
127
  const textNode = takeOne(text);
132
128
  object.text = textNode._;
133
- object.properties = Object.assign({}, ...object.properties ?? [], textNode.$);
129
+ object.properties = [...object.properties ?? [], ...Object.entries(textNode.$ ?? {}).map(([name, value]) => ({
130
+ name,
131
+ value
132
+ }))];
134
133
  }
135
134
  if (object.gid) {
136
135
  object.flips = parseFlips(object.gid);
@@ -170,16 +169,14 @@ const checkIsTMXEmbeddedTilesetNode = (node) => "tile" in node;
170
169
  //#region src/util/getDecompressedBytes.ts
171
170
  const getDecompressedBytes = async (bytes, compression) => {
172
171
  const format = compression === "gzip" ? "gzip" : "deflate";
173
- const compressedTileStream = new Response(bytes).body;
174
- if (!compressedTileStream) throw new InvalidOperationError(Operation.Read, getDecompressedBytes.name, compression);
175
- const decompressedTileStream = compressedTileStream.pipeThrough(new DecompressionStream(format));
172
+ const decompressedTileStream = new Blob([bytes]).stream().pipeThrough(new DecompressionStream(format));
176
173
  return new Uint8Array(await new Response(decompressedTileStream).arrayBuffer());
177
174
  };
178
175
  //#endregion
179
176
  //#region src/util/unpackTileBytes.ts
180
177
  const unpackTileBytes = (bytes, expectedCount) => {
181
- const unpackedTiles = [];
182
178
  if (bytes.byteLength !== expectedCount) throw new InvalidOperationError(Operation.Read, "TMXLayer", `expected ${expectedCount} bytes of tile data, received ${bytes.byteLength}`);
179
+ const unpackedTiles = [];
183
180
  const dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
184
181
  for (let i = 0; i < expectedCount; i += 4) unpackedTiles.push(dataView.getUint32(i, true));
185
182
  return unpackedTiles;
@@ -298,7 +295,7 @@ const parseTmx = async (xmlString, translateFlips = false) => {
298
295
  case "data": break;
299
296
  case "editorsettings":
300
297
  if (!node.$$) break;
301
- map.editorsettings = Object.assign({}, ...node.$$.map((n) => ({ [n["#name"]]: n.$ })));
298
+ map.editorsettings = Object.fromEntries(node.$$.map((exportNode) => [exportNode["#name"], exportNode.$]));
302
299
  break;
303
300
  case "export":
304
301
  case "image":
@@ -314,7 +311,7 @@ const parseTmx = async (xmlString, translateFlips = false) => {
314
311
  }
315
312
  case "properties":
316
313
  if (!node.$$) break;
317
- map.properties = Object.assign({}, ...node.$$.map(({ $: { name, value } }) => ({ [name]: value })));
314
+ map.properties = parseProperties([{ property: node.$$ }]);
318
315
  break;
319
316
  case "tileset":
320
317
  map.tilesets.push(parseTileset(node));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-tmx",
3
- "version": "2.39.0",
3
+ "version": "3.0.0",
4
4
  "description": "A parser for tmx.",
5
5
  "keywords": [
6
6
  "game-development",
@@ -52,19 +52,19 @@
52
52
  "typecheck": "tsc"
53
53
  },
54
54
  "dependencies": {
55
- "@esposter/shared": "2.39.0",
56
- "@esposter/xml2js": "2.39.0",
55
+ "@esposter/shared": "3.0.0",
56
+ "@esposter/xml2js": "3.0.0",
57
57
  "data-urls": "^7.0.0"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@arethetypeswrong/core": "^0.18.5",
61
- "@esposter/configuration": "2.39.0",
61
+ "@esposter/configuration": "3.0.0",
62
62
  "@types/data-urls": "^3.0.5",
63
63
  "@types/xml2js": "^0.4.14",
64
64
  "publint": "^0.3.24",
65
65
  "tsdown": "^0.23.0",
66
66
  "type-fest": "^5.9.0",
67
- "vitest": "^4.1.11"
67
+ "vitest": "^5.0.0"
68
68
  },
69
- "gitHead": "98f89a176510bb274865731121f990e48c6d056a"
69
+ "gitHead": "5ea72289bdd594e598aab8fefd5686df2a642a7e"
70
70
  }