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 +12 -12
- package/dist/index.d.ts +26 -13
- package/dist/index.js +13 -16
- package/package.json +6 -6
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
|
|
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 =
|
|
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?:
|
|
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.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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((
|
|
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 =
|
|
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
|
|
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.
|
|
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 =
|
|
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": "
|
|
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": "
|
|
56
|
-
"@esposter/xml2js": "
|
|
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": "
|
|
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": "^
|
|
67
|
+
"vitest": "^5.0.0"
|
|
68
68
|
},
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "5ea72289bdd594e598aab8fefd5686df2a642a7e"
|
|
70
70
|
}
|