@flighthq/tilemap-formats 0.1.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.
Files changed (44) hide show
  1. package/dist/index.d.ts +9 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +8 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/tiledColor.d.ts +3 -0
  6. package/dist/tiledColor.d.ts.map +1 -0
  7. package/dist/tiledColor.js +38 -0
  8. package/dist/tiledColor.js.map +1 -0
  9. package/dist/tiledGid.d.ts +4 -0
  10. package/dist/tiledGid.d.ts.map +1 -0
  11. package/dist/tiledGid.js +31 -0
  12. package/dist/tiledGid.js.map +1 -0
  13. package/dist/tiledJsonParse.d.ts +5 -0
  14. package/dist/tiledJsonParse.d.ts.map +1 -0
  15. package/dist/tiledJsonParse.js +238 -0
  16. package/dist/tiledJsonParse.js.map +1 -0
  17. package/dist/tiledLayerData.d.ts +4 -0
  18. package/dist/tiledLayerData.d.ts.map +1 -0
  19. package/dist/tiledLayerData.js +59 -0
  20. package/dist/tiledLayerData.js.map +1 -0
  21. package/dist/tiledOptions.d.ts +8 -0
  22. package/dist/tiledOptions.d.ts.map +1 -0
  23. package/dist/tiledOptions.js +2 -0
  24. package/dist/tiledOptions.js.map +1 -0
  25. package/dist/tiledProject.d.ts +4 -0
  26. package/dist/tiledProject.d.ts.map +1 -0
  27. package/dist/tiledProject.js +58 -0
  28. package/dist/tiledProject.js.map +1 -0
  29. package/dist/tiledTmxFormat.d.ts +3 -0
  30. package/dist/tiledTmxFormat.d.ts.map +1 -0
  31. package/dist/tiledTmxFormat.js +178 -0
  32. package/dist/tiledTmxFormat.js.map +1 -0
  33. package/dist/tiledXmlParse.d.ts +5 -0
  34. package/dist/tiledXmlParse.d.ts.map +1 -0
  35. package/dist/tiledXmlParse.js +247 -0
  36. package/dist/tiledXmlParse.js.map +1 -0
  37. package/package.json +40 -0
  38. package/src/tiledColor.test.ts +32 -0
  39. package/src/tiledGid.test.ts +54 -0
  40. package/src/tiledJsonParse.test.ts +137 -0
  41. package/src/tiledLayerData.test.ts +56 -0
  42. package/src/tiledProject.test.ts +71 -0
  43. package/src/tiledTmxFormat.test.ts +50 -0
  44. package/src/tiledXmlParse.test.ts +241 -0
@@ -0,0 +1,9 @@
1
+ export { formatTiledColor, parseTiledColor } from './tiledColor';
2
+ export { decodeTiledGid, getTiledTilesetRefForGid } from './tiledGid';
3
+ export { parseTiledTilesetJson, parseTiledTmj } from './tiledJsonParse';
4
+ export { decodeTiledBase64Layer, decodeTiledCsvLayer } from './tiledLayerData';
5
+ export type { TiledCompression, TiledInflate, TiledParseOptions, TiledTilesetResolver } from './tiledOptions';
6
+ export { buildTilemapLayersFromTiled } from './tiledProject';
7
+ export { formatTiledTmx } from './tiledTmxFormat';
8
+ export { parseTiledTileset, parseTiledTmx } from './tiledXmlParse';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC9G,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { formatTiledColor, parseTiledColor } from './tiledColor';
2
+ export { decodeTiledGid, getTiledTilesetRefForGid } from './tiledGid';
3
+ export { parseTiledTilesetJson, parseTiledTmj } from './tiledJsonParse';
4
+ export { decodeTiledBase64Layer, decodeTiledCsvLayer } from './tiledLayerData';
5
+ export { buildTilemapLayersFromTiled } from './tiledProject';
6
+ export { formatTiledTmx } from './tiledTmxFormat';
7
+ export { parseTiledTileset, parseTiledTmx } from './tiledXmlParse';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function formatTiledColor(packed: number): string;
2
+ export declare function parseTiledColor(text: string): number | null;
3
+ //# sourceMappingURL=tiledColor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledColor.d.ts","sourceRoot":"","sources":["../src/tiledColor.ts"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKvD;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe3D"}
@@ -0,0 +1,38 @@
1
+ // Tiled color literals (`#RRGGBB` or `#AARRGGBB`, the leading `#` optional) converted to and from
2
+ // Flight's single packed-RGBA convention (`0xRRGGBBAA`, alpha in the low byte). A 6-digit literal is
3
+ // fully opaque (alpha 0xff). These back the map background color; per-element `color` custom
4
+ // properties keep their raw Tiled string.
5
+ // Formats a packed-RGBA color back to Tiled's `#AARRGGBB` literal (always 8 digits, alpha first).
6
+ export function formatTiledColor(packed) {
7
+ const p = packed >>> 0;
8
+ const alpha = p & 0xff;
9
+ const rgb = (p >>> 8) & 0xffffff;
10
+ return `#${hex2(alpha)}${hex6(rgb)}`;
11
+ }
12
+ // Parses a Tiled color literal to packed RGBA, or null when the string is not a valid 6- or 8-digit
13
+ // hex color.
14
+ export function parseTiledColor(text) {
15
+ let s = text.trim();
16
+ if (s.startsWith('#'))
17
+ s = s.slice(1);
18
+ if (!/^[0-9a-fA-F]+$/.test(s))
19
+ return null;
20
+ if (s.length === 6) {
21
+ const rgb = parseInt(s, 16);
22
+ return ((rgb << 8) | 0xff) >>> 0;
23
+ }
24
+ if (s.length === 8) {
25
+ const argb = parseInt(s, 16);
26
+ const alpha = (argb >>> 24) & 0xff;
27
+ const rgb = argb & 0xffffff;
28
+ return ((rgb << 8) | alpha) >>> 0;
29
+ }
30
+ return null;
31
+ }
32
+ function hex2(value) {
33
+ return value.toString(16).padStart(2, '0');
34
+ }
35
+ function hex6(value) {
36
+ return value.toString(16).padStart(6, '0');
37
+ }
38
+ //# sourceMappingURL=tiledColor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledColor.js","sourceRoot":"","sources":["../src/tiledColor.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,qGAAqG;AACrG,6FAA6F;AAC7F,0CAA0C;AAE1C,kGAAkG;AAClG,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IACvB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;IACjC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACvC,CAAC;AAED,oGAAoG;AACpG,aAAa;AACb,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,GAAG,QAAQ,CAAC;QAC5B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { TiledGid, TiledMap, TiledTilesetRef } from '@flighthq/types';
2
+ export declare function decodeTiledGid(gid: number): TiledGid;
3
+ export declare function getTiledTilesetRefForGid(map: Readonly<TiledMap>, tileId: number): TiledTilesetRef | null;
4
+ //# sourceMappingURL=tiledGid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledGid.d.ts","sourceRoot":"","sources":["../src/tiledGid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAM3E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAQpD;AAKD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAOxG"}
@@ -0,0 +1,31 @@
1
+ // Decodes a raw 32-bit Tiled global tile id into its tile id plus the three flip flags. Tiled packs
2
+ // horizontal/vertical/anti-diagonal flip into the top three bits and the global tile id into the low
3
+ // 29 bits (0 = empty cell). The value is read as unsigned so a GID with the high (horizontal) bit set
4
+ // does not read back negative.
5
+ export function decodeTiledGid(gid) {
6
+ const g = gid >>> 0;
7
+ return {
8
+ flipDiagonal: (g & FLIP_DIAGONAL) !== 0,
9
+ flipHorizontal: (g & FLIP_HORIZONTAL) !== 0,
10
+ flipVertical: (g & FLIP_VERTICAL) !== 0,
11
+ tileId: g & TILE_ID_MASK,
12
+ };
13
+ }
14
+ // Finds the tileset reference that owns a decoded global tile id — the ref with the largest
15
+ // `firstGid` less than or equal to `tileId`. Returns null for an empty tile (`tileId <= 0`) or a
16
+ // tile below every declared range. Refs need not be sorted; the whole list is scanned.
17
+ export function getTiledTilesetRefForGid(map, tileId) {
18
+ if (tileId <= 0)
19
+ return null;
20
+ let best = null;
21
+ for (const ref of map.tilesets) {
22
+ if (ref.firstGid <= tileId && (best === null || ref.firstGid > best.firstGid))
23
+ best = ref;
24
+ }
25
+ return best;
26
+ }
27
+ const FLIP_HORIZONTAL = 0x80000000;
28
+ const FLIP_VERTICAL = 0x40000000;
29
+ const FLIP_DIAGONAL = 0x20000000;
30
+ const TILE_ID_MASK = 0x1fffffff;
31
+ //# sourceMappingURL=tiledGid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledGid.js","sourceRoot":"","sources":["../src/tiledGid.ts"],"names":[],"mappings":"AAEA,oGAAoG;AACpG,qGAAqG;AACrG,sGAAsG;AACtG,+BAA+B;AAC/B,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;IACpB,OAAO;QACL,YAAY,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC;QACvC,cAAc,EAAE,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC;QAC3C,YAAY,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC;QACvC,MAAM,EAAE,CAAC,GAAG,YAAY;KACzB,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,iGAAiG;AACjG,uFAAuF;AACvF,MAAM,UAAU,wBAAwB,CAAC,GAAuB,EAAE,MAAc;IAC9E,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,IAAI,GAA2B,IAAI,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAAE,IAAI,GAAG,GAAG,CAAC;IAC5F,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,eAAe,GAAG,UAAU,CAAC;AACnC,MAAM,aAAa,GAAG,UAAU,CAAC;AACjC,MAAM,aAAa,GAAG,UAAU,CAAC;AACjC,MAAM,YAAY,GAAG,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { TiledMap, TiledTileset } from '@flighthq/types';
2
+ import type { TiledParseOptions } from './tiledOptions';
3
+ export declare function parseTiledTilesetJson(text: string, _options?: Readonly<TiledParseOptions>): TiledTileset | null;
4
+ export declare function parseTiledTmj(text: string, options?: Readonly<TiledParseOptions>): TiledMap | null;
5
+ //# sourceMappingURL=tiledJsonParse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledJsonParse.d.ts","sourceRoot":"","sources":["../src/tiledJsonParse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EAMR,YAAY,EAKb,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAM1E,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"}
@@ -0,0 +1,238 @@
1
+ import { parseTiledColor } from './tiledColor';
2
+ import { decodeTiledBase64Layer, decodeTiledCsvLayer } from './tiledLayerData';
3
+ // JSON front-end of the Tiled codec: TMJ maps and standalone TSJ tilesets. The same DTO builders as
4
+ // the XML front-end, walking a parsed JSON tree instead of an XML one.
5
+ // Parses a standalone TSJ tileset document into a `TiledTileset`, or null on malformed JSON.
6
+ export function parseTiledTilesetJson(text, _options) {
7
+ const root = parseJson(text);
8
+ if (root === null)
9
+ return null;
10
+ return buildTiledTilesetFromJson(root);
11
+ }
12
+ // Parses a TMJ map document into a faithful `TiledMap`, or null on malformed JSON. A compressed tile
13
+ // layer with no `inflate` seam is preserved as an all-zero grid.
14
+ export function parseTiledTmj(text, options) {
15
+ const root = parseJson(text);
16
+ if (root === null)
17
+ return null;
18
+ const background = strField(root, 'backgroundcolor');
19
+ return {
20
+ backgroundColor: background !== null ? parseTiledColor(background) : null,
21
+ height: numField(root, 'height', 0),
22
+ infinite: boolField(root, 'infinite', false),
23
+ layers: arrayField(root, 'layers')
24
+ .map((layer) => buildTiledLayerFromJson(layer, options))
25
+ .filter((layer) => layer !== null),
26
+ orientation: asOrientation(strField(root, 'orientation')),
27
+ properties: buildTiledPropertiesFromJson(root),
28
+ renderOrder: asRenderOrder(strField(root, 'renderorder')),
29
+ tileHeight: numField(root, 'tileheight', 0),
30
+ tileWidth: numField(root, 'tilewidth', 0),
31
+ tiledVersion: strField(root, 'tiledversion'),
32
+ tilesets: arrayField(root, 'tilesets').map(buildTiledTilesetRefFromJson),
33
+ version: stringOr(numOrString(root.version), '1.0'),
34
+ width: numField(root, 'width', 0),
35
+ };
36
+ }
37
+ function arrayField(obj, key) {
38
+ const value = obj[key];
39
+ if (!Array.isArray(value))
40
+ return [];
41
+ return value.filter(isJsonObject);
42
+ }
43
+ function asCompression(value) {
44
+ return value === 'gzip' || value === 'zlib' || value === 'zstd' ? value : null;
45
+ }
46
+ function asOrientation(value) {
47
+ return value === 'isometric' || value === 'staggered' || value === 'hexagonal' ? value : 'orthogonal';
48
+ }
49
+ function asPropertyType(value) {
50
+ return value === 'int' ||
51
+ value === 'float' ||
52
+ value === 'bool' ||
53
+ value === 'color' ||
54
+ value === 'file' ||
55
+ value === 'object'
56
+ ? value
57
+ : 'string';
58
+ }
59
+ function asRenderOrder(value) {
60
+ return value === 'right-up' || value === 'left-down' || value === 'left-up' ? value : 'right-down';
61
+ }
62
+ function boolField(obj, key, fallback) {
63
+ const value = obj[key];
64
+ return typeof value === 'boolean' ? value : fallback;
65
+ }
66
+ function buildTiledLayerBaseFromJson(obj) {
67
+ return {
68
+ id: numField(obj, 'id', 0),
69
+ name: strField(obj, 'name') ?? '',
70
+ offsetX: numField(obj, 'offsetx', 0),
71
+ offsetY: numField(obj, 'offsety', 0),
72
+ opacity: numField(obj, 'opacity', 1),
73
+ properties: buildTiledPropertiesFromJson(obj),
74
+ visible: boolField(obj, 'visible', true),
75
+ };
76
+ }
77
+ function buildTiledLayerDataFromJson(obj, width, height, options) {
78
+ const grid = new Uint32Array(width * height);
79
+ const data = obj.data;
80
+ let decoded = null;
81
+ if (Array.isArray(data)) {
82
+ decoded = Uint32Array.from(data, (v) => (typeof v === 'number' ? v >>> 0 : 0));
83
+ }
84
+ else if (typeof data === 'string') {
85
+ decoded =
86
+ strField(obj, 'encoding') === 'csv'
87
+ ? decodeTiledCsvLayer(data)
88
+ : decodeTiledBase64Layer(data, asCompression(strField(obj, 'compression')), options?.inflate);
89
+ }
90
+ if (decoded === null)
91
+ return grid;
92
+ grid.set(decoded.subarray(0, grid.length));
93
+ return grid;
94
+ }
95
+ function buildTiledLayerFromJson(obj, options) {
96
+ const base = buildTiledLayerBaseFromJson(obj);
97
+ const type = strField(obj, 'type');
98
+ if (type === 'tilelayer') {
99
+ const width = numField(obj, 'width', 0);
100
+ const height = numField(obj, 'height', 0);
101
+ return {
102
+ ...base,
103
+ data: buildTiledLayerDataFromJson(obj, width, height, options),
104
+ height,
105
+ type: 'tilelayer',
106
+ width,
107
+ };
108
+ }
109
+ if (type === 'objectgroup') {
110
+ return { ...base, objects: arrayField(obj, 'objects').map(buildTiledObjectFromJson), type: 'objectgroup' };
111
+ }
112
+ if (type === 'imagelayer') {
113
+ return { ...base, image: strField(obj, 'image') ?? '', type: 'imagelayer' };
114
+ }
115
+ if (type === 'group') {
116
+ return {
117
+ ...base,
118
+ layers: arrayField(obj, 'layers')
119
+ .map((layer) => buildTiledLayerFromJson(layer, options))
120
+ .filter((layer) => layer !== null),
121
+ type: 'group',
122
+ };
123
+ }
124
+ return null;
125
+ }
126
+ function buildTiledObjectFromJson(obj) {
127
+ const gid = obj.gid;
128
+ return {
129
+ ellipse: boolField(obj, 'ellipse', false),
130
+ gid: typeof gid === 'number' ? gid >>> 0 : null,
131
+ height: numField(obj, 'height', 0),
132
+ id: numField(obj, 'id', 0),
133
+ name: strField(obj, 'name') ?? '',
134
+ point: boolField(obj, 'point', false),
135
+ polygon: parsePointsField(obj, 'polygon'),
136
+ polyline: parsePointsField(obj, 'polyline'),
137
+ properties: buildTiledPropertiesFromJson(obj),
138
+ type: strField(obj, 'type') ?? strField(obj, 'class') ?? '',
139
+ width: numField(obj, 'width', 0),
140
+ x: numField(obj, 'x', 0),
141
+ y: numField(obj, 'y', 0),
142
+ };
143
+ }
144
+ function buildTiledPropertiesFromJson(obj) {
145
+ return arrayField(obj, 'properties').map((property) => {
146
+ const type = asPropertyType(strField(property, 'type'));
147
+ const raw = property.value;
148
+ return { name: strField(property, 'name') ?? '', type, value: coercePropertyValue(type, raw) };
149
+ });
150
+ }
151
+ function buildTiledTilesetFromJson(obj) {
152
+ return {
153
+ columns: numField(obj, 'columns', 0),
154
+ image: strField(obj, 'image'),
155
+ imageHeight: numField(obj, 'imageheight', 0),
156
+ imageWidth: numField(obj, 'imagewidth', 0),
157
+ margin: numField(obj, 'margin', 0),
158
+ name: strField(obj, 'name') ?? '',
159
+ properties: buildTiledPropertiesFromJson(obj),
160
+ spacing: numField(obj, 'spacing', 0),
161
+ tileCount: numField(obj, 'tilecount', 0),
162
+ tileHeight: numField(obj, 'tileheight', 0),
163
+ tileWidth: numField(obj, 'tilewidth', 0),
164
+ tiles: arrayField(obj, 'tiles').map(buildTiledTilesetTileFromJson),
165
+ };
166
+ }
167
+ function buildTiledTilesetRefFromJson(obj) {
168
+ const source = strField(obj, 'source');
169
+ return {
170
+ firstGid: numField(obj, 'firstgid', 1),
171
+ source,
172
+ tileset: source !== null ? null : buildTiledTilesetFromJson(obj),
173
+ };
174
+ }
175
+ function buildTiledTilesetTileFromJson(obj) {
176
+ const animation = obj.animation;
177
+ const objectGroup = isJsonObject(obj.objectgroup) ? obj.objectgroup : null;
178
+ const frames = Array.isArray(animation)
179
+ ? animation
180
+ .filter(isJsonObject)
181
+ .map((frame) => ({ duration: numField(frame, 'duration', 0), tileId: numField(frame, 'tileid', 0) }))
182
+ : null;
183
+ return {
184
+ animation: frames,
185
+ id: numField(obj, 'id', 0),
186
+ image: strField(obj, 'image'),
187
+ objects: objectGroup !== null ? arrayField(objectGroup, 'objects').map(buildTiledObjectFromJson) : null,
188
+ properties: buildTiledPropertiesFromJson(obj),
189
+ type: strField(obj, 'type') ?? strField(obj, 'class') ?? '',
190
+ };
191
+ }
192
+ function coercePropertyValue(type, raw) {
193
+ if (type === 'bool')
194
+ return raw === true;
195
+ if (type === 'int' || type === 'float')
196
+ return typeof raw === 'number' ? raw : 0;
197
+ return typeof raw === 'string' ? raw : String(raw ?? '');
198
+ }
199
+ function isJsonObject(value) {
200
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
201
+ }
202
+ function numField(obj, key, fallback) {
203
+ const value = obj[key];
204
+ return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
205
+ }
206
+ function numOrString(value) {
207
+ if (typeof value === 'number')
208
+ return value;
209
+ if (typeof value === 'string')
210
+ return value;
211
+ return null;
212
+ }
213
+ function parseJson(text) {
214
+ let root;
215
+ try {
216
+ root = JSON.parse(text);
217
+ }
218
+ catch {
219
+ return null;
220
+ }
221
+ return isJsonObject(root) ? root : null;
222
+ }
223
+ function parsePointsField(obj, key) {
224
+ const value = obj[key];
225
+ if (!Array.isArray(value))
226
+ return null;
227
+ return value.filter(isJsonObject).map((point) => ({ x: numField(point, 'x', 0), y: numField(point, 'y', 0) }));
228
+ }
229
+ function stringOr(value, fallback) {
230
+ if (value === null)
231
+ return fallback;
232
+ return typeof value === 'number' ? String(value) : value;
233
+ }
234
+ function strField(obj, key) {
235
+ const value = obj[key];
236
+ return typeof value === 'string' ? value : null;
237
+ }
238
+ //# sourceMappingURL=tiledJsonParse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledJsonParse.js","sourceRoot":"","sources":["../src/tiledJsonParse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { TiledCompression, TiledInflate } from './tiledOptions';
2
+ export declare function decodeTiledBase64Layer(text: string, compression: TiledCompression | null, inflate?: TiledInflate): Uint32Array | null;
3
+ export declare function decodeTiledCsvLayer(text: string): Uint32Array;
4
+ //# sourceMappingURL=tiledLayerData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledLayerData.d.ts","sourceRoot":"","sources":["../src/tiledLayerData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAUrE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,gBAAgB,GAAG,IAAI,EACpC,OAAO,CAAC,EAAE,YAAY,GACrB,WAAW,GAAG,IAAI,CAepB;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAS7D"}
@@ -0,0 +1,59 @@
1
+ // Decodes the two textual encodings Tiled uses for a tile layer's `<data>`/`data` payload into a flat
2
+ // array of raw 32-bit GIDs (row-major, flip bits intact). The `xml`/array forms are handled inline by
3
+ // the parsers; these two cover the encoded strings shared by TMX and TMJ.
4
+ // Decodes a base64 layer payload into raw GIDs. Each tile is a little-endian unsigned 32-bit int.
5
+ // When `compression` is non-null the base64 bytes are first passed through `inflate`; returns null
6
+ // when a compressed payload has no `inflate` seam or `inflate` fails to decode it — the caller then
7
+ // treats the layer as empty rather than dropping it.
8
+ export function decodeTiledBase64Layer(text, compression, inflate) {
9
+ let bytes = decodeBase64(text);
10
+ if (compression !== null) {
11
+ if (inflate === undefined)
12
+ return null;
13
+ const inflated = inflate(bytes, compression);
14
+ if (inflated === null)
15
+ return null;
16
+ bytes = inflated;
17
+ }
18
+ const count = bytes.length >>> 2;
19
+ const gids = new Uint32Array(count);
20
+ for (let i = 0; i < count; i++) {
21
+ const b = i * 4;
22
+ gids[i] = (bytes[b] | (bytes[b + 1] << 8) | (bytes[b + 2] << 16) | (bytes[b + 3] << 24)) >>> 0;
23
+ }
24
+ return gids;
25
+ }
26
+ // Decodes a CSV layer payload (`"1,2,0,5"`, whitespace and newlines ignored) into raw GIDs. Blank
27
+ // entries are skipped; a non-numeric entry becomes 0 (empty).
28
+ export function decodeTiledCsvLayer(text) {
29
+ const out = [];
30
+ for (const part of text.split(',')) {
31
+ const trimmed = part.trim();
32
+ if (trimmed === '')
33
+ continue;
34
+ const n = Number(trimmed);
35
+ out.push(Number.isFinite(n) ? n >>> 0 : 0);
36
+ }
37
+ return Uint32Array.from(out);
38
+ }
39
+ // Portable base64 decode that works in Node.js (Vitest) and browsers alike, avoiding the
40
+ // browser-only atob() global. Non-base64 characters (whitespace, newlines) are stripped first.
41
+ function decodeBase64(s) {
42
+ const stripped = s.replace(/[^A-Za-z0-9+/]/g, '');
43
+ const out = [];
44
+ for (let i = 0; i < stripped.length; i += 4) {
45
+ const c0 = BASE64_TABLE.indexOf(stripped[i]);
46
+ const c1 = BASE64_TABLE.indexOf(stripped[i + 1]);
47
+ const c2 = i + 2 < stripped.length ? BASE64_TABLE.indexOf(stripped[i + 2]) : -1;
48
+ const c3 = i + 3 < stripped.length ? BASE64_TABLE.indexOf(stripped[i + 3]) : -1;
49
+ const n = (c0 << 18) | (c1 << 12) | ((c2 < 0 ? 0 : c2) << 6) | (c3 < 0 ? 0 : c3);
50
+ out.push((n >> 16) & 0xff);
51
+ if (c2 >= 0)
52
+ out.push((n >> 8) & 0xff);
53
+ if (c3 >= 0)
54
+ out.push(n & 0xff);
55
+ }
56
+ return new Uint8Array(out);
57
+ }
58
+ const BASE64_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
59
+ //# sourceMappingURL=tiledLayerData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledLayerData.js","sourceRoot":"","sources":["../src/tiledLayerData.ts"],"names":[],"mappings":"AAEA,sGAAsG;AACtG,sGAAsG;AACtG,0EAA0E;AAE1E,kGAAkG;AAClG,mGAAmG;AACnG,oGAAoG;AACpG,qDAAqD;AACrD,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,WAAoC,EACpC,OAAsB;IAEtB,IAAI,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACnC,KAAK,GAAG,QAAQ,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kGAAkG;AAClG,8DAA8D;AAC9D,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,EAAE;YAAE,SAAS;QAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,yFAAyF;AACzF,+FAA+F;AAC/F,SAAS,YAAY,CAAC,CAAS;IAC7B,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3B,IAAI,EAAE,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,YAAY,GAAG,kEAAkE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { TiledTilesetRef, Tileset } from '@flighthq/types';
2
+ export type TiledCompression = 'gzip' | 'zlib' | 'zstd';
3
+ export type TiledInflate = (bytes: Readonly<Uint8Array>, compression: TiledCompression) => Uint8Array | null;
4
+ export interface TiledParseOptions {
5
+ inflate?: TiledInflate;
6
+ }
7
+ export type TiledTilesetResolver = (ref: Readonly<TiledTilesetRef>) => Tileset | null;
8
+ //# sourceMappingURL=tiledOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledOptions.d.ts","sourceRoot":"","sources":["../src/tiledOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAKhE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAMxD,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,gBAAgB,KAAK,UAAU,GAAG,IAAI,CAAC;AAG7G,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAKD,MAAM,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tiledOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledOptions.js","sourceRoot":"","sources":["../src/tiledOptions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { TiledMap, TilemapData } from '@flighthq/types';
2
+ import type { TiledTilesetResolver } from './tiledOptions';
3
+ export declare function buildTilemapLayersFromTiled(map: Readonly<TiledMap>, layerIndex: number, resolveTileset: TiledTilesetResolver): TilemapData[] | null;
4
+ //# sourceMappingURL=tiledProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledProject.d.ts","sourceRoot":"","sources":["../src/tiledProject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAW,MAAM,iBAAiB,CAAC;AAGtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAiB3D,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,EACvB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,oBAAoB,GACnC,WAAW,EAAE,GAAG,IAAI,CAyCtB"}
@@ -0,0 +1,58 @@
1
+ import { createTilemapData } from '@flighthq/sprite';
2
+ import { decodeTiledGid, getTiledTilesetRefForGid } from './tiledGid';
3
+ // Projects one Tiled tile layer into runtime `TilemapData`, split by tileset. A Flight `Tilemap`
4
+ // batches a single tileset per draw, so a layer that draws from N tilesets becomes N single-tileset
5
+ // `TilemapData` (each grid holds only its own tiles, `-1` elsewhere) that the caller stacks in a
6
+ // container — the batching-correct decomposition. The common single-tileset layer returns a
7
+ // 1-element array.
8
+ //
9
+ // Each cell's raw GID is decoded to a global tile id; its owning `TiledTilesetRef` is found by
10
+ // firstGid range and resolved to a runtime `Tileset` via `resolveTileset`. The stored tile is the
11
+ // local id (`globalTileId - firstGid`). Flip flags are decoded for range/identity purposes but are
12
+ // NOT carried into the grid: `TilemapData` has no per-tile flip slot, so flips survive only in the
13
+ // faithful `TiledMap` document, not in the projected tilemap.
14
+ //
15
+ // Returns null when `layerIndex` is out of range or not a tile layer, or when resolution fails
16
+ // wholesale (no referenced tileset resolves). A ref that resolves to null when others succeed has its
17
+ // tiles left empty (`-1`) rather than failing the whole projection.
18
+ export function buildTilemapLayersFromTiled(map, layerIndex, resolveTileset) {
19
+ const layer = map.layers[layerIndex];
20
+ if (layer === undefined || layer.type !== 'tilelayer')
21
+ return null;
22
+ const { width, height, data } = layer;
23
+ const cellCount = width * height;
24
+ // One accumulator per resolved tileset, kept in first-appearance order for deterministic output.
25
+ const groups = [];
26
+ const byFirstGid = new Map();
27
+ let anyResolved = false;
28
+ for (let i = 0; i < cellCount; i++) {
29
+ const { tileId } = decodeTiledGid(data[i]);
30
+ if (tileId <= 0)
31
+ continue;
32
+ const ref = getTiledTilesetRefForGid(map, tileId);
33
+ if (ref === null)
34
+ continue;
35
+ let group = byFirstGid.get(ref.firstGid);
36
+ if (group === undefined) {
37
+ const tileset = resolveTileset(ref);
38
+ if (tileset === null) {
39
+ // Remember the failure so its tiles stay empty without re-resolving each cell.
40
+ byFirstGid.set(ref.firstGid, null);
41
+ group = null;
42
+ }
43
+ else {
44
+ anyResolved = true;
45
+ group = { firstGid: ref.firstGid, tiles: new Int16Array(cellCount).fill(-1), tileset };
46
+ byFirstGid.set(ref.firstGid, group);
47
+ groups.push(group);
48
+ }
49
+ }
50
+ if (group === null)
51
+ continue;
52
+ group.tiles[i] = tileId - group.firstGid;
53
+ }
54
+ if (!anyResolved)
55
+ return null;
56
+ return groups.map((group) => createTilemapData({ columns: width, rows: height, tiles: group.tiles, tileset: group.tileset }));
57
+ }
58
+ //# sourceMappingURL=tiledProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledProject.js","sourceRoot":"","sources":["../src/tiledProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGtE,iGAAiG;AACjG,oGAAoG;AACpG,iGAAiG;AACjG,4FAA4F;AAC5F,mBAAmB;AACnB,EAAE;AACF,+FAA+F;AAC/F,kGAAkG;AAClG,mGAAmG;AACnG,mGAAmG;AACnG,8DAA8D;AAC9D,EAAE;AACF,+FAA+F;AAC/F,sGAAsG;AACtG,oEAAoE;AACpE,MAAM,UAAU,2BAA2B,CACzC,GAAuB,EACvB,UAAkB,EAClB,cAAoC;IAEpC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAEnE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;IAEjC,iGAAiG;IACjG,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC1D,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,IAAI,CAAC;YAAE,SAAS;QAC1B,MAAM,GAAG,GAAG,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,GAAG,KAAK,IAAI;YAAE,SAAS;QAE3B,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,+EAA+E;gBAC/E,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACnC,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,IAAI,CAAC;gBACnB,KAAK,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;gBACvF,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC7B,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1B,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAChG,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TiledMap } from '@flighthq/types';
2
+ export declare function formatTiledTmx(map: Readonly<TiledMap>): string;
3
+ //# sourceMappingURL=tiledTmxFormat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiledTmxFormat.d.ts","sourceRoot":"","sources":["../src/tiledTmxFormat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EAMT,MAAM,iBAAiB,CAAC;AAQzB,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,CAmB9D"}