From f9b07b247794821138fcf860a41fd56061de81a7 Mon Sep 17 00:00:00 2001 From: thomashii Date: Mon, 7 Feb 2022 20:42:32 +0800 Subject: [PATCH] Updated ORM generator --- packages/orm/angel_migration/CHANGELOG.md | 5 ++++ packages/orm/angel_migration/README.md | 4 ++-- .../orm/angel_migration/lib/src/table.dart | 4 ++-- packages/orm/angel_migration/pubspec.yaml | 7 ++++-- .../orm/angel_migration_runner/CHANGELOG.md | 4 ++++ packages/orm/angel_migration_runner/README.md | 4 ++-- .../orm/angel_migration_runner/pubspec.yaml | 12 ++++++---- packages/orm/angel_orm/CHANGELOG.md | 5 ++++ packages/orm/angel_orm/README.md | 3 ++- packages/orm/angel_orm/lib/src/query.dart | 14 +++++++---- packages/orm/angel_orm/pubspec.yaml | 2 +- packages/orm/angel_orm_generator/CHANGELOG.md | 5 ++++ .../orm/angel_orm_generator/example/main.dart | 12 ++++++++-- .../lib/src/orm_generator.dart | 3 ++- packages/orm/angel_orm_generator/pubspec.yaml | 14 ++++++----- .../angel_orm_mysql/lib/angel3_orm_mysql.dart | 16 ++++++------- packages/orm/angel_orm_mysql/pubspec.yaml | 5 +--- .../orm/angel_orm_mysql/test/all_test.dart | 6 +++-- .../orm/angel_orm_mysql/test/orm_debug.dart | 4 ++-- .../angel_orm_test/lib/src/models/leg.g.dart | 2 +- .../lib/src/standalone_test.dart | 2 +- .../serialize/angel_serialize/CHANGELOG.md | 9 ++++++++ .../angel_serialize/lib/angel3_serialize.dart | 23 ------------------- .../serialize/angel_serialize/pubspec.yaml | 4 ++-- .../angel_serialize_generator/CHANGELOG.md | 5 ++++ .../lib/angel3_serialize_generator.dart | 1 - .../lib/build_context.dart | 1 - .../angel_serialize_generator/pubspec.yaml | 8 +++---- 28 files changed, 108 insertions(+), 76 deletions(-) diff --git a/packages/orm/angel_migration/CHANGELOG.md b/packages/orm/angel_migration/CHANGELOG.md index 9e56275d..b1005bb5 100755 --- a/packages/orm/angel_migration/CHANGELOG.md +++ b/packages/orm/angel_migration/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 4.0.4 + +* Updated README +* Removed deprecated + ## 4.0.3 * Updated README diff --git a/packages/orm/angel_migration/README.md b/packages/orm/angel_migration/README.md index c15aa515..4b5c0e73 100755 --- a/packages/orm/angel_migration/README.md +++ b/packages/orm/angel_migration/README.md @@ -10,5 +10,5 @@ A database migration framework built for Angel3 ORM. ## Supported database * PostgreSQL version 10 or later -* MySQL 8.0 or later -* MariaDB 10.2.1 or later +* MySQL 8.0.x +* MariaDB 10.2.x diff --git a/packages/orm/angel_migration/lib/src/table.dart b/packages/orm/angel_migration/lib/src/table.dart index 084a9c62..15deb5c3 100755 --- a/packages/orm/angel_migration/lib/src/table.dart +++ b/packages/orm/angel_migration/lib/src/table.dart @@ -19,8 +19,8 @@ abstract class Table { MigrationColumn date(String name) => declare(name, ColumnType.date); - @deprecated - MigrationColumn dateTime(String name) => timeStamp(name, timezone: true); + //@deprecated + //MigrationColumn dateTime(String name) => timeStamp(name, timezone: true); MigrationColumn timeStamp(String name, {bool timezone = false}) { if (timezone != true) return declare(name, ColumnType.timeStamp); diff --git a/packages/orm/angel_migration/pubspec.yaml b/packages/orm/angel_migration/pubspec.yaml index bb365806..69fe4f0b 100755 --- a/packages/orm/angel_migration/pubspec.yaml +++ b/packages/orm/angel_migration/pubspec.yaml @@ -1,11 +1,14 @@ name: angel3_migration -version: 4.0.3 +version: 4.1.0 description: Database migration runtime for Angel3 ORM. Use this package to define schemas. homepage: https://angel3-framework.web.app/ repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_migration environment: sdk: '>=2.12.0 <3.0.0' dependencies: - angel3_orm: ^4.0.0 + angel3_orm: ^4.1.0 dev_dependencies: lints: ^1.0.0 +dependency_overrides: + angel3_orm: + path: ../angel_orm \ No newline at end of file diff --git a/packages/orm/angel_migration_runner/CHANGELOG.md b/packages/orm/angel_migration_runner/CHANGELOG.md index a6fc43b0..39cbd741 100755 --- a/packages/orm/angel_migration_runner/CHANGELOG.md +++ b/packages/orm/angel_migration_runner/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## 4.1.2 + +* Updated README + ## 4.1.1 * Updated README diff --git a/packages/orm/angel_migration_runner/README.md b/packages/orm/angel_migration_runner/README.md index 6490ea41..9e70ff49 100755 --- a/packages/orm/angel_migration_runner/README.md +++ b/packages/orm/angel_migration_runner/README.md @@ -10,5 +10,5 @@ Command-line based database migration runner for Angel3 ORM. Supported database: * PostgreSQL version 10 or later -* MySQL 8.0 or later -* MariaDB 10.2.1 or later +* MySQL 8.0.x +* MariaDB 10.2.x diff --git a/packages/orm/angel_migration_runner/pubspec.yaml b/packages/orm/angel_migration_runner/pubspec.yaml index c9d453c6..3a24cbee 100755 --- a/packages/orm/angel_migration_runner/pubspec.yaml +++ b/packages/orm/angel_migration_runner/pubspec.yaml @@ -1,13 +1,13 @@ name: angel3_migration_runner -version: 4.1.1 +version: 4.1.2 description: Command-line based database migration runner for Angel3's ORM. homepage: https://angel3-framework.web.app/ repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_migration_runner environment: sdk: '>=2.12.0 <3.0.0' dependencies: - angel3_migration: ^4.0.0 - angel3_orm: ^4.0.0 + angel3_migration: ^4.1.0 + angel3_orm: ^4.1.0 args: ^2.1.0 charcode: ^1.2.0 postgres: ^2.4.0 @@ -15,4 +15,8 @@ dependencies: logging: ^1.0.0 dev_dependencies: lints: ^1.0.0 - +dependency_overrides: + angel3_orm: + path: ../angel_orm + angel3_migration: + path: ../angel_migration diff --git a/packages/orm/angel_orm/CHANGELOG.md b/packages/orm/angel_orm/CHANGELOG.md index 58f1887d..f8d60f70 100644 --- a/packages/orm/angel_orm/CHANGELOG.md +++ b/packages/orm/angel_orm/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 4.1.0 + +* Added `MySQLDialect` to handle MySQL database specific features +* Updated `insert` and `update` query to support database without writable CTE + ## 4.0.6 * Fixed multiple `orderBy` error diff --git a/packages/orm/angel_orm/README.md b/packages/orm/angel_orm/README.md index 43f12ff6..f8c32a55 100644 --- a/packages/orm/angel_orm/README.md +++ b/packages/orm/angel_orm/README.md @@ -10,6 +10,7 @@ Runtime support for Angel3 ORM. Includes a clean, database-agnostic query builde ## Supported database * PostgreSQL version 10, 11, 12, 13 and 14 -* MySQL 8.0 or later +* MariaDB 10.2.x +* MySQL 8.0.x For documentation about the ORM, see [Developer Guide](https://angel3-docs.dukefirehawk.com/guides/orm) diff --git a/packages/orm/angel_orm/lib/src/query.dart b/packages/orm/angel_orm/lib/src/query.dart index 0a2a5bb6..b96f359e 100644 --- a/packages/orm/angel_orm/lib/src/query.dart +++ b/packages/orm/angel_orm/lib/src/query.dart @@ -343,7 +343,7 @@ abstract class Query extends QueryBase { Future> delete(QueryExecutor executor) { var sql = compile({}, preamble: 'DELETE', withFields: false); - //_log.fine("Delete Query = $sql"); + //_log.warning("Delete Query = $sql"); if (_joins.isEmpty) { return executor @@ -379,14 +379,20 @@ abstract class Query extends QueryBase { var returning = fields.map(adornWithTableName).join(', '); sql = 'WITH $tableName as ($insertion RETURNING $returning) ' + sql; } else if (executor.dialect is MySQLDialect) { - var returningSelect = values?.compileInsertSelect(this, tableName); - returningSql = '$sql where $returningSelect'; + // Default to using 'id' as primary key in model + if (fields.contains("id")) { + returningSql = '$sql where $tableName.id=?'; + } else { + var returningSelect = values?.compileInsertSelect(this, tableName); + returningSql = '$sql where $returningSelect'; + } + sql = '$insertion'; } else { throw ArgumentError("Unsupported database dialect."); } - _log.warning("Insert Query = $sql"); + //_log.warning("Insert Query = $sql"); return executor .query(tableName, sql, substitutionValues, diff --git a/packages/orm/angel_orm/pubspec.yaml b/packages/orm/angel_orm/pubspec.yaml index 5f2b1d13..860f8b12 100644 --- a/packages/orm/angel_orm/pubspec.yaml +++ b/packages/orm/angel_orm/pubspec.yaml @@ -1,5 +1,5 @@ name: angel3_orm -version: 4.0.6 +version: 4.1.0 description: Runtime support for Angel3 ORM. Includes base classes for queries. homepage: https://angel3-framework.web.app/ repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm diff --git a/packages/orm/angel_orm_generator/CHANGELOG.md b/packages/orm/angel_orm_generator/CHANGELOG.md index d9447e1a..3eb98587 100644 --- a/packages/orm/angel_orm_generator/CHANGELOG.md +++ b/packages/orm/angel_orm_generator/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 5.0.0 + +* Updated `analyzer` to version 3.x +* Updated min SDK to 2.14.x + ## 4.3.0 * Added `where.raw()` diff --git a/packages/orm/angel_orm_generator/example/main.dart b/packages/orm/angel_orm_generator/example/main.dart index 434ad9f1..cc2e1b7e 100644 --- a/packages/orm/angel_orm_generator/example/main.dart +++ b/packages/orm/angel_orm_generator/example/main.dart @@ -21,8 +21,12 @@ class _FakeExecutor extends QueryExecutor { @override Future> query( - String tableName, String? query, Map substitutionValues, - [returningFields = const []]) async { + String tableName, + String? query, + Map substitutionValues, { + String returningQuery = '', + List returningFields = const [], + }) async { var now = DateTime.now(); print( '_FakeExecutor received query: $query and values: $substitutionValues'); @@ -35,6 +39,10 @@ class _FakeExecutor extends QueryExecutor { Future transaction(FutureOr Function(QueryExecutor) f) { throw UnsupportedError('Transactions are not supported.'); } + + @override + // TODO: implement dialect + Dialect get dialect => PostgreSQLDialect(); } @orm diff --git a/packages/orm/angel_orm_generator/lib/src/orm_generator.dart b/packages/orm/angel_orm_generator/lib/src/orm_generator.dart index eb75ef9b..0d6dd376 100644 --- a/packages/orm/angel_orm_generator/lib/src/orm_generator.dart +++ b/packages/orm/angel_orm_generator/lib/src/orm_generator.dart @@ -110,7 +110,8 @@ class OrmGenerator extends GeneratorForAnnotation { var type = ctx.columns[field.name]?.type; if (type == null) continue; if (floatTypes.contains(type)) { - args[name] = literalString('text'); + //args[name] = literalString('text'); + args[name] = literalString('char'); } } diff --git a/packages/orm/angel_orm_generator/pubspec.yaml b/packages/orm/angel_orm_generator/pubspec.yaml index e3b9451a..84914431 100644 --- a/packages/orm/angel_orm_generator/pubspec.yaml +++ b/packages/orm/angel_orm_generator/pubspec.yaml @@ -1,16 +1,16 @@ name: angel3_orm_generator -version: 4.3.0 +version: 5.0.0 description: Code generators for Angel3 ORM. Generates query builder classes. homepage: https://angel3-framework.web.app/ repository: https://github.com/dukefirehawk/angel/tree/master/packages/orm/angel_orm_generator environment: - sdk: '>=2.12.0 <3.0.0' + sdk: '>=2.14.0 <3.0.0' dependencies: - analyzer: ^2.0.0 + analyzer: ^3.0.0 angel3_model: ^3.0.0 angel3_serialize: ^4.0.0 - angel3_orm: ^4.0.0 - angel3_serialize_generator: ^4.0.0 + angel3_orm: ^4.1.0 + angel3_serialize_generator: ^5.0.0 inflection3: ^0.5.3+1 build: ^2.0.1 build_config: ^1.0.0 @@ -25,7 +25,7 @@ dependencies: optional: ^6.0.0 dev_dependencies: angel3_framework: ^4.2.0 - angel3_migration: ^4.0.0 + angel3_migration: ^4.1.0 build_runner: ^2.0.1 postgres: ^2.4.0 test: ^1.17.3 @@ -35,4 +35,6 @@ dependency_overrides: path: ../angel_orm angel3_migration: path: ../angel_migration + angel3_serialize_generator: + path: ../../serialize/angel_serialize_generator \ No newline at end of file diff --git a/packages/orm/angel_orm_mysql/lib/angel3_orm_mysql.dart b/packages/orm/angel_orm_mysql/lib/angel3_orm_mysql.dart index 55334902..914068ec 100644 --- a/packages/orm/angel_orm_mysql/lib/angel3_orm_mysql.dart +++ b/packages/orm/angel_orm_mysql/lib/angel3_orm_mysql.dart @@ -90,9 +90,9 @@ class MySqlExecutor extends QueryExecutor { var params = substitutionValues.values.toList(); - logger?.warning('Query: $query'); - logger?.warning('Values: $params'); - logger?.warning('Returning Query: $returningQuery'); + //logger?.warning('Query: $query'); + //logger?.warning('Values: $params'); + //logger?.warning('Returning Query: $returningQuery'); if (returningQuery.isNotEmpty) { // Handle insert, update and delete @@ -101,12 +101,12 @@ class MySqlExecutor extends QueryExecutor { var result = await _connection.query(query, params); query = returningQuery; - logger?.warning('Result.insertId: ${result.insertId}'); - - // No primary key + //logger?.warning('Result.insertId: ${result.insertId}'); + // Has primary key //if (result.insertId != 0) { - // params = [result.insertId]; - //} + if (returningQuery.endsWith('.id=?')) { + params = [result.insertId]; + } } else if (query.startsWith("UPDATE")) { await _connection.query(query, params); query = returningQuery; diff --git a/packages/orm/angel_orm_mysql/pubspec.yaml b/packages/orm/angel_orm_mysql/pubspec.yaml index 7393bc90..bc30de7c 100644 --- a/packages/orm/angel_orm_mysql/pubspec.yaml +++ b/packages/orm/angel_orm_mysql/pubspec.yaml @@ -11,11 +11,8 @@ dependencies: mysql1: ^0.19.0 optional: ^6.0.0 dev_dependencies: - angel3_migration: ^4.0.0 - angel3_orm_generator: ^4.0.0 - build_runner: ^2.0.0 - test: ^1.17.0 angel3_orm_test: ^3.0.0 + test: ^1.17.0 lints: ^1.0.0 dependency_overrides: angel3_orm_test: diff --git a/packages/orm/angel_orm_mysql/test/all_test.dart b/packages/orm/angel_orm_mysql/test/all_test.dart index e7bd1f89..57849fd9 100644 --- a/packages/orm/angel_orm_mysql/test/all_test.dart +++ b/packages/orm/angel_orm_mysql/test/all_test.dart @@ -20,8 +20,10 @@ void main() { group('enumAndNested', () => enumAndNestedTests(my(['has_car']), close: closeMy)); group('hasMany', () => hasManyTests(my(['tree', 'fruit']), close: closeMy)); - group('hasMap', () => hasMapTests(my(['has_map']), close: closeMy)); - group('hasOne', () => hasOneTests(my(['leg', 'foot']), close: closeMy)); + // NOTE: MySQL/MariaDB do not support jsonb data type + //group('hasMap', () => hasMapTests(my(['has_map']), close: closeMy)); + // NOTE: mysql1 driver do not support CAST(); + //group('hasOne', () => hasOneTests(my(['leg', 'foot']), close: closeMy)); group( 'manyToMany', () => diff --git a/packages/orm/angel_orm_mysql/test/orm_debug.dart b/packages/orm/angel_orm_mysql/test/orm_debug.dart index 96b21778..7ceeadf9 100644 --- a/packages/orm/angel_orm_mysql/test/orm_debug.dart +++ b/packages/orm/angel_orm_mysql/test/orm_debug.dart @@ -16,6 +16,6 @@ void main() async { belongsToTests(my(['author', 'book']), close: closeMy); - //edgeCaseTests(my(['unorthodox', 'weird_join', 'song', 'numba']), - // close: closeMy); + //hasOneTests(my(['leg', 'foot']), close: closeMy); + //standaloneTests(my(['car']), close: closeMy); } diff --git a/packages/orm/angel_orm_test/lib/src/models/leg.g.dart b/packages/orm/angel_orm_test/lib/src/models/leg.g.dart index e2d692dc..1110200f 100644 --- a/packages/orm/angel_orm_test/lib/src/models/leg.g.dart +++ b/packages/orm/angel_orm_test/lib/src/models/leg.g.dart @@ -203,7 +203,7 @@ class FootQuery extends Query { @override Map get casts { - return {'n_toes': 'text'}; + return {'n_toes': 'char'}; } @override diff --git a/packages/orm/angel_orm_test/lib/src/standalone_test.dart b/packages/orm/angel_orm_test/lib/src/standalone_test.dart index f947ac9c..fee387d5 100644 --- a/packages/orm/angel_orm_test/lib/src/standalone_test.dart +++ b/packages/orm/angel_orm_test/lib/src/standalone_test.dart @@ -77,7 +77,7 @@ void standaloneTests(FutureOr Function() createExecutor, var sportsCars = CarQuery()..where!.familyFriendly.isFalse; cars = await sportsCars.get(executor!); - //print(cars.map((c) => c.toJson())); + print(cars.map((c) => c.toJson())); var car = cars.first; expect(car.make, ferrari!.make); diff --git a/packages/serialize/angel_serialize/CHANGELOG.md b/packages/serialize/angel_serialize/CHANGELOG.md index 24f559a4..d59da367 100644 --- a/packages/serialize/angel_serialize/CHANGELOG.md +++ b/packages/serialize/angel_serialize/CHANGELOG.md @@ -1,5 +1,14 @@ # Change Log +## 5.0.0 + +* Updated `analyzer` to version 3.x +* Updated min SDK to 2.14.x + +## 4.1.1 + +* Removed deprecated + ## 4.1.0 * Updated README diff --git a/packages/serialize/angel_serialize/lib/angel3_serialize.dart b/packages/serialize/angel_serialize/lib/angel3_serialize.dart index 6b20dbba..cf0fa14a 100644 --- a/packages/serialize/angel_serialize/lib/angel3_serialize.dart +++ b/packages/serialize/angel_serialize/lib/angel3_serialize.dart @@ -87,8 +87,6 @@ class Serializable { const Serializable( {this.serializers = const [Serializers.map, Serializers.json], this.autoSnakeCaseNames = true, - // ignore: deprecated_member_use_from_same_package - //@deprecated this.autoIdAndDateFields = true, this.includeAnnotations = const []}); /// A list of enabled serialization modes. @@ -99,10 +97,6 @@ class Serializable { /// Overrides the setting in `SerializerGenerator`. final bool autoSnakeCaseNames; - /// Overrides the setting in `JsonModelGenerator`. - //@deprecated - //final bool autoIdAndDateFields; - /// A list of constant members to affix to the generated class. final List includeAnnotations; } @@ -130,20 +124,3 @@ abstract class Serializers { /// Generate a TypeScript definition file (`.d.ts`) for use on the client-side. static const int typescript = 2; } - -/* -@deprecated -class DefaultValue { - final value; - - const DefaultValue(this.value); -} - -@deprecated -/// Prefer [SerializableField] instead. -class Alias { - final String name; - - const Alias(this.name); -} -*/ \ No newline at end of file diff --git a/packages/serialize/angel_serialize/pubspec.yaml b/packages/serialize/angel_serialize/pubspec.yaml index aa52f752..9a853785 100644 --- a/packages/serialize/angel_serialize/pubspec.yaml +++ b/packages/serialize/angel_serialize/pubspec.yaml @@ -1,8 +1,8 @@ name: angel3_serialize -version: 4.1.0 +version: 4.1.1 description: Static annotations powering Angel3 model serialization. Combine with angel3_serialize_generator for flexible modeling. homepage: https://angel3-framework.web.app/ -repository: https://github.com/dukefirehawk/angel/tree/angel3/packages/serialize/angel_serialize +repository: https://github.com/dukefirehawk/angel/tree/master/packages/serialize/angel_serialize environment: sdk: '>=2.12.0 <3.0.0' dependencies: diff --git a/packages/serialize/angel_serialize_generator/CHANGELOG.md b/packages/serialize/angel_serialize_generator/CHANGELOG.md index 481f155b..a4991c69 100644 --- a/packages/serialize/angel_serialize_generator/CHANGELOG.md +++ b/packages/serialize/angel_serialize_generator/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 5.0.0 + +* Updated `analyzer` to version 3.x +* Updated min SDK to 2.14.x + ## 4.3.0 * Updated to use `package:belatuk_code_buffer` diff --git a/packages/serialize/angel_serialize_generator/lib/angel3_serialize_generator.dart b/packages/serialize/angel_serialize_generator/lib/angel3_serialize_generator.dart index fdd1cf29..01ea5ed8 100644 --- a/packages/serialize/angel_serialize_generator/lib/angel3_serialize_generator.dart +++ b/packages/serialize/angel_serialize_generator/lib/angel3_serialize_generator.dart @@ -7,7 +7,6 @@ import 'package:analyzer/dart/constant/value.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; -import 'package:angel3_model/angel3_model.dart'; import 'package:angel3_serialize/angel3_serialize.dart'; import 'package:build/build.dart'; import 'package:belatuk_code_buffer/belatuk_code_buffer.dart'; diff --git a/packages/serialize/angel_serialize_generator/lib/build_context.dart b/packages/serialize/angel_serialize_generator/lib/build_context.dart index 2dc8e268..c7dbfb8d 100644 --- a/packages/serialize/angel_serialize_generator/lib/build_context.dart +++ b/packages/serialize/angel_serialize_generator/lib/build_context.dart @@ -5,7 +5,6 @@ import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/src/dart/element/element.dart'; import 'package:angel3_serialize/angel3_serialize.dart'; import 'package:build/build.dart'; -import 'package:meta/meta.dart'; import 'package:path/path.dart' as p; import 'package:recase/recase.dart'; import 'package:source_gen/source_gen.dart'; diff --git a/packages/serialize/angel_serialize_generator/pubspec.yaml b/packages/serialize/angel_serialize_generator/pubspec.yaml index 824634ba..7fa5b0a7 100644 --- a/packages/serialize/angel_serialize_generator/pubspec.yaml +++ b/packages/serialize/angel_serialize_generator/pubspec.yaml @@ -1,12 +1,12 @@ name: angel3_serialize_generator -version: 4.3.0 +version: 5.0.0 description: Angel3 model serialization generators, designed for use with Angel. Combine with angel_serialize for flexible modeling. homepage: https://angel3-framework.web.app/ -repository: https://github.com/dukefirehawk/angel/tree/angel3/packages/serialize/angel_serialize_generator +repository: https://github.com/dukefirehawk/angel/tree/master/packages/serialize/angel_serialize_generator environment: - sdk: '>=2.12.0 <3.0.0' + sdk: '>=2.14.0 <3.0.0' dependencies: - analyzer: ^2.0.0 + analyzer: ^3.0.0 angel3_model: ^3.0.0 angel3_serialize: ^4.1.0 belatuk_code_buffer: ^3.0.0