@flighthq/tilemap-formats 0.5.1-next.685.f72fc7f → 0.5.1-next.704.19c91ec

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
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/tilemap-formats`. Th
13
13
  This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
14
14
 
15
15
  - [Flight project](https://github.com/flighthq/flight)
16
- - [Source for @flighthq/tilemap-formats@0.5.1-next.685.f72fc7f](https://github.com/flighthq/flight/tree/f72fc7feaa9653d950f39c7d2fe6365f48e82e51/packages/tilemap-formats)
17
- - [License](https://github.com/flighthq/flight/blob/f72fc7feaa9653d950f39c7d2fe6365f48e82e51/LICENSE.md)
16
+ - [Source for @flighthq/tilemap-formats@0.5.1-next.704.19c91ec](https://github.com/flighthq/flight/tree/19c91ec3e569d6b3b471682726465a79fba9f8cb/packages/tilemap-formats)
17
+ - [License](https://github.com/flighthq/flight/blob/19c91ec3e569d6b3b471682726465a79fba9f8cb/LICENSE.md)
@@ -1,4 +1,4 @@
1
- import type { TiledMap, TiledParseOptions, TiledTileset } from '@flighthq/types/contract';
2
- export declare function parseTiledTilesetJson(text: string, _options?: Readonly<TiledParseOptions>): TiledTileset | null;
3
- export declare function parseTiledTmj(text: string, options?: Readonly<TiledParseOptions>): TiledMap | null;
1
+ import type { ImportDiagnostic, TiledMap, TiledParseOptions, TiledTileset } from '@flighthq/types/contract';
2
+ export declare function parseTiledTilesetJson(text: string, _options?: Readonly<TiledParseOptions>, diagnostics?: ImportDiagnostic[]): TiledTileset | null;
3
+ export declare function parseTiledTmj(text: string, options?: Readonly<TiledParseOptions>, diagnostics?: ImportDiagnostic[]): TiledMap | null;
4
4
  //# sourceMappingURL=tiledJsonParse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tiledJsonParse.d.ts","sourceRoot":"","sources":["../src/tiledJsonParse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,QAAQ,EAGR,iBAAiB,EAIjB,YAAY,EAKb,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,YAAY,GAAG,IAAI,CAI/G;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,QAAQ,GAAG,IAAI,CAsBlG"}
1
+ {"version":3,"file":"tiledJsonParse.d.ts","sourceRoot":"","sources":["../src/tiledJsonParse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAGhB,QAAQ,EAGR,iBAAiB,EAIjB,YAAY,EAKb,MAAM,0BAA0B,CAAC;AAUlC,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACtC,WAAW,CAAC,EAAE,gBAAgB,EAAE,GAC/B,YAAY,GAAG,IAAI,CAarB;AAID,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACrC,WAAW,CAAC,EAAE,gBAAgB,EAAE,GAC/B,QAAQ,GAAG,IAAI,CAqCjB"}
@@ -1,27 +1,41 @@
1
+ import { reportImportDiagnostic } from '@flighthq/importdiagnostics/contract';
2
+ import { ImportDiagnosticSeverity } from '@flighthq/types/contract';
1
3
  import { parseTiledColor } from './tiledColor';
2
4
  import { decodeTiledBase64Layer, decodeTiledCsvLayer } from './tiledLayerData';
3
5
  // JSON front-end of the Tiled codec: TMJ maps and standalone TSJ tilesets. The same DTO builders as
4
6
  // the XML front-end, walking a parsed JSON tree instead of an XML one.
5
7
  // Parses a standalone TSJ tileset document into a `TiledTileset`, or null on malformed JSON.
6
- export function parseTiledTilesetJson(text, _options) {
8
+ export function parseTiledTilesetJson(text, _options, diagnostics) {
7
9
  const root = parseJson(text);
8
- if (root === null)
10
+ if (root === null) {
11
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Reject, 'tiled.json-malformed', 'parseTiledTilesetJson', { path: 'tileset' });
9
12
  return null;
10
- return buildTiledTilesetFromJson(root);
13
+ }
14
+ return buildTiledTilesetFromJson(root, diagnostics, 'tileset');
11
15
  }
12
16
  // Parses a TMJ map document into a faithful `TiledMap`, or null on malformed JSON. A compressed tile
13
17
  // layer with no `inflate` seam is preserved as an all-zero grid.
14
- export function parseTiledTmj(text, options) {
18
+ export function parseTiledTmj(text, options, diagnostics) {
15
19
  const root = parseJson(text);
16
- if (root === null)
20
+ if (root === null) {
21
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Reject, 'tiled.json-malformed', 'parseTiledTmj', {
22
+ path: 'map',
23
+ });
17
24
  return null;
25
+ }
26
+ if (diagnostics !== undefined) {
27
+ reportMissingJsonField(root, 'height', diagnostics, 'parseTiledTmj', 'map');
28
+ reportMissingJsonField(root, 'tileheight', diagnostics, 'parseTiledTmj', 'map');
29
+ reportMissingJsonField(root, 'tilewidth', diagnostics, 'parseTiledTmj', 'map');
30
+ reportMissingJsonField(root, 'width', diagnostics, 'parseTiledTmj', 'map');
31
+ }
18
32
  const background = strField(root, 'backgroundcolor');
19
33
  return {
20
34
  backgroundColor: background !== null ? parseTiledColor(background) : null,
21
35
  height: numField(root, 'height', 0),
22
36
  infinite: boolField(root, 'infinite', false),
23
37
  layers: arrayField(root, 'layers')
24
- .map((layer) => buildTiledLayerFromJson(layer, options))
38
+ .map((layer, index) => buildTiledLayerFromJson(layer, options, diagnostics, diagnostics === undefined ? '' : `map.layers[${index}]`))
25
39
  .filter((layer) => layer !== null),
26
40
  orientation: asOrientation(strField(root, 'orientation')),
27
41
  properties: buildTiledPropertiesFromJson(root),
@@ -29,7 +43,7 @@ export function parseTiledTmj(text, options) {
29
43
  tileHeight: numField(root, 'tileheight', 0),
30
44
  tileWidth: numField(root, 'tilewidth', 0),
31
45
  tiledVersion: strField(root, 'tiledversion'),
32
- tilesets: arrayField(root, 'tilesets').map(buildTiledTilesetRefFromJson),
46
+ tilesets: arrayField(root, 'tilesets').map((tileset, index) => buildTiledTilesetRefFromJson(tileset, diagnostics, diagnostics === undefined ? '' : `map.tilesets[${index}]`)),
33
47
  version: stringOr(numOrString(root.version), '1.0'),
34
48
  width: numField(root, 'width', 0),
35
49
  };
@@ -74,7 +88,7 @@ function buildTiledLayerBaseFromJson(obj) {
74
88
  visible: boolField(obj, 'visible', true),
75
89
  };
76
90
  }
77
- function buildTiledLayerDataFromJson(obj, width, height, options) {
91
+ function buildTiledLayerDataFromJson(obj, width, height, options, diagnostics, path = '') {
78
92
  const grid = new Uint32Array(width * height);
79
93
  const data = obj.data;
80
94
  let decoded = null;
@@ -82,25 +96,45 @@ function buildTiledLayerDataFromJson(obj, width, height, options) {
82
96
  decoded = Uint32Array.from(data, (v) => (typeof v === 'number' ? v >>> 0 : 0));
83
97
  }
84
98
  else if (typeof data === 'string') {
85
- decoded =
86
- strField(obj, 'encoding') === 'csv'
87
- ? decodeTiledCsvLayer(data)
88
- : decodeTiledBase64Layer(data, asCompression(strField(obj, 'compression')), options?.inflate);
99
+ const encoding = strField(obj, 'encoding');
100
+ if (encoding === 'csv') {
101
+ decoded = decodeTiledCsvLayer(data);
102
+ }
103
+ else {
104
+ if (encoding === null) {
105
+ reportMissingRequiredField(diagnostics, 'buildTiledLayerDataFromJson', path, 'encoding');
106
+ }
107
+ else if (encoding !== 'base64') {
108
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Recover, 'tiled.layer-encoding-invalid', 'buildTiledLayerDataFromJson', { encoding, path: `${path}.encoding` });
109
+ }
110
+ const compression = asCompression(strField(obj, 'compression'));
111
+ if (compression !== null && options?.inflate === undefined) {
112
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Recover, 'tiled.layer-inflate-unavailable', 'buildTiledLayerDataFromJson', { compression, path });
113
+ }
114
+ decoded = decodeTiledBase64Layer(data, compression, options?.inflate);
115
+ }
116
+ }
117
+ else if (data === undefined) {
118
+ reportMissingRequiredField(diagnostics, 'buildTiledLayerDataFromJson', path);
89
119
  }
90
120
  if (decoded === null)
91
121
  return grid;
92
122
  grid.set(decoded.subarray(0, grid.length));
93
123
  return grid;
94
124
  }
95
- function buildTiledLayerFromJson(obj, options) {
125
+ function buildTiledLayerFromJson(obj, options, diagnostics, path = '') {
96
126
  const base = buildTiledLayerBaseFromJson(obj);
97
127
  const type = strField(obj, 'type');
98
128
  if (type === 'tilelayer') {
129
+ if (diagnostics !== undefined) {
130
+ reportMissingJsonField(obj, 'height', diagnostics, 'buildTiledLayerFromJson', path);
131
+ reportMissingJsonField(obj, 'width', diagnostics, 'buildTiledLayerFromJson', path);
132
+ }
99
133
  const width = numField(obj, 'width', 0);
100
134
  const height = numField(obj, 'height', 0);
101
135
  return {
102
136
  ...base,
103
- data: buildTiledLayerDataFromJson(obj, width, height, options),
137
+ data: buildTiledLayerDataFromJson(obj, width, height, options, diagnostics, diagnostics === undefined ? '' : `${path}.data`),
104
138
  height,
105
139
  type: 'tilelayer',
106
140
  width,
@@ -116,11 +150,14 @@ function buildTiledLayerFromJson(obj, options) {
116
150
  return {
117
151
  ...base,
118
152
  layers: arrayField(obj, 'layers')
119
- .map((layer) => buildTiledLayerFromJson(layer, options))
153
+ .map((layer, index) => buildTiledLayerFromJson(layer, options, diagnostics, diagnostics === undefined ? '' : `${path}.layers[${index}]`))
120
154
  .filter((layer) => layer !== null),
121
155
  type: 'group',
122
156
  };
123
157
  }
158
+ if (type === null) {
159
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Drop, 'tiled.required-field-missing', 'buildTiledLayerFromJson', { path: `${path}.type` });
160
+ }
124
161
  return null;
125
162
  }
126
163
  function buildTiledObjectFromJson(obj) {
@@ -148,7 +185,12 @@ function buildTiledPropertiesFromJson(obj) {
148
185
  return { name: strField(property, 'name') ?? '', type, value: coercePropertyValue(type, raw) };
149
186
  });
150
187
  }
151
- function buildTiledTilesetFromJson(obj) {
188
+ function buildTiledTilesetFromJson(obj, diagnostics, path = '') {
189
+ if (diagnostics !== undefined) {
190
+ reportMissingJsonField(obj, 'name', diagnostics, 'buildTiledTilesetFromJson', path);
191
+ reportMissingJsonField(obj, 'tileheight', diagnostics, 'buildTiledTilesetFromJson', path);
192
+ reportMissingJsonField(obj, 'tilewidth', diagnostics, 'buildTiledTilesetFromJson', path);
193
+ }
152
194
  return {
153
195
  columns: numField(obj, 'columns', 0),
154
196
  image: strField(obj, 'image'),
@@ -164,12 +206,12 @@ function buildTiledTilesetFromJson(obj) {
164
206
  tiles: arrayField(obj, 'tiles').map(buildTiledTilesetTileFromJson),
165
207
  };
166
208
  }
167
- function buildTiledTilesetRefFromJson(obj) {
209
+ function buildTiledTilesetRefFromJson(obj, diagnostics, path = '') {
168
210
  const source = strField(obj, 'source');
169
211
  return {
170
212
  firstGid: numField(obj, 'firstgid', 1),
171
213
  source,
172
- tileset: source !== null ? null : buildTiledTilesetFromJson(obj),
214
+ tileset: source !== null ? null : buildTiledTilesetFromJson(obj, diagnostics, path),
173
215
  };
174
216
  }
175
217
  function buildTiledTilesetTileFromJson(obj) {
@@ -226,6 +268,16 @@ function parsePointsField(obj, key) {
226
268
  return null;
227
269
  return value.filter(isJsonObject).map((point) => ({ x: numField(point, 'x', 0), y: numField(point, 'y', 0) }));
228
270
  }
271
+ function reportMissingJsonField(obj, key, diagnostics, origin, path) {
272
+ if (diagnostics === undefined || obj[key] !== undefined)
273
+ return;
274
+ reportMissingRequiredField(diagnostics, origin, path, key);
275
+ }
276
+ function reportMissingRequiredField(diagnostics, origin, path, field) {
277
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Recover, 'tiled.required-field-missing', origin, {
278
+ path: field === undefined ? path : `${path}.${field}`,
279
+ });
280
+ }
229
281
  function stringOr(value, fallback) {
230
282
  if (value === null)
231
283
  return fallback;
@@ -1 +1 @@
1
- {"version":3,"file":"tiledJsonParse.js","sourceRoot":"","sources":["../src/tiledJsonParse.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,oGAAoG;AACpG,uEAAuE;AAEvE,6FAA6F;AAC7F,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,QAAsC;IACxF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,qGAAqG;AACrG,iEAAiE;AACjE,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAqC;IAC/E,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACrD,OAAO;QACL,eAAe,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;QACzE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnC,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC;QAC5C,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC;aAC/B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aACvD,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;QACzD,WAAW,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACzD,UAAU,EAAE,4BAA4B,CAAC,IAAI,CAAC;QAC9C,WAAW,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACzD,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC3C,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACzC,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;QAC5C,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,4BAA4B,CAAC;QACxE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;QACnD,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAe,EAAE,GAAW;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB;IACzC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB;IACzC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;AACxG,CAAC;AAED,SAAS,cAAc,CAAC,KAAoB;IAC1C,OAAO,KAAK,KAAK,KAAK;QACpB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,MAAM;QAChB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,MAAM;QAChB,KAAK,KAAK,QAAQ;QAClB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB;IACzC,OAAO,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;AACrG,CAAC;AAED,SAAS,SAAS,CAAC,GAAe,EAAE,GAAW,EAAE,QAAiB;IAChE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,2BAA2B,CAAC,GAAe;IASlD,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE;QACjC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QACpC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QACpC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QACpC,UAAU,EAAE,4BAA4B,CAAC,GAAG,CAAC;QAC7C,OAAO,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,GAAe,EACf,KAAa,EACb,MAAc,EACd,OAAqC;IAErC,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,IAAI,OAAO,GAAuB,IAAI,CAAC;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;YACL,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,KAAK;gBACjC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC3B,CAAC,CAAC,sBAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAe,EAAE,OAAqC;IACrF,MAAM,IAAI,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC1C,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,2BAA2B,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;YAC9D,MAAM;YACN,IAAI,EAAE,WAAW;YACjB,KAAK;SACN,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAC7G,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAC9E,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;iBAC9B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;iBACvD,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;YACzD,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAe;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC;QACzC,GAAG,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/C,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClC,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE;QACjC,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC;QACrC,OAAO,EAAE,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC;QACzC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC;QAC3C,UAAU,EAAE,4BAA4B,CAAC,GAAG,CAAC;QAC7C,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE;QAC3D,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxB,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,GAAe;IACnD,OAAO,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;IACjG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAe;IAChD,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QACpC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;QAC7B,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;QAC5C,UAAU,EAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1C,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE;QACjC,UAAU,EAAE,4BAA4B,CAAC,GAAG,CAAC;QAC7C,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QACpC,SAAS,EAAE,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;QACxC,UAAU,EAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1C,SAAS,EAAE,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;QACxC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,6BAA6B,CAAC;KACnE,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,GAAe;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACvC,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QACtC,MAAM;QACN,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,GAAe;IACpD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAChC,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,MAAM,MAAM,GAAmC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QACrE,CAAC,CAAC,SAAS;aACN,MAAM,CAAC,YAAY,CAAC;aACpB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC,CAAC,IAAI,CAAC;IACT,OAAO;QACL,SAAS,EAAE,MAAM;QACjB,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1B,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;QAC7B,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI;QACvG,UAAU,EAAE,4BAA4B,CAAC,GAAG,CAAC;QAC7C,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAuB,EAAE,GAAY;IAChE,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACzC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,QAAQ,CAAC,GAAe,EAAE,GAAW,EAAE,QAAgB;IAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAe,EAAE,GAAW;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjH,CAAC;AAED,SAAS,QAAQ,CAAC,KAA6B,EAAE,QAAgB;IAC/D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAC,GAAe,EAAE,GAAW;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"tiledJsonParse.js","sourceRoot":"","sources":["../src/tiledJsonParse.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { TiledMap, TiledParseOptions, TiledTileset } from '@flighthq/types/contract';
2
- export declare function parseTiledTileset(text: string, _options?: Readonly<TiledParseOptions>): TiledTileset | null;
3
- export declare function parseTiledTmx(text: string, options?: Readonly<TiledParseOptions>): TiledMap | null;
1
+ import type { ImportDiagnostic, TiledMap, TiledParseOptions, TiledTileset } from '@flighthq/types/contract';
2
+ export declare function parseTiledTileset(text: string, _options?: Readonly<TiledParseOptions>, diagnostics?: ImportDiagnostic[]): TiledTileset | null;
3
+ export declare function parseTiledTmx(text: string, options?: Readonly<TiledParseOptions>, diagnostics?: ImportDiagnostic[]): TiledMap | null;
4
4
  //# sourceMappingURL=tiledXmlParse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tiledXmlParse.d.ts","sourceRoot":"","sources":["../src/tiledXmlParse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,QAAQ,EAGR,iBAAiB,EAIjB,YAAY,EAKb,MAAM,0BAA0B,CAAC;AAkBlC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,YAAY,GAAG,IAAI,CAI3G;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,QAAQ,GAAG,IAAI,CA+BlG"}
1
+ {"version":3,"file":"tiledXmlParse.d.ts","sourceRoot":"","sources":["../src/tiledXmlParse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAGhB,QAAQ,EAGR,iBAAiB,EAIjB,YAAY,EAKb,MAAM,0BAA0B,CAAC;AAmBlC,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACtC,WAAW,CAAC,EAAE,gBAAgB,EAAE,GAC/B,YAAY,GAAG,IAAI,CAgBrB;AAID,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACrC,WAAW,CAAC,EAAE,gBAAgB,EAAE,GAC/B,QAAQ,GAAG,IAAI,CAwDjB"}
@@ -1,3 +1,5 @@
1
+ import { reportImportDiagnostic } from '@flighthq/importdiagnostics/contract';
2
+ import { ImportDiagnosticSeverity } from '@flighthq/types/contract';
1
3
  import { getXmlElementAttribute, getXmlElementChildByName, getXmlElementChildrenByName, parseXmlDocument, } from '@flighthq/xml/contract';
2
4
  import { parseTiledColor } from './tiledColor';
3
5
  import { decodeTiledBase64Layer, decodeTiledCsvLayer } from './tiledLayerData';
@@ -6,25 +8,53 @@ import { decodeTiledBase64Layer, decodeTiledCsvLayer } from './tiledLayerData';
6
8
  // decoding, color, and GID handling come from the representation-independent primitives.
7
9
  // Parses a standalone TSX tileset document into a `TiledTileset`, or null when the root is not a
8
10
  // `<tileset>` element.
9
- export function parseTiledTileset(text, _options) {
11
+ export function parseTiledTileset(text, _options, diagnostics) {
10
12
  const root = parseXmlDocument(text);
11
- if (root === null || root.name !== 'tileset')
13
+ if (root === null) {
14
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Reject, 'tiled.xml-malformed', 'parseTiledTileset', {
15
+ path: 'tileset',
16
+ });
12
17
  return null;
13
- return buildTiledTilesetFromXml(root);
18
+ }
19
+ if (root.name !== 'tileset') {
20
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Reject, 'tiled.root-unexpected', 'parseTiledTileset', {
21
+ actual: root.name,
22
+ path: 'tileset',
23
+ });
24
+ return null;
25
+ }
26
+ return buildTiledTilesetFromXml(root, diagnostics, 'tileset');
14
27
  }
15
28
  // Parses a TMX map document into a faithful `TiledMap`, or null when the root is not a `<map>`
16
29
  // element. A compressed tile layer with no `inflate` seam is preserved as an all-zero grid.
17
- export function parseTiledTmx(text, options) {
30
+ export function parseTiledTmx(text, options, diagnostics) {
18
31
  const root = parseXmlDocument(text);
19
- if (root === null || root.name !== 'map')
32
+ if (root === null) {
33
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Reject, 'tiled.xml-malformed', 'parseTiledTmx', {
34
+ path: 'map',
35
+ });
36
+ return null;
37
+ }
38
+ if (root.name !== 'map') {
39
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Reject, 'tiled.root-unexpected', 'parseTiledTmx', {
40
+ actual: root.name,
41
+ path: 'map',
42
+ });
20
43
  return null;
44
+ }
45
+ if (diagnostics !== undefined) {
46
+ reportMissingXmlAttribute(root, 'height', diagnostics, 'parseTiledTmx', 'map');
47
+ reportMissingXmlAttribute(root, 'tileheight', diagnostics, 'parseTiledTmx', 'map');
48
+ reportMissingXmlAttribute(root, 'tilewidth', diagnostics, 'parseTiledTmx', 'map');
49
+ reportMissingXmlAttribute(root, 'width', diagnostics, 'parseTiledTmx', 'map');
50
+ }
21
51
  const tilesets = [];
22
- for (const element of getXmlElementChildrenByName(root, 'tileset')) {
23
- tilesets.push(buildTiledTilesetRefFromXml(element));
52
+ for (const [index, element] of getXmlElementChildrenByName(root, 'tileset').entries()) {
53
+ tilesets.push(buildTiledTilesetRefFromXml(element, diagnostics, diagnostics === undefined ? '' : `map.tilesets[${index}]`));
24
54
  }
25
55
  const layers = [];
26
56
  for (const element of root.children) {
27
- const layer = buildTiledLayerFromXml(element, options);
57
+ const layer = buildTiledLayerFromXml(element, options, diagnostics, diagnostics === undefined ? '' : `map.layers[${layers.length}]`);
28
58
  if (layer !== null)
29
59
  layers.push(layer);
30
60
  }
@@ -73,14 +103,18 @@ function buildTiledLayerBaseFromXml(element) {
73
103
  visible: attrBool(element, 'visible', true),
74
104
  };
75
105
  }
76
- function buildTiledLayerFromXml(element, options) {
106
+ function buildTiledLayerFromXml(element, options, diagnostics, path = '') {
77
107
  const base = buildTiledLayerBaseFromXml(element);
78
108
  if (element.name === 'layer') {
109
+ if (diagnostics !== undefined) {
110
+ reportMissingXmlAttribute(element, 'height', diagnostics, 'buildTiledLayerFromXml', path);
111
+ reportMissingXmlAttribute(element, 'width', diagnostics, 'buildTiledLayerFromXml', path);
112
+ }
79
113
  const width = attrNumber(element, 'width', 0);
80
114
  const height = attrNumber(element, 'height', 0);
81
115
  return {
82
116
  ...base,
83
- data: buildTiledLayerDataFromXml(element, width, height, options),
117
+ data: buildTiledLayerDataFromXml(element, width, height, options, diagnostics, diagnostics === undefined ? '' : `${path}.data`),
84
118
  height,
85
119
  type: 'tilelayer',
86
120
  width,
@@ -100,7 +134,7 @@ function buildTiledLayerFromXml(element, options) {
100
134
  if (element.name === 'group') {
101
135
  const layers = [];
102
136
  for (const child of element.children) {
103
- const layer = buildTiledLayerFromXml(child, options);
137
+ const layer = buildTiledLayerFromXml(child, options, diagnostics, diagnostics === undefined ? '' : `${path}.layers[${layers.length}]`);
104
138
  if (layer !== null)
105
139
  layers.push(layer);
106
140
  }
@@ -111,20 +145,29 @@ function buildTiledLayerFromXml(element, options) {
111
145
  // Decodes a `<layer>`'s `<data>` into a width*height grid of raw GIDs. Handles csv, base64
112
146
  // (optionally compressed via `options.inflate`), and the uncompressed `<tile gid>` element form.
113
147
  // Always returns a grid sized exactly width*height (short/failed payloads pad with 0 = empty).
114
- function buildTiledLayerDataFromXml(element, width, height, options) {
148
+ function buildTiledLayerDataFromXml(element, width, height, options, diagnostics, path = '') {
115
149
  const grid = new Uint32Array(width * height);
116
150
  const data = getXmlElementChildByName(element, 'data');
117
- if (data === null)
151
+ if (data === null) {
152
+ reportMissingRequiredField(diagnostics, 'buildTiledLayerDataFromXml', path);
118
153
  return grid;
154
+ }
119
155
  const encoding = getXmlElementAttribute(data, 'encoding');
120
156
  let decoded;
121
157
  if (encoding === 'csv') {
122
158
  decoded = decodeTiledCsvLayer(data.text);
123
159
  }
124
160
  else if (encoding === 'base64') {
125
- decoded = decodeTiledBase64Layer(data.text, asCompression(getXmlElementAttribute(data, 'compression')), options?.inflate);
161
+ const compression = asCompression(getXmlElementAttribute(data, 'compression'));
162
+ if (compression !== null && options?.inflate === undefined) {
163
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Recover, 'tiled.layer-inflate-unavailable', 'buildTiledLayerDataFromXml', { compression, path });
164
+ }
165
+ decoded = decodeTiledBase64Layer(data.text, compression, options?.inflate);
126
166
  }
127
167
  else {
168
+ if (encoding !== null) {
169
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Recover, 'tiled.layer-encoding-invalid', 'buildTiledLayerDataFromXml', { encoding, path: `${path}.encoding` });
170
+ }
128
171
  decoded = Uint32Array.from(getXmlElementChildrenByName(data, 'tile').map((tile) => attrNumber(tile, 'gid', 0) >>> 0));
129
172
  }
130
173
  if (decoded === null)
@@ -162,7 +205,12 @@ function buildTiledPropertiesFromXml(element) {
162
205
  return { name: attrString(property, 'name', ''), type, value: parsePropertyValue(type, raw) };
163
206
  });
164
207
  }
165
- function buildTiledTilesetFromXml(element) {
208
+ function buildTiledTilesetFromXml(element, diagnostics, path = '') {
209
+ if (diagnostics !== undefined) {
210
+ reportMissingXmlAttribute(element, 'name', diagnostics, 'buildTiledTilesetFromXml', path);
211
+ reportMissingXmlAttribute(element, 'tileheight', diagnostics, 'buildTiledTilesetFromXml', path);
212
+ reportMissingXmlAttribute(element, 'tilewidth', diagnostics, 'buildTiledTilesetFromXml', path);
213
+ }
166
214
  const image = getXmlElementChildByName(element, 'image');
167
215
  return {
168
216
  columns: attrNumber(element, 'columns', 0),
@@ -179,12 +227,12 @@ function buildTiledTilesetFromXml(element) {
179
227
  tiles: getXmlElementChildrenByName(element, 'tile').map(buildTiledTilesetTileFromXml),
180
228
  };
181
229
  }
182
- function buildTiledTilesetRefFromXml(element) {
230
+ function buildTiledTilesetRefFromXml(element, diagnostics, path = '') {
183
231
  const source = getXmlElementAttribute(element, 'source');
184
232
  return {
185
233
  firstGid: attrNumber(element, 'firstgid', 1),
186
234
  source,
187
- tileset: source !== null ? null : buildTiledTilesetFromXml(element),
235
+ tileset: source !== null ? null : buildTiledTilesetFromXml(element, diagnostics, path),
188
236
  };
189
237
  }
190
238
  function buildTiledTilesetTileFromXml(element) {
@@ -216,6 +264,16 @@ function parseTiledPoints(text) {
216
264
  }
217
265
  return points;
218
266
  }
267
+ function reportMissingRequiredField(diagnostics, origin, path, field) {
268
+ reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Recover, 'tiled.required-field-missing', origin, {
269
+ path: field === undefined ? path : `${path}.${field}`,
270
+ });
271
+ }
272
+ function reportMissingXmlAttribute(element, name, diagnostics, origin, path) {
273
+ if (diagnostics === undefined || getXmlElementAttribute(element, name) !== null)
274
+ return;
275
+ reportMissingRequiredField(diagnostics, origin, path, name);
276
+ }
219
277
  function asCompression(value) {
220
278
  return value === 'gzip' || value === 'zlib' || value === 'zstd' ? value : null;
221
279
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tiledXmlParse.js","sourceRoot":"","sources":["../src/tiledXmlParse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tiledXmlParse.js","sourceRoot":"","sources":["../src/tiledXmlParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAmB9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,qGAAqG;AACrG,kGAAkG;AAClG,yFAAyF;AAEzF,iGAAiG;AACjG,uBAAuB;AACvB,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,QAAsC,EACtC,WAAgC;IAEhC,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,sBAAsB,CAAC,WAAW,EAAE,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,EAAE,mBAAmB,EAAE;YAC/G,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,sBAAsB,CAAC,WAAW,EAAE,wBAAwB,CAAC,MAAM,EAAE,uBAAuB,EAAE,mBAAmB,EAAE;YACjH,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC;AAED,+FAA+F;AAC/F,4FAA4F;AAC5F,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,OAAqC,EACrC,WAAgC;IAEhC,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,sBAAsB,CAAC,WAAW,EAAE,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,EAAE,eAAe,EAAE;YAC3G,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,sBAAsB,CAAC,WAAW,EAAE,wBAAwB,CAAC,MAAM,EAAE,uBAAuB,EAAE,eAAe,EAAE;YAC7G,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QAC/E,yBAAyB,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QACnF,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QAClF,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,2BAA2B,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACtF,QAAQ,CAAC,IAAI,CACX,2BAA2B,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,KAAK,GAAG,CAAC,CAC7G,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,sBAAsB,CAClC,OAAO,EACP,OAAO,EACP,WAAW,EACX,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,MAAM,GAAG,CAChE,CAAC;QACF,IAAI,KAAK,KAAK,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACnE,OAAO;QACL,eAAe,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;QACzE,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC;QAC3C,MAAM;QACN,WAAW,EAAE,aAAa,CAAC,sBAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACvE,UAAU,EAAE,2BAA2B,CAAC,IAAI,CAAC;QAC7C,WAAW,EAAE,aAAa,CAAC,sBAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACvE,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7C,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3C,YAAY,EAAE,sBAAsB,CAAC,IAAI,EAAE,cAAc,CAAC;QAC1D,QAAQ;QACR,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;QAC3C,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,OAA6B,EAAE,IAAY,EAAE,QAAiB;IAC9E,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACpC,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,OAA6B,EAAE,IAAY,EAAE,QAAgB;IAC/E,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC3D,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,OAA6B,EAAE,IAAY,EAAE,QAAgB;IAC/E,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3C,CAAC;AAED,SAAS,0BAA0B,CAAC,OAA6B;IAS/D,OAAO;QACL,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;QACrC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1C,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1C,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1C,UAAU,EAAE,2BAA2B,CAAC,OAAO,CAAC;QAChD,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAA6B,EAC7B,OAAqC,EACrC,WAAgC,EAChC,IAAI,GAAG,EAAE;IAET,MAAM,IAAI,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,yBAAyB,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE,IAAI,CAAC,CAAC;YAC1F,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,IAAI,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAChD,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,0BAA0B,CAC9B,OAAO,EACP,KAAK,EACL,MAAM,EACN,OAAO,EACP,WAAW,EACX,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAChD;YACD,MAAM;YACN,IAAI,EAAE,WAAW;YACjB,KAAK;SACN,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACnC,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,2BAA2B,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC;YACpF,IAAI,EAAE,aAAa;SACpB,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACvG,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,sBAAsB,CAClC,KAAK,EACL,OAAO,EACP,WAAW,EACX,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW,MAAM,CAAC,MAAM,GAAG,CACpE,CAAC;YACF,IAAI,KAAK,KAAK,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2FAA2F;AAC3F,iGAAiG;AACjG,+FAA+F;AAC/F,SAAS,0BAA0B,CACjC,OAA6B,EAC7B,KAAa,EACb,MAAc,EACd,OAAqC,EACrC,WAAgC,EAChC,IAAI,GAAG,EAAE;IAET,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,0BAA0B,CAAC,WAAW,EAAE,4BAA4B,EAAE,IAAI,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1D,IAAI,OAA2B,CAAC;IAChC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,aAAa,CAAC,sBAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QAC/E,IAAI,WAAW,KAAK,IAAI,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3D,sBAAsB,CACpB,WAAW,EACX,wBAAwB,CAAC,OAAO,EAChC,iCAAiC,EACjC,4BAA4B,EAC5B,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,sBAAsB,CACpB,WAAW,EACX,wBAAwB,CAAC,OAAO,EAChC,8BAA8B,EAC9B,4BAA4B,EAC5B,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,WAAW,EAAE,CACvC,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,WAAW,CAAC,IAAI,CACxB,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAC1F,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,OAA6B;IAC5D,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/D,OAAO;QACL,OAAO,EAAE,wBAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,IAAI;QAC9D,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;QAC5C,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxC,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;QACrC,KAAK,EAAE,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI;QAC1D,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACtF,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACzF,UAAU,EAAE,2BAA2B,CAAC,OAAO,CAAC;QAChD,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACnE,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,OAA6B;IAChE,MAAM,SAAS,GAAG,wBAAwB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAClE,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,2BAA2B,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACzE,MAAM,IAAI,GAAG,cAAc,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAA6B,EAC7B,WAAgC,EAChC,IAAI,GAAG,EAAE;IAET,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,EAAE,IAAI,CAAC,CAAC;QAC1F,yBAAyB,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,IAAI,CAAC,CAAC;QAChG,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,0BAA0B,EAAE,IAAI,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzD,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1C,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9D,WAAW,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,UAAU,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;QACrC,UAAU,EAAE,2BAA2B,CAAC,OAAO,CAAC;QAChD,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1C,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9C,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAChD,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9C,KAAK,EAAE,2BAA2B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,4BAA4B,CAAC;KACtF,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,OAA6B,EAC7B,WAAgC,EAChC,IAAI,GAAG,EAAE;IAET,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzD,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5C,MAAM;QACN,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC;KACvF,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,OAA6B;IACjE,MAAM,SAAS,GAAG,wBAAwB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,wBAAwB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,MAAM,GACV,SAAS,KAAK,IAAI;QAChB,CAAC,CAAC,2BAA2B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9D,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1C,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;SACvC,CAAC,CAAC;QACL,CAAC,CAAC,IAAI,CAAC;IACX,OAAO;QACL,SAAS,EAAE,MAAM;QACjB,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9D,OAAO,EACL,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/G,UAAU,EAAE,2BAA2B,CAAC,OAAO,CAAC;QAChD,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,IAAI,IAAI,KAAK,EAAE;YAAE,SAAS;QAC1B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,0BAA0B,CACjC,WAA2C,EAC3C,MAAc,EACd,IAAY,EACZ,KAAc;IAEd,sBAAsB,CAAC,WAAW,EAAE,wBAAwB,CAAC,OAAO,EAAE,8BAA8B,EAAE,MAAM,EAAE;QAC5G,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE;KACtD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAChC,OAA6B,EAC7B,IAAY,EACZ,WAA2C,EAC3C,MAAc,EACd,IAAY;IAEZ,IAAI,WAAW,KAAK,SAAS,IAAI,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO;IACxF,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB;IACzC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB;IACzC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;AACxG,CAAC;AAED,SAAS,cAAc,CAAC,KAAoB;IAC1C,OAAO,KAAK,KAAK,KAAK;QACpB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,MAAM;QAChB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,MAAM;QAChB,KAAK,KAAK,QAAQ;QAClB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB;IACzC,OAAO,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;AACrG,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAuB,EAAE,GAAW;IAC9D,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,GAAG,KAAK,MAAM,CAAC;IAC3C,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/tilemap-formats",
3
- "version": "0.5.1-next.685.f72fc7f",
3
+ "version": "0.5.1-next.704.19c91ec",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,10 +38,10 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/importdiagnostics": "0.5.1-next.685.f72fc7f",
42
- "@flighthq/tilemap": "0.5.1-next.685.f72fc7f",
43
- "@flighthq/types": "0.5.1-next.685.f72fc7f",
44
- "@flighthq/xml": "0.5.1-next.685.f72fc7f"
41
+ "@flighthq/importdiagnostics": "0.5.1-next.704.19c91ec",
42
+ "@flighthq/tilemap": "0.5.1-next.704.19c91ec",
43
+ "@flighthq/types": "0.5.1-next.704.19c91ec",
44
+ "@flighthq/xml": "0.5.1-next.704.19c91ec"
45
45
  },
46
46
  "devDependencies": {
47
47
  "typescript": "^5.3.0"
@@ -1,4 +1,5 @@
1
- import type { TiledParseOptions } from '@flighthq/types/contract';
1
+ import type { ImportDiagnostic, TiledParseOptions } from '@flighthq/types/contract';
2
+ import { ImportDiagnosticSeverity } from '@flighthq/types/contract';
2
3
  import { describe, expect, it } from 'vitest';
3
4
 
4
5
  import { parseTiledTilesetJson, parseTiledTmj } from './tiledJsonParse';
@@ -34,6 +35,7 @@ function tmjWithData(data: unknown, extra: Record<string, unknown> = {}): string
34
35
 
35
36
  describe('parseTiledTilesetJson', () => {
36
37
  it('parses a standalone TSJ tileset', () => {
38
+ const diagnostics: ImportDiagnostic[] = [];
37
39
  const tsj = JSON.stringify({
38
40
  columns: 3,
39
41
  image: 'terrain.png',
@@ -47,17 +49,47 @@ describe('parseTiledTilesetJson', () => {
47
49
  tiles: [{ animation: [{ duration: 100, tileid: 0 }], id: 0, type: 'water' }],
48
50
  tilewidth: 16,
49
51
  });
50
- const tileset = parseTiledTilesetJson(tsj)!;
52
+ const tileset = parseTiledTilesetJson(tsj, undefined, diagnostics)!;
51
53
  expect(tileset.name).toBe('terrain');
52
54
  expect(tileset.image).toBe('terrain.png');
53
55
  expect(tileset.columns).toBe(3);
54
56
  expect(tileset.tiles[0].animation).toEqual([{ duration: 100, tileId: 0 }]);
57
+ expect(diagnostics).toEqual([]);
55
58
  });
56
59
 
57
60
  it('returns null on malformed JSON', () => {
58
61
  expect(parseTiledTilesetJson('{ not json')).toBeNull();
59
62
  expect(parseTiledTilesetJson('[]')).toBeNull();
60
63
  });
64
+
65
+ it('reports malformed JSON and missing required fields at their exact paths', () => {
66
+ const malformedDiagnostics: ImportDiagnostic[] = [];
67
+ expect(parseTiledTilesetJson('{ not json', undefined, malformedDiagnostics)).toBeNull();
68
+ expect(malformedDiagnostics).toEqual([
69
+ {
70
+ detail: { path: 'tileset' },
71
+ kind: 'tiled.json-malformed',
72
+ origin: 'parseTiledTilesetJson',
73
+ severity: ImportDiagnosticSeverity.Reject,
74
+ },
75
+ ]);
76
+
77
+ const missingDiagnostics: ImportDiagnostic[] = [];
78
+ const tileset = parseTiledTilesetJson(
79
+ JSON.stringify({ columns: 1, tilecount: 1, tileheight: 16, tilewidth: 16 }),
80
+ undefined,
81
+ missingDiagnostics,
82
+ );
83
+ expect(tileset?.name).toBe('');
84
+ expect(missingDiagnostics).toEqual([
85
+ {
86
+ detail: { path: 'tileset.name' },
87
+ kind: 'tiled.required-field-missing',
88
+ origin: 'buildTiledTilesetFromJson',
89
+ severity: ImportDiagnosticSeverity.Recover,
90
+ },
91
+ ]);
92
+ });
61
93
  });
62
94
 
63
95
  describe('parseTiledTmj', () => {
@@ -118,16 +150,47 @@ describe('parseTiledTmj', () => {
118
150
  it('preserves a compressed layer as empty without an inflate seam, and decodes with one', () => {
119
151
  const json = tmjWithData(base64Layer([1, 5, 2147483649, 6]), { compression: 'zlib', encoding: 'base64' });
120
152
 
121
- const dropped = parseTiledTmj(json)!;
153
+ const diagnostics: ImportDiagnostic[] = [];
154
+ const dropped = parseTiledTmj(json, undefined, diagnostics)!;
122
155
  const droppedLayer = dropped.layers[0];
123
156
  if (droppedLayer.type !== 'tilelayer') throw new Error('expected a tile layer');
124
157
  expect(Array.from(droppedLayer.data)).toEqual([0, 0, 0, 0]);
158
+ expect(diagnostics).toEqual([
159
+ {
160
+ detail: { compression: 'zlib', path: 'map.layers[0].data' },
161
+ kind: 'tiled.layer-inflate-unavailable',
162
+ origin: 'buildTiledLayerDataFromJson',
163
+ severity: ImportDiagnosticSeverity.Recover,
164
+ },
165
+ ]);
125
166
 
126
167
  const options: TiledParseOptions = { inflate: (bytes) => new Uint8Array(bytes) };
127
- const decoded = parseTiledTmj(json, options)!;
168
+ const decodedDiagnostics: ImportDiagnostic[] = [];
169
+ const decoded = parseTiledTmj(json, options, decodedDiagnostics)!;
128
170
  const decodedLayer = decoded.layers[0];
129
171
  if (decodedLayer.type !== 'tilelayer') throw new Error('expected a tile layer');
130
172
  expect(Array.from(decodedLayer.data)).toEqual([1, 5, 2147483649, 6]);
173
+ expect(decodedDiagnostics).toEqual([]);
174
+ });
175
+
176
+ it('reports invalid layer encoding while preserving the existing base64 fallback', () => {
177
+ const diagnostics: ImportDiagnostic[] = [];
178
+ const map = parseTiledTmj(
179
+ tmjWithData(base64Layer([1, 5, 2147483649, 6]), { encoding: 'invalid' }),
180
+ undefined,
181
+ diagnostics,
182
+ )!;
183
+ const layer = map.layers[0];
184
+ if (layer.type !== 'tilelayer') throw new Error('expected a tile layer');
185
+ expect(Array.from(layer.data)).toEqual([1, 5, 2147483649, 6]);
186
+ expect(diagnostics).toEqual([
187
+ {
188
+ detail: { encoding: 'invalid', path: 'map.layers[0].data.encoding' },
189
+ kind: 'tiled.layer-encoding-invalid',
190
+ origin: 'buildTiledLayerDataFromJson',
191
+ severity: ImportDiagnosticSeverity.Recover,
192
+ },
193
+ ]);
131
194
  });
132
195
 
133
196
  it('parses a group layer and its nested children', () => {
@@ -278,4 +341,57 @@ describe('parseTiledTmj', () => {
278
341
  expect(parseTiledTmj('{ not json')).toBeNull();
279
342
  expect(parseTiledTmj('42')).toBeNull();
280
343
  });
344
+
345
+ it('reports malformed JSON and missing required fields at their exact paths', () => {
346
+ const malformedDiagnostics: ImportDiagnostic[] = [];
347
+ expect(parseTiledTmj('{ not json', undefined, malformedDiagnostics)).toBeNull();
348
+ expect(malformedDiagnostics).toEqual([
349
+ {
350
+ detail: { path: 'map' },
351
+ kind: 'tiled.json-malformed',
352
+ origin: 'parseTiledTmj',
353
+ severity: ImportDiagnosticSeverity.Reject,
354
+ },
355
+ ]);
356
+
357
+ const missingDiagnostics: ImportDiagnostic[] = [];
358
+ const map = parseTiledTmj(
359
+ JSON.stringify({ height: 1, layers: [], tileheight: 16, type: 'map', version: '1.10', width: 1 }),
360
+ undefined,
361
+ missingDiagnostics,
362
+ );
363
+ expect(map?.tileWidth).toBe(0);
364
+ expect(missingDiagnostics).toEqual([
365
+ {
366
+ detail: { path: 'map.tilewidth' },
367
+ kind: 'tiled.required-field-missing',
368
+ origin: 'parseTiledTmj',
369
+ severity: ImportDiagnosticSeverity.Recover,
370
+ },
371
+ ]);
372
+
373
+ const missingLayerTypeDiagnostics: ImportDiagnostic[] = [];
374
+ const mapWithoutLayerType = parseTiledTmj(
375
+ JSON.stringify({
376
+ height: 1,
377
+ layers: [{ data: [1], height: 1, width: 1 }],
378
+ tileheight: 16,
379
+ tilewidth: 16,
380
+ type: 'map',
381
+ version: '1.10',
382
+ width: 1,
383
+ }),
384
+ undefined,
385
+ missingLayerTypeDiagnostics,
386
+ );
387
+ expect(mapWithoutLayerType?.layers).toEqual([]);
388
+ expect(missingLayerTypeDiagnostics).toEqual([
389
+ {
390
+ detail: { path: 'map.layers[0].type' },
391
+ kind: 'tiled.required-field-missing',
392
+ origin: 'buildTiledLayerFromJson',
393
+ severity: ImportDiagnosticSeverity.Drop,
394
+ },
395
+ ]);
396
+ });
281
397
  });
@@ -1,4 +1,5 @@
1
- import type { TiledParseOptions } from '@flighthq/types/contract';
1
+ import type { ImportDiagnostic, TiledParseOptions } from '@flighthq/types/contract';
2
+ import { ImportDiagnosticSeverity } from '@flighthq/types/contract';
2
3
  import { describe, expect, it } from 'vitest';
3
4
 
4
5
  import { decodeTiledGid } from './tiledGid';
@@ -110,6 +111,7 @@ function tmxWithData(dataElement: string): string {
110
111
 
111
112
  describe('parseTiledTileset', () => {
112
113
  it('parses a standalone TSX tileset with per-tile animation and properties', () => {
114
+ const diagnostics: ImportDiagnostic[] = [];
113
115
  const tsx = [
114
116
  '<tileset name="terrain" tilewidth="16" tileheight="16" tilecount="9" columns="3" spacing="1" margin="2">',
115
117
  ' <image source="terrain.png" width="50" height="50"/>',
@@ -119,7 +121,7 @@ describe('parseTiledTileset', () => {
119
121
  ' </tile>',
120
122
  '</tileset>',
121
123
  ].join('\n');
122
- const tileset = parseTiledTileset(tsx)!;
124
+ const tileset = parseTiledTileset(tsx, undefined, diagnostics)!;
123
125
  expect(tileset.name).toBe('terrain');
124
126
  expect(tileset.image).toBe('terrain.png');
125
127
  expect(tileset.imageWidth).toBe(50);
@@ -133,12 +135,53 @@ describe('parseTiledTileset', () => {
133
135
  { duration: 100, tileId: 0 },
134
136
  { duration: 120, tileId: 1 },
135
137
  ]);
138
+ expect(diagnostics).toEqual([]);
136
139
  });
137
140
 
138
141
  it('returns null when the root is not a tileset', () => {
139
142
  expect(parseTiledTileset('<map/>')).toBeNull();
140
143
  expect(parseTiledTileset('not xml')).toBeNull();
141
144
  });
145
+
146
+ it('reports malformed XML and missing required fields at their exact paths', () => {
147
+ const malformedDiagnostics: ImportDiagnostic[] = [];
148
+ expect(parseTiledTileset('not xml', undefined, malformedDiagnostics)).toBeNull();
149
+ expect(malformedDiagnostics).toEqual([
150
+ {
151
+ detail: { path: 'tileset' },
152
+ kind: 'tiled.xml-malformed',
153
+ origin: 'parseTiledTileset',
154
+ severity: ImportDiagnosticSeverity.Reject,
155
+ },
156
+ ]);
157
+
158
+ const unexpectedRootDiagnostics: ImportDiagnostic[] = [];
159
+ expect(parseTiledTileset('<map/>', undefined, unexpectedRootDiagnostics)).toBeNull();
160
+ expect(unexpectedRootDiagnostics).toEqual([
161
+ {
162
+ detail: { actual: 'map', path: 'tileset' },
163
+ kind: 'tiled.root-unexpected',
164
+ origin: 'parseTiledTileset',
165
+ severity: ImportDiagnosticSeverity.Reject,
166
+ },
167
+ ]);
168
+
169
+ const missingDiagnostics: ImportDiagnostic[] = [];
170
+ const tileset = parseTiledTileset(
171
+ '<tileset tilewidth="16" tileheight="16" tilecount="1" columns="1"/>',
172
+ undefined,
173
+ missingDiagnostics,
174
+ );
175
+ expect(tileset?.name).toBe('');
176
+ expect(missingDiagnostics).toEqual([
177
+ {
178
+ detail: { path: 'tileset.name' },
179
+ kind: 'tiled.required-field-missing',
180
+ origin: 'buildTiledTilesetFromXml',
181
+ severity: ImportDiagnosticSeverity.Recover,
182
+ },
183
+ ]);
184
+ });
142
185
  });
143
186
 
144
187
  describe('parseTiledTmx', () => {
@@ -208,16 +251,49 @@ describe('parseTiledTmx', () => {
208
251
  const payload = base64Layer([1, 5, 2147483649, 6]);
209
252
  const tmx = tmxWithData(`<data encoding="base64" compression="gzip">${payload}</data>`);
210
253
 
211
- const dropped = parseTiledTmx(tmx)!;
254
+ const diagnostics: ImportDiagnostic[] = [];
255
+ const dropped = parseTiledTmx(tmx, undefined, diagnostics)!;
212
256
  const droppedLayer = dropped.layers[0];
213
257
  if (droppedLayer.type !== 'tilelayer') throw new Error('expected a tile layer');
214
258
  expect(Array.from(droppedLayer.data)).toEqual([0, 0, 0, 0]);
259
+ expect(diagnostics).toEqual([
260
+ {
261
+ detail: { compression: 'gzip', path: 'map.layers[0].data' },
262
+ kind: 'tiled.layer-inflate-unavailable',
263
+ origin: 'buildTiledLayerDataFromXml',
264
+ severity: ImportDiagnosticSeverity.Recover,
265
+ },
266
+ ]);
215
267
 
216
268
  const options: TiledParseOptions = { inflate: (bytes) => new Uint8Array(bytes) };
217
- const decoded = parseTiledTmx(tmx, options)!;
269
+ const decodedDiagnostics: ImportDiagnostic[] = [];
270
+ const decoded = parseTiledTmx(tmx, options, decodedDiagnostics)!;
218
271
  const decodedLayer = decoded.layers[0];
219
272
  if (decodedLayer.type !== 'tilelayer') throw new Error('expected a tile layer');
220
273
  expect(Array.from(decodedLayer.data)).toEqual([1, 5, 2147483649, 6]);
274
+ expect(decodedDiagnostics).toEqual([]);
275
+ });
276
+
277
+ it('reports invalid layer encoding while preserving the existing XML-tile fallback', () => {
278
+ const diagnostics: ImportDiagnostic[] = [];
279
+ const map = parseTiledTmx(
280
+ tmxWithData(
281
+ '<data encoding="invalid"><tile gid="1"/><tile gid="5"/><tile gid="2147483649"/><tile gid="6"/></data>',
282
+ ),
283
+ undefined,
284
+ diagnostics,
285
+ )!;
286
+ const layer = map.layers[0];
287
+ if (layer.type !== 'tilelayer') throw new Error('expected a tile layer');
288
+ expect(Array.from(layer.data)).toEqual([1, 5, 2147483649, 6]);
289
+ expect(diagnostics).toEqual([
290
+ {
291
+ detail: { encoding: 'invalid', path: 'map.layers[0].data.encoding' },
292
+ kind: 'tiled.layer-encoding-invalid',
293
+ origin: 'buildTiledLayerDataFromXml',
294
+ severity: ImportDiagnosticSeverity.Recover,
295
+ },
296
+ ]);
221
297
  });
222
298
 
223
299
  it('parses to a document equivalent to the TMJ form', () => {
@@ -238,4 +314,62 @@ describe('parseTiledTmx', () => {
238
314
  expect(parseTiledTmx('<foo/>')).toBeNull();
239
315
  expect(parseTiledTmx('garbage')).toBeNull();
240
316
  });
317
+
318
+ it('reports malformed XML and missing required fields at their exact paths', () => {
319
+ const malformedDiagnostics: ImportDiagnostic[] = [];
320
+ expect(parseTiledTmx('garbage', undefined, malformedDiagnostics)).toBeNull();
321
+ expect(malformedDiagnostics).toEqual([
322
+ {
323
+ detail: { path: 'map' },
324
+ kind: 'tiled.xml-malformed',
325
+ origin: 'parseTiledTmx',
326
+ severity: ImportDiagnosticSeverity.Reject,
327
+ },
328
+ ]);
329
+
330
+ const unexpectedRootDiagnostics: ImportDiagnostic[] = [];
331
+ expect(parseTiledTmx('<tileset/>', undefined, unexpectedRootDiagnostics)).toBeNull();
332
+ expect(unexpectedRootDiagnostics).toEqual([
333
+ {
334
+ detail: { actual: 'tileset', path: 'map' },
335
+ kind: 'tiled.root-unexpected',
336
+ origin: 'parseTiledTmx',
337
+ severity: ImportDiagnosticSeverity.Reject,
338
+ },
339
+ ]);
340
+
341
+ const missingDiagnostics: ImportDiagnostic[] = [];
342
+ const map = parseTiledTmx(
343
+ '<map version="1.10" width="1" height="1" tileheight="16"/>',
344
+ undefined,
345
+ missingDiagnostics,
346
+ );
347
+ expect(map?.tileWidth).toBe(0);
348
+ expect(missingDiagnostics).toEqual([
349
+ {
350
+ detail: { path: 'map.tilewidth' },
351
+ kind: 'tiled.required-field-missing',
352
+ origin: 'parseTiledTmx',
353
+ severity: ImportDiagnosticSeverity.Recover,
354
+ },
355
+ ]);
356
+
357
+ const missingLayerDataDiagnostics: ImportDiagnostic[] = [];
358
+ const mapWithoutLayerData = parseTiledTmx(
359
+ '<map version="1.10" width="1" height="1" tilewidth="16" tileheight="16"><layer width="1" height="1"/></map>',
360
+ undefined,
361
+ missingLayerDataDiagnostics,
362
+ );
363
+ const layer = mapWithoutLayerData?.layers[0];
364
+ if (layer?.type !== 'tilelayer') throw new Error('expected a tile layer');
365
+ expect(Array.from(layer.data)).toEqual([0]);
366
+ expect(missingLayerDataDiagnostics).toEqual([
367
+ {
368
+ detail: { path: 'map.layers[0].data' },
369
+ kind: 'tiled.required-field-missing',
370
+ origin: 'buildTiledLayerDataFromXml',
371
+ severity: ImportDiagnosticSeverity.Recover,
372
+ },
373
+ ]);
374
+ });
241
375
  });