From 3e5f841d98221fc7924039aa5356c7971576b6ca Mon Sep 17 00:00:00 2001 From: CodeDoctorDE Date: Fri, 3 Jul 2026 21:39:52 +0200 Subject: [PATCH 1/5] chore: Upgrade dependencies --- melos.yaml | 66 ------------------------------ packages/tiled/lib/src/layer.dart | 48 +++++++++++----------- packages/tiled/pubspec.yaml | 8 ++-- pubspec.yaml | 68 ++++++++++++++++++++++++++++++- 4 files changed, 95 insertions(+), 95 deletions(-) delete mode 100644 melos.yaml diff --git a/melos.yaml b/melos.yaml deleted file mode 100644 index 7a36309..0000000 --- a/melos.yaml +++ /dev/null @@ -1,66 +0,0 @@ -name: Tiled -repository: https://github.com/flame-engine/tiled.dart - -packages: - - packages/** - -command: - bootstrap: - # Uses the pubspec_overrides.yaml instead of having Melos modifying the lock file. - usePubspecOverrides: true - - version: - # Generate commit links in package changelogs. - linkToCommits: true - # Only allow versioning to happen on main branch. - branch: main - # Additionally build a changelog at the root of the workspace. - workspaceChangelog: true - -scripts: - lint:all: - run: melos run analyze && melos run format - description: Run all static analysis checks. - - analyze: - run: | - melos exec -c 10 -- \ - flutter analyze --fatal-infos - description: Run `flutter analyze` for all packages. - - format: - run: melos exec dart format . --fix - description: Run `dart format` for all packages. - - format-check: - run: melos exec dart format . --set-exit-if-changed - description: Run `dart format` checks for all packages. - - dartdoc: - run: melos exec flutter pub run dartdoc - description: Run dartdoc checks for all packages. - - test:select: - run: melos exec -- flutter test - select-package: - dir-exists: - - test - description: Run `flutter test` for selected packages. - - test: - run: melos run test:select --no-select - description: Run all Flutter tests in this project. - - coverage: - run: | - melos exec -- flutter test --coverage && - melos exec -- genhtml coverage/lcov.info --output-directory=coverage/ - select-package: - dir-exists: test - description: Generate coverage for the selected package. - - update-goldens: - run: melos exec -- flutter test --update-goldens - select-package: - dir-exists: test - description: Re-generate all golden test files diff --git a/packages/tiled/lib/src/layer.dart b/packages/tiled/lib/src/layer.dart index 0b6f1a6..4bff6a5 100644 --- a/packages/tiled/lib/src/layer.dart +++ b/packages/tiled/lib/src/layer.dart @@ -149,13 +149,16 @@ abstract class Layer { (json) => json, // data is just a string or list of int on JSON (xml) => xml.getSingleChildOrNull('data'), ); - final compression = parser.getCompressionOrNull('compression') ?? + final compression = + parser.getCompressionOrNull('compression') ?? dataNode?.getCompressionOrNull('compression'); - final encoding = parser.getFileEncodingOrNull('encoding') ?? + final encoding = + parser.getFileEncodingOrNull('encoding') ?? dataNode?.getFileEncodingOrNull('encoding') ?? FileEncoding.csv; Chunk parseChunk(Parser e) => Chunk.parse(e, encoding, compression); - final chunks = parser.getChildrenAs('chunks', parseChunk) + + final chunks = + parser.getChildrenAs('chunks', parseChunk) + (dataNode?.getChildrenAs('chunk', parseChunk) ?? []); final data = dataNode != null ? parseLayerData(dataNode, encoding, compression) @@ -184,16 +187,19 @@ abstract class Layer { chunks: chunks, data: data, ); - break; case LayerType.objectGroup: final drawOrder = parser.getDrawOrder( 'draworder', defaults: DrawOrder.topDown, ); - final colorHex = - parser.getString('color', defaults: ObjectGroup.defaultColorHex); - final color = - parser.getColor('color', defaults: ObjectGroup.defaultColor); + final colorHex = parser.getString( + 'color', + defaults: ObjectGroup.defaultColorHex, + ); + final color = parser.getColor( + 'color', + defaults: ObjectGroup.defaultColor, + ); final objects = parser.formatSpecificParsing( (json) => json.getChildrenAs('objects', TiledObject.parse), @@ -222,7 +228,6 @@ abstract class Layer { colorHex: colorHex, color: color, ); - break; case LayerType.imageLayer: final transparentColorHex = parser.getStringOrNull('transparentcolor'); final transparentColor = parser.getColorOrNull('transparentcolor'); @@ -252,7 +257,6 @@ abstract class Layer { transparentColorHex: transparentColorHex, transparentColor: transparentColor, ); - break; case LayerType.group: final layers = parseLayers(parser); layer = Group( @@ -274,7 +278,6 @@ abstract class Layer { properties: properties, layers: layers, ); - break; } return layer; @@ -336,15 +339,12 @@ abstract class Layer { switch (compression) { case Compression.zlib: decompressed = const ZLibDecoder().decodeBytes(decodedString); - break; case Compression.gzip: decompressed = const GZipDecoder().decodeBytes(decodedString); - break; case Compression.zstd: throw UnsupportedError('zstd is an unsupported compression'); case null: decompressed = decodedString; - break; } // From the tiled documentation: @@ -413,10 +413,10 @@ class TileLayer extends Layer { this.encoding = FileEncoding.csv, this.chunks, this.data, - }) : tileData = maybeGenerate(data, width, height), - super( - type: LayerType.tileLayer, - ); + }) : tileData = maybeGenerate(data, width, height), + super( + type: LayerType.tileLayer, + ); static List>? maybeGenerate( List? data, @@ -473,8 +473,8 @@ class ObjectGroup extends Layer { this.colorHex = defaultColorHex, this.color = defaultColor, }) : super( - type: LayerType.objectGroup, - ); + type: LayerType.objectGroup, + ); } class ImageLayer extends Layer { @@ -520,8 +520,8 @@ class ImageLayer extends Layer { this.transparentColorHex, this.transparentColor, }) : super( - type: LayerType.imageLayer, - ); + type: LayerType.imageLayer, + ); } class Group extends Layer { @@ -547,6 +547,6 @@ class Group extends Layer { super.visible, super.properties, }) : super( - type: LayerType.imageLayer, - ); + type: LayerType.imageLayer, + ); } diff --git a/packages/tiled/pubspec.yaml b/packages/tiled/pubspec.yaml index 75e7af5..4119d50 100644 --- a/packages/tiled/pubspec.yaml +++ b/packages/tiled/pubspec.yaml @@ -4,15 +4,17 @@ description: A Dart Tiled library. Parse your TMX files into useful representati homepage: https://github.com/flame-engine/tiled.dart environment: - sdk: ">=2.18.0 <3.0.0" + sdk: ">=3.11.0 <4.0.0" + +resolution: workspace dependencies: archive: ^4.0.2 collection: ^1.16.0 meta: ^1.7.0 - xml: ^6.1.0 + xml: ^7.0.0 dev_dependencies: - dartdoc: ^8.3.1 + dartdoc: ^9.0.0 flame_lint: ^1.1.2 test: ^1.24.8 diff --git a/pubspec.yaml b/pubspec.yaml index 6c9b8d6..87e0252 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,71 @@ name: tiled_workspace +publish_to: none environment: - sdk: ">=3.0.0 <4.0.0" + sdk: ">=3.11.0 <4.0.0" + +workspace: + - packages/tiled dev_dependencies: - melos: ^6.2.0 + melos: ^8.0.0 + +melos: + repository: https://github.com/flame-engine/tiled.dart + + command: + version: + # Generate commit links in package changelogs. + linkToCommits: true + # Only allow versioning to happen on main branch. + branch: main + # Additionally build a changelog at the root of the workspace. + workspaceChangelog: true + + scripts: + lint:all: + run: dart run melos run analyze && dart run melos run format + description: Run all static analysis checks. + + analyze: + run: | + dart run melos exec -c 10 -- \ + flutter analyze --fatal-infos + description: Run `flutter analyze` for all packages. + + format: + run: dart run melos exec dart format . --fix + description: Run `dart format` for all packages. + + format-check: + run: dart run melos exec dart format . --set-exit-if-changed + description: Run `dart format` checks for all packages. + + dartdoc: + run: dart run melos exec flutter pub run dartdoc + description: Run dartdoc checks for all packages. + + test:select: + run: dart run melos exec -- flutter test + packageFilters: + dirExists: + - test + description: Run `flutter test` for selected packages. + + test: + run: dart run melos run test:select --no-select + description: Run all Flutter tests in this project. + + coverage: + run: | + dart run melos exec -- flutter test --coverage && + dart run melos exec -- genhtml coverage/lcov.info --output-directory=coverage/ + packageFilters: + dirExists: test + description: Generate coverage for the selected package. + + update-goldens: + run: dart run melos exec -- flutter test --update-goldens + packageFilters: + dirExists: test + description: Re-generate all golden test files From 33f9c5a774b952c38c139cd2cb0a7bbddd3df465 Mon Sep 17 00:00:00 2001 From: CodeDoctorDE Date: Fri, 3 Jul 2026 21:45:42 +0200 Subject: [PATCH 2/5] chore: Format Dart files --- packages/tiled/lib/src/common/color.dart | 34 ++++++----- packages/tiled/lib/src/common/flips.dart | 12 ++-- packages/tiled/lib/src/common/frame.dart | 8 +-- packages/tiled/lib/src/common/gid.dart | 3 +- packages/tiled/lib/src/common/point.dart | 8 +-- packages/tiled/lib/src/common/property.dart | 35 ++++++----- .../tiled/lib/src/common/tiled_image.dart | 14 ++--- .../lib/src/editor_setting/chunk_size.dart | 8 +-- .../src/editor_setting/editor_setting.dart | 9 ++- .../tiled/lib/src/editor_setting/export.dart | 8 +-- packages/tiled/lib/src/objects/text.dart | 31 +++++----- packages/tiled/lib/src/template.dart | 8 +-- packages/tiled/lib/src/tiled_map.dart | 10 ++-- packages/tiled/lib/src/tileset/grid.dart | 10 ++-- packages/tiled/lib/src/tileset/terrain.dart | 10 ++-- packages/tiled/lib/src/tileset/tile.dart | 59 +++++++++---------- .../tiled/lib/src/tileset/tile_offset.dart | 8 +-- packages/tiled/lib/src/tileset/tileset.dart | 18 +++--- .../lib/src/tileset/wang/wang_color.dart | 14 ++--- .../tiled/lib/src/tileset/wang/wang_tile.dart | 23 ++++---- .../tiled/test/complexmap_infinite_test.dart | 6 +- .../tiled/test/isometric_staggered_test.dart | 12 ++-- packages/tiled/test/isometric_test.dart | 6 +- packages/tiled/test/layer_test.dart | 9 +-- packages/tiled/test/parser_compare_test.dart | 6 +- packages/tiled/test/parser_test.dart | 23 ++++---- packages/tiled/test/tile_test.dart | 12 ++-- packages/tiled/test/tileset_test.dart | 12 ++-- 28 files changed, 213 insertions(+), 203 deletions(-) diff --git a/packages/tiled/lib/src/common/color.dart b/packages/tiled/lib/src/common/color.dart index bb4380d..e0bdcf0 100644 --- a/packages/tiled/lib/src/common/color.dart +++ b/packages/tiled/lib/src/common/color.dart @@ -21,24 +21,26 @@ class ColorData { const ColorData.hex(this._hex); const ColorData.rgb(int red, int green, int blue, [int alpha = 255]) - : assert(red >= 0 && red <= 255), - assert(green >= 0 && green <= 255), - assert(blue >= 0 && blue <= 255), - assert(alpha >= 0 && alpha <= 255), - _hex = (alpha << 3 * 8) + - (red << 2 * 8) + - (green << 1 * 8) + - (blue << 0 * 8); + : assert(red >= 0 && red <= 255), + assert(green >= 0 && green <= 255), + assert(blue >= 0 && blue <= 255), + assert(alpha >= 0 && alpha <= 255), + _hex = + (alpha << 3 * 8) + + (red << 2 * 8) + + (green << 1 * 8) + + (blue << 0 * 8); const ColorData.argb(int alpha, int red, int green, int blue) - : assert(red >= 0 && red <= 255), - assert(green >= 0 && green <= 255), - assert(blue >= 0 && blue <= 255), - assert(alpha >= 0 && alpha <= 255), - _hex = (alpha << 3 * 8) + - (red << 2 * 8) + - (green << 1 * 8) + - (blue << 0 * 8); + : assert(red >= 0 && red <= 255), + assert(green >= 0 && green <= 255), + assert(blue >= 0 && blue <= 255), + assert(alpha >= 0 && alpha <= 255), + _hex = + (alpha << 3 * 8) + + (red << 2 * 8) + + (green << 1 * 8) + + (blue << 0 * 8); @override bool operator ==(Object other) { diff --git a/packages/tiled/lib/src/common/flips.dart b/packages/tiled/lib/src/common/flips.dart index b4c88e9..d95cdae 100644 --- a/packages/tiled/lib/src/common/flips.dart +++ b/packages/tiled/lib/src/common/flips.dart @@ -12,12 +12,12 @@ class Flips { }); const Flips.defaults() - : this( - horizontally: false, - vertically: false, - diagonally: false, - antiDiagonally: false, - ); + : this( + horizontally: false, + vertically: false, + diagonally: false, + antiDiagonally: false, + ); Flips copyWith({ bool? horizontally, diff --git a/packages/tiled/lib/src/common/frame.dart b/packages/tiled/lib/src/common/frame.dart index ccce955..2616de7 100644 --- a/packages/tiled/lib/src/common/frame.dart +++ b/packages/tiled/lib/src/common/frame.dart @@ -18,8 +18,8 @@ class Frame { }); Frame.parse(Parser parser) - : this( - tileId: parser.getInt('tileid'), - duration: parser.getInt('duration'), - ); + : this( + tileId: parser.getInt('tileid'), + duration: parser.getInt('duration'), + ); } diff --git a/packages/tiled/lib/src/common/gid.dart b/packages/tiled/lib/src/common/gid.dart index 286a071..006abc3 100644 --- a/packages/tiled/lib/src/common/gid.dart +++ b/packages/tiled/lib/src/common/gid.dart @@ -54,7 +54,8 @@ class Gid { final flippedAntiDiagonally = gid & flippedAntiDiagonallyFlag == flippedAntiDiagonallyFlag; // clear id from flips - final tileId = gid & + final tileId = + gid & ~(flippedHorizontallyFlag | flippedVerticallyFlag | flippedDiagonallyFlag | diff --git a/packages/tiled/lib/src/common/point.dart b/packages/tiled/lib/src/common/point.dart index fe1a333..36ba0c1 100644 --- a/packages/tiled/lib/src/common/point.dart +++ b/packages/tiled/lib/src/common/point.dart @@ -14,10 +14,10 @@ class Point { Point({required this.x, required this.y}); Point.parse(Parser parser) - : this( - x: parser.getDouble('x'), - y: parser.getDouble('y'), - ); + : this( + x: parser.getDouble('x'), + y: parser.getDouble('y'), + ); factory Point.parseFromString(String point) { final split = point.split(','); diff --git a/packages/tiled/lib/src/common/property.dart b/packages/tiled/lib/src/common/property.dart index b802788..6fd7f5a 100644 --- a/packages/tiled/lib/src/common/property.dart +++ b/packages/tiled/lib/src/common/property.dart @@ -71,19 +71,22 @@ class Property { ); case PropertyType.string: - final value = parser.formatSpecificParsing((json) { - return json.getString('value', defaults: ''); - }, (xml) { - final attrString = parser.getStringOrNull('value'); - if (attrString != null) { - return attrString; - } else { - // In tmx files, multi-line text property values can be stored - // inside the `` node itself instead of in the 'value' - // attribute - return xml.element.innerText; - } - }); + final value = parser.formatSpecificParsing( + (json) { + return json.getString('value', defaults: ''); + }, + (xml) { + final attrString = parser.getStringOrNull('value'); + if (attrString != null) { + return attrString; + } else { + // In tmx files, multi-line text property values can be stored + // inside the `` node itself instead of in the 'value' + // attribute + return xml.element.innerText; + } + }, + ); return StringProperty( name: name, @@ -224,8 +227,10 @@ extension PropertiesParser on Parser { // NOTE: two properties should never have the same name, if they do // one will simply override the other - final byName = - properties.groupFoldBy((prop) => prop.name, (previous, element) { + final byName = properties.groupFoldBy((prop) => prop.name, ( + previous, + element, + ) { return element; }); diff --git a/packages/tiled/lib/src/common/tiled_image.dart b/packages/tiled/lib/src/common/tiled_image.dart index 22f0d7a..a6a3825 100644 --- a/packages/tiled/lib/src/common/tiled_image.dart +++ b/packages/tiled/lib/src/common/tiled_image.dart @@ -35,13 +35,13 @@ class TiledImage { }); TiledImage.parse(Parser parser) - : this( - source: parser.getStringOrNull('source'), - format: parser.getStringOrNull('format'), - width: parser.getIntOrNull('width'), - height: parser.getIntOrNull('height'), - trans: parser.getStringOrNull('trans'), - ); + : this( + source: parser.getStringOrNull('source'), + format: parser.getStringOrNull('format'), + width: parser.getIntOrNull('width'), + height: parser.getIntOrNull('height'), + trans: parser.getStringOrNull('trans'), + ); /// Needed for getTiledImages in TileMap; /// Images are equal if their source is equal. diff --git a/packages/tiled/lib/src/editor_setting/chunk_size.dart b/packages/tiled/lib/src/editor_setting/chunk_size.dart index df1bc81..2a81175 100644 --- a/packages/tiled/lib/src/editor_setting/chunk_size.dart +++ b/packages/tiled/lib/src/editor_setting/chunk_size.dart @@ -14,8 +14,8 @@ class ChunkSize { ChunkSize({required this.width, required this.height}); ChunkSize.parse(Parser parser) - : this( - width: parser.getInt('width', defaults: 16), - height: parser.getInt('height', defaults: 16), - ); + : this( + width: parser.getInt('width', defaults: 16), + height: parser.getInt('height', defaults: 16), + ); } diff --git a/packages/tiled/lib/src/editor_setting/editor_setting.dart b/packages/tiled/lib/src/editor_setting/editor_setting.dart index 26a5ed2..b76426d 100644 --- a/packages/tiled/lib/src/editor_setting/editor_setting.dart +++ b/packages/tiled/lib/src/editor_setting/editor_setting.dart @@ -15,9 +15,8 @@ class EditorSetting { EditorSetting({required this.chunkSize, required this.export}); EditorSetting.parse(Parser parser) - : this( - chunkSize: - parser.getSingleChildOrNullAs('chunksize', ChunkSize.parse), - export: parser.getSingleChildOrNullAs('export', Export.parse), - ); + : this( + chunkSize: parser.getSingleChildOrNullAs('chunksize', ChunkSize.parse), + export: parser.getSingleChildOrNullAs('export', Export.parse), + ); } diff --git a/packages/tiled/lib/src/editor_setting/export.dart b/packages/tiled/lib/src/editor_setting/export.dart index a00cba6..55ffa03 100644 --- a/packages/tiled/lib/src/editor_setting/export.dart +++ b/packages/tiled/lib/src/editor_setting/export.dart @@ -17,8 +17,8 @@ class Export { }); Export.parse(Parser parser) - : this( - format: parser.getString('format'), - target: parser.getString('target'), - ); + : this( + format: parser.getString('format'), + target: parser.getString('target'), + ); } diff --git a/packages/tiled/lib/src/objects/text.dart b/packages/tiled/lib/src/objects/text.dart index 3dc8ddb..fb41407 100644 --- a/packages/tiled/lib/src/objects/text.dart +++ b/packages/tiled/lib/src/objects/text.dart @@ -70,19 +70,20 @@ class Text { }); Text.parse(Parser parser) - : this( - fontFamily: parser.getString('fontFamily', defaults: 'sans-serif'), - pixelSize: parser.getInt('pixelSize', defaults: 16), - color: parser.getString('color', defaults: '#000000'), - text: parser.getInnerTextOrNull() ?? - parser.getString('text', defaults: ''), - hAlign: parser.getHAlign('hAlign', defaults: HAlign.left), - vAlign: parser.getVAlign('vAlign', defaults: VAlign.top), - bold: parser.getBool('bold', defaults: false), - italic: parser.getBool('italic', defaults: false), - underline: parser.getBool('underline', defaults: false), - strikeout: parser.getBool('strikeout', defaults: false), - kerning: parser.getBool('kerning', defaults: true), - wrap: parser.getBool('wrap', defaults: false), - ); + : this( + fontFamily: parser.getString('fontFamily', defaults: 'sans-serif'), + pixelSize: parser.getInt('pixelSize', defaults: 16), + color: parser.getString('color', defaults: '#000000'), + text: + parser.getInnerTextOrNull() ?? + parser.getString('text', defaults: ''), + hAlign: parser.getHAlign('hAlign', defaults: HAlign.left), + vAlign: parser.getVAlign('vAlign', defaults: VAlign.top), + bold: parser.getBool('bold', defaults: false), + italic: parser.getBool('italic', defaults: false), + underline: parser.getBool('underline', defaults: false), + strikeout: parser.getBool('strikeout', defaults: false), + kerning: parser.getBool('kerning', defaults: true), + wrap: parser.getBool('wrap', defaults: false), + ); } diff --git a/packages/tiled/lib/src/template.dart b/packages/tiled/lib/src/template.dart index 3f85c9b..aea066d 100644 --- a/packages/tiled/lib/src/template.dart +++ b/packages/tiled/lib/src/template.dart @@ -29,8 +29,8 @@ class Template { }); Template.parse(Parser parser) - : this( - tileSet: parser.getSingleChildOrNullAs('tileset', Tileset.parse), - object: parser.getSingleChildOrNullAs('object', TiledObject.parse), - ); + : this( + tileSet: parser.getSingleChildOrNullAs('tileset', Tileset.parse), + object: parser.getSingleChildOrNullAs('object', TiledObject.parse), + ); } diff --git a/packages/tiled/lib/src/tiled_map.dart b/packages/tiled/lib/src/tiled_map.dart index faa84e9..9efb75b 100644 --- a/packages/tiled/lib/src/tiled_map.dart +++ b/packages/tiled/lib/src/tiled_map.dart @@ -136,9 +136,7 @@ class TiledMap { String contents, Future Function(String key) tsxProviderFunction, ) async { - final tsxSourcePaths = XmlDocument.parse(contents) - .rootElement - .children + final tsxSourcePaths = XmlDocument.parse(contents).rootElement.children .whereType() .where((element) => element.name.local == 'tileset') .map((e) => e.getAttribute('source')); @@ -248,8 +246,10 @@ class TiledMap { .map(tilesetByTileGId) .toSet() // The different gid can be in the same tileset .expand( - (tileset) => - [tileset.image, ...tileset.tiles.map((tile) => tile.image)], + (tileset) => [ + tileset.image, + ...tileset.tiles.map((tile) => tile.image), + ], ) // ignore: deprecated_member_use .whereNotNull() diff --git a/packages/tiled/lib/src/tileset/grid.dart b/packages/tiled/lib/src/tileset/grid.dart index 77a9e6f..935c852 100644 --- a/packages/tiled/lib/src/tileset/grid.dart +++ b/packages/tiled/lib/src/tileset/grid.dart @@ -24,9 +24,9 @@ class Grid { }); Grid.parse(Parser parser) - : this( - width: parser.getInt('width'), - height: parser.getInt('height'), - orientation: parser.getGridOrientation('orientation'), - ); + : this( + width: parser.getInt('width'), + height: parser.getInt('height'), + orientation: parser.getGridOrientation('orientation'), + ); } diff --git a/packages/tiled/lib/src/tileset/terrain.dart b/packages/tiled/lib/src/tileset/terrain.dart index 04fed32..375d087 100644 --- a/packages/tiled/lib/src/tileset/terrain.dart +++ b/packages/tiled/lib/src/tileset/terrain.dart @@ -21,9 +21,9 @@ class Terrain { }); Terrain.parse(Parser parser) - : this( - name: parser.getString('name'), - tile: parser.getInt('name'), - properties: parser.getProperties(), - ); + : this( + name: parser.getString('name'), + tile: parser.getInt('name'), + properties: parser.getProperties(), + ); } diff --git a/packages/tiled/lib/src/tileset/tile.dart b/packages/tiled/lib/src/tileset/tile.dart index 04b37cc..ab7d4ae 100644 --- a/packages/tiled/lib/src/tileset/tile.dart +++ b/packages/tiled/lib/src/tileset/tile.dart @@ -53,37 +53,36 @@ class Tile { String? get class_ => type; Tile.parse(Parser parser) - : this( - localId: parser.getInt('id'), + : this( + localId: parser.getInt('id'), - /// Tiled 1.9 "type" has been moved to "class" - type: - parser.getStringOrNull('class') ?? parser.getStringOrNull('type'), + /// Tiled 1.9 "type" has been moved to "class" + type: parser.getStringOrNull('class') ?? parser.getStringOrNull('type'), - probability: parser.getDouble('probability', defaults: 0), - terrain: parser - .getStringOrNull('terrain') - ?.split(',') - .map((str) => str.isEmpty ? null : int.parse(str)) - .toList() ?? + probability: parser.getDouble('probability', defaults: 0), + terrain: + parser + .getStringOrNull('terrain') + ?.split(',') + .map((str) => str.isEmpty ? null : int.parse(str)) + .toList() ?? + [], + image: parser.getSingleChildOrNullAs('image', TiledImage.parse), + imageRect: Rectangle( + parser.getDoubleOrNull('x') ?? 0, + parser.getDoubleOrNull('y') ?? 0, + parser.getDoubleOrNull('width') ?? 0, + parser.getDoubleOrNull('height') ?? 0, + ), + objectGroup: parser.getSingleChildOrNullAs('objectgroup', Layer.parse), + animation: parser.formatSpecificParsing( + (json) => json.getChildrenAs('animation', Frame.parse), + (xml) => + xml + .getSingleChildOrNull('animation') + ?.getChildrenAs('frame', Frame.parse) ?? [], - image: parser.getSingleChildOrNullAs('image', TiledImage.parse), - imageRect: Rectangle( - parser.getDoubleOrNull('x') ?? 0, - parser.getDoubleOrNull('y') ?? 0, - parser.getDoubleOrNull('width') ?? 0, - parser.getDoubleOrNull('height') ?? 0, - ), - objectGroup: - parser.getSingleChildOrNullAs('objectgroup', Layer.parse), - animation: parser.formatSpecificParsing( - (json) => json.getChildrenAs('animation', Frame.parse), - (xml) => - xml - .getSingleChildOrNull('animation') - ?.getChildrenAs('frame', Frame.parse) ?? - [], - ), - properties: parser.getProperties(), - ); + ), + properties: parser.getProperties(), + ); } diff --git a/packages/tiled/lib/src/tileset/tile_offset.dart b/packages/tiled/lib/src/tileset/tile_offset.dart index e02422b..befd90c 100644 --- a/packages/tiled/lib/src/tileset/tile_offset.dart +++ b/packages/tiled/lib/src/tileset/tile_offset.dart @@ -21,8 +21,8 @@ class TileOffset { }); TileOffset.parse(Parser parser) - : this( - x: parser.getInt('x', defaults: 0), - y: parser.getInt('y', defaults: 0), - ); + : this( + x: parser.getInt('x', defaults: 0), + y: parser.getInt('y', defaults: 0), + ); } diff --git a/packages/tiled/lib/src/tileset/tileset.dart b/packages/tiled/lib/src/tileset/tileset.dart index 4f896c2..ac72aef 100644 --- a/packages/tiled/lib/src/tileset/tileset.dart +++ b/packages/tiled/lib/src/tileset/tileset.dart @@ -96,12 +96,12 @@ class Tileset { this.transparentColor, this.type = TilesetType.tileset, }) : tiles = _generateTiles( - tiles, - tileCount ?? 0, - columns, - tileWidth, - tileHeight, - ) { + tiles, + tileCount ?? 0, + columns, + tileWidth, + tileHeight, + ) { tileCount = this.tiles.length; } @@ -126,8 +126,10 @@ class Tileset { final image = parser.getSingleChildOrNullAs('image', TiledImage.parse); final grid = parser.getSingleChildOrNullAs('grid', Grid.parse); - final tileOffset = - parser.getSingleChildOrNullAs('tileoffset', TileOffset.parse); + final tileOffset = parser.getSingleChildOrNullAs( + 'tileoffset', + TileOffset.parse, + ); final properties = parser.getProperties(); final terrains = parser.getChildrenAs('terrains', Terrain.parse); final tiles = parser.formatSpecificParsing( diff --git a/packages/tiled/lib/src/tileset/wang/wang_color.dart b/packages/tiled/lib/src/tileset/wang/wang_color.dart index 82ed3fc..9ee75d4 100644 --- a/packages/tiled/lib/src/tileset/wang/wang_color.dart +++ b/packages/tiled/lib/src/tileset/wang/wang_color.dart @@ -30,11 +30,11 @@ class WangColor { }); WangColor.parse(Parser parser) - : this( - name: parser.getString('name'), - color: parser.getString('color'), - tile: parser.getInt('tile'), - probability: parser.getDouble('probability', defaults: 0), - properties: parser.getProperties(), - ); + : this( + name: parser.getString('name'), + color: parser.getString('color'), + tile: parser.getInt('tile'), + probability: parser.getDouble('probability', defaults: 0), + properties: parser.getProperties(), + ); } diff --git a/packages/tiled/lib/src/tileset/wang/wang_tile.dart b/packages/tiled/lib/src/tileset/wang/wang_tile.dart index 3e0252e..2f718e0 100644 --- a/packages/tiled/lib/src/tileset/wang/wang_tile.dart +++ b/packages/tiled/lib/src/tileset/wang/wang_tile.dart @@ -37,19 +37,18 @@ class WangTile { }); WangTile.parse(Parser parser) - : this( - tileId: parser.getInt('tileid'), - wangId: parseWangIds( - parser.formatSpecificParsing( - (json) => json.getIntList('wangid'), - (xml) => - xml.getString('wangid').split(',').map(int.parse).toList(), - ), + : this( + tileId: parser.getInt('tileid'), + wangId: parseWangIds( + parser.formatSpecificParsing( + (json) => json.getIntList('wangid'), + (xml) => xml.getString('wangid').split(',').map(int.parse).toList(), ), - hFlip: parser.getBool('hflip', defaults: false), - vFlip: parser.getBool('vflip', defaults: false), - dFlip: parser.getBool('dflip', defaults: false), - ); + ), + hFlip: parser.getBool('hflip', defaults: false), + vFlip: parser.getBool('vflip', defaults: false), + dFlip: parser.getBool('dflip', defaults: false), + ); static List parseWangIds(List value) { final bytes = Uint8List.fromList(value); diff --git a/packages/tiled/test/complexmap_infinite_test.dart b/packages/tiled/test/complexmap_infinite_test.dart index ca5bf49..3d56175 100644 --- a/packages/tiled/test/complexmap_infinite_test.dart +++ b/packages/tiled/test/complexmap_infinite_test.dart @@ -7,9 +7,9 @@ void main() { late TiledMap complexMapInfinite; setUp(() { - return File('./test/fixtures/complexmap_infinite.tmx') - .readAsString() - .then((xml) { + return File('./test/fixtures/complexmap_infinite.tmx').readAsString().then(( + xml, + ) { complexMapInfinite = TileMapParser.parseTmx(xml); }); }); diff --git a/packages/tiled/test/isometric_staggered_test.dart b/packages/tiled/test/isometric_staggered_test.dart index 4e13832..f0a542a 100644 --- a/packages/tiled/test/isometric_staggered_test.dart +++ b/packages/tiled/test/isometric_staggered_test.dart @@ -8,16 +8,16 @@ void main() { late TiledMap mapIsoStaggeredTmx; setUp(() { - return File('./test/fixtures/isometric_staggered_grass_and_water.json') - .readAsString() - .then((xml) { + return File( + './test/fixtures/isometric_staggered_grass_and_water.json', + ).readAsString().then((xml) { mapIsoStaggeredJson = TileMapParser.parseJson(xml); }); }); setUp(() { - return File('./test/fixtures/isometric_staggered_grass_and_water.tmx') - .readAsString() - .then((xml) { + return File( + './test/fixtures/isometric_staggered_grass_and_water.tmx', + ).readAsString().then((xml) { mapIsoStaggeredTmx = TileMapParser.parseTmx(xml); }); }); diff --git a/packages/tiled/test/isometric_test.dart b/packages/tiled/test/isometric_test.dart index 9c28c6a..86ded0e 100644 --- a/packages/tiled/test/isometric_test.dart +++ b/packages/tiled/test/isometric_test.dart @@ -7,9 +7,9 @@ void main() { late TiledMap mapIso; setUp(() { - return File('./test/fixtures/isometric_grass_and_water.tmx') - .readAsString() - .then((xml) { + return File( + './test/fixtures/isometric_grass_and_water.tmx', + ).readAsString().then((xml) { mapIso = TileMapParser.parseTmx(xml); }); }); diff --git a/packages/tiled/test/layer_test.dart b/packages/tiled/test/layer_test.dart index d967704..3fd0945 100644 --- a/packages/tiled/test/layer_test.dart +++ b/packages/tiled/test/layer_test.dart @@ -11,10 +11,11 @@ void main() { final f1 = File('./test/fixtures/test.tmx').readAsString().then((xml) { mapTmx = TileMapParser.parseTmx(xml); }); - final f2 = - File('./test/fixtures/test_base64_gzip.tmx').readAsString().then((xml) { - mapTmxBase64Gzip = TileMapParser.parseTmx(xml); - }); + final f2 = File('./test/fixtures/test_base64_gzip.tmx').readAsString().then( + (xml) { + mapTmxBase64Gzip = TileMapParser.parseTmx(xml); + }, + ); return Future.wait([f1, f2]); }); diff --git a/packages/tiled/test/parser_compare_test.dart b/packages/tiled/test/parser_compare_test.dart index 4e8b421..88e8b12 100644 --- a/packages/tiled/test/parser_compare_test.dart +++ b/packages/tiled/test/parser_compare_test.dart @@ -34,9 +34,9 @@ void main() { late TiledMap map4; setUp(() { - return File('./test/fixtures/testbase64only.json') - .readAsString() - .then((xml) { + return File('./test/fixtures/testbase64only.json').readAsString().then(( + xml, + ) { map4 = TileMapParser.parseJson(xml); }); }); diff --git a/packages/tiled/test/parser_test.dart b/packages/tiled/test/parser_test.dart index 3ec9f5e..1bcf577 100644 --- a/packages/tiled/test/parser_test.dart +++ b/packages/tiled/test/parser_test.dart @@ -239,9 +239,9 @@ void main() { }); test('has the right text object with ID 5', () { - final textObject = (og as ObjectGroup) - .objects - .firstWhereOrNull((element) => element.id == 5); + final textObject = (og as ObjectGroup).objects.firstWhereOrNull( + (element) => element.id == 5, + ); final text = textObject?.text; expect(text?.wrap, equals(true)); expect(text?.text, equals('Hello World')); @@ -310,9 +310,9 @@ void main() { group('External tileset tile parsing', () { test('it parsed the first tile', () { - return File('./test/fixtures/external_tileset_map.tmx') - .readAsString() - .then((xml) { + return File( + './test/fixtures/external_tileset_map.tmx', + ).readAsString().then((xml) { final map = TileMapParser.parseTmx( xml, tsxList: [CustomTsxProvider.parse('tileid_over_tilecount.tsx')], @@ -355,9 +355,9 @@ void main() { group('Map Parses Multiple Tilesets', () { late TiledMap map; setUp(() { - return File('./test/fixtures/map_with_multiple_tilesets.tmx') - .readAsString() - .then((xml) { + return File( + './test/fixtures/map_with_multiple_tilesets.tmx', + ).readAsString().then((xml) { final tilemapXml = XmlDocument.parse(xml).rootElement; final tsxSourcePaths = tilemapXml.children .whereType() @@ -426,8 +426,9 @@ void main() { group('Parser tiles', () { test('support empty terrain values', () { - final xml = File('./test/fixtures/map_with_empty_terrains.tmx') - .readAsStringSync(); + final xml = File( + './test/fixtures/map_with_empty_terrains.tmx', + ).readAsStringSync(); final tiledMap = TileMapParser.parseTmx(xml); final tileset = tiledMap.tilesets.first; diff --git a/packages/tiled/test/tile_test.dart b/packages/tiled/test/tile_test.dart index c91e049..ac46f34 100644 --- a/packages/tiled/test/tile_test.dart +++ b/packages/tiled/test/tile_test.dart @@ -40,16 +40,16 @@ void main() { final f1 = File('./test/fixtures/multi_image_tileset.tsx') .readAsString() .then((xml) { - final tilesetXml = XmlDocument.parse(xml).rootElement; - tileset1 = Tileset.parse(XmlParser(tilesetXml)); - }); + final tilesetXml = XmlDocument.parse(xml).rootElement; + tileset1 = Tileset.parse(XmlParser(tilesetXml)); + }); final f2 = File('./test/fixtures/tileid_over_tilecount.tsx') .readAsString() .then((xml) { - final tilesetXml = XmlDocument.parse(xml).rootElement; - tileset2 = Tileset.parse(XmlParser(tilesetXml)); - }); + final tilesetXml = XmlDocument.parse(xml).rootElement; + tileset2 = Tileset.parse(XmlParser(tilesetXml)); + }); return Future.wait([f1, f2]); }); diff --git a/packages/tiled/test/tileset_test.dart b/packages/tiled/test/tileset_test.dart index 516fd97..f2dd509 100644 --- a/packages/tiled/test/tileset_test.dart +++ b/packages/tiled/test/tileset_test.dart @@ -25,9 +25,9 @@ void main() { group('Tileset.fromXML', () { late Tileset tileset; setUp(() { - return File('./test/fixtures/map_with_spacing_margin.tmx') - .readAsString() - .then((xml) { + return File( + './test/fixtures/map_with_spacing_margin.tmx', + ).readAsString().then((xml) { final xmlRoot = XmlDocument.parse(xml).rootElement; final tilesetXml = xmlRoot.findAllElements('tileset').first; tileset = Tileset.parse(XmlParser(tilesetXml)); @@ -40,9 +40,9 @@ void main() { group('Standalone Tileset with ObjectGroups', () { late Tileset tileset; setUp(() { - return File('./test/fixtures/map_with_tile_collision.tsx') - .readAsString() - .then((xml) { + return File( + './test/fixtures/map_with_tile_collision.tsx', + ).readAsString().then((xml) { final tilesetXml = XmlDocument.parse(xml).rootElement; tileset = Tileset.parse(XmlParser(tilesetXml)); }); From b4864b4ab1cb910954efc5c88dfc11088c1ba9b9 Mon Sep 17 00:00:00 2001 From: CodeDoctorDE Date: Mon, 6 Jul 2026 22:52:05 +0200 Subject: [PATCH 3/5] chore: simplify melos config --- CONTRIBUTING.md | 4 ++-- pubspec.yaml | 44 +------------------------------------------- 2 files changed, 3 insertions(+), 45 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1c1f27f..c8ce4f8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,8 +47,8 @@ For a contribution to be accepted: - Examples should always be updated or added.* - Tests should always be updated or added.* - Format the Dart code accordingly with `flutter format`. -- Your code should pass the analyzer checks `melos run analyze`. -- Your code should pass all tests `melos run test`. +- Your code should pass the analyzer checks `melos analyze`. +- Your code should pass all tests `melos test`. - Start your PR title with a [conventional commit] type (`feat:`, `fix:` etc). diff --git a/pubspec.yaml b/pubspec.yaml index 87e0252..543f7d9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,54 +8,12 @@ workspace: - packages/tiled dev_dependencies: - melos: ^8.0.0 + melos: ^8.1.0 melos: repository: https://github.com/flame-engine/tiled.dart - command: - version: - # Generate commit links in package changelogs. - linkToCommits: true - # Only allow versioning to happen on main branch. - branch: main - # Additionally build a changelog at the root of the workspace. - workspaceChangelog: true - scripts: - lint:all: - run: dart run melos run analyze && dart run melos run format - description: Run all static analysis checks. - - analyze: - run: | - dart run melos exec -c 10 -- \ - flutter analyze --fatal-infos - description: Run `flutter analyze` for all packages. - - format: - run: dart run melos exec dart format . --fix - description: Run `dart format` for all packages. - - format-check: - run: dart run melos exec dart format . --set-exit-if-changed - description: Run `dart format` checks for all packages. - - dartdoc: - run: dart run melos exec flutter pub run dartdoc - description: Run dartdoc checks for all packages. - - test:select: - run: dart run melos exec -- flutter test - packageFilters: - dirExists: - - test - description: Run `flutter test` for selected packages. - - test: - run: dart run melos run test:select --no-select - description: Run all Flutter tests in this project. - coverage: run: | dart run melos exec -- flutter test --coverage && From c9f8c53189f712a40d5e08f969ccd0c464ac1158 Mon Sep 17 00:00:00 2001 From: CodeDoctorDE Date: Mon, 6 Jul 2026 22:52:57 +0200 Subject: [PATCH 4/5] chore: update ci for melos 8 --- .github/workflows/cicd.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index ba51894..7dbab62 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -24,10 +24,8 @@ jobs: - uses: actions/checkout@v3 - uses: subosito/flutter-action@v2 - uses: bluefireteam/melos-action@v3 - - name: "Analyze with latest stable" - uses: invertase/github-action-dart-analyzer@v2.0.0 - with: - fatal-infos: true + - name: Run analysis + run: melos analyze --fatal-infos format: runs-on: ubuntu-latest @@ -38,7 +36,7 @@ jobs: cache: true - uses: bluefireteam/melos-action@v3 - name: Run format - run: melos format-check + run: melos format --set-exit-if-changed # END LINTING STAGE # BEGIN TESTING STAGE From a54502b4f3151df42f38712e72a98e0b49b4929b Mon Sep 17 00:00:00 2001 From: CodeDoctorDE Date: Wed, 8 Jul 2026 14:40:38 +0200 Subject: [PATCH 5/5] chore: update to melos 8.2.0 --- .github/workflows/cicd.yaml | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 7dbab62..d513449 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -25,7 +25,7 @@ jobs: - uses: subosito/flutter-action@v2 - uses: bluefireteam/melos-action@v3 - name: Run analysis - run: melos analyze --fatal-infos + run: melos analyze format: runs-on: ubuntu-latest diff --git a/pubspec.yaml b/pubspec.yaml index 543f7d9..0f7901e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,7 +8,7 @@ workspace: - packages/tiled dev_dependencies: - melos: ^8.1.0 + melos: ^8.2.0 melos: repository: https://github.com/flame-engine/tiled.dart