From a6327bd570f83b24f024e5b302456114ce726682 Mon Sep 17 00:00:00 2001 From: CodeDoctorDE Date: Sun, 22 Jun 2025 15:37:12 +0200 Subject: [PATCH 1/4] Add gamemode initialization --- api/lib/src/event/process/client.dart | 2 +- api/lib/src/event/server.dart | 6 +- api/lib/src/models/config.dart | 9 + api/lib/src/models/config.mapper.dart | 19 +- api/lib/src/models/data.dart | 226 ++++++++-------- api/lib/src/models/info.dart | 2 +- api/lib/src/models/info.mapper.dart | 14 +- api/lib/src/models/mode.dart | 2 - api/lib/src/models/mode.mapper.dart | 9 - api/lib/src/models/table.dart | 30 ++- api/lib/src/models/table.mapper.dart | 2 + api/pubspec.yaml | 2 +- app/lib/bloc/world/bloc.dart | 6 +- app/lib/main.dart | 3 +- app/pubspec.lock | 24 +- docs/package.json | 2 +- docs/pnpm-lock.yaml | 373 +++++++++++++------------- plugin/lib/setonix_plugin.dart | 8 +- plugin/lib/src/plugin.dart | 9 + server/lib/src/bloc.dart | 6 +- server/lib/src/config.dart | 6 + server/lib/src/server.dart | 7 +- 22 files changed, 420 insertions(+), 347 deletions(-) diff --git a/api/lib/src/event/process/client.dart b/api/lib/src/event/process/client.dart index f7cff5aa..8fea3ef4 100644 --- a/api/lib/src/event/process/client.dart +++ b/api/lib/src/event/process/client.dart @@ -295,7 +295,7 @@ Future processClientEvent( ? null : assetManager.getPack(location.namespace)?.getMode(location.id); return ServerResponse.builder( - WorldInitialized.fromMode(mode, state), channel); + WorldInitialized.fromMode(location, mode, state), channel); case AuthenticateRequest(): final challenge = challengeManager?.getChallenge(channel); if (challenge == null) return null; diff --git a/api/lib/src/event/server.dart b/api/lib/src/event/server.dart index 591b0b21..183dec24 100644 --- a/api/lib/src/event/server.dart +++ b/api/lib/src/event/server.dart @@ -27,11 +27,11 @@ final class WorldInitialized extends ServerWorldEvent this.clearUserInterface = false, }); - factory WorldInitialized.fromMode(GameMode? mode, WorldState state) => + factory WorldInitialized.fromMode( + ItemLocation? location, GameMode? mode, WorldState state) => WorldInitialized( clearUserInterface: true, - info: - state.info.copyWith(teams: mode?.teams ?? {}, script: mode?.script), + info: state.info.copyWith(teams: mode?.teams ?? {}, script: location), table: mode?.tables[state.tableName] ?? GameTable(), teamMembers: const {}, ); diff --git a/api/lib/src/models/config.dart b/api/lib/src/models/config.dart index ec35436c..467ed1b7 100644 --- a/api/lib/src/models/config.dart +++ b/api/lib/src/models/config.dart @@ -41,6 +41,9 @@ final class SetonixConfig with SetonixConfigMappable { final String? endpointSecret; static const String defaultEndpointSecret = ''; static const String envEndpointSecret = 'SETONIX_ENDPOINT_SECRET'; + final String? gameMode; + static const String defaultGameMode = ''; + static const String envGameMode = 'SETONIX_GAME_MODE'; const SetonixConfig({ this.host, @@ -55,6 +58,7 @@ final class SetonixConfig with SetonixConfigMappable { this.accountRequired, this.apiEndpoint, this.endpointSecret, + this.gameMode, }); static const defaultConfig = SetonixConfig( @@ -70,6 +74,7 @@ final class SetonixConfig with SetonixConfigMappable { accountRequired: defaultAccountRequired, apiEndpoint: defaultApiEndpoint, endpointSecret: defaultEndpointSecret, + gameMode: defaultGameMode, ); static SetonixConfig fromEnvironment() { @@ -116,6 +121,9 @@ final class SetonixConfig with SetonixConfigMappable { ? String.fromEnvironment(envEndpointSecret, defaultValue: defaultEndpointSecret) : null, + gameMode: bool.hasEnvironment(envGameMode) + ? String.fromEnvironment(envGameMode, defaultValue: defaultGameMode) + : null, ); } @@ -132,5 +140,6 @@ final class SetonixConfig with SetonixConfigMappable { whitelistEnabled: other.whitelistEnabled ?? whitelistEnabled, apiEndpoint: other.apiEndpoint ?? apiEndpoint, endpointSecret: other.endpointSecret ?? endpointSecret, + gameMode: other.gameMode ?? gameMode, ); } diff --git a/api/lib/src/models/config.mapper.dart b/api/lib/src/models/config.mapper.dart index 1ca651ea..dd564e04 100644 --- a/api/lib/src/models/config.mapper.dart +++ b/api/lib/src/models/config.mapper.dart @@ -56,6 +56,9 @@ class SetonixConfigMapper extends ClassMapperBase { static String? _$endpointSecret(SetonixConfig v) => v.endpointSecret; static const Field _f$endpointSecret = Field('endpointSecret', _$endpointSecret, opt: true); + static String? _$gameMode(SetonixConfig v) => v.gameMode; + static const Field _f$gameMode = + Field('gameMode', _$gameMode, opt: true); @override final MappableFields fields = const { @@ -71,6 +74,7 @@ class SetonixConfigMapper extends ClassMapperBase { #accountRequired: _f$accountRequired, #apiEndpoint: _f$apiEndpoint, #endpointSecret: _f$endpointSecret, + #gameMode: _f$gameMode, }; static SetonixConfig _instantiate(DecodingData data) { @@ -86,7 +90,8 @@ class SetonixConfigMapper extends ClassMapperBase { whitelistEnabled: data.dec(_f$whitelistEnabled), accountRequired: data.dec(_f$accountRequired), apiEndpoint: data.dec(_f$apiEndpoint), - endpointSecret: data.dec(_f$endpointSecret)); + endpointSecret: data.dec(_f$endpointSecret), + gameMode: data.dec(_f$gameMode)); } @override @@ -154,7 +159,8 @@ abstract class SetonixConfigCopyWith<$R, $In extends SetonixConfig, $Out> bool? whitelistEnabled, bool? accountRequired, String? apiEndpoint, - String? endpointSecret}); + String? endpointSecret, + String? gameMode}); SetonixConfigCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); } @@ -179,7 +185,8 @@ class _SetonixConfigCopyWithImpl<$R, $Out> Object? whitelistEnabled = $none, Object? accountRequired = $none, Object? apiEndpoint = $none, - Object? endpointSecret = $none}) => + Object? endpointSecret = $none, + Object? gameMode = $none}) => $apply(FieldCopyWithData({ if (host != $none) #host: host, if (port != $none) #port: port, @@ -192,7 +199,8 @@ class _SetonixConfigCopyWithImpl<$R, $Out> if (whitelistEnabled != $none) #whitelistEnabled: whitelistEnabled, if (accountRequired != $none) #accountRequired: accountRequired, if (apiEndpoint != $none) #apiEndpoint: apiEndpoint, - if (endpointSecret != $none) #endpointSecret: endpointSecret + if (endpointSecret != $none) #endpointSecret: endpointSecret, + if (gameMode != $none) #gameMode: gameMode })); @override SetonixConfig $make(CopyWithData data) => SetonixConfig( @@ -208,7 +216,8 @@ class _SetonixConfigCopyWithImpl<$R, $Out> data.get(#whitelistEnabled, or: $value.whitelistEnabled), accountRequired: data.get(#accountRequired, or: $value.accountRequired), apiEndpoint: data.get(#apiEndpoint, or: $value.apiEndpoint), - endpointSecret: data.get(#endpointSecret, or: $value.endpointSecret)); + endpointSecret: data.get(#endpointSecret, or: $value.endpointSecret), + gameMode: data.get(#gameMode, or: $value.gameMode)); @override SetonixConfigCopyWith<$R2, SetonixConfig, $Out2> $chain<$R2, $Out2>( diff --git a/api/lib/src/models/data.dart b/api/lib/src/models/data.dart index 03bdaa70..6327cfbf 100644 --- a/api/lib/src/models/data.dart +++ b/api/lib/src/models/data.dart @@ -32,13 +32,27 @@ class SetonixData extends ArchiveData { final String identifier; SetonixData(super.archive, {super.state, this.identifier = ''}); - SetonixData.empty() - : identifier = '', - super.empty(); + SetonixData.empty() : identifier = '', super.empty(); SetonixData.fromData(super.data, [String? identifier]) - : identifier = identifier ?? createPackIdentifier(data), - super.fromBytes(); + : identifier = identifier ?? createPackIdentifier(data), + super.fromBytes(); + + factory SetonixData.fromMode(ItemLocation? location, GameMode? mode) { + var data = SetonixData.empty().setInfo( + GameInfo( + packs: [?location?.namespace], + script: location, + teams: mode?.teams ?? const {}, + ), + ); + for (final entry + in mode?.tables.entries ?? + Iterable>.empty()) { + data = data.setTable(entry.value, entry.key); + } + return data; + } GameTable? getTable([String name = '']) { final data = getAsset('$kGameTablePath/$name.json'); @@ -50,10 +64,8 @@ class SetonixData extends ArchiveData { GameTable getTableOrDefault([String name = '']) => getTable(name) ?? GameTable(); - SetonixData setTable(GameTable table, [String name = '']) => setAsset( - '$kGameTablePath/$name.json', - utf8.encode(table.toJson()), - ); + SetonixData setTable(GameTable table, [String name = '']) => + setAsset('$kGameTablePath/$name.json', utf8.encode(table.toJson())); SetonixData removeTable(String name) => removeAsset('$kGameTablePath/$name.json'); @@ -66,10 +78,8 @@ class SetonixData extends ArchiveData { return utf8.decode(data); } - SetonixData setNote(String name, String content) => setAsset( - '$kGameNotesPath/$name.md', - utf8.encode(content), - ); + SetonixData setNote(String name, String content) => + setAsset('$kGameNotesPath/$name.md', utf8.encode(content)); SetonixData removeNote(String name) => removeAsset('$kGameNotesPath/$name.md'); @@ -136,18 +146,19 @@ class SetonixData extends ArchiveData { } } - PackItem? getFigureItem(String id, - [String namespace = '']) => - PackItem.wrap( - pack: this, - namespace: namespace, - id: id, - item: getFigure(id), - ); + PackItem? getFigureItem( + String id, [ + String namespace = '', + ]) => PackItem.wrap( + pack: this, + namespace: namespace, + id: id, + item: getFigure(id), + ); - Iterable> getFigureItems( - [String namespace = '']) => - getFigures().map((e) => getFigureItem(e, namespace)).nonNulls; + Iterable> getFigureItems([ + String namespace = '', + ]) => getFigures().map((e) => getFigureItem(e, namespace)).nonNulls; Iterable getBoards() => getAssets(kPackBoardsPath, true); @@ -176,10 +187,8 @@ class SetonixData extends ArchiveData { SetonixData removeBoard(String id) => removeAsset('$kPackBoardsPath/$id.json'); - SetonixData setBoard(String id, BoardDefinition definition) => setAsset( - '$kPackBoardsPath/$id.json', - utf8.encode(definition.toJson()), - ); + SetonixData setBoard(String id, BoardDefinition definition) => + setAsset('$kPackBoardsPath/$id.json', utf8.encode(definition.toJson())); Iterable getBackgrounds() => getAssets('$kPackBackgroundsPath/', true); @@ -195,18 +204,19 @@ class SetonixData extends ArchiveData { } } - PackItem? getBackgroundItem(String id, - [String namespace = '']) => - PackItem.wrap( - pack: this, - namespace: namespace, - id: id, - item: getBackground(id), - ); + PackItem? getBackgroundItem( + String id, [ + String namespace = '', + ]) => PackItem.wrap( + pack: this, + namespace: namespace, + id: id, + item: getBackground(id), + ); - Iterable> getBackgroundItems( - [String namespace = '']) => - getBackgrounds().map((e) => getBackgroundItem(e, namespace)).nonNulls; + Iterable> getBackgroundItems([ + String namespace = '', + ]) => getBackgrounds().map((e) => getBackgroundItem(e, namespace)).nonNulls; Uint8List? getTexture(String path) => getAsset('$kPackTexturesPath/$path'); @@ -231,27 +241,27 @@ class SetonixData extends ArchiveData { PackTranslation getTranslationOrDefault([String id = kFallbackLocale]) => getTranslation(id) ?? PackTranslation(); - SetonixData setMetadata(FileMetadata metadata) => setAsset( - kPackMetadataPath, - utf8.encode(metadata.toJson()), - ); + SetonixData setMetadata(FileMetadata metadata) => + setAsset(kPackMetadataPath, utf8.encode(metadata.toJson())); @override SetonixData updateState(ArchiveState state) => SetonixData(archive, state: state); - TranslationsStore getTranslationsStore( - {String? Function() getLocale = getDefaultLocale}) => - TranslationsStore( - translations: getAllTranslations(), - getLocale: getLocale, - ); + TranslationsStore getTranslationsStore({ + String? Function() getLocale = getDefaultLocale, + }) => TranslationsStore( + translations: getAllTranslations(), + getLocale: getLocale, + ); SetonixData removeFigure(String figure) => removeAsset('$kPackFiguresPath/$figure.json'); SetonixData setFigure(String figure, FigureDefinition definition) => setAsset( - '$kPackFiguresPath/$figure.json', utf8.encode(definition.toJson())); + '$kPackFiguresPath/$figure.json', + utf8.encode(definition.toJson()), + ); SetonixData removeDeck(String id) => removeAsset('$kPackDecksPath/$id.json'); @@ -262,29 +272,32 @@ class SetonixData extends ArchiveData { removeAsset('$kPackBackgroundsPath/$background.json'); SetonixData setBackground( - String background, BackgroundDefinition definition) => - setAsset('$kPackBackgroundsPath/$background.json', - utf8.encode(definition.toJson())); - - SetonixData setTranslation(PackTranslation translation, - [String locale = kFallbackLocale]) => - setAsset( - '$kPackTranslationsPath/$locale.json', - utf8.encode(translation.toJson()), - ); + String background, + BackgroundDefinition definition, + ) => setAsset( + '$kPackBackgroundsPath/$background.json', + utf8.encode(definition.toJson()), + ); + + SetonixData setTranslation( + PackTranslation translation, [ + String locale = kFallbackLocale, + ]) => setAsset( + '$kPackTranslationsPath/$locale.json', + utf8.encode(translation.toJson()), + ); Iterable getTextures() => getAssets(kPackTexturesPath); - Map getTexturesData() => - Map.fromEntries(getTextures().map((e) { - final data = getTexture(e); - if (data == null) return null; - return MapEntry(e, data); - }).nonNulls); - - SetonixData setTexture(String texture, Uint8List data) => setAsset( - '$kPackTexturesPath/$texture', - data, - ); + Map getTexturesData() => Map.fromEntries( + getTextures().map((e) { + final data = getTexture(e); + if (data == null) return null; + return MapEntry(e, data); + }).nonNulls, + ); + + SetonixData setTexture(String texture, Uint8List data) => + setAsset('$kPackTexturesPath/$texture', data); SetonixData removeTexture(String texture) => removeAsset('$kPackTexturesPath/$texture'); @@ -308,24 +321,28 @@ class SetonixData extends ArchiveData { } } - Map getModesData() => Map.fromEntries(getModes().map((e) { - final mode = getMode(e); - if (mode == null) return null; - return MapEntry(e, mode); - }).nonNulls); + Map getModesData() => Map.fromEntries( + getModes().map((e) { + final mode = getMode(e); + if (mode == null) return null; + return MapEntry(e, mode); + }).nonNulls, + ); SetonixData addAccount(SetonixAccount setonixAccount) { final accountId = setonixAccount.name; return setAsset( - '$kPackAccountsPath/$accountId.key', setonixAccount.privateKey) - .setAsset( - '$kPackAccountsPath/$accountId.pub', setonixAccount.publicKey); + '$kPackAccountsPath/$accountId.key', + setonixAccount.privateKey, + ).setAsset('$kPackAccountsPath/$accountId.pub', setonixAccount.publicKey); } Iterable getAccounts() sync* { const kKeySuffix = '.key'; - final privateKeys = getAssets('$kPackAccountsPath/', true) - .where((e) => e.endsWith(kKeySuffix)); + final privateKeys = getAssets( + '$kPackAccountsPath/', + true, + ).where((e) => e.endsWith(kKeySuffix)); for (final path in privateKeys) { final name = path.substring(0, path.length - kKeySuffix.length); final privateKey = getAsset(path); @@ -346,7 +363,7 @@ class SetonixFile { final Uint8List data; SetonixFile(this.data, [String? identifier]) - : identifier = identifier ?? createPackIdentifier(data); + : identifier = identifier ?? createPackIdentifier(data); SetonixData load() => SetonixData.fromData(data, identifier); } @@ -361,28 +378,22 @@ final class PackItem { final ItemLocation location; final T item; - PackItem({ - required this.pack, - required this.location, - required this.item, - }); - - factory PackItem.fromRaw( - {required SetonixData pack, - required String namespace, - required String path, - required T item}) => - PackItem( - item: item, - pack: pack, - location: ItemLocation(namespace, path), - ); - - static PackItem? wrap( - {required SetonixData pack, - required String namespace, - T? item, - String? id}) { + PackItem({required this.pack, required this.location, required this.item}); + + factory PackItem.fromRaw({ + required SetonixData pack, + required String namespace, + required String path, + required T item, + }) => + PackItem(item: item, pack: pack, location: ItemLocation(namespace, path)); + + static PackItem? wrap({ + required SetonixData pack, + required String namespace, + T? item, + String? id, + }) { if (item == null || id == null) return null; return PackItem( pack: pack, @@ -394,9 +405,6 @@ final class PackItem { String get namespace => location.namespace; String get id => location.id; - PackItem withItem(E backgroundTranslation) => PackItem( - pack: pack, - location: location, - item: backgroundTranslation, - ); + PackItem withItem(E backgroundTranslation) => + PackItem(pack: pack, location: location, item: backgroundTranslation); } diff --git a/api/lib/src/models/info.dart b/api/lib/src/models/info.dart index cc7ed024..14472942 100644 --- a/api/lib/src/models/info.dart +++ b/api/lib/src/models/info.dart @@ -8,7 +8,7 @@ part 'info.mapper.dart'; class GameInfo with GameInfoMappable { final Map teams; final List packs; - final String? script; + final ItemLocation? script; const GameInfo({ this.teams = const {}, diff --git a/api/lib/src/models/info.mapper.dart b/api/lib/src/models/info.mapper.dart index 50d3119e..6afd5255 100644 --- a/api/lib/src/models/info.mapper.dart +++ b/api/lib/src/models/info.mapper.dart @@ -96,6 +96,7 @@ class GameInfoMapper extends ClassMapperBase { if (_instance == null) { MapperContainer.globals.use(_instance = GameInfoMapper._()); GameTeamMapper.ensureInitialized(); + ItemLocationMapper.ensureInitialized(); } return _instance!; } @@ -109,8 +110,8 @@ class GameInfoMapper extends ClassMapperBase { static List _$packs(GameInfo v) => v.packs; static const Field> _f$packs = Field('packs', _$packs, opt: true, def: const []); - static String? _$script(GameInfo v) => v.script; - static const Field _f$script = + static ItemLocation? _$script(GameInfo v) => v.script; + static const Field _f$script = Field('script', _$script, opt: true); @override @@ -180,7 +181,11 @@ abstract class GameInfoCopyWith<$R, $In extends GameInfo, $Out> MapCopyWith<$R, String, GameTeam, GameTeamCopyWith<$R, GameTeam, GameTeam>> get teams; ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>> get packs; - $R call({Map? teams, List? packs, String? script}); + ItemLocationCopyWith<$R, ItemLocation, ItemLocation>? get script; + $R call( + {Map? teams, + List? packs, + ItemLocation? script}); GameInfoCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); } @@ -201,6 +206,9 @@ class _GameInfoCopyWithImpl<$R, $Out> ListCopyWith($value.packs, (v, t) => ObjectCopyWith(v, $identity, t), (v) => call(packs: v)); @override + ItemLocationCopyWith<$R, ItemLocation, ItemLocation>? get script => + $value.script?.copyWith.$chain((v) => call(script: v)); + @override $R call( {Map? teams, List? packs, diff --git a/api/lib/src/models/mode.dart b/api/lib/src/models/mode.dart index fec61785..d84c75d4 100644 --- a/api/lib/src/models/mode.dart +++ b/api/lib/src/models/mode.dart @@ -10,13 +10,11 @@ final class GameMode with GameModeMappable { final String? script; final Map tables; - final String tableName; final Map teams; GameMode({ required this.script, this.tables = const {}, - this.tableName = '', this.teams = const {}, }); } diff --git a/api/lib/src/models/mode.mapper.dart b/api/lib/src/models/mode.mapper.dart index ec70189c..7a8d3263 100644 --- a/api/lib/src/models/mode.mapper.dart +++ b/api/lib/src/models/mode.mapper.dart @@ -27,9 +27,6 @@ class GameModeMapper extends ClassMapperBase { static Map _$tables(GameMode v) => v.tables; static const Field> _f$tables = Field('tables', _$tables, opt: true, def: const {}); - static String _$tableName(GameMode v) => v.tableName; - static const Field _f$tableName = - Field('tableName', _$tableName, opt: true, def: ''); static Map _$teams(GameMode v) => v.teams; static const Field> _f$teams = Field('teams', _$teams, opt: true, def: const {}); @@ -38,7 +35,6 @@ class GameModeMapper extends ClassMapperBase { final MappableFields fields = const { #script: _f$script, #tables: _f$tables, - #tableName: _f$tableName, #teams: _f$teams, }; @@ -46,7 +42,6 @@ class GameModeMapper extends ClassMapperBase { return GameMode( script: data.dec(_f$script), tables: data.dec(_f$tables), - tableName: data.dec(_f$tableName), teams: data.dec(_f$teams)); } @@ -107,7 +102,6 @@ abstract class GameModeCopyWith<$R, $In extends GameMode, $Out> $R call( {String? script, Map? tables, - String? tableName, Map? teams}); GameModeCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); } @@ -133,19 +127,16 @@ class _GameModeCopyWithImpl<$R, $Out> $R call( {Object? script = $none, Map? tables, - String? tableName, Map? teams}) => $apply(FieldCopyWithData({ if (script != $none) #script: script, if (tables != null) #tables: tables, - if (tableName != null) #tableName: tableName, if (teams != null) #teams: teams })); @override GameMode $make(CopyWithData data) => GameMode( script: data.get(#script, or: $value.script), tables: data.get(#tables, or: $value.tables), - tableName: data.get(#tableName, or: $value.tableName), teams: data.get(#teams, or: $value.teams)); @override diff --git a/api/lib/src/models/table.dart b/api/lib/src/models/table.dart index df57c0aa..ece2e58f 100644 --- a/api/lib/src/models/table.dart +++ b/api/lib/src/models/table.dart @@ -125,7 +125,7 @@ class BoardTile with BoardTileMappable { BoardTile(this.asset, this.tile); } -@MappableClass() +@MappableClass(hook: ItemLocationHook()) class ItemLocation with ItemLocationMappable { final String namespace, id; @@ -139,6 +139,34 @@ class ItemLocation with ItemLocationMappable { return ItemLocation(splitted[0], splitted[1]); } + bool get isEmpty => namespace.isEmpty && id.isEmpty; + @override String toString() => namespace.isEmpty ? id : '$namespace:$id'; } + +class ItemLocationHook extends MappingHook { + final bool nullOnEmpty; + + const ItemLocationHook({ + this.nullOnEmpty = true, + }); + + @override + Object? beforeDecode(Object? value) { + if (value is String) { + return ItemLocation.fromString(value).toMap(); + } + return value; + } + + @override + Object? afterEncode(Object? value) { + if (value is ItemLocation) { + if (value.isEmpty && nullOnEmpty) { + return null; + } + } + return value; + } +} diff --git a/api/lib/src/models/table.mapper.dart b/api/lib/src/models/table.mapper.dart index 4cfcd196..c5a8ac2c 100644 --- a/api/lib/src/models/table.mapper.dart +++ b/api/lib/src/models/table.mapper.dart @@ -518,6 +518,8 @@ class ItemLocationMapper extends ClassMapperBase { #id: _f$id, }; + @override + final MappingHook hook = const ItemLocationHook(); static ItemLocation _instantiate(DecodingData data) { return ItemLocation(data.dec(_f$namespace), data.dec(_f$id)); } diff --git a/api/pubspec.yaml b/api/pubspec.yaml index 9f58782d..e2cc05dc 100644 --- a/api/pubspec.yaml +++ b/api/pubspec.yaml @@ -5,7 +5,7 @@ publish_to: none # repository: https://github.com/my_org/my_repo environment: - sdk: ">=3.5.1 <4.0.0" + sdk: ">=3.8.0 <4.0.0" # Add regular dependencies here. dependencies: diff --git a/app/lib/bloc/world/bloc.dart b/app/lib/bloc/world/bloc.dart index 9c3fe216..a479a5e6 100644 --- a/app/lib/bloc/world/bloc.dart +++ b/app/lib/bloc/world/bloc.dart @@ -200,10 +200,10 @@ class WorldBloc extends Bloc { } } - Future _loadScript(String? script) async { + Future _loadScript(ItemLocation? location) async { try { - if (script == null) return; - pluginSystem.loadLuaPlugin(state.assetManager, script); + if (location == null) return; + pluginSystem.loadLuaPluginFromLocation(state.assetManager, location); // ignore: empty_catches } catch (e) {} } diff --git a/app/lib/main.dart b/app/lib/main.dart index dc9766dc..904b75e8 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -22,7 +22,6 @@ import 'package:setonix/theme.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_localized_locales/flutter_localized_locales.dart'; import 'package:window_manager/window_manager.dart'; -import 'package:setonix_plugin/setonix_plugin.dart'; import 'bloc/settings.dart'; import 'pages/settings/home.dart'; @@ -49,7 +48,7 @@ Future main(List args) async { await setup(settingsCubit); - await initPluginSystem(); + //await initPluginSystem(); runApp( MultiBlocProvider( providers: [ diff --git a/app/pubspec.lock b/app/pubspec.lock index 10672fe1..6812bd6e 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -85,10 +85,10 @@ packages: dependency: transitive description: name: build - sha256: "8295b0b6dfe00499b786718f2936a56b5e0d56d169c528472c8c1908f2b1e3ee" + sha256: "74273591bd8b7f82eeb1f191c1b65a6576535bbfd5ca3722778b07d5702d33cc" url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.5.3" build_cli_annotations: dependency: transitive description: @@ -117,26 +117,26 @@ packages: dependency: transitive description: name: build_resolvers - sha256: "57fe2f9149b01d52fcd0ea7de17083739b5cf9e040dedb4e24a17c628c1e9caf" + sha256: badce70566085f2e87434531c4a6bc8e833672f755fc51146d612245947e91c9 url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.5.3" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "9b196d7b629c5317dff3ec83c7e98840b773cee3b9339b646fe487048d2ebc74" + sha256: b9070a4127033777c0e63195f6f117ed16a351ed676f6313b095cf4f328c0b82 url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.5.3" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: dae6a8a5cbef6866cdfa0d96df4b0d85b9086897096270a405a44d946dafffba + sha256: "1cdfece3eeb3f1263f7dbf5bcc0cba697bd0c22d2c866cb4b578c954dbb09bcf" url: "https://pub.dev" source: hosted - version: "9.0.0" + version: "9.1.1" built_collection: dependency: transitive description: @@ -541,10 +541,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: d44bf546b13025ec7353091516f6881f1d4c633993cb109c3916c3a0159dadf1 + sha256: cd57f7969b4679317c17af6fd16ee233c1e60a82ed209d8a475c54fd6fd6f845 url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.0" flutter_test: dependency: "direct dev" description: flutter @@ -580,10 +580,10 @@ packages: dependency: "direct main" description: name: go_router - sha256: f222e12c5360b0c90aae5d33e6b351a6789d4aa1c97b32691b4a30946fc91813 + sha256: "02ff498f6279470ff7f60c998a69b872f26696ceec237c8402e63a2133868ddf" url: "https://pub.dev" source: hosted - version: "15.2.0" + version: "15.2.3" graphs: dependency: transitive description: diff --git a/docs/package.json b/docs/package.json index d00c2626..a0d4e3c7 100644 --- a/docs/package.json +++ b/docs/package.json @@ -16,7 +16,7 @@ "@phosphor-icons/react": "^2.1.10", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", - "astro": "^5.9.3", + "astro": "^5.10.0", "react": "^19.1.0", "react-dom": "^19.1.0", "remark-gemoji": "^8.0.0", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 34b260c1..bd5a5e18 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -13,10 +13,10 @@ importers: version: 0.9.4(typescript@5.8.3) '@astrojs/react': specifier: ^4.3.0 - version: 4.3.0(@types/node@24.0.3)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(jiti@2.4.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0) + version: 4.3.0(@types/node@24.0.3)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(jiti@2.4.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) '@astrojs/starlight': specifier: ^0.34.4 - version: 0.34.4(astro@5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0)) + version: 0.34.4(astro@5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0)) '@phosphor-icons/react': specifier: ^2.1.10 version: 2.1.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -27,8 +27,8 @@ importers: specifier: ^19.1.6 version: 19.1.6(@types/react@19.1.8) astro: - specifier: ^5.9.3 - version: 5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0) + specifier: ^5.10.0 + version: 5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -47,7 +47,7 @@ importers: devDependencies: '@vite-pwa/astro': specifier: ^1.1.0 - version: 1.1.0(astro@5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0))(vite-plugin-pwa@1.0.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0)) + version: 1.1.0(astro@5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0))(vite-plugin-pwa@1.0.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0)) sass: specifier: ^1.89.2 version: 1.89.2 @@ -56,7 +56,7 @@ importers: version: 0.34.2 vite-plugin-pwa: specifier: ^1.0.0 - version: 1.0.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) + version: 1.0.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) workbox-window: specifier: ^7.3.0 version: 7.3.0 @@ -1244,8 +1244,8 @@ packages: peerDependencies: rollup: ^1.20.0||^2.0.0 - '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + '@rollup/pluginutils@5.2.0': + resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1253,123 +1253,123 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.43.0': - resolution: {integrity: sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==} + '@rollup/rollup-android-arm-eabi@4.44.0': + resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.43.0': - resolution: {integrity: sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA==} + '@rollup/rollup-android-arm64@4.44.0': + resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.43.0': - resolution: {integrity: sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A==} + '@rollup/rollup-darwin-arm64@4.44.0': + resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.43.0': - resolution: {integrity: sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg==} + '@rollup/rollup-darwin-x64@4.44.0': + resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.43.0': - resolution: {integrity: sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ==} + '@rollup/rollup-freebsd-arm64@4.44.0': + resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.43.0': - resolution: {integrity: sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg==} + '@rollup/rollup-freebsd-x64@4.44.0': + resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.43.0': - resolution: {integrity: sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==} + '@rollup/rollup-linux-arm-gnueabihf@4.44.0': + resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.43.0': - resolution: {integrity: sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==} + '@rollup/rollup-linux-arm-musleabihf@4.44.0': + resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.43.0': - resolution: {integrity: sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==} + '@rollup/rollup-linux-arm64-gnu@4.44.0': + resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.43.0': - resolution: {integrity: sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==} + '@rollup/rollup-linux-arm64-musl@4.44.0': + resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.43.0': - resolution: {integrity: sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==} + '@rollup/rollup-linux-loongarch64-gnu@4.44.0': + resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.43.0': - resolution: {integrity: sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': + resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.43.0': - resolution: {integrity: sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==} + '@rollup/rollup-linux-riscv64-gnu@4.44.0': + resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.43.0': - resolution: {integrity: sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==} + '@rollup/rollup-linux-riscv64-musl@4.44.0': + resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.43.0': - resolution: {integrity: sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==} + '@rollup/rollup-linux-s390x-gnu@4.44.0': + resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.43.0': - resolution: {integrity: sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==} + '@rollup/rollup-linux-x64-gnu@4.44.0': + resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.43.0': - resolution: {integrity: sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==} + '@rollup/rollup-linux-x64-musl@4.44.0': + resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.43.0': - resolution: {integrity: sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==} + '@rollup/rollup-win32-arm64-msvc@4.44.0': + resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.43.0': - resolution: {integrity: sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw==} + '@rollup/rollup-win32-ia32-msvc@4.44.0': + resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.43.0': - resolution: {integrity: sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw==} + '@rollup/rollup-win32-x64-msvc@4.44.0': + resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==} cpu: [x64] os: [win32] - '@shikijs/core@3.6.0': - resolution: {integrity: sha512-9By7Xb3olEX0o6UeJyPLI1PE1scC4d3wcVepvtv2xbuN9/IThYN4Wcwh24rcFeASzPam11MCq8yQpwwzCgSBRw==} + '@shikijs/core@3.7.0': + resolution: {integrity: sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==} - '@shikijs/engine-javascript@3.6.0': - resolution: {integrity: sha512-7YnLhZG/TU05IHMG14QaLvTW/9WiK8SEYafceccHUSXs2Qr5vJibUwsDfXDLmRi0zHdzsxrGKpSX6hnqe0k8nA==} + '@shikijs/engine-javascript@3.7.0': + resolution: {integrity: sha512-0t17s03Cbv+ZcUvv+y33GtX75WBLQELgNdVghnsdhTgU3hVcWcMsoP6Lb0nDTl95ZJfbP1mVMO0p3byVh3uuzA==} - '@shikijs/engine-oniguruma@3.6.0': - resolution: {integrity: sha512-nmOhIZ9yT3Grd+2plmW/d8+vZ2pcQmo/UnVwXMUXAKTXdi+LK0S08Ancrz5tQQPkxvjBalpMW2aKvwXfelauvA==} + '@shikijs/engine-oniguruma@3.7.0': + resolution: {integrity: sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==} - '@shikijs/langs@3.6.0': - resolution: {integrity: sha512-IdZkQJaLBu1LCYCwkr30hNuSDfllOT8RWYVZK1tD2J03DkiagYKRxj/pDSl8Didml3xxuyzUjgtioInwEQM/TA==} + '@shikijs/langs@3.7.0': + resolution: {integrity: sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==} - '@shikijs/themes@3.6.0': - resolution: {integrity: sha512-Fq2j4nWr1DF4drvmhqKq8x5vVQ27VncF8XZMBuHuQMZvUSS3NBgpqfwz/FoGe36+W6PvniZ1yDlg2d4kmYDU6w==} + '@shikijs/themes@3.7.0': + resolution: {integrity: sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==} - '@shikijs/types@3.6.0': - resolution: {integrity: sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==} + '@shikijs/types@3.7.0': + resolution: {integrity: sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -1401,9 +1401,6 @@ packages: '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1568,8 +1565,8 @@ packages: peerDependencies: astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 - astro@5.9.3: - resolution: {integrity: sha512-VReZrpUa/3rfeiVvsQ1A2M3ujDPI+pDGIYOMtXPEZwut8tZoEyealXXLjitgCsJ+3dunKGZbg4Eak6i+r0vniw==} + astro@5.10.0: + resolution: {integrity: sha512-g/t54kVzQnFVijs+GbbbX/NBAFTl/3yNAEA/AQYq4FumLLVv7n4BIF+jKhcPGn9iFGyT1Cjvr7KB/qYyNvHEIg==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -1672,8 +1669,8 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001723: - resolution: {integrity: sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==} + caniuse-lite@1.0.30001724: + resolution: {integrity: sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1885,8 +1882,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.167: - resolution: {integrity: sha512-LxcRvnYO5ez2bMOFpbuuVuAI5QNeY1ncVytE/KXaL6ZNfzX1yPlAO0nSOyIHx2fVAuUprMqPs/TdVhUFZy7SIQ==} + electron-to-chromium@1.5.171: + resolution: {integrity: sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==} emmet@2.4.11: resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} @@ -3028,8 +3025,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - rollup@4.43.0: - resolution: {integrity: sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==} + rollup@4.44.0: + resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3094,8 +3091,8 @@ packages: resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - shiki@3.6.0: - resolution: {integrity: sha512-tKn/Y0MGBTffQoklaATXmTqDU02zx8NYBGQ+F6gy87/YjKbizcLd+Cybh/0ZtOBX9r1NEnAy/GTRDKtOsc1L9w==} + shiki@3.7.0: + resolution: {integrity: sha512-ZcI4UT9n6N2pDuM2n3Jbk0sR4Swzq43nLPgS/4h0E3B/NrFn2HKElrDtceSf8Zx/OWYOo7G1SAtBLypCp+YXqg==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -3229,8 +3226,8 @@ packages: resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} engines: {node: '>=10'} - terser@5.42.0: - resolution: {integrity: sha512-UYCvU9YQW2f/Vwl+P0GfhxJxbUGLwd+5QrrGgLajzWAtC/23AX0vcise32kkP7Eu0Wu9VlzzHAXkLObgjQfFlQ==} + terser@5.43.1: + resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} engines: {node: '>=10'} hasBin: true @@ -3532,10 +3529,10 @@ packages: yaml: optional: true - vitefu@1.0.6: - resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} + vitefu@1.0.7: + resolution: {integrity: sha512-eRWXLBbJjW3X5z5P5IHcSm2yYbYRPb2kQuc+oqsbAl99WB5kVsPbiiox+cymo8twTzifA6itvhr2CmjnaZZp0Q==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 peerDependenciesMeta: vite: optional: true @@ -3799,8 +3796,8 @@ packages: typescript: ^4.9.4 || ^5.0.2 zod: ^3 - zod@3.25.64: - resolution: {integrity: sha512-hbP9FpSZf7pkS7hRVUrOjhwKJNyampPgtXKc3AN6DsWtoHsg2Sb4SQaS4Tcay380zSwd2VPo9G9180emBACp5g==} + zod@3.25.67: + resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -3873,7 +3870,7 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.2 remark-smartypants: 3.0.2 - shiki: 3.6.0 + shiki: 3.7.0 smol-toml: 1.3.4 unified: 11.0.5 unist-util-remove-position: 5.0.0 @@ -3883,12 +3880,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.0(astro@5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0))': + '@astrojs/mdx@4.3.0(astro@5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0))': dependencies: '@astrojs/markdown-remark': 6.3.2 '@mdx-js/mdx': 3.1.0(acorn@8.15.0) acorn: 8.15.0 - astro: 5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0) + astro: 5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -3906,15 +3903,15 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@4.3.0(@types/node@24.0.3)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(jiti@2.4.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0)': + '@astrojs/react@4.3.0(@types/node@24.0.3)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(jiti@2.4.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)': dependencies: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) - '@vitejs/plugin-react': 4.5.2(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0)) + '@vitejs/plugin-react': 4.5.2(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) ultrahtml: 1.6.0 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -3933,19 +3930,19 @@ snapshots: dependencies: sitemap: 8.0.0 stream-replace-string: 2.0.0 - zod: 3.25.64 + zod: 3.25.67 - '@astrojs/starlight@0.34.4(astro@5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0))': + '@astrojs/starlight@0.34.4(astro@5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0))': dependencies: '@astrojs/markdown-remark': 6.3.2 - '@astrojs/mdx': 4.3.0(astro@5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0)) + '@astrojs/mdx': 4.3.0(astro@5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0)) '@astrojs/sitemap': 3.4.1 '@pagefind/default-ui': 1.3.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0) - astro-expressive-code: 0.41.2(astro@5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0)) + astro: 5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0) + astro-expressive-code: 0.41.2(astro@5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -4763,7 +4760,7 @@ snapshots: '@expressive-code/plugin-shiki@0.41.2': dependencies: '@expressive-code/core': 0.41.2 - shiki: 3.6.0 + shiki: 3.7.0 '@expressive-code/plugin-text-markers@0.41.2': dependencies: @@ -5089,7 +5086,7 @@ snapshots: '@rollup/plugin-node-resolve@15.3.1(rollup@2.79.2)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@2.79.2) + '@rollup/pluginutils': 5.2.0(rollup@2.79.2) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 @@ -5107,7 +5104,7 @@ snapshots: dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.42.0 + terser: 5.43.1 optionalDependencies: rollup: 2.79.2 @@ -5118,7 +5115,7 @@ snapshots: picomatch: 2.3.1 rollup: 2.79.2 - '@rollup/pluginutils@5.1.4(rollup@2.79.2)': + '@rollup/pluginutils@5.2.0(rollup@2.79.2)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 @@ -5126,93 +5123,93 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/rollup-android-arm-eabi@4.43.0': + '@rollup/rollup-android-arm-eabi@4.44.0': optional: true - '@rollup/rollup-android-arm64@4.43.0': + '@rollup/rollup-android-arm64@4.44.0': optional: true - '@rollup/rollup-darwin-arm64@4.43.0': + '@rollup/rollup-darwin-arm64@4.44.0': optional: true - '@rollup/rollup-darwin-x64@4.43.0': + '@rollup/rollup-darwin-x64@4.44.0': optional: true - '@rollup/rollup-freebsd-arm64@4.43.0': + '@rollup/rollup-freebsd-arm64@4.44.0': optional: true - '@rollup/rollup-freebsd-x64@4.43.0': + '@rollup/rollup-freebsd-x64@4.44.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.43.0': + '@rollup/rollup-linux-arm-gnueabihf@4.44.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.43.0': + '@rollup/rollup-linux-arm-musleabihf@4.44.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.43.0': + '@rollup/rollup-linux-arm64-gnu@4.44.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.43.0': + '@rollup/rollup-linux-arm64-musl@4.44.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.43.0': + '@rollup/rollup-linux-loongarch64-gnu@4.44.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.43.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.43.0': + '@rollup/rollup-linux-riscv64-gnu@4.44.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.43.0': + '@rollup/rollup-linux-riscv64-musl@4.44.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.43.0': + '@rollup/rollup-linux-s390x-gnu@4.44.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.43.0': + '@rollup/rollup-linux-x64-gnu@4.44.0': optional: true - '@rollup/rollup-linux-x64-musl@4.43.0': + '@rollup/rollup-linux-x64-musl@4.44.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.43.0': + '@rollup/rollup-win32-arm64-msvc@4.44.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.43.0': + '@rollup/rollup-win32-ia32-msvc@4.44.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.43.0': + '@rollup/rollup-win32-x64-msvc@4.44.0': optional: true - '@shikijs/core@3.6.0': + '@shikijs/core@3.7.0': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.7.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.6.0': + '@shikijs/engine-javascript@3.7.0': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.7.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-oniguruma@3.6.0': + '@shikijs/engine-oniguruma@3.7.0': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.7.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.6.0': + '@shikijs/langs@3.7.0': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.7.0 - '@shikijs/themes@3.6.0': + '@shikijs/themes@3.7.0': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.7.0 - '@shikijs/types@3.6.0': + '@shikijs/types@3.7.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -5261,8 +5258,6 @@ snapshots: '@types/estree@0.0.39': {} - '@types/estree@1.0.7': {} - '@types/estree@1.0.8': {} '@types/fontkit@2.0.8': @@ -5315,12 +5310,12 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vite-pwa/astro@1.1.0(astro@5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0))(vite-plugin-pwa@1.0.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0))': + '@vite-pwa/astro@1.1.0(astro@5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0))(vite-plugin-pwa@1.0.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0))': dependencies: - astro: 5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0) - vite-plugin-pwa: 1.0.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) + astro: 5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0) + vite-plugin-pwa: 1.0.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) - '@vitejs/plugin-react@4.5.2(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0))': + '@vitejs/plugin-react@4.5.2(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))': dependencies: '@babel/core': 7.27.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.4) @@ -5328,7 +5323,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.11 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) transitivePeerDependencies: - supports-color @@ -5439,12 +5434,12 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.41.2(astro@5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0)): + astro-expressive-code@0.41.2(astro@5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0)): dependencies: - astro: 5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0) + astro: 5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0) rehype-expressive-code: 0.41.2 - astro@5.9.3(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.42.0)(typescript@5.8.3)(yaml@2.8.0): + astro@5.10.0(@types/node@24.0.3)(jiti@2.4.2)(rollup@2.79.2)(sass@1.89.2)(terser@5.43.1)(typescript@5.8.3)(yaml@2.8.0): dependencies: '@astrojs/compiler': 2.12.2 '@astrojs/internal-helpers': 0.6.1 @@ -5452,7 +5447,7 @@ snapshots: '@astrojs/telemetry': 3.3.0 '@capsizecss/unpack': 2.4.0 '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.1.4(rollup@2.79.2) + '@rollup/pluginutils': 5.2.0(rollup@2.79.2) acorn: 8.15.0 aria-query: 5.3.2 axobject-query: 4.1.0 @@ -5490,7 +5485,7 @@ snapshots: prompts: 2.4.2 rehype: 13.0.2 semver: 7.7.2 - shiki: 3.6.0 + shiki: 3.7.0 tinyexec: 0.3.2 tinyglobby: 0.2.14 tsconfck: 3.1.6(typescript@5.8.3) @@ -5499,14 +5494,14 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.16.0 vfile: 6.0.3 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0) - vitefu: 1.0.6(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0)) + vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) + vitefu: 1.0.7(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 - zod: 3.25.64 - zod-to-json-schema: 3.24.5(zod@3.25.64) - zod-to-ts: 1.2.0(typescript@5.8.3)(zod@3.25.64) + zod: 3.25.67 + zod-to-json-schema: 3.24.5(zod@3.25.67) + zod-to-ts: 1.2.0(typescript@5.8.3)(zod@3.25.67) optionalDependencies: sharp: 0.33.5 transitivePeerDependencies: @@ -5630,8 +5625,8 @@ snapshots: browserslist@4.25.0: dependencies: - caniuse-lite: 1.0.30001723 - electron-to-chromium: 1.5.167 + caniuse-lite: 1.0.30001724 + electron-to-chromium: 1.5.171 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.0) @@ -5656,7 +5651,7 @@ snapshots: camelcase@8.0.0: {} - caniuse-lite@1.0.30001723: {} + caniuse-lite@1.0.30001724: {} ccount@2.0.1: {} @@ -5835,7 +5830,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.167: {} + electron-to-chromium@1.5.171: {} emmet@2.4.11: dependencies: @@ -7543,30 +7538,30 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - rollup@4.43.0: + rollup@4.44.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.43.0 - '@rollup/rollup-android-arm64': 4.43.0 - '@rollup/rollup-darwin-arm64': 4.43.0 - '@rollup/rollup-darwin-x64': 4.43.0 - '@rollup/rollup-freebsd-arm64': 4.43.0 - '@rollup/rollup-freebsd-x64': 4.43.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.43.0 - '@rollup/rollup-linux-arm-musleabihf': 4.43.0 - '@rollup/rollup-linux-arm64-gnu': 4.43.0 - '@rollup/rollup-linux-arm64-musl': 4.43.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.43.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.43.0 - '@rollup/rollup-linux-riscv64-gnu': 4.43.0 - '@rollup/rollup-linux-riscv64-musl': 4.43.0 - '@rollup/rollup-linux-s390x-gnu': 4.43.0 - '@rollup/rollup-linux-x64-gnu': 4.43.0 - '@rollup/rollup-linux-x64-musl': 4.43.0 - '@rollup/rollup-win32-arm64-msvc': 4.43.0 - '@rollup/rollup-win32-ia32-msvc': 4.43.0 - '@rollup/rollup-win32-x64-msvc': 4.43.0 + '@rollup/rollup-android-arm-eabi': 4.44.0 + '@rollup/rollup-android-arm64': 4.44.0 + '@rollup/rollup-darwin-arm64': 4.44.0 + '@rollup/rollup-darwin-x64': 4.44.0 + '@rollup/rollup-freebsd-arm64': 4.44.0 + '@rollup/rollup-freebsd-x64': 4.44.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.0 + '@rollup/rollup-linux-arm-musleabihf': 4.44.0 + '@rollup/rollup-linux-arm64-gnu': 4.44.0 + '@rollup/rollup-linux-arm64-musl': 4.44.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.0 + '@rollup/rollup-linux-riscv64-gnu': 4.44.0 + '@rollup/rollup-linux-riscv64-musl': 4.44.0 + '@rollup/rollup-linux-s390x-gnu': 4.44.0 + '@rollup/rollup-linux-x64-gnu': 4.44.0 + '@rollup/rollup-linux-x64-musl': 4.44.0 + '@rollup/rollup-win32-arm64-msvc': 4.44.0 + '@rollup/rollup-win32-ia32-msvc': 4.44.0 + '@rollup/rollup-win32-x64-msvc': 4.44.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -7691,14 +7686,14 @@ snapshots: '@img/sharp-win32-ia32': 0.34.2 '@img/sharp-win32-x64': 0.34.2 - shiki@3.6.0: + shiki@3.7.0: dependencies: - '@shikijs/core': 3.6.0 - '@shikijs/engine-javascript': 3.6.0 - '@shikijs/engine-oniguruma': 3.6.0 - '@shikijs/langs': 3.6.0 - '@shikijs/themes': 3.6.0 - '@shikijs/types': 3.6.0 + '@shikijs/core': 3.7.0 + '@shikijs/engine-javascript': 3.7.0 + '@shikijs/engine-oniguruma': 3.7.0 + '@shikijs/langs': 3.7.0 + '@shikijs/themes': 3.7.0 + '@shikijs/types': 3.7.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -7868,7 +7863,7 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - terser@5.42.0: + terser@5.43.1: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.15.0 @@ -8098,36 +8093,36 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-plugin-pwa@1.0.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0): + vite-plugin-pwa@1.0.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0): dependencies: debug: 4.4.1 pretty-bytes: 6.1.1 tinyglobby: 0.2.14 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) workbox-build: 7.3.0(@types/babel__core@7.20.5) workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0): + vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 postcss: 8.5.6 - rollup: 4.43.0 + rollup: 4.44.0 tinyglobby: 0.2.14 optionalDependencies: '@types/node': 24.0.3 fsevents: 2.3.3 jiti: 2.4.2 sass: 1.89.2 - terser: 5.42.0 + terser: 5.43.1 yaml: 2.8.0 - vitefu@1.0.6(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0)): + vitefu@1.0.7(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)): optionalDependencies: - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.42.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) volar-service-css@0.0.62(@volar/language-service@2.4.14): dependencies: @@ -8474,15 +8469,15 @@ snapshots: yoctocolors@2.1.1: {} - zod-to-json-schema@3.24.5(zod@3.25.64): + zod-to-json-schema@3.24.5(zod@3.25.67): dependencies: - zod: 3.25.64 + zod: 3.25.67 - zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.64): + zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.67): dependencies: typescript: 5.8.3 - zod: 3.25.64 + zod: 3.25.67 - zod@3.25.64: {} + zod@3.25.67: {} zwitch@2.0.4: {} diff --git a/plugin/lib/setonix_plugin.dart b/plugin/lib/setonix_plugin.dart index 2fa283f5..12aacb89 100644 --- a/plugin/lib/setonix_plugin.dart +++ b/plugin/lib/setonix_plugin.dart @@ -5,10 +5,16 @@ export 'src/rust/api/plugin.dart'; export 'src/rust/api/luau.dart'; export 'events.dart'; +bool _isInitialized = false; + +bool get isPluginSystemInitialized => _isInitialized; + Future initPluginSystem() { - return Future.value(); + _isInitialized = true; + return RustLib.init(); } void disposePluginSystem() { + _isInitialized = false; RustLib.dispose(); } diff --git a/plugin/lib/src/plugin.dart b/plugin/lib/src/plugin.dart index ef4ea184..dabb2843 100644 --- a/plugin/lib/src/plugin.dart +++ b/plugin/lib/src/plugin.dart @@ -48,6 +48,15 @@ final class PluginSystem { _plugins.remove(name); } + void loadLuaPluginFromLocation( + AssetManager assetManager, ItemLocation location, + [String name = 'game']) { + final data = + assetManager.getPack(location.namespace)?.getScript(location.id); + if (data == null) return; + loadLuaPlugin(assetManager, data, name); + } + void loadLuaPlugin(AssetManager assetManager, String script, [String name = 'game']) { unregisterPlugin(name); diff --git a/server/lib/src/bloc.dart b/server/lib/src/bloc.dart index 231a7056..a176e61f 100644 --- a/server/lib/src/bloc.dart +++ b/server/lib/src/bloc.dart @@ -68,10 +68,10 @@ class WorldBloc extends Bloc }); } - Future _loadScript(String? script) async { + Future _loadScript(ItemLocation? location) async { try { - if (script == null) return; - pluginSystem.loadLuaPlugin(assetManager, script); + if (location == null) return; + pluginSystem.loadLuaPluginFromLocation(assetManager, location); } catch (e) { server.log('Error loading script: $e', level: LogLevel.error); } diff --git a/server/lib/src/config.dart b/server/lib/src/config.dart index 923d3965..3ca3016e 100644 --- a/server/lib/src/config.dart +++ b/server/lib/src/config.dart @@ -68,4 +68,10 @@ class ConfigManager { String get endpointSecret => _mergedConfig.endpointSecret ?? SetonixConfig.defaultEndpointSecret; + + ItemLocation? get gameMode { + final data = _mergedConfig.gameMode ?? SetonixConfig.defaultGameMode; + if (data.isEmpty) return null; + return ItemLocation.fromString(data); + } } diff --git a/server/lib/src/server.dart b/server/lib/src/server.dart index 9eb143ec..b7147aa8 100644 --- a/server/lib/src/server.dart +++ b/server/lib/src/server.dart @@ -51,7 +51,12 @@ final class SetonixServer { )); SetonixData _buildDefaultWorld() { - final data = SetonixData.empty().setInfo(GameInfo( + final location = configManager.gameMode; + GameMode? gameMode; + if (location != null) { + gameMode = assetManager.getPack(location.namespace)?.getMode(location.id); + } + final data = SetonixData.fromMode(location, gameMode).setInfo(GameInfo( packs: assetManager.getPackIds().toList(), )); return data; From 7a19dcea70d9f652754b7125e0aa1b998f28e802 Mon Sep 17 00:00:00 2001 From: CodeDoctorDE Date: Wed, 2 Jul 2025 12:00:07 +0200 Subject: [PATCH 2/4] Fix mode types --- api/lib/src/event/process/client.dart | 4 +- api/lib/src/event/server.dart | 10 +- api/lib/src/models/config.mapper.dart | 272 +++++++++++++++----------- api/lib/src/models/data.dart | 8 + api/lib/src/models/info.mapper.dart | 190 +++++++++++------- api/lib/src/models/mode.mapper.dart | 117 +++++++---- api/lib/src/models/table.dart | 4 +- api/lib/src/services/asset.dart | 3 + 8 files changed, 376 insertions(+), 232 deletions(-) diff --git a/api/lib/src/event/process/client.dart b/api/lib/src/event/process/client.dart index d89433a5..b86bcf35 100644 --- a/api/lib/src/event/process/client.dart +++ b/api/lib/src/event/process/client.dart @@ -362,9 +362,7 @@ Future processClientEvent( ); case ModeChangeRequest(): final location = event.location; - final mode = location == null - ? null - : assetManager.getPack(location.namespace)?.getMode(location.id); + final mode = location == null ? null : assetManager.getModeItem(location); return UpdateServerResponse.builder( WorldInitialized.fromMode(mode, state), channel, diff --git a/api/lib/src/event/server.dart b/api/lib/src/event/server.dart index 6e38cbc5..2bb4e2f3 100644 --- a/api/lib/src/event/server.dart +++ b/api/lib/src/event/server.dart @@ -28,13 +28,15 @@ final class WorldInitialized extends ServerWorldEvent }); factory WorldInitialized.fromMode( - ItemLocation location, - GameMode? mode, + PackItem? mode, WorldState state, ) => WorldInitialized( clearUserInterface: true, - info: state.info.copyWith(teams: mode?.teams ?? {}, script: location), - table: mode?.tables[state.tableName] ?? GameTable(), + info: state.info.copyWith( + teams: mode?.item.teams ?? {}, + script: mode?.location, + ), + table: mode?.item.tables[state.tableName] ?? GameTable(), teamMembers: const {}, ); } diff --git a/api/lib/src/models/config.mapper.dart b/api/lib/src/models/config.mapper.dart index dd564e04..fd4c4a36 100644 --- a/api/lib/src/models/config.mapper.dart +++ b/api/lib/src/models/config.mapper.dart @@ -21,44 +21,83 @@ class SetonixConfigMapper extends ClassMapperBase { final String id = 'SetonixConfig'; static String? _$host(SetonixConfig v) => v.host; - static const Field _f$host = - Field('host', _$host, opt: true); + static const Field _f$host = Field( + 'host', + _$host, + opt: true, + ); static int? _$port(SetonixConfig v) => v.port; - static const Field _f$port = - Field('port', _$port, opt: true); + static const Field _f$port = Field( + 'port', + _$port, + opt: true, + ); static String? _$worldFile(SetonixConfig v) => v.worldFile; - static const Field _f$worldFile = - Field('worldFile', _$worldFile, opt: true); + static const Field _f$worldFile = Field( + 'worldFile', + _$worldFile, + opt: true, + ); static bool? _$autosave(SetonixConfig v) => v.autosave; - static const Field _f$autosave = - Field('autosave', _$autosave, opt: true); + static const Field _f$autosave = Field( + 'autosave', + _$autosave, + opt: true, + ); static bool? _$multiWorld(SetonixConfig v) => v.multiWorld; - static const Field _f$multiWorld = - Field('multiWorld', _$multiWorld, opt: true); + static const Field _f$multiWorld = Field( + 'multiWorld', + _$multiWorld, + opt: true, + ); static int? _$maxPlayers(SetonixConfig v) => v.maxPlayers; - static const Field _f$maxPlayers = - Field('maxPlayers', _$maxPlayers, opt: true); + static const Field _f$maxPlayers = Field( + 'maxPlayers', + _$maxPlayers, + opt: true, + ); static String? _$description(SetonixConfig v) => v.description; - static const Field _f$description = - Field('description', _$description, opt: true); + static const Field _f$description = Field( + 'description', + _$description, + opt: true, + ); static String? _$guestPrefix(SetonixConfig v) => v.guestPrefix; - static const Field _f$guestPrefix = - Field('guestPrefix', _$guestPrefix, opt: true); + static const Field _f$guestPrefix = Field( + 'guestPrefix', + _$guestPrefix, + opt: true, + ); static bool? _$whitelistEnabled(SetonixConfig v) => v.whitelistEnabled; - static const Field _f$whitelistEnabled = - Field('whitelistEnabled', _$whitelistEnabled, opt: true); + static const Field _f$whitelistEnabled = Field( + 'whitelistEnabled', + _$whitelistEnabled, + opt: true, + ); static bool? _$accountRequired(SetonixConfig v) => v.accountRequired; - static const Field _f$accountRequired = - Field('accountRequired', _$accountRequired, opt: true); + static const Field _f$accountRequired = Field( + 'accountRequired', + _$accountRequired, + opt: true, + ); static String? _$apiEndpoint(SetonixConfig v) => v.apiEndpoint; - static const Field _f$apiEndpoint = - Field('apiEndpoint', _$apiEndpoint, opt: true); + static const Field _f$apiEndpoint = Field( + 'apiEndpoint', + _$apiEndpoint, + opt: true, + ); static String? _$endpointSecret(SetonixConfig v) => v.endpointSecret; - static const Field _f$endpointSecret = - Field('endpointSecret', _$endpointSecret, opt: true); + static const Field _f$endpointSecret = Field( + 'endpointSecret', + _$endpointSecret, + opt: true, + ); static String? _$gameMode(SetonixConfig v) => v.gameMode; - static const Field _f$gameMode = - Field('gameMode', _$gameMode, opt: true); + static const Field _f$gameMode = Field( + 'gameMode', + _$gameMode, + opt: true, + ); @override final MappableFields fields = const { @@ -79,19 +118,20 @@ class SetonixConfigMapper extends ClassMapperBase { static SetonixConfig _instantiate(DecodingData data) { return SetonixConfig( - host: data.dec(_f$host), - port: data.dec(_f$port), - worldFile: data.dec(_f$worldFile), - autosave: data.dec(_f$autosave), - multiWorld: data.dec(_f$multiWorld), - maxPlayers: data.dec(_f$maxPlayers), - description: data.dec(_f$description), - guestPrefix: data.dec(_f$guestPrefix), - whitelistEnabled: data.dec(_f$whitelistEnabled), - accountRequired: data.dec(_f$accountRequired), - apiEndpoint: data.dec(_f$apiEndpoint), - endpointSecret: data.dec(_f$endpointSecret), - gameMode: data.dec(_f$gameMode)); + host: data.dec(_f$host), + port: data.dec(_f$port), + worldFile: data.dec(_f$worldFile), + autosave: data.dec(_f$autosave), + multiWorld: data.dec(_f$multiWorld), + maxPlayers: data.dec(_f$maxPlayers), + description: data.dec(_f$description), + guestPrefix: data.dec(_f$guestPrefix), + whitelistEnabled: data.dec(_f$whitelistEnabled), + accountRequired: data.dec(_f$accountRequired), + apiEndpoint: data.dec(_f$apiEndpoint), + endpointSecret: data.dec(_f$endpointSecret), + gameMode: data.dec(_f$gameMode), + ); } @override @@ -108,34 +148,43 @@ class SetonixConfigMapper extends ClassMapperBase { mixin SetonixConfigMappable { String toJson() { - return SetonixConfigMapper.ensureInitialized() - .encodeJson(this as SetonixConfig); + return SetonixConfigMapper.ensureInitialized().encodeJson( + this as SetonixConfig, + ); } Map toMap() { - return SetonixConfigMapper.ensureInitialized() - .encodeMap(this as SetonixConfig); + return SetonixConfigMapper.ensureInitialized().encodeMap( + this as SetonixConfig, + ); } SetonixConfigCopyWith - get copyWith => _SetonixConfigCopyWithImpl( - this as SetonixConfig, $identity, $identity); + get copyWith => _SetonixConfigCopyWithImpl( + this as SetonixConfig, + $identity, + $identity, + ); @override String toString() { - return SetonixConfigMapper.ensureInitialized() - .stringifyValue(this as SetonixConfig); + return SetonixConfigMapper.ensureInitialized().stringifyValue( + this as SetonixConfig, + ); } @override bool operator ==(Object other) { - return SetonixConfigMapper.ensureInitialized() - .equalsValue(this as SetonixConfig, other); + return SetonixConfigMapper.ensureInitialized().equalsValue( + this as SetonixConfig, + other, + ); } @override int get hashCode { - return SetonixConfigMapper.ensureInitialized() - .hashValue(this as SetonixConfig); + return SetonixConfigMapper.ensureInitialized().hashValue( + this as SetonixConfig, + ); } } @@ -147,20 +196,21 @@ extension SetonixConfigValueCopy<$R, $Out> abstract class SetonixConfigCopyWith<$R, $In extends SetonixConfig, $Out> implements ClassCopyWith<$R, $In, $Out> { - $R call( - {String? host, - int? port, - String? worldFile, - bool? autosave, - bool? multiWorld, - int? maxPlayers, - String? description, - String? guestPrefix, - bool? whitelistEnabled, - bool? accountRequired, - String? apiEndpoint, - String? endpointSecret, - String? gameMode}); + $R call({ + String? host, + int? port, + String? worldFile, + bool? autosave, + bool? multiWorld, + int? maxPlayers, + String? description, + String? guestPrefix, + bool? whitelistEnabled, + bool? accountRequired, + String? apiEndpoint, + String? endpointSecret, + String? gameMode, + }); SetonixConfigCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); } @@ -173,54 +223,56 @@ class _SetonixConfigCopyWithImpl<$R, $Out> late final ClassMapperBase $mapper = SetonixConfigMapper.ensureInitialized(); @override - $R call( - {Object? host = $none, - Object? port = $none, - Object? worldFile = $none, - Object? autosave = $none, - Object? multiWorld = $none, - Object? maxPlayers = $none, - Object? description = $none, - Object? guestPrefix = $none, - Object? whitelistEnabled = $none, - Object? accountRequired = $none, - Object? apiEndpoint = $none, - Object? endpointSecret = $none, - Object? gameMode = $none}) => - $apply(FieldCopyWithData({ - if (host != $none) #host: host, - if (port != $none) #port: port, - if (worldFile != $none) #worldFile: worldFile, - if (autosave != $none) #autosave: autosave, - if (multiWorld != $none) #multiWorld: multiWorld, - if (maxPlayers != $none) #maxPlayers: maxPlayers, - if (description != $none) #description: description, - if (guestPrefix != $none) #guestPrefix: guestPrefix, - if (whitelistEnabled != $none) #whitelistEnabled: whitelistEnabled, - if (accountRequired != $none) #accountRequired: accountRequired, - if (apiEndpoint != $none) #apiEndpoint: apiEndpoint, - if (endpointSecret != $none) #endpointSecret: endpointSecret, - if (gameMode != $none) #gameMode: gameMode - })); + $R call({ + Object? host = $none, + Object? port = $none, + Object? worldFile = $none, + Object? autosave = $none, + Object? multiWorld = $none, + Object? maxPlayers = $none, + Object? description = $none, + Object? guestPrefix = $none, + Object? whitelistEnabled = $none, + Object? accountRequired = $none, + Object? apiEndpoint = $none, + Object? endpointSecret = $none, + Object? gameMode = $none, + }) => $apply( + FieldCopyWithData({ + if (host != $none) #host: host, + if (port != $none) #port: port, + if (worldFile != $none) #worldFile: worldFile, + if (autosave != $none) #autosave: autosave, + if (multiWorld != $none) #multiWorld: multiWorld, + if (maxPlayers != $none) #maxPlayers: maxPlayers, + if (description != $none) #description: description, + if (guestPrefix != $none) #guestPrefix: guestPrefix, + if (whitelistEnabled != $none) #whitelistEnabled: whitelistEnabled, + if (accountRequired != $none) #accountRequired: accountRequired, + if (apiEndpoint != $none) #apiEndpoint: apiEndpoint, + if (endpointSecret != $none) #endpointSecret: endpointSecret, + if (gameMode != $none) #gameMode: gameMode, + }), + ); @override SetonixConfig $make(CopyWithData data) => SetonixConfig( - host: data.get(#host, or: $value.host), - port: data.get(#port, or: $value.port), - worldFile: data.get(#worldFile, or: $value.worldFile), - autosave: data.get(#autosave, or: $value.autosave), - multiWorld: data.get(#multiWorld, or: $value.multiWorld), - maxPlayers: data.get(#maxPlayers, or: $value.maxPlayers), - description: data.get(#description, or: $value.description), - guestPrefix: data.get(#guestPrefix, or: $value.guestPrefix), - whitelistEnabled: - data.get(#whitelistEnabled, or: $value.whitelistEnabled), - accountRequired: data.get(#accountRequired, or: $value.accountRequired), - apiEndpoint: data.get(#apiEndpoint, or: $value.apiEndpoint), - endpointSecret: data.get(#endpointSecret, or: $value.endpointSecret), - gameMode: data.get(#gameMode, or: $value.gameMode)); + host: data.get(#host, or: $value.host), + port: data.get(#port, or: $value.port), + worldFile: data.get(#worldFile, or: $value.worldFile), + autosave: data.get(#autosave, or: $value.autosave), + multiWorld: data.get(#multiWorld, or: $value.multiWorld), + maxPlayers: data.get(#maxPlayers, or: $value.maxPlayers), + description: data.get(#description, or: $value.description), + guestPrefix: data.get(#guestPrefix, or: $value.guestPrefix), + whitelistEnabled: data.get(#whitelistEnabled, or: $value.whitelistEnabled), + accountRequired: data.get(#accountRequired, or: $value.accountRequired), + apiEndpoint: data.get(#apiEndpoint, or: $value.apiEndpoint), + endpointSecret: data.get(#endpointSecret, or: $value.endpointSecret), + gameMode: data.get(#gameMode, or: $value.gameMode), + ); @override SetonixConfigCopyWith<$R2, SetonixConfig, $Out2> $chain<$R2, $Out2>( - Then<$Out2, $R2> t) => - _SetonixConfigCopyWithImpl<$R2, $Out2>($value, $cast, t); + Then<$Out2, $R2> t, + ) => _SetonixConfigCopyWithImpl<$R2, $Out2>($value, $cast, t); } diff --git a/api/lib/src/models/data.dart b/api/lib/src/models/data.dart index 6327cfbf..79d7f476 100644 --- a/api/lib/src/models/data.dart +++ b/api/lib/src/models/data.dart @@ -321,6 +321,14 @@ class SetonixData extends ArchiveData { } } + PackItem? getModeItem(String id, [String namespace = '']) => + PackItem.wrap( + pack: this, + namespace: namespace, + id: id, + item: getMode(id), + ); + Map getModesData() => Map.fromEntries( getModes().map((e) { final mode = getMode(e); diff --git a/api/lib/src/models/info.mapper.dart b/api/lib/src/models/info.mapper.dart index 6afd5255..31112da5 100644 --- a/api/lib/src/models/info.mapper.dart +++ b/api/lib/src/models/info.mapper.dart @@ -105,14 +105,25 @@ class GameInfoMapper extends ClassMapperBase { final String id = 'GameInfo'; static Map _$teams(GameInfo v) => v.teams; - static const Field> _f$teams = - Field('teams', _$teams, opt: true, def: const {}); + static const Field> _f$teams = Field( + 'teams', + _$teams, + opt: true, + def: const {}, + ); static List _$packs(GameInfo v) => v.packs; - static const Field> _f$packs = - Field('packs', _$packs, opt: true, def: const []); + static const Field> _f$packs = Field( + 'packs', + _$packs, + opt: true, + def: const [], + ); static ItemLocation? _$script(GameInfo v) => v.script; - static const Field _f$script = - Field('script', _$script, opt: true); + static const Field _f$script = Field( + 'script', + _$script, + opt: true, + ); @override final MappableFields fields = const { @@ -123,9 +134,10 @@ class GameInfoMapper extends ClassMapperBase { static GameInfo _instantiate(DecodingData data) { return GameInfo( - teams: data.dec(_f$teams), - packs: data.dec(_f$packs), - script: data.dec(_f$script)); + teams: data.dec(_f$teams), + packs: data.dec(_f$packs), + script: data.dec(_f$script), + ); } @override @@ -142,18 +154,23 @@ class GameInfoMapper extends ClassMapperBase { mixin GameInfoMappable { String toJson() { - return GameInfoMapper.ensureInitialized() - .encodeJson(this as GameInfo); + return GameInfoMapper.ensureInitialized().encodeJson( + this as GameInfo, + ); } Map toMap() { - return GameInfoMapper.ensureInitialized() - .encodeMap(this as GameInfo); + return GameInfoMapper.ensureInitialized().encodeMap( + this as GameInfo, + ); } GameInfoCopyWith get copyWith => _GameInfoCopyWithImpl( - this as GameInfo, $identity, $identity); + this as GameInfo, + $identity, + $identity, + ); @override String toString() { return GameInfoMapper.ensureInitialized().stringifyValue(this as GameInfo); @@ -161,8 +178,10 @@ mixin GameInfoMappable { @override bool operator ==(Object other) { - return GameInfoMapper.ensureInitialized() - .equalsValue(this as GameInfo, other); + return GameInfoMapper.ensureInitialized().equalsValue( + this as GameInfo, + other, + ); } @override @@ -179,13 +198,14 @@ extension GameInfoValueCopy<$R, $Out> on ObjectCopyWith<$R, GameInfo, $Out> { abstract class GameInfoCopyWith<$R, $In extends GameInfo, $Out> implements ClassCopyWith<$R, $In, $Out> { MapCopyWith<$R, String, GameTeam, GameTeamCopyWith<$R, GameTeam, GameTeam>> - get teams; + get teams; ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>> get packs; ItemLocationCopyWith<$R, ItemLocation, ItemLocation>? get script; - $R call( - {Map? teams, - List? packs, - ItemLocation? script}); + $R call({ + Map? teams, + List? packs, + ItemLocation? script, + }); GameInfoCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); } @@ -199,35 +219,44 @@ class _GameInfoCopyWithImpl<$R, $Out> GameInfoMapper.ensureInitialized(); @override MapCopyWith<$R, String, GameTeam, GameTeamCopyWith<$R, GameTeam, GameTeam>> - get teams => MapCopyWith( - $value.teams, (v, t) => v.copyWith.$chain(t), (v) => call(teams: v)); + get teams => MapCopyWith( + $value.teams, + (v, t) => v.copyWith.$chain(t), + (v) => call(teams: v), + ); @override ListCopyWith<$R, String, ObjectCopyWith<$R, String, String>> get packs => - ListCopyWith($value.packs, (v, t) => ObjectCopyWith(v, $identity, t), - (v) => call(packs: v)); + ListCopyWith( + $value.packs, + (v, t) => ObjectCopyWith(v, $identity, t), + (v) => call(packs: v), + ); @override ItemLocationCopyWith<$R, ItemLocation, ItemLocation>? get script => $value.script?.copyWith.$chain((v) => call(script: v)); @override - $R call( - {Map? teams, - List? packs, - Object? script = $none}) => - $apply(FieldCopyWithData({ - if (teams != null) #teams: teams, - if (packs != null) #packs: packs, - if (script != $none) #script: script - })); + $R call({ + Map? teams, + List? packs, + Object? script = $none, + }) => $apply( + FieldCopyWithData({ + if (teams != null) #teams: teams, + if (packs != null) #packs: packs, + if (script != $none) #script: script, + }), + ); @override GameInfo $make(CopyWithData data) => GameInfo( - teams: data.get(#teams, or: $value.teams), - packs: data.get(#packs, or: $value.packs), - script: data.get(#script, or: $value.script)); + teams: data.get(#teams, or: $value.teams), + packs: data.get(#packs, or: $value.packs), + script: data.get(#script, or: $value.script), + ); @override GameInfoCopyWith<$R2, GameInfo, $Out2> $chain<$R2, $Out2>( - Then<$Out2, $R2> t) => - _GameInfoCopyWithImpl<$R2, $Out2>($value, $cast, t); + Then<$Out2, $R2> t, + ) => _GameInfoCopyWithImpl<$R2, $Out2>($value, $cast, t); } class GameTeamMapper extends ClassMapperBase { @@ -247,11 +276,18 @@ class GameTeamMapper extends ClassMapperBase { final String id = 'GameTeam'; static String _$description(GameTeam v) => v.description; - static const Field _f$description = - Field('description', _$description, opt: true, def: ''); + static const Field _f$description = Field( + 'description', + _$description, + opt: true, + def: '', + ); static TeamColor? _$color(GameTeam v) => v.color; - static const Field _f$color = - Field('color', _$color, opt: true); + static const Field _f$color = Field( + 'color', + _$color, + opt: true, + ); static Set _$claimedCells(GameTeam v) => v.claimedCells; static const Field> _f$claimedCells = @@ -266,9 +302,10 @@ class GameTeamMapper extends ClassMapperBase { static GameTeam _instantiate(DecodingData data) { return GameTeam( - description: data.dec(_f$description), - color: data.dec(_f$color), - claimedCells: data.dec(_f$claimedCells)); + description: data.dec(_f$description), + color: data.dec(_f$color), + claimedCells: data.dec(_f$claimedCells), + ); } @override @@ -285,18 +322,23 @@ class GameTeamMapper extends ClassMapperBase { mixin GameTeamMappable { String toJson() { - return GameTeamMapper.ensureInitialized() - .encodeJson(this as GameTeam); + return GameTeamMapper.ensureInitialized().encodeJson( + this as GameTeam, + ); } Map toMap() { - return GameTeamMapper.ensureInitialized() - .encodeMap(this as GameTeam); + return GameTeamMapper.ensureInitialized().encodeMap( + this as GameTeam, + ); } GameTeamCopyWith get copyWith => _GameTeamCopyWithImpl( - this as GameTeam, $identity, $identity); + this as GameTeam, + $identity, + $identity, + ); @override String toString() { return GameTeamMapper.ensureInitialized().stringifyValue(this as GameTeam); @@ -304,8 +346,10 @@ mixin GameTeamMappable { @override bool operator ==(Object other) { - return GameTeamMapper.ensureInitialized() - .equalsValue(this as GameTeam, other); + return GameTeamMapper.ensureInitialized().equalsValue( + this as GameTeam, + other, + ); } @override @@ -321,10 +365,11 @@ extension GameTeamValueCopy<$R, $Out> on ObjectCopyWith<$R, GameTeam, $Out> { abstract class GameTeamCopyWith<$R, $In extends GameTeam, $Out> implements ClassCopyWith<$R, $In, $Out> { - $R call( - {String? description, - TeamColor? color, - Set? claimedCells}); + $R call({ + String? description, + TeamColor? color, + Set? claimedCells, + }); GameTeamCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); } @@ -337,23 +382,26 @@ class _GameTeamCopyWithImpl<$R, $Out> late final ClassMapperBase $mapper = GameTeamMapper.ensureInitialized(); @override - $R call( - {String? description, - Object? color = $none, - Set? claimedCells}) => - $apply(FieldCopyWithData({ - if (description != null) #description: description, - if (color != $none) #color: color, - if (claimedCells != null) #claimedCells: claimedCells - })); + $R call({ + String? description, + Object? color = $none, + Set? claimedCells, + }) => $apply( + FieldCopyWithData({ + if (description != null) #description: description, + if (color != $none) #color: color, + if (claimedCells != null) #claimedCells: claimedCells, + }), + ); @override GameTeam $make(CopyWithData data) => GameTeam( - description: data.get(#description, or: $value.description), - color: data.get(#color, or: $value.color), - claimedCells: data.get(#claimedCells, or: $value.claimedCells)); + description: data.get(#description, or: $value.description), + color: data.get(#color, or: $value.color), + claimedCells: data.get(#claimedCells, or: $value.claimedCells), + ); @override GameTeamCopyWith<$R2, GameTeam, $Out2> $chain<$R2, $Out2>( - Then<$Out2, $R2> t) => - _GameTeamCopyWithImpl<$R2, $Out2>($value, $cast, t); + Then<$Out2, $R2> t, + ) => _GameTeamCopyWithImpl<$R2, $Out2>($value, $cast, t); } diff --git a/api/lib/src/models/mode.mapper.dart b/api/lib/src/models/mode.mapper.dart index 7a8d3263..0def22a2 100644 --- a/api/lib/src/models/mode.mapper.dart +++ b/api/lib/src/models/mode.mapper.dart @@ -25,11 +25,19 @@ class GameModeMapper extends ClassMapperBase { static String? _$script(GameMode v) => v.script; static const Field _f$script = Field('script', _$script); static Map _$tables(GameMode v) => v.tables; - static const Field> _f$tables = - Field('tables', _$tables, opt: true, def: const {}); + static const Field> _f$tables = Field( + 'tables', + _$tables, + opt: true, + def: const {}, + ); static Map _$teams(GameMode v) => v.teams; - static const Field> _f$teams = - Field('teams', _$teams, opt: true, def: const {}); + static const Field> _f$teams = Field( + 'teams', + _$teams, + opt: true, + def: const {}, + ); @override final MappableFields fields = const { @@ -40,9 +48,10 @@ class GameModeMapper extends ClassMapperBase { static GameMode _instantiate(DecodingData data) { return GameMode( - script: data.dec(_f$script), - tables: data.dec(_f$tables), - teams: data.dec(_f$teams)); + script: data.dec(_f$script), + tables: data.dec(_f$tables), + teams: data.dec(_f$teams), + ); } @override @@ -59,18 +68,23 @@ class GameModeMapper extends ClassMapperBase { mixin GameModeMappable { String toJson() { - return GameModeMapper.ensureInitialized() - .encodeJson(this as GameMode); + return GameModeMapper.ensureInitialized().encodeJson( + this as GameMode, + ); } Map toMap() { - return GameModeMapper.ensureInitialized() - .encodeMap(this as GameMode); + return GameModeMapper.ensureInitialized().encodeMap( + this as GameMode, + ); } GameModeCopyWith get copyWith => _GameModeCopyWithImpl( - this as GameMode, $identity, $identity); + this as GameMode, + $identity, + $identity, + ); @override String toString() { return GameModeMapper.ensureInitialized().stringifyValue(this as GameMode); @@ -78,8 +92,10 @@ mixin GameModeMappable { @override bool operator ==(Object other) { - return GameModeMapper.ensureInitialized() - .equalsValue(this as GameMode, other); + return GameModeMapper.ensureInitialized().equalsValue( + this as GameMode, + other, + ); } @override @@ -95,14 +111,20 @@ extension GameModeValueCopy<$R, $Out> on ObjectCopyWith<$R, GameMode, $Out> { abstract class GameModeCopyWith<$R, $In extends GameMode, $Out> implements ClassCopyWith<$R, $In, $Out> { - MapCopyWith<$R, String, GameTable, - GameTableCopyWith<$R, GameTable, GameTable>> get tables; + MapCopyWith< + $R, + String, + GameTable, + GameTableCopyWith<$R, GameTable, GameTable> + > + get tables; MapCopyWith<$R, String, GameTeam, GameTeamCopyWith<$R, GameTeam, GameTeam>> - get teams; - $R call( - {String? script, - Map? tables, - Map? teams}); + get teams; + $R call({ + String? script, + Map? tables, + Map? teams, + }); GameModeCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); } @@ -115,32 +137,45 @@ class _GameModeCopyWithImpl<$R, $Out> late final ClassMapperBase $mapper = GameModeMapper.ensureInitialized(); @override - MapCopyWith<$R, String, GameTable, - GameTableCopyWith<$R, GameTable, GameTable>> - get tables => MapCopyWith($value.tables, (v, t) => v.copyWith.$chain(t), - (v) => call(tables: v)); + MapCopyWith< + $R, + String, + GameTable, + GameTableCopyWith<$R, GameTable, GameTable> + > + get tables => MapCopyWith( + $value.tables, + (v, t) => v.copyWith.$chain(t), + (v) => call(tables: v), + ); @override MapCopyWith<$R, String, GameTeam, GameTeamCopyWith<$R, GameTeam, GameTeam>> - get teams => MapCopyWith( - $value.teams, (v, t) => v.copyWith.$chain(t), (v) => call(teams: v)); + get teams => MapCopyWith( + $value.teams, + (v, t) => v.copyWith.$chain(t), + (v) => call(teams: v), + ); @override - $R call( - {Object? script = $none, - Map? tables, - Map? teams}) => - $apply(FieldCopyWithData({ - if (script != $none) #script: script, - if (tables != null) #tables: tables, - if (teams != null) #teams: teams - })); + $R call({ + Object? script = $none, + Map? tables, + Map? teams, + }) => $apply( + FieldCopyWithData({ + if (script != $none) #script: script, + if (tables != null) #tables: tables, + if (teams != null) #teams: teams, + }), + ); @override GameMode $make(CopyWithData data) => GameMode( - script: data.get(#script, or: $value.script), - tables: data.get(#tables, or: $value.tables), - teams: data.get(#teams, or: $value.teams)); + script: data.get(#script, or: $value.script), + tables: data.get(#tables, or: $value.tables), + teams: data.get(#teams, or: $value.teams), + ); @override GameModeCopyWith<$R2, GameMode, $Out2> $chain<$R2, $Out2>( - Then<$Out2, $R2> t) => - _GameModeCopyWithImpl<$R2, $Out2>($value, $cast, t); + Then<$Out2, $R2> t, + ) => _GameModeCopyWithImpl<$R2, $Out2>($value, $cast, t); } diff --git a/api/lib/src/models/table.dart b/api/lib/src/models/table.dart index 565e0bcf..379dfa11 100644 --- a/api/lib/src/models/table.dart +++ b/api/lib/src/models/table.dart @@ -139,9 +139,7 @@ class ItemLocation with ItemLocationMappable { class ItemLocationHook extends MappingHook { final bool nullOnEmpty; - const ItemLocationHook({ - this.nullOnEmpty = true, - }); + const ItemLocationHook({this.nullOnEmpty = true}); @override Object? beforeDecode(Object? value) { diff --git a/api/lib/src/services/asset.dart b/api/lib/src/services/asset.dart index 07bda9aa..1332ab1d 100644 --- a/api/lib/src/services/asset.dart +++ b/api/lib/src/services/asset.dart @@ -53,4 +53,7 @@ abstract class AssetManager { PackItem? getDeckItem(ItemLocation location) => getPack(location.namespace)?.getDeckItem(location.id, location.namespace); + + PackItem? getModeItem(ItemLocation location) => + getPack(location.namespace)?.getModeItem(location.id, location.namespace); } From 2de83945d9536bd8a800b185b5ef0ea165040cc5 Mon Sep 17 00:00:00 2001 From: CodeDoctorDE Date: Wed, 2 Jul 2025 12:16:28 +0200 Subject: [PATCH 3/4] Fix corepack ci --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 60ccd25f..75983d2a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -96,6 +96,7 @@ jobs: name: apk-x86_64-build path: app/linwood-setonix-android-x86_64.apk - name: Copy Corepack + working-directory: ./ run: | cp app/assets/pack.stnx core.stnx - name: Archive Corepack From 94eba623585035c0815a980b3c284607cf9bd179 Mon Sep 17 00:00:00 2001 From: CodeDoctorDE Date: Wed, 2 Jul 2025 12:24:11 +0200 Subject: [PATCH 4/4] Fix serverlist route --- api/pubspec.yaml | 2 +- app/AppImageBuilder.yml | 2 +- app/lib/main.dart | 4 ++-- app/linux/debian/DEBIAN/control | 2 +- app/pubspec.lock | 2 +- app/pubspec.yaml | 2 +- metadata/en-US/changelogs/8.txt | 3 +++ plugin/pubspec.lock | 2 +- server/pubspec.lock | 2 +- server/pubspec.yaml | 2 +- 10 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 metadata/en-US/changelogs/8.txt diff --git a/api/pubspec.yaml b/api/pubspec.yaml index 4381f96d..9bc1d5aa 100644 --- a/api/pubspec.yaml +++ b/api/pubspec.yaml @@ -1,6 +1,6 @@ name: setonix_api description: The Linwood Setonix API -version: 0.6.0 +version: 0.5.1 publish_to: none # repository: https://github.com/my_org/my_repo diff --git a/app/AppImageBuilder.yml b/app/AppImageBuilder.yml index 1d5a7a7a..8b3c8a41 100644 --- a/app/AppImageBuilder.yml +++ b/app/AppImageBuilder.yml @@ -14,7 +14,7 @@ AppDir: id: dev.linwood.setonix name: Linwood Setonix icon: dev.linwood.setonix - version: 0.6.0 + version: 0.5.1 exec: setonix exec_args: $@ apt: diff --git a/app/lib/main.dart b/app/lib/main.dart index f9f2753c..e92d1886 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -190,7 +190,7 @@ class SetonixApp extends StatelessWidget { builder: (context, state) => const AccountsSettingsPage(), ), GoRoute( - path: 'serverlist', + path: 'servers', builder: (context, state) => const ServersSettingsPage(), ), ], @@ -206,4 +206,4 @@ const isNightly = flavor == 'nightly' || flavor == 'dev' || flavor == 'development'; const shortApplicationName = isNightly ? 'Setonix Nightly' : 'Setonix'; const applicationName = 'Linwood $shortApplicationName'; -const applicationMinorVersion = '0.5.0'; +const applicationMinorVersion = '0.5.1'; diff --git a/app/linux/debian/DEBIAN/control b/app/linux/debian/DEBIAN/control index 756997ba..70383b2f 100644 --- a/app/linux/debian/DEBIAN/control +++ b/app/linux/debian/DEBIAN/control @@ -1,5 +1,5 @@ Package: linwood-setonix -Version: 0.6.0 +Version: 0.5.1 Section: base Priority: optional Homepage: https://github.com/LinwoodDev/Setonix diff --git a/app/pubspec.lock b/app/pubspec.lock index 01c973ea..120ccca1 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -1107,7 +1107,7 @@ packages: path: "../api" relative: true source: path - version: "0.6.0" + version: "0.5.1" setonix_plugin: dependency: "direct main" description: diff --git a/app/pubspec.yaml b/app/pubspec.yaml index 97a445e3..5f6e82a1 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -11,7 +11,7 @@ description: Play games without internet # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.6.0+8 +version: 0.5.1+8 publish_to: none environment: diff --git a/metadata/en-US/changelogs/8.txt b/metadata/en-US/changelogs/8.txt new file mode 100644 index 00000000..fe18fa4c --- /dev/null +++ b/metadata/en-US/changelogs/8.txt @@ -0,0 +1,3 @@ +* Fix serverlist route + +Read more here: https://linwood.dev/setonix/0.5.1 \ No newline at end of file diff --git a/plugin/pubspec.lock b/plugin/pubspec.lock index bb0c3f40..bdb20cc8 100644 --- a/plugin/pubspec.lock +++ b/plugin/pubspec.lock @@ -442,7 +442,7 @@ packages: path: "../api" relative: true source: path - version: "0.6.0" + version: "0.5.1" shelf: dependency: transitive description: diff --git a/server/pubspec.lock b/server/pubspec.lock index 2cb417f5..4dedbe07 100644 --- a/server/pubspec.lock +++ b/server/pubspec.lock @@ -484,7 +484,7 @@ packages: path: "../api" relative: true source: path - version: "0.6.0" + version: "0.5.1" setonix_plugin: dependency: "direct main" description: diff --git a/server/pubspec.yaml b/server/pubspec.yaml index b54760f0..ff330942 100644 --- a/server/pubspec.yaml +++ b/server/pubspec.yaml @@ -1,6 +1,6 @@ name: setonix_server description: The Linwood Setonix game server -version: 0.6.0 +version: 0.5.1 publish_to: none environment: