parse-tmx 3.0.0 → 3.2.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 +2 -2
- package/dist/index.d.ts +18 -18
- package/dist/index.js +19 -20
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -67,7 +67,8 @@ const loadMap = async () => {
|
|
|
67
67
|
id: 1,
|
|
68
68
|
name: "layer name",
|
|
69
69
|
type: "layer",
|
|
70
|
-
|
|
70
|
+
// Only written when the layer is hidden in Tiled
|
|
71
|
+
visible: 0,
|
|
71
72
|
data: [0, 1, 1, 10, 10, 10, 1, 1, 0, 0, 0, 0, …],
|
|
72
73
|
// When the translateFlips parameter is enabled
|
|
73
74
|
flips: [
|
|
@@ -87,7 +88,6 @@ const loadMap = async () => {
|
|
|
87
88
|
id: 2,
|
|
88
89
|
name: "objects",
|
|
89
90
|
type: "objectgroup",
|
|
90
|
-
visible: 1,
|
|
91
91
|
objects: [{…}, {…}, {…}],
|
|
92
92
|
properties: [
|
|
93
93
|
{name: 'property1', value: 'value'},
|
package/dist/index.d.ts
CHANGED
|
@@ -215,7 +215,7 @@ export declare enum Flipped {
|
|
|
215
215
|
}
|
|
216
216
|
export declare const Flippeds: readonly Flipped[];
|
|
217
217
|
//#endregion
|
|
218
|
-
//#region src/
|
|
218
|
+
//#region src/services/checkIsExternalTileset.d.ts
|
|
219
219
|
export declare const checkIsExternalTileset: (tileset: TMXEmbeddedTilesetShared | TMXExternalTilesetShared) => tileset is TMXExternalTilesetShared;
|
|
220
220
|
//#endregion
|
|
221
221
|
//#region src/models/tmx/node/TMXNodeType.d.ts
|
|
@@ -298,16 +298,16 @@ export interface TMXEmbeddedTilesetNode extends TMXNode<TMXEmbeddedTilesetShared
|
|
|
298
298
|
tile?: TMXTileNode[];
|
|
299
299
|
}
|
|
300
300
|
//#endregion
|
|
301
|
-
//#region src/
|
|
301
|
+
//#region src/services/checkIsTMXEmbeddedTilesetNode.d.ts
|
|
302
302
|
export declare const checkIsTMXEmbeddedTilesetNode: (node: TMXDataNode | TMXEmbeddedTilesetNode) => node is TMXEmbeddedTilesetNode;
|
|
303
303
|
//#endregion
|
|
304
|
-
//#region src/
|
|
304
|
+
//#region src/services/cloneNodeWithType.d.ts
|
|
305
305
|
export declare const cloneNodeWithType: <TParsed>(node: BaseTMXNode<unknown>) => TParsed;
|
|
306
306
|
//#endregion
|
|
307
|
-
//#region src/
|
|
307
|
+
//#region src/services/getDecompressedBytes.d.ts
|
|
308
308
|
export declare const getDecompressedBytes: (bytes: Uint8Array<ArrayBuffer>, compression: Compression.Gzip | Compression.Zlib) => Promise<Uint8Array<ArrayBuffer>>;
|
|
309
309
|
//#endregion
|
|
310
|
-
//#region src/
|
|
310
|
+
//#region src/services/parseFlips.d.ts
|
|
311
311
|
export declare const parseFlips: (gid: number) => TMXFlipsParsed;
|
|
312
312
|
//#endregion
|
|
313
313
|
//#region src/models/tmx/node/TMXLayerNode.d.ts
|
|
@@ -327,33 +327,33 @@ export interface TMXGroupLayerNode extends TMXNode<TMXGroupLayerShared, TMXLayer
|
|
|
327
327
|
}[];
|
|
328
328
|
}
|
|
329
329
|
//#endregion
|
|
330
|
-
//#region src/
|
|
330
|
+
//#region src/services/parseGroup.d.ts
|
|
331
331
|
export declare const parseGroup: (node: TMXGroupLayerNode, expectedCount: number, translateFlips: boolean) => Promise<TMXGroupLayerParsed>;
|
|
332
332
|
//#endregion
|
|
333
|
-
//#region src/
|
|
333
|
+
//#region src/services/parseLayer.d.ts
|
|
334
334
|
export declare const parseLayer: (node: TMXLayerNode) => TMXLayerParsed;
|
|
335
335
|
//#endregion
|
|
336
|
-
//#region src/
|
|
336
|
+
//#region src/services/parseNode.d.ts
|
|
337
337
|
export declare const parseNode: <TNode extends TMXGroupLayerNode | TMXLayerNode, TParsedNode = TNode extends TMXLayerNode ? TMXLayerParsed : TMXGroupLayerParsed>(node: TNode, expectedCount: number, translateFlips: boolean) => Promise<TParsedNode>;
|
|
338
338
|
//#endregion
|
|
339
|
-
//#region src/
|
|
339
|
+
//#region src/services/parseObject.d.ts
|
|
340
340
|
export declare const parseObject: (node: TMXObjectNode) => TMXObjectParsed;
|
|
341
341
|
//#endregion
|
|
342
|
-
//#region src/
|
|
342
|
+
//#region src/services/parseObjectShape.d.ts
|
|
343
343
|
export declare const parseObjectShape: (node: TMXObjectNode) => Shape;
|
|
344
344
|
//#endregion
|
|
345
|
-
//#region src/
|
|
345
|
+
//#region src/services/parseProperties.d.ts
|
|
346
346
|
export declare const parseProperties: (properties: {
|
|
347
347
|
property: TMXPropertyNode[];
|
|
348
348
|
}[]) => TMXPropertiesParsed;
|
|
349
349
|
//#endregion
|
|
350
|
-
//#region src/
|
|
350
|
+
//#region src/services/parseTile.d.ts
|
|
351
351
|
export declare const parseTile: (node: TMXTileNode) => TMXTileParsed;
|
|
352
352
|
//#endregion
|
|
353
|
-
//#region src/
|
|
353
|
+
//#region src/services/parseTileId.d.ts
|
|
354
354
|
export declare const parseTileId: (gid: number) => number;
|
|
355
355
|
//#endregion
|
|
356
|
-
//#region src/
|
|
356
|
+
//#region src/services/parseTileLayer.d.ts
|
|
357
357
|
export declare const parseTileLayer: (node: TMXLayerNode, expectedCount: number, translateFlips: boolean) => Promise<TMXLayerParsed>;
|
|
358
358
|
//#endregion
|
|
359
359
|
//#region src/models/tmx/node/TMXExternalTilesetNode.d.ts
|
|
@@ -362,16 +362,16 @@ export interface TMXExternalTilesetNode extends TMXNode<TMXExternalTilesetShared
|
|
|
362
362
|
//#region src/models/tmx/node/TMXTilesetNode.d.ts
|
|
363
363
|
export type TMXTilesetNode = TMXEmbeddedTilesetNode | TMXExternalTilesetNode;
|
|
364
364
|
//#endregion
|
|
365
|
-
//#region src/
|
|
365
|
+
//#region src/services/parseTileset.d.ts
|
|
366
366
|
export declare const parseTileset: (node: TMXTilesetNode) => TMXTilesetParsed;
|
|
367
367
|
//#endregion
|
|
368
|
-
//#region src/
|
|
368
|
+
//#region src/services/parseXmlString.d.ts
|
|
369
369
|
export declare const parseXmlString: <T extends object>(xmlString: string) => Promise<T>;
|
|
370
370
|
//#endregion
|
|
371
|
-
//#region src/
|
|
371
|
+
//#region src/services/parseXmlValue.d.ts
|
|
372
372
|
export declare const parseXmlValue: (value: string) => boolean | number | string;
|
|
373
373
|
//#endregion
|
|
374
|
-
//#region src/
|
|
374
|
+
//#region src/services/unpackTileBytes.d.ts
|
|
375
375
|
export declare const unpackTileBytes: (bytes: Uint8Array, expectedCount: number) => number[];
|
|
376
376
|
//#endregion
|
|
377
377
|
//#region src/models/tmx/node/TMXExportNode.d.ts
|
package/dist/index.js
CHANGED
|
@@ -53,14 +53,14 @@ var TMXParsed = class {
|
|
|
53
53
|
}
|
|
54
54
|
};
|
|
55
55
|
//#endregion
|
|
56
|
-
//#region src/
|
|
56
|
+
//#region src/services/cloneNodeWithType.ts
|
|
57
57
|
const cloneNodeWithType = (node) => {
|
|
58
58
|
const parsed = structuredClone(node.$);
|
|
59
59
|
parsed.type = node["#name"];
|
|
60
60
|
return parsed;
|
|
61
61
|
};
|
|
62
62
|
//#endregion
|
|
63
|
-
//#region src/
|
|
63
|
+
//#region src/services/parseGroup.ts
|
|
64
64
|
const parseGroup = async (node, expectedCount, translateFlips) => {
|
|
65
65
|
const { $$ } = node;
|
|
66
66
|
const group = cloneNodeWithType(node);
|
|
@@ -77,7 +77,7 @@ let Flipped = /* @__PURE__ */ function(Flipped) {
|
|
|
77
77
|
}({});
|
|
78
78
|
const Flippeds = Object.values(Flipped).filter((value) => typeof value === "number");
|
|
79
79
|
//#endregion
|
|
80
|
-
//#region src/
|
|
80
|
+
//#region src/services/parseFlips.ts
|
|
81
81
|
const parseFlips = (gid) => ({
|
|
82
82
|
Diagonal: Boolean(gid & 536870912),
|
|
83
83
|
Horizontal: Boolean(gid & 2147483648),
|
|
@@ -93,7 +93,7 @@ let Shape = /* @__PURE__ */ function(Shape) {
|
|
|
93
93
|
return Shape;
|
|
94
94
|
}({});
|
|
95
95
|
//#endregion
|
|
96
|
-
//#region src/
|
|
96
|
+
//#region src/services/parseObjectShape.ts
|
|
97
97
|
const parseObjectShape = (node) => {
|
|
98
98
|
if ("point" in node) return "point";
|
|
99
99
|
else if ("ellipse" in node) return "ellipse";
|
|
@@ -101,17 +101,17 @@ const parseObjectShape = (node) => {
|
|
|
101
101
|
else return "rectangle";
|
|
102
102
|
};
|
|
103
103
|
//#endregion
|
|
104
|
-
//#region src/
|
|
104
|
+
//#region src/services/parseProperties.ts
|
|
105
105
|
const parseProperties = (properties) => properties.flatMap(({ property }) => property.map(({ $: { name, value }, _ }) => ({
|
|
106
106
|
name,
|
|
107
107
|
value: value ?? _
|
|
108
108
|
})));
|
|
109
109
|
//#endregion
|
|
110
|
-
//#region src/
|
|
110
|
+
//#region src/services/parseTileId.ts
|
|
111
111
|
const FLIPPED_MASK = ~Flippeds.reduce((accumulator, flipped) => accumulator | flipped, 0);
|
|
112
112
|
const parseTileId = (gid) => gid & FLIPPED_MASK;
|
|
113
113
|
//#endregion
|
|
114
|
-
//#region src/
|
|
114
|
+
//#region src/services/parseObject.ts
|
|
115
115
|
const parseObject = (node) => {
|
|
116
116
|
const { $, polygon, properties, text } = node;
|
|
117
117
|
const object = structuredClone($);
|
|
@@ -138,11 +138,10 @@ const parseObject = (node) => {
|
|
|
138
138
|
return object;
|
|
139
139
|
};
|
|
140
140
|
//#endregion
|
|
141
|
-
//#region src/
|
|
141
|
+
//#region src/services/parseLayer.ts
|
|
142
142
|
const parseLayer = (node) => {
|
|
143
143
|
const { image, object, properties } = node;
|
|
144
144
|
const layer = cloneNodeWithType(node);
|
|
145
|
-
layer.visible = 1;
|
|
146
145
|
if (image) layer.image = structuredClone(takeOne(image).$);
|
|
147
146
|
if (object) layer.objects = object.map((o) => parseObject(o));
|
|
148
147
|
if (properties) layer.properties = parseProperties(properties);
|
|
@@ -163,17 +162,17 @@ let Encoding = /* @__PURE__ */ function(Encoding) {
|
|
|
163
162
|
return Encoding;
|
|
164
163
|
}({});
|
|
165
164
|
//#endregion
|
|
166
|
-
//#region src/
|
|
165
|
+
//#region src/services/checkIsTMXEmbeddedTilesetNode.ts
|
|
167
166
|
const checkIsTMXEmbeddedTilesetNode = (node) => "tile" in node;
|
|
168
167
|
//#endregion
|
|
169
|
-
//#region src/
|
|
168
|
+
//#region src/services/getDecompressedBytes.ts
|
|
170
169
|
const getDecompressedBytes = async (bytes, compression) => {
|
|
171
170
|
const format = compression === "gzip" ? "gzip" : "deflate";
|
|
172
171
|
const decompressedTileStream = new Blob([bytes]).stream().pipeThrough(new DecompressionStream(format));
|
|
173
172
|
return new Uint8Array(await new Response(decompressedTileStream).arrayBuffer());
|
|
174
173
|
};
|
|
175
174
|
//#endregion
|
|
176
|
-
//#region src/
|
|
175
|
+
//#region src/services/unpackTileBytes.ts
|
|
177
176
|
const unpackTileBytes = (bytes, expectedCount) => {
|
|
178
177
|
if (bytes.byteLength !== expectedCount) throw new InvalidOperationError(Operation.Read, "TMXLayer", `expected ${expectedCount} bytes of tile data, received ${bytes.byteLength}`);
|
|
179
178
|
const unpackedTiles = [];
|
|
@@ -182,7 +181,7 @@ const unpackTileBytes = (bytes, expectedCount) => {
|
|
|
182
181
|
return unpackedTiles;
|
|
183
182
|
};
|
|
184
183
|
//#endregion
|
|
185
|
-
//#region src/
|
|
184
|
+
//#region src/services/parseTileLayer.ts
|
|
186
185
|
const parseTileLayer = async (node, expectedCount, translateFlips) => {
|
|
187
186
|
const { data, properties } = node;
|
|
188
187
|
if (!data) throw new InvalidOperationError(Operation.Read, "TMXLayer", "data is missing");
|
|
@@ -223,7 +222,7 @@ const parseTileLayer = async (node, expectedCount, translateFlips) => {
|
|
|
223
222
|
return layer;
|
|
224
223
|
};
|
|
225
224
|
//#endregion
|
|
226
|
-
//#region src/
|
|
225
|
+
//#region src/services/parseNode.ts
|
|
227
226
|
const parseNode = (node, expectedCount, translateFlips) => {
|
|
228
227
|
const tmxNodeType = node["#name"];
|
|
229
228
|
switch (tmxNodeType) {
|
|
@@ -235,20 +234,20 @@ const parseNode = (node, expectedCount, translateFlips) => {
|
|
|
235
234
|
}
|
|
236
235
|
};
|
|
237
236
|
//#endregion
|
|
238
|
-
//#region src/
|
|
237
|
+
//#region src/services/checkIsExternalTileset.ts
|
|
239
238
|
const checkIsExternalTileset = (tileset) => "source" in tileset;
|
|
240
239
|
//#endregion
|
|
241
|
-
//#region src/
|
|
240
|
+
//#region src/services/parseTile.ts
|
|
242
241
|
const parseTile = (node) => {
|
|
243
242
|
const { $, animation, objectgroup, properties } = node;
|
|
244
243
|
const tile = structuredClone($);
|
|
245
244
|
if (animation) tile.animation = { frames: takeOne(takeOne(animation), "frame").map(({ $: frameData }) => structuredClone(frameData)) };
|
|
246
|
-
if (objectgroup) tile.objects = takeOne(takeOne(objectgroup), "object").map((
|
|
245
|
+
if (objectgroup) tile.objects = takeOne(takeOne(objectgroup), "object").map((objectNode) => parseObject(objectNode));
|
|
247
246
|
if (properties) tile.properties = parseProperties(properties);
|
|
248
247
|
return tile;
|
|
249
248
|
};
|
|
250
249
|
//#endregion
|
|
251
|
-
//#region src/
|
|
250
|
+
//#region src/services/parseTileset.ts
|
|
252
251
|
const parseTileset = (node) => {
|
|
253
252
|
if (checkIsExternalTileset(node.$)) return structuredClone(node.$);
|
|
254
253
|
const { $, $$, tile } = node;
|
|
@@ -265,7 +264,7 @@ const parseTileset = (node) => {
|
|
|
265
264
|
throw new InvalidOperationError(Operation.Read, parseTileset.name, $.name);
|
|
266
265
|
};
|
|
267
266
|
//#endregion
|
|
268
|
-
//#region src/
|
|
267
|
+
//#region src/services/parseXmlValue.ts
|
|
269
268
|
const NUMBER_REGEX = /^[+-]?\d+(?<decimal>\.\d+)?$/u;
|
|
270
269
|
const parseXmlValue = (value) => {
|
|
271
270
|
if (value === "true") return true;
|
|
@@ -274,7 +273,7 @@ const parseXmlValue = (value) => {
|
|
|
274
273
|
else return value;
|
|
275
274
|
};
|
|
276
275
|
//#endregion
|
|
277
|
-
//#region src/
|
|
276
|
+
//#region src/services/parseXmlString.ts
|
|
278
277
|
const parseXmlString = (xmlString) => {
|
|
279
278
|
const xml = parseDataUrl(xmlString) ?? xmlString;
|
|
280
279
|
return parseStringPromise(xml, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "parse-tmx",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.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": "3.
|
|
56
|
-
"@esposter/xml2js": "3.
|
|
55
|
+
"@esposter/shared": "3.2.0",
|
|
56
|
+
"@esposter/xml2js": "3.2.0",
|
|
57
57
|
"data-urls": "^7.0.0"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@arethetypeswrong/core": "^0.18.5",
|
|
61
|
-
"@esposter/configuration": "3.
|
|
61
|
+
"@esposter/configuration": "3.2.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
|
-
"type-fest": "^5.
|
|
67
|
-
"vitest": "^5.0.
|
|
66
|
+
"type-fest": "^5.10.0",
|
|
67
|
+
"vitest": "^5.0.1"
|
|
68
68
|
},
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "bc055ed2f154eff219a355016a6b586962dbfa9c"
|
|
70
70
|
}
|