From 1b8dbe022d18816790d1e41e4bab94a55828185c Mon Sep 17 00:00:00 2001 From: gmpassos Date: Tue, 25 Feb 2025 00:13:22 -0300 Subject: [PATCH 1/4] v1.9.0 - `Json`: - `defaultFieldValueResolver`: optimize primitives parsing (String, bool, int, double, num) . - Added `dumpRuntimeTypes`. - sdk: '>=3.6.0 <4.0.0' - reflection_factory: ^2.5.0 - statistics: ^1.2.0 - swiss_knife: ^3.3.0 - yaml_writer: ^2.1.0 - mercury_client: ^2.3.0 - resource_portable: ^3.1.2 - collection: ^1.19.0 --- CHANGELOG.md | 16 ++++ lib/src/bones_api_base.dart | 2 +- lib/src/bones_api_module.dart | 5 +- lib/src/bones_api_utils_json.dart | 28 +++++++ pubspec.yaml | 18 ++--- test/bones_api_test.dart | 2 +- test/bones_api_test.reflection.g.dart | 6 +- .../bones_api_test_entities.reflection.g.dart | 81 ++++++------------- test/bones_api_test_modules.reflection.g.dart | 8 +- ...ones_api_test_utils_test.reflection.g.dart | 6 +- test/bones_api_utils_json_test.dart | 26 ++++++ 11 files changed, 120 insertions(+), 78 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb5be9c6..64ababfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +## 1.9.0 + +- `Json`: + - `defaultFieldValueResolver`: optimize primitives parsing (String, bool, int, double, num) . + - Added `dumpRuntimeTypes`. + +- sdk: '>=3.6.0 <4.0.0' + +- reflection_factory: ^2.5.0 +- statistics: ^1.2.0 +- swiss_knife: ^3.3.0 +- yaml_writer: ^2.1.0 +- mercury_client: ^2.3.0 +- resource_portable: ^3.1.2 +- collection: ^1.19.0 + ## 1.8.7 - reflection_factory: ^2.4.10 diff --git a/lib/src/bones_api_base.dart b/lib/src/bones_api_base.dart index fa67adff..b2485c84 100644 --- a/lib/src/bones_api_base.dart +++ b/lib/src/bones_api_base.dart @@ -42,7 +42,7 @@ typedef APILogger = void Function(APIRoot apiRoot, String type, String? message, /// Bones API Library class. class BonesAPI { // ignore: constant_identifier_names - static const String VERSION = '1.8.7'; + static const String VERSION = '1.9.0'; static bool _boot = false; diff --git a/lib/src/bones_api_module.dart b/lib/src/bones_api_module.dart index e81a1767..2a0661c3 100644 --- a/lib/src/bones_api_module.dart +++ b/lib/src/bones_api_module.dart @@ -1138,7 +1138,10 @@ abstract class APIModuleProxyCallerListener var mainType = typeInfo.isFuture ? (typeInfo.arguments0 ?? typeInfo) : typeInfo; - //var debugJsonPretty = Json.encode(json, pretty: true); + // var debugJsonPretty = Json.encode(json, pretty: true); + // print(debugJsonPretty); + + // print(Json.dumpRuntimeTypes(json)); var jsonDecoder = Json.decoder( entityHandlerProvider: EntityHandlerProvider.globalProvider); diff --git a/lib/src/bones_api_utils_json.dart b/lib/src/bones_api_utils_json.dart index d03dd322..10568038 100644 --- a/lib/src/bones_api_utils_json.dart +++ b/lib/src/bones_api_utils_json.dart @@ -593,6 +593,16 @@ class Json { return null; } else if (type.type == value.runtimeType) { return value; + } else if (type.isStringType) { + return TypeParser.parseString(value); + } else if (type.isIntType) { + return TypeParser.parseInt(value); + } else if (type.isDoubleType) { + return TypeParser.parseDouble(value); + } else if (type.isNumType) { + return TypeParser.parseNum(value); + } else if (type.isBoolType) { + return TypeParser.parseBool(value); } else if (type.isEntityReferenceType && value is EntityReference) { if (type.arguments0?.type == value.type) { return value; @@ -668,6 +678,24 @@ class Json { ? entityHandler.castIterableNullable(list, entityType) : entityHandler.castIterable(list, entityType); } + + /// A debugging tool that generates a `String` representation of [o], + /// showing the [runtimeType] of each value in the tree. + static String dumpRuntimeTypes(Object? o, [String indent = '']) { + if (o == null) return '$indent'; + if (o is String) return '$indent:"$o"'; + if (o is bool) return '$indent:$o'; + if (o is int) return '$indent:$o'; + if (o is double) return '$indent:$o'; + if (o is num) return '$indent:$o'; + if (o is Iterable) { + return '$indent<${o.runtimeType}>:[\n$indent${o.map((e) => dumpRuntimeTypes(e, ' $indent')).join(',\n$indent')}\n$indent]'; + } + if (o is Map) { + return '$indent<${o.runtimeType}>:{\n$indent${o.entries.map((e) => "${dumpRuntimeTypes(e.key, ' $indent')}=${dumpRuntimeTypes(e.value, '')}").join(',\n$indent')}\n$indent}'; + } + return '@<${o.runtimeType}>:$o'; + } } extension JsonEntityCacheExtension on JsonEntityCache { diff --git a/pubspec.yaml b/pubspec.yaml index d869323e..059dc06b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,10 +1,10 @@ name: bones_api description: Bones_API - A powerful API backend framework for Dart. It comes with a built-in HTTP Server, route handler, entity handler, SQL translator, and DB adapters. -version: 1.8.7 +version: 1.9.0 homepage: https://github.com/Colossus-Services/bones_api environment: - sdk: '>=3.5.0 <4.0.0' + sdk: '>=3.6.0 <4.0.0' executables: bones_api: @@ -12,19 +12,19 @@ executables: dependencies: async_extension: ^1.2.14 async_events: ^1.2.0 - reflection_factory: ^2.4.10 - statistics: ^1.1.3 - swiss_knife: ^3.2.3 + reflection_factory: ^2.5.0 + statistics: ^1.2.0 + swiss_knife: ^3.3.0 data_serializer: ^1.2.1 shared_map: ^1.1.9 graph_explorer: ^1.0.2 ascii_art_tree: ^1.0.6 map_history: ^1.0.6 dart_spawner: ^1.1.0 - yaml_writer: ^2.0.1 - mercury_client: ^2.2.4 + yaml_writer: ^2.1.0 + mercury_client: ^2.3.0 project_template: ^1.1.0 - resource_portable: ^3.1.0 + resource_portable: ^3.1.2 docker_commander: ^2.1.7 args_simple: ^1.1.0 shelf_letsencrypt: ^2.0.1 @@ -36,7 +36,7 @@ dependencies: petitparser: ^6.1.0 hotreloader: ^4.3.0 logging: ^1.3.0 - collection: ^1.18.0 + collection: ^1.19.0 mime: ^1.0.6 postgres: ^2.6.4 mysql1: ^0.20.0 diff --git a/test/bones_api_test.dart b/test/bones_api_test.dart index 1c47d084..522909a5 100644 --- a/test/bones_api_test.dart +++ b/test/bones_api_test.dart @@ -974,7 +974,7 @@ class _MyHttpClientRequester extends mercury_client.HttpClientRequester { response = await _getURL( request.requestURL, method: APIRequestMethod.POST, - payload: request.sendData, + payload: request.sendData as List?, payloadType: request.headerContentType, ); } else { diff --git a/test/bones_api_test.reflection.g.dart b/test/bones_api_test.reflection.g.dart index b1cf16c5..18368ba7 100644 --- a/test/bones_api_test.reflection.g.dart +++ b/test/bones_api_test.reflection.g.dart @@ -1,6 +1,6 @@ // // GENERATED CODE - DO NOT MODIFY BY HAND! -// BUILDER: reflection_factory/2.4.10 +// BUILDER: reflection_factory/2.5.0 // BUILD COMMAND: dart run build_runner build // @@ -22,7 +22,7 @@ typedef __TI = TypeInfo; typedef __PR = ParameterReflection; mixin __ReflectionMixin { - static final Version _version = Version.parse('2.4.10'); + static final Version _version = Version.parse('2.5.0'); Version get reflectionFactoryVersion => _version; @@ -126,7 +126,7 @@ class MyInfoModule$reflection extends ClassReflection this, MyInfoModule, '', - () => (APIRoot apiRoot) => MyInfoModule(apiRoot), + () => MyInfoModule.new, const <__PR>[__PR(__TR(APIRoot), 'apiRoot', false, true)], null, null, diff --git a/test/bones_api_test_entities.reflection.g.dart b/test/bones_api_test_entities.reflection.g.dart index d938bc59..148334fa 100644 --- a/test/bones_api_test_entities.reflection.g.dart +++ b/test/bones_api_test_entities.reflection.g.dart @@ -1,6 +1,6 @@ // // GENERATED CODE - DO NOT MODIFY BY HAND! -// BUILDER: reflection_factory/2.4.10 +// BUILDER: reflection_factory/2.5.0 // BUILD COMMAND: dart run build_runner build // @@ -22,7 +22,7 @@ typedef __TI = TypeInfo; typedef __PR = ParameterReflection; mixin __ReflectionMixin { - static final Version _version = Version.parse('2.4.10'); + static final Version _version = Version.parse('2.5.0'); Version get reflectionFactoryVersion => _version; @@ -164,8 +164,7 @@ class Account$reflection extends ClassReflection this, Account, 'entityReference', - () => (User user, {required EntityReference userInfo}) => - Account.entityReference(user, userInfo: userInfo), + () => Account.entityReference, const <__PR>[__PR(__TR(User), 'user', false, true)], null, const { @@ -182,8 +181,7 @@ class Account$reflection extends ClassReflection this, Account, '', - () => (User user, {Object? userInfo}) => - Account(user, userInfo: userInfo), + () => Account.new, const <__PR>[__PR(__TR(User), 'user', false, true)], null, const { @@ -192,7 +190,7 @@ class Account$reflection extends ClassReflection null); case 'empty': return ConstructorReflection(this, Account, 'empty', - () => () => Account.empty(), null, null, null, null); + () => Account.empty, null, null, null, null); default: return null; } @@ -659,18 +657,7 @@ class Address$reflection extends ClassReflection
this, Address, '', - () => (String state, String city, String street, int number, - {int? id, - List? stores, - Object? closedStores, - Object? latitude, - Object? longitude}) => - Address(state, city, street, number, - id: id, - stores: stores, - closedStores: closedStores, - latitude: latitude, - longitude: longitude), + () => Address.new, const <__PR>[ __PR(__TR.tString, 'state', false, true), __PR(__TR.tString, 'city', false, true), @@ -692,13 +679,13 @@ class Address$reflection extends ClassReflection
null); case 'empty': return ConstructorReflection
(this, Address, 'empty', - () => () => Address.empty(), null, null, null, null); + () => Address.empty, null, null, null, null); case 'frommap': return ConstructorReflection
( this, Address, 'fromMap', - () => (Map map) => Address.fromMap(map), + () => Address.fromMap, const <__PR>[__PR(__TR.tMapStringDynamic, 'map', false, true)], null, null, @@ -1262,7 +1249,7 @@ class Photo$reflection extends ClassReflection with __ReflectionMixin { this, Photo, 'fromID', - () => (String id) => Photo.fromID(id), + () => Photo.fromID, const <__PR>[__PR(__TR.tString, 'id', false, true)], null, null, @@ -1272,8 +1259,7 @@ class Photo$reflection extends ClassReflection with __ReflectionMixin { this, Photo, 'fromData', - () => - (Uint8List data, {String? id}) => Photo.fromData(data, id: id), + () => Photo.fromData, const <__PR>[__PR(__TR(Uint8List), 'data', false, true)], null, const {'id': __PR(__TR.tString, 'id', true, false)}, @@ -1283,14 +1269,14 @@ class Photo$reflection extends ClassReflection with __ReflectionMixin { this, Photo, 'from', - () => (Object o, {String? id}) => Photo.from(o, id: id), + () => Photo.from, const <__PR>[__PR(__TR.tObject, 'o', false, true)], null, const {'id': __PR(__TR.tString, 'id', true, false)}, null); case 'empty': - return ConstructorReflection(this, Photo, 'empty', - () => () => Photo.empty(), null, null, null, null); + return ConstructorReflection( + this, Photo, 'empty', () => Photo.empty, null, null, null, null); default: return null; } @@ -1814,9 +1800,7 @@ class Role$reflection extends ClassReflection with __ReflectionMixin { this, Role, '', - () => (RoleType type, - {int? id, bool enabled = true, Decimal? value}) => - Role(type, id: id, enabled: enabled, value: value), + () => Role.new, const <__PR>[__PR(__TR(RoleType), 'type', false, true)], null, const { @@ -1826,14 +1810,14 @@ class Role$reflection extends ClassReflection with __ReflectionMixin { }, null); case 'empty': - return ConstructorReflection(this, Role, 'empty', - () => () => Role.empty(), null, null, null, null); + return ConstructorReflection( + this, Role, 'empty', () => Role.empty, null, null, null, null); case 'frommap': return ConstructorReflection( this, Role, 'fromMap', - () => (Map map) => Role.fromMap(map), + () => Role.fromMap, const <__PR>[__PR(__TR.tMapStringDynamic, 'map', false, true)], null, null, @@ -2398,8 +2382,7 @@ class Store$reflection extends ClassReflection with __ReflectionMixin { this, Store, '', - () => (String name, int? number, {int? id, User? owner}) => - Store(name, number, id: id, owner: owner), + () => Store.new, const <__PR>[ __PR(__TR.tString, 'name', false, true), __PR(__TR.tInt, 'number', true, true) @@ -2411,8 +2394,8 @@ class Store$reflection extends ClassReflection with __ReflectionMixin { }, null); case 'empty': - return ConstructorReflection(this, Store, 'empty', - () => () => Store.empty(), null, null, null, null); + return ConstructorReflection( + this, Store, 'empty', () => Store.empty, null, null, null, null); default: return null; } @@ -2919,21 +2902,7 @@ class User$reflection extends ClassReflection with __ReflectionMixin { this, User, '', - () => (String email, String password, Address address, - List roles, - {int? id, - int? level, - Time? wakeUpTime, - Object? userInfo, - Object? photo, - DateTime? creationTime}) => - User(email, password, address, roles, - id: id, - level: level, - wakeUpTime: wakeUpTime, - userInfo: userInfo, - photo: photo, - creationTime: creationTime), + () => User.new, const <__PR>[ __PR(__TR.tString, 'email', false, true), __PR(__TR.tString, 'password', false, true), @@ -2953,8 +2922,8 @@ class User$reflection extends ClassReflection with __ReflectionMixin { }, null); case 'empty': - return ConstructorReflection(this, User, 'empty', - () => () => User.empty(), null, null, null, null); + return ConstructorReflection( + this, User, 'empty', () => User.empty, null, null, null, null); default: return null; } @@ -3570,14 +3539,14 @@ class UserInfo$reflection extends ClassReflection this, UserInfo, '', - () => (String info, {int? id}) => UserInfo(info, id: id), + () => UserInfo.new, const <__PR>[__PR(__TR.tString, 'info', false, true)], null, const {'id': __PR(__TR.tInt, 'id', true, false)}, null); case 'empty': return ConstructorReflection(this, UserInfo, 'empty', - () => () => UserInfo.empty(), null, null, null, null); + () => UserInfo.empty, null, null, null, null); default: return null; } diff --git a/test/bones_api_test_modules.reflection.g.dart b/test/bones_api_test_modules.reflection.g.dart index 59e27fe0..9b12398d 100644 --- a/test/bones_api_test_modules.reflection.g.dart +++ b/test/bones_api_test_modules.reflection.g.dart @@ -1,6 +1,6 @@ // // GENERATED CODE - DO NOT MODIFY BY HAND! -// BUILDER: reflection_factory/2.4.10 +// BUILDER: reflection_factory/2.5.0 // BUILD COMMAND: dart run build_runner build // @@ -22,7 +22,7 @@ typedef __TI = TypeInfo; typedef __PR = ParameterReflection; mixin __ReflectionMixin { - static final Version _version = Version.parse('2.4.10'); + static final Version _version = Version.parse('2.5.0'); Version get reflectionFactoryVersion => _version; @@ -129,7 +129,7 @@ class AboutModule$reflection extends ClassReflection this, AboutModule, '', - () => (APIRoot apiRoot) => AboutModule(apiRoot), + () => AboutModule.new, const <__PR>[__PR(__TR(APIRoot), 'apiRoot', false, true)], null, null, @@ -914,7 +914,7 @@ class UserModule$reflection extends ClassReflection this, UserModule, '', - () => (APIRoot apiRoot) => UserModule(apiRoot), + () => UserModule.new, const <__PR>[__PR(__TR(APIRoot), 'apiRoot', false, true)], null, null, diff --git a/test/bones_api_test_utils_test.reflection.g.dart b/test/bones_api_test_utils_test.reflection.g.dart index 291d2300..ff0a4aab 100644 --- a/test/bones_api_test_utils_test.reflection.g.dart +++ b/test/bones_api_test_utils_test.reflection.g.dart @@ -1,6 +1,6 @@ // // GENERATED CODE - DO NOT MODIFY BY HAND! -// BUILDER: reflection_factory/2.4.10 +// BUILDER: reflection_factory/2.5.0 // BUILD COMMAND: dart run build_runner build // @@ -22,7 +22,7 @@ typedef __TI = TypeInfo; typedef __PR = ParameterReflection; mixin __ReflectionMixin { - static final Version _version = Version.parse('2.4.10'); + static final Version _version = Version.parse('2.5.0'); Version get reflectionFactoryVersion => _version; @@ -124,7 +124,7 @@ class MyInfoModule$reflection extends ClassReflection this, MyInfoModule, '', - () => (APIRoot apiRoot) => MyInfoModule(apiRoot), + () => MyInfoModule.new, const <__PR>[__PR(__TR(APIRoot), 'apiRoot', false, true)], null, null, diff --git a/test/bones_api_utils_json_test.dart b/test/bones_api_utils_json_test.dart index 19fe1cbd..8917cc0e 100644 --- a/test/bones_api_utils_json_test.dart +++ b/test/bones_api_utils_json_test.dart @@ -443,6 +443,32 @@ void main() { equals(Role(RoleType.admin, enabled: true))); } }); + + test('dumpRuntimeTypes', () { + expect(Json.dumpRuntimeTypes(null), equals('')); + expect(Json.dumpRuntimeTypes(123), equals(':123')); + expect(Json.dumpRuntimeTypes(12.3), equals(':12.3')); + expect(Json.dumpRuntimeTypes(true), equals(':true')); + expect(Json.dumpRuntimeTypes("foo"), equals(':"foo"')); + + expect( + Json.dumpRuntimeTypes([1, 2]), + contains( + '>:[\n' + ' :1,\n' + ' :2\n' + ']', + )); + + expect( + Json.dumpRuntimeTypes({'a': 1, 'b': 2}), + contains( + '>:{\n' + ' :"a"=:1,\n' + ' :"b"=:2\n' + '}', + )); + }); }); } From c339cb73abdff2a281ae1a4dabc379aa72c0d249 Mon Sep 17 00:00:00 2001 From: gmpassos Date: Tue, 25 Feb 2025 00:25:54 -0300 Subject: [PATCH 2/4] reflection --- test/bones_api_test.reflection.g.dart | 2 +- test/bones_api_test_entities.reflection.g.dart | 16 ++++++++-------- test/bones_api_test_modules.reflection.g.dart | 4 ++-- test/bones_api_test_utils_test.reflection.g.dart | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/test/bones_api_test.reflection.g.dart b/test/bones_api_test.reflection.g.dart index 18368ba7..ec9576d3 100644 --- a/test/bones_api_test.reflection.g.dart +++ b/test/bones_api_test.reflection.g.dart @@ -61,7 +61,7 @@ class MyInfoModule$reflection extends ClassReflection } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override MyInfoModule$reflection withObject([MyInfoModule? obj]) => diff --git a/test/bones_api_test_entities.reflection.g.dart b/test/bones_api_test_entities.reflection.g.dart index 148334fa..c5879415 100644 --- a/test/bones_api_test_entities.reflection.g.dart +++ b/test/bones_api_test_entities.reflection.g.dart @@ -97,7 +97,7 @@ class Account$reflection extends ClassReflection } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override Account$reflection withObject([Account? obj]) => @@ -590,7 +590,7 @@ class Address$reflection extends ClassReflection
} @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override Address$reflection withObject([Address? obj]) => @@ -1181,7 +1181,7 @@ class Photo$reflection extends ClassReflection with __ReflectionMixin { } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override Photo$reflection withObject([Photo? obj]) => @@ -1733,7 +1733,7 @@ class Role$reflection extends ClassReflection with __ReflectionMixin { } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override Role$reflection withObject([Role? obj]) => @@ -2245,7 +2245,7 @@ class RoleType$reflection extends EnumReflection } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override RoleType$reflection withObject([RoleType? obj]) => RoleType$reflection(obj); @@ -2319,7 +2319,7 @@ class Store$reflection extends ClassReflection with __ReflectionMixin { } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override Store$reflection withObject([Store? obj]) => @@ -2839,7 +2839,7 @@ class User$reflection extends ClassReflection with __ReflectionMixin { } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override User$reflection withObject([User? obj]) => @@ -3476,7 +3476,7 @@ class UserInfo$reflection extends ClassReflection } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override UserInfo$reflection withObject([UserInfo? obj]) => diff --git a/test/bones_api_test_modules.reflection.g.dart b/test/bones_api_test_modules.reflection.g.dart index 9b12398d..c779a8af 100644 --- a/test/bones_api_test_modules.reflection.g.dart +++ b/test/bones_api_test_modules.reflection.g.dart @@ -65,7 +65,7 @@ class AboutModule$reflection extends ClassReflection } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override AboutModule$reflection withObject([AboutModule? obj]) => @@ -850,7 +850,7 @@ class UserModule$reflection extends ClassReflection } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override UserModule$reflection withObject([UserModule? obj]) => diff --git a/test/bones_api_test_utils_test.reflection.g.dart b/test/bones_api_test_utils_test.reflection.g.dart index ff0a4aab..f8ce9b6d 100644 --- a/test/bones_api_test_utils_test.reflection.g.dart +++ b/test/bones_api_test_utils_test.reflection.g.dart @@ -59,7 +59,7 @@ class MyInfoModule$reflection extends ClassReflection } @override - Version get languageVersion => Version.parse('3.5.0'); + Version get languageVersion => Version.parse('3.6.0'); @override MyInfoModule$reflection withObject([MyInfoModule? obj]) => From c73fa88bd095c785b246dcf81ec9647338c17bec Mon Sep 17 00:00:00 2001 From: gmpassos Date: Tue, 25 Feb 2025 00:32:23 -0300 Subject: [PATCH 3/4] - `APIPlatformBrowser`: - Change use of `dart:html` (deprecated) to package `web`. --- CHANGELOG.md | 4 ++++ lib/src/bones_api_platform.dart | 4 ++-- lib/src/bones_api_platform_browser.dart | 13 +++++++------ pubspec.yaml | 1 + 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64ababfc..dd0b703a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ## 1.9.0 +- `APIPlatformBrowser`: + - Change use of `dart:html` (deprecated) to package `web`. + - `Json`: - `defaultFieldValueResolver`: optimize primitives parsing (String, bool, int, double, num) . - Added `dumpRuntimeTypes`. @@ -13,6 +16,7 @@ - mercury_client: ^2.3.0 - resource_portable: ^3.1.2 - collection: ^1.19.0 +- web: ^1.1.0 ## 1.8.7 diff --git a/lib/src/bones_api_platform.dart b/lib/src/bones_api_platform.dart index 25007bda..5792b919 100644 --- a/lib/src/bones_api_platform.dart +++ b/lib/src/bones_api_platform.dart @@ -4,8 +4,8 @@ import 'dart:typed_data'; import 'package:args_simple/args_simple.dart'; import 'bones_api_platform_generic.dart' - if (dart.library.html) 'bones_api_platform_browser.dart' - if (dart.library.io) 'bones_api_platform_io.dart'; + if (dart.library.io) 'bones_api_platform_io.dart' + if (dart.library.js_interop) 'bones_api_platform_browser.dart'; enum APIPlatformType { generic, diff --git a/lib/src/bones_api_platform_browser.dart b/lib/src/bones_api_platform_browser.dart index 1ad4169b..f63ba5d3 100644 --- a/lib/src/bones_api_platform_browser.dart +++ b/lib/src/bones_api_platform_browser.dart @@ -1,10 +1,11 @@ import 'dart:async'; -// ignore: deprecated_member_use -import 'dart:html'; +import 'dart:js_interop'; + import 'dart:typed_data'; import 'package:mercury_client/mercury_client.dart'; import 'package:swiss_knife/swiss_knife.dart'; +import 'package:web/web.dart' as web; import 'bones_api_extension.dart'; import 'bones_api_platform.dart'; @@ -65,13 +66,13 @@ class APIPlatformBrowser extends APIPlatform { void stdout(Object? o) => stdoutLn(o); @override - void stdoutLn(Object? o) => window.console.log(o); + void stdoutLn(Object? o) => web.console.log(o?.jsify()); @override void stderr(Object? o) => stderrLn(o); @override - void stderrLn(Object? o) => window.console.error(o); + void stderrLn(Object? o) => web.console.error(o?.jsify()); static final RegExp _regExpUriStart = RegExp(r'^\w+:/'); @@ -131,7 +132,7 @@ class APIPlatformBrowser extends APIPlatform { @override Iterable get propertiesKeys { - var location = window.location.href.trim(); + var location = web.window.location.href.trim(); var uri = location.isNotEmpty ? Uri.tryParse(location) : null; return {..._properties.keys, ...?uri?.queryParameters.keys}; @@ -152,7 +153,7 @@ class APIPlatformBrowser extends APIPlatform { var prev = _properties[key]; if (prev != null) return prev; - var location = window.location.href.trim(); + var location = web.window.location.href.trim(); if (location.isEmpty) return defaultValue; var uri = Uri.tryParse(location); diff --git a/pubspec.yaml b/pubspec.yaml index 059dc06b..d11bd5c0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -49,6 +49,7 @@ dependencies: http: ^1.3.0 googleapis_auth: ^1.6.0 crclib: ^3.0.0 + web: ^1.1.0 dev_dependencies: lints: ^5.1.1 From 13022a2fa274d316e806c4ffe075f56eb9604acf Mon Sep 17 00:00:00 2001 From: gmpassos Date: Tue, 25 Feb 2025 00:44:00 -0300 Subject: [PATCH 4/4] bones_api_config_test.dart --- test/bones_api_config_test.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/bones_api_config_test.dart b/test/bones_api_config_test.dart index f35db4ae..b13e367e 100644 --- a/test/bones_api_config_test.dart +++ b/test/bones_api_config_test.dart @@ -136,9 +136,9 @@ y=zzz expect( apiConfig.toYAMLEncoded(), equals('foo: 123\n' - 'bar: \'abc\'\n' + 'bar: "abc"\n' 'password: 123456\n' - 'baz: \'%bar%\'\n')); + 'baz: "%bar%"\n')); expect( apiConfig.toPropertiesEncoded(),