Browse Source

[Dart] Upgraded Angel3 Framework to 7.0.0 (#7586)

* Upgraded to version 7.0.0

* Added MySQL support

* Updated Angel3 test cases

* Updated docker image
Thomas Hii 2 years ago
parent
commit
a5e4c0e780
40 changed files with 2155 additions and 153 deletions
  1. 22 0
      frameworks/Dart/angel3/angel3-mysql.dockerfile
  2. 2 2
      frameworks/Dart/angel3/angel3.dockerfile
  3. 49 25
      frameworks/Dart/angel3/benchmark_config.json
  4. 1 0
      frameworks/Dart/angel3/orm-mysql/analysis_options.yaml
  5. 12 0
      frameworks/Dart/angel3/orm-mysql/config/default.yaml
  6. 2 0
      frameworks/Dart/angel3/orm-mysql/config/development.yaml
  7. 3 0
      frameworks/Dart/angel3/orm-mysql/config/production.yaml
  8. 2 0
      frameworks/Dart/angel3/orm-mysql/lib/models.dart
  9. 19 0
      frameworks/Dart/angel3/orm-mysql/lib/orm_mysql_app.dart
  10. 35 0
      frameworks/Dart/angel3/orm-mysql/lib/src/config/config.dart
  11. 75 0
      frameworks/Dart/angel3/orm-mysql/lib/src/config/plugins/orm.dart
  12. 10 0
      frameworks/Dart/angel3/orm-mysql/lib/src/config/plugins/plugins.dart
  13. 16 0
      frameworks/Dart/angel3/orm-mysql/lib/src/models/fortune.dart
  14. 212 0
      frameworks/Dart/angel3/orm-mysql/lib/src/models/fortune.g.dart
  15. 16 0
      frameworks/Dart/angel3/orm-mysql/lib/src/models/world.dart
  16. 216 0
      frameworks/Dart/angel3/orm-mysql/lib/src/models/world.g.dart
  17. 131 0
      frameworks/Dart/angel3/orm-mysql/lib/src/routes/controllers/controllers.dart
  18. 62 0
      frameworks/Dart/angel3/orm-mysql/lib/src/routes/routes.dart
  19. 13 0
      frameworks/Dart/angel3/orm-mysql/lib/src/services/services.dart
  20. 845 0
      frameworks/Dart/angel3/orm-mysql/pubspec.lock
  21. 40 0
      frameworks/Dart/angel3/orm-mysql/pubspec.yaml
  22. 28 0
      frameworks/Dart/angel3/orm-mysql/run/dev.dart
  23. 29 0
      frameworks/Dart/angel3/orm-mysql/run/prod.dart
  24. 20 0
      frameworks/Dart/angel3/orm-mysql/templates/fortunes.mustache
  25. 43 0
      frameworks/Dart/angel3/orm-mysql/test/all_test.dart
  26. 5 0
      frameworks/Dart/angel3/orm-mysql/views/error.jael
  27. 5 0
      frameworks/Dart/angel3/orm-mysql/views/hello.jael
  28. 16 0
      frameworks/Dart/angel3/orm-mysql/views/layout.jael
  29. 14 0
      frameworks/Dart/angel3/orm-mysql/views/listing.jael
  30. 27 0
      frameworks/Dart/angel3/orm-mysql/web/css/site.css
  31. BIN
      frameworks/Dart/angel3/orm-mysql/web/images/favicon.png
  32. 2 0
      frameworks/Dart/angel3/orm-mysql/web/robots.txt
  33. 1 1
      frameworks/Dart/angel3/orm/config/default.yaml
  34. 1 1
      frameworks/Dart/angel3/orm/lib/src/config/plugins/orm.dart
  35. 2 2
      frameworks/Dart/angel3/orm/lib/src/routes/controllers/controllers.dart
  36. 101 101
      frameworks/Dart/angel3/orm/pubspec.lock
  37. 20 20
      frameworks/Dart/angel3/orm/pubspec.yaml
  38. 0 1
      frameworks/Dart/angel3/orm/views/layout.jael
  39. 32 0
      frameworks/Dart/dia/src/.dart_tool/package_config.json
  40. 26 0
      frameworks/Dart/dia/src/pubspec.lock

+ 22 - 0
frameworks/Dart/angel3/angel3-mysql.dockerfile

@@ -0,0 +1,22 @@
+FROM dart:2.18.1
+
+COPY ./orm-mysql/config /app/config
+COPY ./orm-mysql/lib /app/lib
+COPY ./orm-mysql/run /app/run
+COPY ./orm-mysql/views /app/views
+COPY ./orm-mysql/web /app/web
+COPY ./orm-mysql/*.yaml /app/
+
+WORKDIR /app
+RUN dart pub upgrade
+
+#RUN chmod -R 777 /app/run
+
+# Optionally build generaed sources.
+# RUN pub run build_runner build
+
+# Set environment, start server
+ENV ANGEL_ENV=production
+EXPOSE 8080
+CMD dart ./run/prod.dart -p 8080 -a 0.0.0.0 -j 100
+#CMD dart ./run/dev.dart

+ 2 - 2
frameworks/Dart/angel3/angel3.dockerfile

@@ -1,4 +1,4 @@
-FROM dart:latest
+FROM dart:2.18.1
 
 COPY ./orm/config /app/config
 COPY ./orm/lib /app/lib
@@ -18,4 +18,4 @@ RUN dart pub upgrade
 # Set environment, start server
 ENV ANGEL_ENV=production
 EXPOSE 8080
-CMD dart ./run/prod.dart -p 8080 -a 0.0.0.0 -j 50
+CMD dart ./run/prod.dart -p 8080 -a 0.0.0.0 -j 100

+ 49 - 25
frameworks/Dart/angel3/benchmark_config.json

@@ -1,28 +1,52 @@
 {
   "framework": "angel3",
-  "tests": [{
-     "default": {
-       "json_url": "/json",
-       "plaintext_url": "/plaintext",
-       "db_url": "/db",
-       "query_url": "/query?queries=",
-       "fortune_url": "/fortunes",
-       "update_url": "/updates?queries=",
-       "port": 8080,
-       "approach": "Realistic",
-       "classification": "Fullstack",
-       "database": "Postgres",
-       "framework": "angel3",
-       "language": "Dart",
-       "flavor": "None",
-       "orm": "Micro",
-       "platform": "angel3",
-       "webserver": "None",
-       "os": "Linux",
-       "database_os": "Linux",
-       "display_name": "Angel3",
-       "notes": "",
-       "versus": "None"
-     }
-  }]
+  "tests": [
+    {
+      "default": {
+        "json_url": "/json",
+        "plaintext_url": "/plaintext",
+        "db_url": "/db",
+        "query_url": "/query?queries=",
+        "fortune_url": "/fortunes",
+        "update_url": "/updates?queries=",
+        "port": 8080,
+        "approach": "Realistic",
+        "classification": "Fullstack",
+        "database": "Postgres",
+        "framework": "angel3",
+        "language": "Dart",
+        "flavor": "None",
+        "orm": "Micro",
+        "platform": "angel3",
+        "webserver": "None",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "Angel3",
+        "notes": "",
+        "versus": "None"
+      },
+      "mysql": {
+        "json_url": "/json",
+        "plaintext_url": "/plaintext",
+        "db_url": "/db",
+        "query_url": "/query?queries=",
+        "fortune_url": "/fortunes",
+        "port": 8080,
+        "approach": "Realistic",
+        "classification": "Fullstack",
+        "database": "MySQL",
+        "framework": "angel3",
+        "language": "Dart",
+        "flavor": "None",
+        "orm": "Micro",
+        "platform": "angel3",
+        "webserver": "None",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "Angel3",
+        "notes": "",
+        "versus": "None"
+      }
+    }
+  ]
 }

+ 1 - 0
frameworks/Dart/angel3/orm-mysql/analysis_options.yaml

@@ -0,0 +1 @@
+include: package:lints/recommended.yaml

+ 12 - 0
frameworks/Dart/angel3/orm-mysql/config/default.yaml

@@ -0,0 +1,12 @@
+# Default server configuration.
+host: 127.0.0.1
+port: 8080
+mysql:
+  #host: localhost
+  host: tfb-database
+  port: 3306
+  database_name: hello_world
+  username: benchmarkdbuser
+  password: benchmarkdbpass
+  use_ssl: true
+jwt_secret: INSECURE_DEFAULT_SECRET

+ 2 - 0
frameworks/Dart/angel3/orm-mysql/config/development.yaml

@@ -0,0 +1,2 @@
+# Development-only server configuration.
+debug: true

+ 3 - 0
frameworks/Dart/angel3/orm-mysql/config/production.yaml

@@ -0,0 +1,3 @@
+# Production-only server configuration
+debug: false
+jwt_secret: INSECURE_DEFAULT_SECRET

+ 2 - 0
frameworks/Dart/angel3/orm-mysql/lib/models.dart

@@ -0,0 +1,2 @@
+export 'src/models/fortune.dart';
+export 'src/models/world.dart';

+ 19 - 0
frameworks/Dart/angel3/orm-mysql/lib/orm_mysql_app.dart

@@ -0,0 +1,19 @@
+/// Your very own web application!
+import 'dart:async';
+import 'package:angel3_framework/angel3_framework.dart';
+import 'package:file/local.dart';
+import 'src/config/config.dart' as configuration;
+import 'src/routes/routes.dart' as routes;
+import 'src/services/services.dart' as services;
+
+/// Configures the server instance.
+Future configureServer(Angel app) async {
+  // Grab a handle to the file system, so that we can do things like
+  // serve static files.
+  var fs = const LocalFileSystem();
+
+  // Set up our application, using the plug-ins defined with this project.
+  await app.configure(configuration.configureServer(fs));
+  await app.configure(services.configureServer);
+  await app.configure(routes.configureServer(fs));
+}

+ 35 - 0
frameworks/Dart/angel3/orm-mysql/lib/src/config/config.dart

@@ -0,0 +1,35 @@
+/// Configuration for this Angel instance.
+import 'package:angel3_configuration/angel3_configuration.dart';
+import 'package:angel3_framework/angel3_framework.dart';
+import 'package:angel3_jael/angel3_jael.dart';
+import 'package:jael3/jael3.dart';
+import 'package:file/file.dart';
+import 'plugins/plugins.dart' as plugins;
+
+/// This is a perfect place to include configuration and load plug-ins.
+AngelConfigurer configureServer(FileSystem fileSystem) {
+  return (Angel app) async {
+    // Load configuration from the `config/` directory.
+    //
+    // See: https://github.com/angel-dart/configuration
+    await app.configure(configuration(fileSystem));
+
+    // Configure our application to render Jael templates from the `views/` directory.
+    //
+    // See: https://github.com/angel-dart/jael
+    var viewsDirectory = fileSystem.directory('views');
+    var viewCache = <String, Document>{};
+    await jaelTemplatePreload(viewsDirectory, viewCache);
+    await app.configure(jael(viewsDirectory, cache: viewCache));
+
+    // Apply another plug-ins, i.e. ones that *you* have written.
+    //
+    // Typically, the plugins in `lib/src/config/plugins/plugins.dart` are plug-ins
+    // that add functionality specific to your application.
+    //
+    // If you write a plug-in that you plan to use again, or are
+    // using one created by the community, include it in
+    // `lib/src/config/config.dart`.
+    await plugins.configureServer(app);
+  };
+}

+ 75 - 0
frameworks/Dart/angel3/orm-mysql/lib/src/config/plugins/orm.dart

@@ -0,0 +1,75 @@
+import 'dart:async';
+import 'dart:io';
+import 'package:angel3_framework/angel3_framework.dart';
+import 'package:angel3_orm/angel3_orm.dart';
+import 'package:angel3_orm_mysql/angel3_orm_mysql.dart';
+import 'package:mysql1/mysql1.dart';
+import 'package:mysql_client/mysql_client.dart';
+
+// For MariaDb
+Future<void> configureServer2(Angel app) async {
+  try {
+    var connection = await connectToMariaDb(app.configuration);
+    var executor = MariaDbExecutor(connection, logger: app.logger);
+
+    app
+      ..container.registerSingleton<QueryExecutor>(executor)
+      ..shutdownHooks.add((_) => connection.close());
+  } catch (e) {
+    app.logger.severe("Failed to connect to MariaDB. ORM disabled.", e);
+  }
+}
+
+// MariaDB connection
+Future<MySqlConnection> connectToMariaDb(Map configuration) async {
+  var mariaDbConfig = configuration['mysql'] as Map? ?? {};
+  var settings = ConnectionSettings(
+      host: mariaDbConfig['host'] as String? ?? 'localhost',
+      port: mariaDbConfig['port'] as int? ?? 3306,
+      db: mariaDbConfig['database_name'] as String? ??
+          Platform.environment['USER'] ??
+          Platform.environment['USERNAME'] ??
+          '',
+      user: mariaDbConfig['username'] as String?,
+      password: mariaDbConfig['password'] as String?,
+      timeout: Duration(
+          seconds: mariaDbConfig['timeout_in_seconds'] as int? ?? 30000),
+      useSSL: mariaDbConfig['use_ssl'] as bool? ?? false);
+
+  var connection = await MySqlConnection.connect(settings);
+  return connection;
+}
+
+// For Mysql
+
+Future<void> configureServer(Angel app) async {
+  try {
+    var connection = await connectToMysql(app.configuration);
+    var executor = MySqlExecutor(connection, logger: app.logger);
+
+    app
+      ..container.registerSingleton<QueryExecutor>(executor)
+      ..shutdownHooks.add((_) => connection.close());
+  } catch (e) {
+    app.logger.severe("Failed to connect to MySQL. ORM disabled.", e);
+  }
+}
+
+// Mysql Connection
+Future<MySQLConnection> connectToMysql(Map configuration) async {
+  var mysqlConfig = configuration['mysql'] as Map? ?? {};
+
+  var connection = await MySQLConnection.createConnection(
+      host: mysqlConfig['host'] as String? ?? 'localhost',
+      port: mysqlConfig['port'] as int? ?? 3306,
+      databaseName: mysqlConfig['database_name'] as String? ??
+          Platform.environment['USER'] ??
+          Platform.environment['USERNAME'] ??
+          '',
+      userName: mysqlConfig['username'] as String? ?? '',
+      password: mysqlConfig['password'] as String? ?? '',
+      secure: mysqlConfig['use_ssl'] as bool? ?? false);
+
+  await connection.connect(timeoutMs: 30000);
+  return connection;
+}

+ 10 - 0
frameworks/Dart/angel3/orm-mysql/lib/src/config/plugins/plugins.dart

@@ -0,0 +1,10 @@
+/// Custom plugins go here.
+import 'dart:async';
+import 'package:angel3_framework/angel3_framework.dart';
+import 'orm.dart' as orm;
+
+Future configureServer(Angel app) async {
+  // Include any plugins you have made here.
+
+  await app.configure(orm.configureServer);
+}

+ 16 - 0
frameworks/Dart/angel3/orm-mysql/lib/src/models/fortune.dart

@@ -0,0 +1,16 @@
+import 'package:angel3_migration/angel3_migration.dart';
+//import 'package:angel3_model/angel3_model.dart';
+import 'package:angel3_serialize/angel3_serialize.dart';
+import 'package:angel3_orm/angel3_orm.dart';
+import 'package:optional/optional.dart';
+
+part 'fortune.g.dart';
+
+@serializable
+@Orm(tableName: 'fortune')
+abstract class _Fortune {
+  int? id;
+
+  @Column(length: 2048)
+  String? message;
+}

+ 212 - 0
frameworks/Dart/angel3/orm-mysql/lib/src/models/fortune.g.dart

@@ -0,0 +1,212 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'fortune.dart';
+
+// **************************************************************************
+// MigrationGenerator
+// **************************************************************************
+
+class FortuneMigration extends Migration {
+  @override
+  void up(Schema schema) {
+    schema.create('fortune', (table) {
+      table.integer('id');
+      table.varChar('message', length: 2048);
+    });
+  }
+
+  @override
+  void down(Schema schema) {
+    schema.drop('fortune');
+  }
+}
+
+// **************************************************************************
+// OrmGenerator
+// **************************************************************************
+
+class FortuneQuery extends Query<Fortune, FortuneQueryWhere> {
+  FortuneQuery({Query? parent, Set<String>? trampoline})
+      : super(parent: parent) {
+    trampoline ??= <String>{};
+    trampoline.add(tableName);
+    _where = FortuneQueryWhere(this);
+  }
+
+  @override
+  final FortuneQueryValues values = FortuneQueryValues();
+
+  List<String> _selectedFields = [];
+
+  FortuneQueryWhere? _where;
+
+  @override
+  Map<String, String> get casts {
+    return {};
+  }
+
+  @override
+  String get tableName {
+    return 'fortune';
+  }
+
+  @override
+  List<String> get fields {
+    const _fields = ['id', 'message'];
+    return _selectedFields.isEmpty
+        ? _fields
+        : _fields.where((field) => _selectedFields.contains(field)).toList();
+  }
+
+  FortuneQuery select(List<String> selectedFields) {
+    _selectedFields = selectedFields;
+    return this;
+  }
+
+  @override
+  FortuneQueryWhere? get where {
+    return _where;
+  }
+
+  @override
+  FortuneQueryWhere newWhereClause() {
+    return FortuneQueryWhere(this);
+  }
+
+  Optional<Fortune> parseRow(List row) {
+    if (row.every((x) => x == null)) {
+      return Optional.empty();
+    }
+    var model = Fortune(
+        id: fields.contains('id') ? (row[0] as int?) : null,
+        message: fields.contains('message') ? (row[1] as String?) : null);
+    return Optional.of(model);
+  }
+
+  @override
+  Optional<Fortune> deserialize(List row) {
+    return parseRow(row);
+  }
+}
+
+class FortuneQueryWhere extends QueryWhere {
+  FortuneQueryWhere(FortuneQuery query)
+      : id = NumericSqlExpressionBuilder<int>(query, 'id'),
+        message = StringSqlExpressionBuilder(query, 'message');
+
+  final NumericSqlExpressionBuilder<int> id;
+
+  final StringSqlExpressionBuilder message;
+
+  @override
+  List<SqlExpressionBuilder> get expressionBuilders {
+    return [id, message];
+  }
+}
+
+class FortuneQueryValues extends MapQueryValues {
+  @override
+  Map<String, String> get casts {
+    return {};
+  }
+
+  int? get id {
+    return (values['id'] as int?);
+  }
+
+  set id(int? value) => values['id'] = value;
+  String? get message {
+    return (values['message'] as String?);
+  }
+
+  set message(String? value) => values['message'] = value;
+  void copyFrom(Fortune model) {
+    id = model.id;
+    message = model.message;
+  }
+}
+
+// **************************************************************************
+// JsonModelGenerator
+// **************************************************************************
+
+@generatedSerializable
+class Fortune extends _Fortune {
+  Fortune({this.id, this.message});
+
+  @override
+  int? id;
+
+  @override
+  String? message;
+
+  Fortune copyWith({int? id, String? message}) {
+    return Fortune(id: id ?? this.id, message: message ?? this.message);
+  }
+
+  @override
+  bool operator ==(other) {
+    return other is _Fortune && other.id == id && other.message == message;
+  }
+
+  @override
+  int get hashCode {
+    return hashObjects([id, message]);
+  }
+
+  @override
+  String toString() {
+    return 'Fortune(id=$id, message=$message)';
+  }
+
+  Map<String, dynamic> toJson() {
+    return FortuneSerializer.toMap(this);
+  }
+}
+
+// **************************************************************************
+// SerializerGenerator
+// **************************************************************************
+
+const FortuneSerializer fortuneSerializer = FortuneSerializer();
+
+class FortuneEncoder extends Converter<Fortune, Map> {
+  const FortuneEncoder();
+
+  @override
+  Map convert(Fortune model) => FortuneSerializer.toMap(model);
+}
+
+class FortuneDecoder extends Converter<Map, Fortune> {
+  const FortuneDecoder();
+
+  @override
+  Fortune convert(Map map) => FortuneSerializer.fromMap(map);
+}
+
+class FortuneSerializer extends Codec<Fortune, Map> {
+  const FortuneSerializer();
+
+  @override
+  FortuneEncoder get encoder => const FortuneEncoder();
+  @override
+  FortuneDecoder get decoder => const FortuneDecoder();
+  static Fortune fromMap(Map map) {
+    return Fortune(id: map['id'] as int?, message: map['message'] as String?);
+  }
+
+  static Map<String, dynamic> toMap(_Fortune? model) {
+    if (model == null) {
+      return {};
+    }
+    return {'id': model.id, 'message': model.message};
+  }
+}
+
+abstract class FortuneFields {
+  static const List<String> allFields = <String>[id, message];
+
+  static const String id = 'id';
+
+  static const String message = 'message';
+}

+ 16 - 0
frameworks/Dart/angel3/orm-mysql/lib/src/models/world.dart

@@ -0,0 +1,16 @@
+import 'package:angel3_migration/angel3_migration.dart';
+//import 'package:angel3_model/angel3_model.dart';
+import 'package:angel3_serialize/angel3_serialize.dart';
+import 'package:angel3_orm/angel3_orm.dart';
+import 'package:optional/optional.dart';
+
+part 'world.g.dart';
+
+@serializable
+@Orm(tableName: 'world')
+abstract class _World {
+  int? id;
+
+  @Column()
+  int? randomNumber;
+}

+ 216 - 0
frameworks/Dart/angel3/orm-mysql/lib/src/models/world.g.dart

@@ -0,0 +1,216 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'world.dart';
+
+// **************************************************************************
+// MigrationGenerator
+// **************************************************************************
+
+class WorldMigration extends Migration {
+  @override
+  void up(Schema schema) {
+    schema.create('world', (table) {
+      table.integer('id');
+      table.integer('randomNumber');
+    });
+  }
+
+  @override
+  void down(Schema schema) {
+    schema.drop('world');
+  }
+}
+
+// **************************************************************************
+// OrmGenerator
+// **************************************************************************
+
+class WorldQuery extends Query<World, WorldQueryWhere> {
+  WorldQuery({Query? parent, Set<String>? trampoline}) : super(parent: parent) {
+    trampoline ??= <String>{};
+    trampoline.add(tableName);
+    _where = WorldQueryWhere(this);
+  }
+
+  @override
+  final WorldQueryValues values = WorldQueryValues();
+
+  List<String> _selectedFields = [];
+
+  WorldQueryWhere? _where;
+
+  @override
+  Map<String, String> get casts {
+    return {};
+  }
+
+  @override
+  String get tableName {
+    return 'world';
+  }
+
+  @override
+  List<String> get fields {
+    const _fields = ['id', 'randomNumber'];
+    return _selectedFields.isEmpty
+        ? _fields
+        : _fields.where((field) => _selectedFields.contains(field)).toList();
+  }
+
+  WorldQuery select(List<String> selectedFields) {
+    _selectedFields = selectedFields;
+    return this;
+  }
+
+  @override
+  WorldQueryWhere? get where {
+    return _where;
+  }
+
+  @override
+  WorldQueryWhere newWhereClause() {
+    return WorldQueryWhere(this);
+  }
+
+  Optional<World> parseRow(List row) {
+    if (row.every((x) => x == null)) {
+      return Optional.empty();
+    }
+    var model = World(
+        id: fields.contains('id') ? (row[0] as int?) : null,
+        randomNumber:
+            fields.contains('randomNumber') ? (row[1] as int?) : null);
+    return Optional.of(model);
+  }
+
+  @override
+  Optional<World> deserialize(List row) {
+    return parseRow(row);
+  }
+}
+
+class WorldQueryWhere extends QueryWhere {
+  WorldQueryWhere(WorldQuery query)
+      : id = NumericSqlExpressionBuilder<int>(query, 'id'),
+        randomNumber = NumericSqlExpressionBuilder<int>(query, 'randomNumber');
+
+  final NumericSqlExpressionBuilder<int> id;
+
+  final NumericSqlExpressionBuilder<int> randomNumber;
+
+  @override
+  List<SqlExpressionBuilder> get expressionBuilders {
+    return [id, randomNumber];
+  }
+}
+
+class WorldQueryValues extends MapQueryValues {
+  @override
+  Map<String, String> get casts {
+    return {};
+  }
+
+  int? get id {
+    return (values['id'] as int?);
+  }
+
+  set id(int? value) => values['id'] = value;
+  int? get randomNumber {
+    return (values['randomNumber'] as int?);
+  }
+
+  set randomNumber(int? value) => values['randomNumber'] = value;
+  void copyFrom(World model) {
+    id = model.id;
+    randomNumber = model.randomNumber;
+  }
+}
+
+// **************************************************************************
+// JsonModelGenerator
+// **************************************************************************
+
+@generatedSerializable
+class World extends _World {
+  World({this.id, this.randomNumber});
+
+  @override
+  int? id;
+
+  @override
+  int? randomNumber;
+
+  World copyWith({int? id, int? randomNumber}) {
+    return World(
+        id: id ?? this.id, randomNumber: randomNumber ?? this.randomNumber);
+  }
+
+  @override
+  bool operator ==(other) {
+    return other is _World &&
+        other.id == id &&
+        other.randomNumber == randomNumber;
+  }
+
+  @override
+  int get hashCode {
+    return hashObjects([id, randomNumber]);
+  }
+
+  @override
+  String toString() {
+    return 'World(id=$id, randomNumber=$randomNumber)';
+  }
+
+  Map<String, dynamic> toJson() {
+    return WorldSerializer.toMap(this);
+  }
+}
+
+// **************************************************************************
+// SerializerGenerator
+// **************************************************************************
+
+const WorldSerializer worldSerializer = WorldSerializer();
+
+class WorldEncoder extends Converter<World, Map> {
+  const WorldEncoder();
+
+  @override
+  Map convert(World model) => WorldSerializer.toMap(model);
+}
+
+class WorldDecoder extends Converter<Map, World> {
+  const WorldDecoder();
+
+  @override
+  World convert(Map map) => WorldSerializer.fromMap(map);
+}
+
+class WorldSerializer extends Codec<World, Map> {
+  const WorldSerializer();
+
+  @override
+  WorldEncoder get encoder => const WorldEncoder();
+  @override
+  WorldDecoder get decoder => const WorldDecoder();
+  static World fromMap(Map map) {
+    return World(
+        id: map['id'] as int?, randomNumber: map['randomNumber'] as int?);
+  }
+
+  static Map<String, dynamic> toMap(_World? model) {
+    if (model == null) {
+      return {};
+    }
+    return {'id': model.id, 'randomNumber': model.randomNumber};
+  }
+}
+
+abstract class WorldFields {
+  static const List<String> allFields = <String>[id, randomNumber];
+
+  static const String id = 'id';
+
+  static const String randomNumber = 'randomNumber';
+}

+ 131 - 0
frameworks/Dart/angel3/orm-mysql/lib/src/routes/controllers/controllers.dart

@@ -0,0 +1,131 @@
+import 'dart:async';
+import 'dart:convert';
+import 'dart:math';
+import 'package:angel3_framework/angel3_framework.dart';
+import 'package:angel3_orm/angel3_orm.dart';
+import '../../models/fortune.dart';
+import '../../models/world.dart';
+
+Future configureServer(Angel app) async {
+  /// Controllers will not function unless wired to the application!
+
+  var executor = app.container.make<QueryExecutor>();
+
+  // Generate a random number between 1 and 10000
+  int _genRandomId() {
+    var rand = Random();
+    return rand.nextInt(10000) + 1;
+  }
+
+  int _parseQueryCount(String? count) {
+    if (count == null) {
+      return 1;
+    }
+
+    var limit = int.tryParse(count) ?? 0;
+    if (limit < 1) return 1;
+
+    if (limit > 500) return 500;
+
+    return limit;
+  }
+
+  List<int> _generateIds(int maxCount) {
+    var result = <int>[];
+
+    while (result.length < maxCount) {
+      var id = _genRandomId();
+      if (!result.contains(id)) {
+        result.add(id);
+      }
+    }
+
+    return result;
+  }
+
+  // Return data in json
+  app.get('/json', (req, res) => res.json({'message': 'Hello, World!'}));
+
+  const reply = "Hello, World!";
+
+  // Return data in plaintext
+  app.get('/plaintext', (req, res) async {
+    res.contentLength = reply.length;
+    res.write(reply);
+  });
+
+  // Add an entry and sort a list of fortune
+  app.get('/fortunes', (req, res) async {
+    //var stopwatch = Stopwatch()..start();
+
+    var list = await FortuneQuery().get(executor);
+
+    //print('Query Time: ${stopwatch.elapsed.inMilliseconds}ms');
+
+    list.add(
+        Fortune(id: 0, message: 'Additional fortune added at request time.'));
+    list.sort((a, b) => a.message?.compareTo(b.message ?? '') ?? 0);
+
+    //print('Process Time: ${stopwatch.elapsed.inMilliseconds}ms');
+    //stopwatch.stop();
+
+    res.render('listing', {'fortunes': list});
+  });
+
+  // Find a random World
+  app.get('/db', (req, res) async {
+    var id = _genRandomId();
+    var query = WorldQuery()..where?.id.equals(id);
+    var result = await query.get(executor);
+    if (result.isNotEmpty) {
+      res.json(result[0]);
+    } else {
+      res.json({});
+    }
+  });
+
+  // Return a list of worlds
+  app.get('/query', (req, res) async {
+    var params = req.queryParameters;
+
+    var queryLimit = _parseQueryCount(params['queries'] as String?);
+
+    var list = _generateIds(queryLimit);
+    var query = WorldQuery();
+    var result = <World>[];
+    for (var id in list) {
+      query.where?.id.equals(id);
+      var optWorld = await query.getOne(executor);
+      result.add(optWorld.value);
+    }
+
+    res.json(result);
+  });
+
+  // Update a list of worlds
+  app.get('/updates', (req, res) async {
+    //var stopwatch = Stopwatch()..start();
+
+    var params = req.queryParameters;
+    var queryLimit = _parseQueryCount(params['queries'] as String?);
+    var listOfIds = _generateIds(queryLimit);
+
+    var query = WorldQuery();
+    var result = <World>[];
+    for (var id in listOfIds) {
+      query.where?.id.equals(id);
+      var optWorld = await query.getOne(executor);
+
+      query
+        ..where?.id.equals(optWorld.value.id!)
+        ..values.randomNumber = _genRandomId();
+      var updatedRec = await query.updateOne(executor);
+      result.add(updatedRec.value);
+    }
+
+    //rint('Process Time: ${stopwatch.elapsed.inMilliseconds}ms');
+    //stopwatch.stop();
+
+    res.json(result);
+  });
+}

+ 62 - 0
frameworks/Dart/angel3/orm-mysql/lib/src/routes/routes.dart

@@ -0,0 +1,62 @@
+/// This app's route configuration.
+import 'package:angel3_framework/angel3_framework.dart';
+import 'package:angel3_static/angel3_static.dart';
+import 'package:file/file.dart';
+import 'controllers/controllers.dart' as controllers;
+
+/// Put your app routes here!
+///
+/// See the wiki for information about routing, requests, and responses:
+/// * https://angel3-docs.dukefirehawk.com/guides/basic-routing
+/// * https://angel3-docs.dukefirehawk.com/guides/requests-and-responses
+AngelConfigurer configureServer(FileSystem fileSystem) {
+  return (Angel app) async {
+    // Typically, you want to mount controllers first, after any global middleware.
+    await app.configure(controllers.configureServer);
+
+    // Render `views/hello.jl` when a user visits the application root.
+    app.get('/', (req, res) => res.render('hello'));
+
+    // Mount static server at web in development.
+    // The `CachingVirtualDirectory` variant of `VirtualDirectory` also sends `Cache-Control` headers.
+    //
+    // In production, however, prefer serving static files through NGINX or a
+    // similar reverse proxy.
+    //
+    // Read the following two sources for documentation:
+    // * https://medium.com/the-angel-framework/serving-static-files-with-the-angel-framework-2ddc7a2b84ae
+    // * https://pub.dev/packages/angel3_static
+    if (!app.environment.isProduction) {
+      var vDir = VirtualDirectory(
+        app,
+        fileSystem,
+        source: fileSystem.directory('web'),
+      );
+      app.fallback(vDir.handleRequest);
+    }
+
+    // Throw a 404 if no route matched the request.
+    app.fallback((req, res) => throw AngelHttpException.notFound());
+
+    // Set our application up to handle different errors.
+    //
+    // Read the following for documentation:
+    // * https://angel3-docs.dukefirehawk.com/guides/error-handling
+
+    var oldErrorHandler = app.errorHandler;
+    app.errorHandler = (e, req, res) async {
+      if (req.accepts('text/html', strict: true)) {
+        if (e.statusCode == 404 && req.accepts('text/html', strict: true)) {
+          await res
+              .render('error', {'message': 'No file exists at ${req.uri}.'});
+        } else {
+          await res.render('error', {'message': e.message});
+        }
+      } else {
+        return await oldErrorHandler(e, req, res);
+      }
+    };
+
+    app.enableCache();
+  };
+}

+ 13 - 0
frameworks/Dart/angel3/orm-mysql/lib/src/services/services.dart

@@ -0,0 +1,13 @@
+/// Declare services here!
+import 'dart:async';
+import 'package:angel3_framework/angel3_framework.dart';
+
+/// Configure our application to use *services*.
+/// Services must be wired to the app via `app.use`.
+///
+/// They provide many benefits, such as instant REST API generation,
+/// and respond to both REST and WebSockets.
+///
+/// Read more here:
+/// https://github.com/angel-dart/angel/wiki/Service-Basics
+Future configureServer(Angel app) async {}

+ 845 - 0
frameworks/Dart/angel3/orm-mysql/pubspec.lock

@@ -0,0 +1,845 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+  _fe_analyzer_shared:
+    dependency: transitive
+    description:
+      name: _fe_analyzer_shared
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "47.0.0"
+  analyzer:
+    dependency: transitive
+    description:
+      name: analyzer
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.7.0"
+  angel3_auth:
+    dependency: "direct main"
+    description:
+      name: angel3_auth
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_client:
+    dependency: transitive
+    description:
+      name: angel3_client
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_configuration:
+    dependency: "direct main"
+    description:
+      name: angel3_configuration
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_container:
+    dependency: transitive
+    description:
+      name: angel3_container
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_framework:
+    dependency: "direct main"
+    description:
+      name: angel3_framework
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_hot:
+    dependency: "direct dev"
+    description:
+      name: angel3_hot
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_http_exception:
+    dependency: transitive
+    description:
+      name: angel3_http_exception
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_jael:
+    dependency: "direct main"
+    description:
+      name: angel3_jael
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_migration:
+    dependency: "direct main"
+    description:
+      name: angel3_migration
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_migration_runner:
+    dependency: "direct dev"
+    description:
+      name: angel3_migration_runner
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_mock_request:
+    dependency: transitive
+    description:
+      name: angel3_mock_request
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_model:
+    dependency: transitive
+    description:
+      name: angel3_model
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_orm:
+    dependency: "direct main"
+    description:
+      name: angel3_orm
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.1"
+  angel3_orm_generator:
+    dependency: "direct dev"
+    description:
+      name: angel3_orm_generator
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_orm_mysql:
+    dependency: "direct main"
+    description:
+      name: angel3_orm_mysql
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.1"
+  angel3_production:
+    dependency: "direct main"
+    description:
+      name: angel3_production
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_route:
+    dependency: transitive
+    description:
+      name: angel3_route
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_serialize:
+    dependency: "direct main"
+    description:
+      name: angel3_serialize
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_serialize_generator:
+    dependency: "direct dev"
+    description:
+      name: angel3_serialize_generator
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_static:
+    dependency: "direct main"
+    description:
+      name: angel3_static
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_test:
+    dependency: "direct dev"
+    description:
+      name: angel3_test
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_validate:
+    dependency: "direct main"
+    description:
+      name: angel3_validate
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  angel3_websocket:
+    dependency: transitive
+    description:
+      name: angel3_websocket
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  args:
+    dependency: transitive
+    description:
+      name: args
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.3.1"
+  async:
+    dependency: transitive
+    description:
+      name: async
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.9.0"
+  belatuk_code_buffer:
+    dependency: transitive
+    description:
+      name: belatuk_code_buffer
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.0.0"
+  belatuk_combinator:
+    dependency: transitive
+    description:
+      name: belatuk_combinator
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.0.0"
+  belatuk_html_builder:
+    dependency: transitive
+    description:
+      name: belatuk_html_builder
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.0.0"
+  belatuk_http_server:
+    dependency: transitive
+    description:
+      name: belatuk_http_server
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.0.0"
+  belatuk_json_serializer:
+    dependency: transitive
+    description:
+      name: belatuk_json_serializer
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "6.0.1"
+  belatuk_merge_map:
+    dependency: transitive
+    description:
+      name: belatuk_merge_map
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.0.0"
+  belatuk_pretty_logging:
+    dependency: "direct main"
+    description:
+      name: belatuk_pretty_logging
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "5.0.0"
+  belatuk_pub_sub:
+    dependency: transitive
+    description:
+      name: belatuk_pub_sub
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "5.0.0"
+  belatuk_range_header:
+    dependency: transitive
+    description:
+      name: belatuk_range_header
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "5.0.0"
+  belatuk_symbol_table:
+    dependency: transitive
+    description:
+      name: belatuk_symbol_table
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.0.0"
+  boolean_selector:
+    dependency: transitive
+    description:
+      name: boolean_selector
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.0"
+  buffer:
+    dependency: transitive
+    description:
+      name: buffer
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.1"
+  build:
+    dependency: transitive
+    description:
+      name: build
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.3.1"
+  build_config:
+    dependency: transitive
+    description:
+      name: build_config
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.0"
+  build_daemon:
+    dependency: transitive
+    description:
+      name: build_daemon
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.1.0"
+  build_resolvers:
+    dependency: transitive
+    description:
+      name: build_resolvers
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.10"
+  build_runner:
+    dependency: "direct dev"
+    description:
+      name: build_runner
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.2.1"
+  build_runner_core:
+    dependency: transitive
+    description:
+      name: build_runner_core
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.2.4"
+  built_collection:
+    dependency: transitive
+    description:
+      name: built_collection
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "5.1.1"
+  built_value:
+    dependency: transitive
+    description:
+      name: built_value
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "8.4.1"
+  charcode:
+    dependency: transitive
+    description:
+      name: charcode
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.3.1"
+  checked_yaml:
+    dependency: transitive
+    description:
+      name: checked_yaml
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.1"
+  clock:
+    dependency: transitive
+    description:
+      name: clock
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.1"
+  code_builder:
+    dependency: transitive
+    description:
+      name: code_builder
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.3.0"
+  collection:
+    dependency: transitive
+    description:
+      name: collection
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.16.0"
+  convert:
+    dependency: transitive
+    description:
+      name: convert
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.0.2"
+  coverage:
+    dependency: transitive
+    description:
+      name: coverage
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.6.0"
+  crypto:
+    dependency: transitive
+    description:
+      name: crypto
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.0.2"
+  dart_style:
+    dependency: transitive
+    description:
+      name: dart_style
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.2.4"
+  dotenv:
+    dependency: transitive
+    description:
+      name: dotenv
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.0.1"
+  file:
+    dependency: transitive
+    description:
+      name: file
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "6.1.4"
+  fixnum:
+    dependency: transitive
+    description:
+      name: fixnum
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.1"
+  frontend_server_client:
+    dependency: transitive
+    description:
+      name: frontend_server_client
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.3"
+  glob:
+    dependency: transitive
+    description:
+      name: glob
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.0"
+  graphs:
+    dependency: transitive
+    description:
+      name: graphs
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.0"
+  http:
+    dependency: transitive
+    description:
+      name: http
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.13.5"
+  http2:
+    dependency: transitive
+    description:
+      name: http2
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.0"
+  http_multi_server:
+    dependency: transitive
+    description:
+      name: http_multi_server
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.2.1"
+  http_parser:
+    dependency: transitive
+    description:
+      name: http_parser
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.0.1"
+  inflection3:
+    dependency: transitive
+    description:
+      name: inflection3
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.5.3+2"
+  intl:
+    dependency: transitive
+    description:
+      name: intl
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.17.0"
+  io:
+    dependency: "direct dev"
+    description:
+      name: io
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.3"
+  jael3:
+    dependency: "direct main"
+    description:
+      name: jael3
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  jael3_preprocessor:
+    dependency: transitive
+    description:
+      name: jael3_preprocessor
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "7.0.0"
+  js:
+    dependency: transitive
+    description:
+      name: js
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.6.4"
+  json_annotation:
+    dependency: transitive
+    description:
+      name: json_annotation
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.6.0"
+  json_rpc_2:
+    dependency: transitive
+    description:
+      name: json_rpc_2
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.0.2"
+  lints:
+    dependency: "direct dev"
+    description:
+      name: lints
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.0"
+  logging:
+    dependency: "direct main"
+    description:
+      name: logging
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.2"
+  matcher:
+    dependency: transitive
+    description:
+      name: matcher
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.12.12"
+  meta:
+    dependency: transitive
+    description:
+      name: meta
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.8.0"
+  mime:
+    dependency: transitive
+    description:
+      name: mime
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.2"
+  mysql1:
+    dependency: transitive
+    description:
+      name: mysql1
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.20.0"
+  mysql_client:
+    dependency: transitive
+    description:
+      name: mysql_client
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.0.26"
+  node_preamble:
+    dependency: transitive
+    description:
+      name: node_preamble
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.1"
+  optional:
+    dependency: "direct main"
+    description:
+      name: optional
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "6.1.0+1"
+  package_config:
+    dependency: transitive
+    description:
+      name: package_config
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.0"
+  path:
+    dependency: transitive
+    description:
+      name: path
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.8.2"
+  pedantic:
+    dependency: transitive
+    description:
+      name: pedantic
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.11.1"
+  pool:
+    dependency: transitive
+    description:
+      name: pool
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.5.1"
+  postgres:
+    dependency: transitive
+    description:
+      name: postgres
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.5.2"
+  pub_semver:
+    dependency: transitive
+    description:
+      name: pub_semver
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.1"
+  pubspec_parse:
+    dependency: transitive
+    description:
+      name: pubspec_parse
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.2.1"
+  quiver:
+    dependency: transitive
+    description:
+      name: quiver
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.1.0"
+  recase:
+    dependency: transitive
+    description:
+      name: recase
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.0.0"
+  sasl_scram:
+    dependency: transitive
+    description:
+      name: sasl_scram
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.1.1"
+  saslprep:
+    dependency: transitive
+    description:
+      name: saslprep
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.2"
+  shelf:
+    dependency: transitive
+    description:
+      name: shelf
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.3.2"
+  shelf_packages_handler:
+    dependency: transitive
+    description:
+      name: shelf_packages_handler
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.0.1"
+  shelf_static:
+    dependency: transitive
+    description:
+      name: shelf_static
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.1"
+  shelf_web_socket:
+    dependency: transitive
+    description:
+      name: shelf_web_socket
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.2"
+  source_gen:
+    dependency: transitive
+    description:
+      name: source_gen
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.2.3"
+  source_map_stack_trace:
+    dependency: transitive
+    description:
+      name: source_map_stack_trace
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.0"
+  source_maps:
+    dependency: transitive
+    description:
+      name: source_maps
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.10.10"
+  source_span:
+    dependency: transitive
+    description:
+      name: source_span
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.9.1"
+  stack_trace:
+    dependency: transitive
+    description:
+      name: stack_trace
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.10.0"
+  stream_channel:
+    dependency: transitive
+    description:
+      name: stream_channel
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.0"
+  stream_transform:
+    dependency: transitive
+    description:
+      name: stream_transform
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.0"
+  string_scanner:
+    dependency: transitive
+    description:
+      name: string_scanner
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.1"
+  term_glyph:
+    dependency: transitive
+    description:
+      name: term_glyph
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.2.1"
+  test:
+    dependency: "direct dev"
+    description:
+      name: test
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.21.6"
+  test_api:
+    dependency: transitive
+    description:
+      name: test_api
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.4.14"
+  test_core:
+    dependency: transitive
+    description:
+      name: test_core
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.4.18"
+  timing:
+    dependency: transitive
+    description:
+      name: timing
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.0"
+  tuple:
+    dependency: transitive
+    description:
+      name: tuple
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.0"
+  typed_data:
+    dependency: transitive
+    description:
+      name: typed_data
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.3.1"
+  unorm_dart:
+    dependency: transitive
+    description:
+      name: unorm_dart
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.2.0"
+  uuid:
+    dependency: transitive
+    description:
+      name: uuid
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.0.6"
+  vm_service:
+    dependency: transitive
+    description:
+      name: vm_service
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "9.4.0"
+  watcher:
+    dependency: transitive
+    description:
+      name: watcher
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.1"
+  web_socket_channel:
+    dependency: transitive
+    description:
+      name: web_socket_channel
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.2.0"
+  webkit_inspection_protocol:
+    dependency: transitive
+    description:
+      name: webkit_inspection_protocol
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.2.0"
+  yaml:
+    dependency: transitive
+    description:
+      name: yaml
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.1.1"
+sdks:
+  dart: ">=2.18.0 <3.0.0"

+ 40 - 0
frameworks/Dart/angel3/orm-mysql/pubspec.yaml

@@ -0,0 +1,40 @@
+name: orm_mysql_app
+version: 1.0.0
+description: A basic starter application template for Angel3 framework
+publish_to: none
+environment:
+  sdk: '>=2.17.0 <3.0.0'
+dependencies:
+  angel3_auth: ^7.0.0
+  angel3_configuration: ^7.0.0
+  angel3_framework: ^7.0.0
+  angel3_jael: ^7.0.0
+  angel3_migration: ^7.0.0
+  angel3_orm: ^7.0.0
+  angel3_orm_mysql: ^7.0.0
+  angel3_serialize: ^7.0.0
+  angel3_production: ^7.0.0
+  angel3_static: ^7.0.0
+  angel3_validate: ^7.0.0
+  jael3: ^7.0.0
+  belatuk_pretty_logging: ^5.0.0
+  optional: ^6.0.0
+  logging: ^1.0.0
+dev_dependencies:
+  angel3_hot: ^7.0.0
+  angel3_migration_runner: ^7.0.0
+  angel3_orm_generator: ^7.0.0
+  angel3_serialize_generator: ^7.0.0
+  angel3_test: ^7.0.0
+  build_runner: ^2.0.3
+  io: ^1.0.0
+  test: ^1.17.5
+  lints: ^2.0.0
+# dependency_overrides:
+#  angel3_orm:
+#    path: ../../../../../belatuk/packages/orm/angel_orm
+#  angel3_orm_postgres:
+#    path: ../../../../../belatuk/packages/orm/angel_orm_postgres
+#  angel3_jael:
+#    path: ../../../../../belatuk/packages/jael/angel_jael
+     

+ 28 - 0
frameworks/Dart/angel3/orm-mysql/run/dev.dart

@@ -0,0 +1,28 @@
+import 'dart:io';
+import 'package:logging/logging.dart';
+import 'package:belatuk_pretty_logging/belatuk_pretty_logging.dart';
+import 'package:angel3_container/mirrors.dart';
+import 'package:angel3_framework/angel3_framework.dart';
+import 'package:angel3_hot/angel3_hot.dart';
+import 'package:orm_mysql_app/orm_mysql_app.dart';
+
+void main() async {
+  // Watch the config/ and web/ directories for changes, and hot-reload the server.
+  hierarchicalLoggingEnabled = true;
+
+  var hot = HotReloader(() async {
+    var logger = Logger.detached('Angel3')
+      ..level = Level.ALL
+      ..onRecord.listen(prettyLog);
+    var app = Angel(logger: logger, reflector: MirrorsReflector());
+    await app.configure(configureServer);
+    return app;
+  }, [
+    Directory('config'),
+    Directory('lib'),
+  ]);
+
+  var server = await hot.startServer('127.0.0.1', 8080);
+  print(
+      'Angel3 server listening at http://${server.address.address}:${server.port}');
+}

+ 29 - 0
frameworks/Dart/angel3/orm-mysql/run/prod.dart

@@ -0,0 +1,29 @@
+import 'package:angel3_container/mirrors.dart';
+import 'package:angel3_production/angel3_production.dart';
+import 'package:orm_mysql_app/orm_mysql_app.dart';
+
+// NOTE: By default, the Runner class does not use the `MirrorsReflector`, or any
+// reflector, by default.
+//
+// If your application is using any sort of functionality reliant on annotations or reflection,
+// either include the MirrorsReflector, or use a static reflector variant.
+//
+// The following use cases require reflection:
+// * Use of Controllers, via @Expose() or @ExposeWS()
+// * Use of dependency injection into constructors, whether in controllers or plain `container.make` calls
+// * Use of the `ioc` function in any route
+//
+// The `MirrorsReflector` from `package:angel_container/mirrors.dart` is by far the most convenient pattern,
+// so use it if possible.
+//
+// However, the following alternatives exist:
+// * Generation via `package:angel_container_generator`
+// * Creating an instance of `StaticReflector`
+// * Manually implementing the `Reflector` interface (cumbersome; not recommended)
+//
+// As of January 4th, 2018, the documentation has not yet been updated to state this,
+// so in the meantime, visit the Angel chat for further questions:
+//
+// https://gitter.im/angel_dart/discussion
+void main(List<String> args) =>
+    Runner('Angel3', configureServer, reflector: MirrorsReflector()).run(args);

+ 20 - 0
frameworks/Dart/angel3/orm-mysql/templates/fortunes.mustache

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Fortunes</title>
+</head>
+<body>
+<table>
+  <tr>
+    <th>id</th>
+    <th>message</th>
+  </tr>
+  {{#fortunes}}
+  <tr>
+    <td>{{id}}</td>
+    <td>{{message}}</td>
+  </tr>
+  {{/fortunes}}
+</table>
+</body>
+</html>

+ 43 - 0
frameworks/Dart/angel3/orm-mysql/test/all_test.dart

@@ -0,0 +1,43 @@
+import 'package:angel3_framework/angel3_framework.dart';
+import 'package:angel3_test/angel3_test.dart';
+import 'package:test/test.dart';
+import 'package:orm_mysql_app/orm_mysql_app.dart';
+
+// Angel also includes facilities to make testing easier.
+//
+// `package:angel_test` ships a client that can test
+// both plain HTTP and WebSockets.
+//
+// Tests do not require your server to actually be mounted on a port,
+// so they will run faster than they would in other frameworks, where you
+// would have to first bind a socket, and then account for network latency.
+//
+// See the documentation here:
+// https://github.com/angel-dart/test
+//
+// If you are unfamiliar with Dart's advanced testing library, you can read up
+// here:
+// https://github.com/dart-lang/test
+
+void main() async {
+  late TestClient client;
+
+  setUp(() async {
+    var app = Angel();
+    await app.configure(configureServer);
+
+    client = await connectTo(app);
+  });
+
+  tearDown(() async {
+    await client.close();
+  });
+
+  test('index returns 200', () async {
+    // Request a resource at the given path.
+    var response = await client.get(Uri.parse('/'));
+
+    // Expect a 200 response.
+    expect(response, hasStatus(200));
+  });
+}

+ 5 - 0
frameworks/Dart/angel3/orm-mysql/views/error.jael

@@ -0,0 +1,5 @@
+<extend src="layout.jael">
+    <block name="content">
+        <div class="title">{{ message }}</div>
+    </block>
+</extend>

+ 5 - 0
frameworks/Dart/angel3/orm-mysql/views/hello.jael

@@ -0,0 +1,5 @@
+<extend src="layout.jael">
+    <block name="content">
+        <div class="title">Angel3</div>
+    </block>
+</extend>

+ 16 - 0
frameworks/Dart/angel3/orm-mysql/views/layout.jael

@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>{{ title ?? 'Angel3' }}</title>
+
+    <link href="https://fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css">
+    <link rel="stylesheet" href="/css/site.css">
+</head>
+<body>
+<div class="container">
+    <div class="content">
+        <block name="content"></block>
+    </div>
+</div>
+</body>
+</html>

+ 14 - 0
frameworks/Dart/angel3/orm-mysql/views/listing.jael

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Fortunes</title>
+  </head>
+  <body>
+    <table><tr><th>id</th><th>message</th></tr>
+      <tr for-each=fortunes as="item">
+        <td>{{item.id}}</td>
+        <td>{{item.message}}</td>
+      </tr>
+    </table>
+  </body>
+</html>

+ 27 - 0
frameworks/Dart/angel3/orm-mysql/web/css/site.css

@@ -0,0 +1,27 @@
+html, body {
+    height: 100%;
+}
+
+body {
+    margin: 0;
+    padding: 0;
+    width: 100%;
+    display: table;
+    font-weight: 100;
+    font-family: 'Lato', sans-serif;
+}
+
+.container {
+    text-align: center;
+    display: table-cell;
+    vertical-align: middle;
+}
+
+.content {
+    text-align: center;
+    display: inline-block;
+}
+
+.title {
+    font-size: 96px;
+}

BIN
frameworks/Dart/angel3/orm-mysql/web/images/favicon.png


+ 2 - 0
frameworks/Dart/angel3/orm-mysql/web/robots.txt

@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /admin

+ 1 - 1
frameworks/Dart/angel3/orm/config/default.yaml

@@ -1,5 +1,4 @@
 # Default server configuration.
-jwt_secret: INSECURE_DEFAULT_SECRET
 host: 127.0.0.1
 port: 8080
 postgres:
@@ -9,3 +8,4 @@ postgres:
   database_name: hello_world
   username: benchmarkdbuser
   password: benchmarkdbpass
+jwt_secret: INSECURE_DEFAULT_SECRET

+ 1 - 1
frameworks/Dart/angel3/orm/lib/src/config/plugins/orm.dart

@@ -15,7 +15,7 @@ Future<void> configureServer(Angel app) async {
   //var executor = await connectToPostgresPool(app.configuration, logger);
 
   app
-    ..container!.registerSingleton<QueryExecutor>(executor)
+    ..container.registerSingleton<QueryExecutor>(executor)
     ..shutdownHooks.add((_) => connection.close());
 //    ..shutdownHooks.add((_) => executor.close());
 }

+ 2 - 2
frameworks/Dart/angel3/orm/lib/src/routes/controllers/controllers.dart

@@ -9,7 +9,7 @@ import '../../models/world.dart';
 Future configureServer(Angel app) async {
   /// Controllers will not function unless wired to the application!
 
-  var executor = app.container!.make<QueryExecutor>();
+  var executor = app.container.make<QueryExecutor>();
 
   // Generate a random number between 1 and 10000
   int _genRandomId() {
@@ -123,7 +123,7 @@ Future configureServer(Angel app) async {
       result.add(updatedRec.value);
     }
 
-    //rint('Process Time: ${stopwatch.elapsed.inMilliseconds}ms');
+    //print('Process Time: ${stopwatch.elapsed.inMilliseconds}ms');
     //stopwatch.stop();
 
     res.json(result);

+ 101 - 101
frameworks/Dart/angel3/orm/pubspec.lock

@@ -7,259 +7,259 @@ packages:
       name: _fe_analyzer_shared
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "31.0.0"
+    version: "47.0.0"
   analyzer:
     dependency: transitive
     description:
       name: analyzer
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.8.0"
+    version: "4.7.0"
   angel3_auth:
     dependency: "direct main"
     description:
       name: angel3_auth
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.1.2"
+    version: "7.0.0"
   angel3_client:
     dependency: transitive
     description:
       name: angel3_client
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.2.0"
+    version: "7.0.0"
   angel3_configuration:
     dependency: "direct main"
     description:
       name: angel3_configuration
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.1.0"
+    version: "7.0.0"
   angel3_container:
     dependency: transitive
     description:
       name: angel3_container
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.1.1"
+    version: "7.0.0"
   angel3_framework:
     dependency: "direct main"
     description:
       name: angel3_framework
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.2.3"
+    version: "7.0.0"
   angel3_hot:
     dependency: "direct dev"
     description:
       name: angel3_hot
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.3.0"
+    version: "7.0.0"
   angel3_http_exception:
     dependency: transitive
     description:
       name: angel3_http_exception
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.1.0"
+    version: "7.0.0"
   angel3_jael:
     dependency: "direct main"
     description:
       name: angel3_jael
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.3.1"
+    version: "7.0.0"
   angel3_migration:
     dependency: "direct main"
     description:
       name: angel3_migration
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.0.3"
+    version: "7.0.0"
   angel3_migration_runner:
     dependency: "direct dev"
     description:
       name: angel3_migration_runner
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.1.1"
+    version: "7.0.0"
   angel3_mock_request:
     dependency: transitive
     description:
       name: angel3_mock_request
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0"
+    version: "7.0.0"
   angel3_model:
     dependency: transitive
     description:
       name: angel3_model
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.1.1"
+    version: "7.0.0"
   angel3_orm:
     dependency: "direct main"
     description:
       name: angel3_orm
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.0.5"
+    version: "7.0.1"
   angel3_orm_generator:
     dependency: "direct dev"
     description:
       name: angel3_orm_generator
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.3.0"
+    version: "7.0.0"
   angel3_orm_postgres:
     dependency: "direct main"
     description:
       name: angel3_orm_postgres
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.3.0"
+    version: "7.0.1"
   angel3_production:
     dependency: "direct main"
     description:
       name: angel3_production
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.1.2"
+    version: "7.0.0"
   angel3_route:
     dependency: transitive
     description:
       name: angel3_route
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "5.2.0"
+    version: "7.0.0"
   angel3_serialize:
     dependency: "direct main"
     description:
       name: angel3_serialize
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.1.0"
+    version: "7.0.0"
   angel3_serialize_generator:
     dependency: "direct dev"
     description:
       name: angel3_serialize_generator
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.3.0"
+    version: "7.0.0"
   angel3_static:
     dependency: "direct main"
     description:
       name: angel3_static
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.1.0"
+    version: "7.0.0"
   angel3_test:
     dependency: "direct dev"
     description:
       name: angel3_test
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.1.1"
+    version: "7.0.0"
   angel3_validate:
     dependency: "direct main"
     description:
       name: angel3_validate
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.1.0"
+    version: "7.0.0"
   angel3_websocket:
     dependency: transitive
     description:
       name: angel3_websocket
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.1.2"
+    version: "7.0.0"
   args:
     dependency: transitive
     description:
       name: args
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.3.0"
+    version: "2.3.1"
   async:
     dependency: transitive
     description:
       name: async
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.8.2"
+    version: "2.9.0"
   belatuk_code_buffer:
     dependency: transitive
     description:
       name: belatuk_code_buffer
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.2"
+    version: "4.0.0"
   belatuk_combinator:
     dependency: transitive
     description:
       name: belatuk_combinator
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.1"
+    version: "4.0.0"
   belatuk_html_builder:
     dependency: transitive
     description:
       name: belatuk_html_builder
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.2"
+    version: "4.0.0"
   belatuk_http_server:
     dependency: transitive
     description:
       name: belatuk_http_server
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0"
+    version: "3.0.0"
   belatuk_json_serializer:
     dependency: transitive
     description:
       name: belatuk_json_serializer
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "5.0.0"
+    version: "6.0.1"
   belatuk_merge_map:
     dependency: transitive
     description:
       name: belatuk_merge_map
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.2"
+    version: "4.0.0"
   belatuk_pretty_logging:
     dependency: "direct main"
     description:
       name: belatuk_pretty_logging
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.0.0"
+    version: "5.0.0"
   belatuk_pub_sub:
     dependency: transitive
     description:
       name: belatuk_pub_sub
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.0.3"
+    version: "5.0.0"
   belatuk_range_header:
     dependency: transitive
     description:
       name: belatuk_range_header
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.0.1"
+    version: "5.0.0"
   belatuk_symbol_table:
     dependency: transitive
     description:
       name: belatuk_symbol_table
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.1"
+    version: "4.0.0"
   boolean_selector:
     dependency: transitive
     description:
@@ -280,35 +280,35 @@ packages:
       name: build
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.2.1"
+    version: "2.3.0"
   build_config:
     dependency: transitive
     description:
       name: build_config
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.0"
+    version: "1.1.0"
   build_daemon:
     dependency: transitive
     description:
       name: build_daemon
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.1"
+    version: "3.1.0"
   build_resolvers:
     dependency: transitive
     description:
       name: build_resolvers
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.6"
+    version: "2.0.9"
   build_runner:
     dependency: "direct dev"
     description:
       name: build_runner
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.7"
+    version: "2.2.0"
   build_runner_core:
     dependency: transitive
     description:
@@ -329,7 +329,7 @@ packages:
       name: built_value
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "8.1.3"
+    version: "8.4.1"
   charcode:
     dependency: transitive
     description:
@@ -344,69 +344,62 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "2.0.1"
-  cli_util:
-    dependency: transitive
-    description:
-      name: cli_util
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "0.3.5"
   clock:
     dependency: transitive
     description:
       name: clock
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0"
+    version: "1.1.1"
   code_builder:
     dependency: transitive
     description:
       name: code_builder
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.1.0"
+    version: "4.2.0"
   collection:
     dependency: transitive
     description:
       name: collection
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.15.0"
+    version: "1.16.0"
   convert:
     dependency: transitive
     description:
       name: convert
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.1"
+    version: "3.0.2"
   coverage:
     dependency: transitive
     description:
       name: coverage
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.4"
+    version: "1.5.0"
   crypto:
     dependency: transitive
     description:
       name: crypto
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.1"
+    version: "3.0.2"
   dart_style:
     dependency: transitive
     description:
       name: dart_style
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.2.1"
+    version: "2.2.3"
   dotenv:
     dependency: transitive
     description:
       name: dotenv
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.0"
+    version: "4.0.1"
   executor:
     dependency: transitive
     description:
@@ -420,28 +413,28 @@ packages:
       name: file
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "6.1.2"
+    version: "6.1.4"
   fixnum:
     dependency: transitive
     description:
       name: fixnum
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.0"
+    version: "1.0.1"
   frontend_server_client:
     dependency: transitive
     description:
       name: frontend_server_client
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.3"
   glob:
     dependency: transitive
     description:
       name: glob
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.2"
+    version: "2.1.0"
   graphs:
     dependency: transitive
     description:
@@ -455,7 +448,7 @@ packages:
       name: http
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.13.4"
+    version: "0.13.5"
   http2:
     dependency: transitive
     description:
@@ -469,14 +462,14 @@ packages:
       name: http_multi_server
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.1"
+    version: "3.2.1"
   http_parser:
     dependency: transitive
     description:
       name: http_parser
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.0.0"
+    version: "4.0.1"
   inflection3:
     dependency: transitive
     description:
@@ -504,42 +497,42 @@ packages:
       name: jael3
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.2.0"
+    version: "7.0.0"
   jael3_preprocessor:
     dependency: transitive
     description:
       name: jael3_preprocessor
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.2.0"
+    version: "7.0.0"
   js:
     dependency: transitive
     description:
       name: js
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.6.3"
+    version: "0.6.4"
   json_annotation:
     dependency: transitive
     description:
       name: json_annotation
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.4.0"
+    version: "4.6.0"
   json_rpc_2:
     dependency: transitive
     description:
       name: json_rpc_2
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.1"
+    version: "3.0.2"
   lints:
     dependency: "direct dev"
     description:
       name: lints
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.1"
+    version: "2.0.0"
   logging:
     dependency: "direct main"
     description:
@@ -553,28 +546,35 @@ packages:
       name: matcher
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.12.11"
+    version: "0.12.12"
   meta:
     dependency: transitive
     description:
       name: meta
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.7.0"
+    version: "1.8.0"
   mime:
     dependency: transitive
     description:
       name: mime
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.1"
+    version: "1.0.2"
   mysql1:
     dependency: transitive
     description:
       name: mysql1
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.19.2"
+    version: "0.20.0"
+  mysql_client:
+    dependency: transitive
+    description:
+      name: mysql_client
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.0.25"
   node_preamble:
     dependency: transitive
     description:
@@ -595,14 +595,14 @@ packages:
       name: package_config
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.2"
+    version: "2.1.0"
   path:
     dependency: transitive
     description:
       name: path
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.8.1"
+    version: "1.8.2"
   pedantic:
     dependency: transitive
     description:
@@ -616,14 +616,14 @@ packages:
       name: pool
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.5.0"
+    version: "1.5.1"
   postgres:
     dependency: transitive
     description:
       name: postgres
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.4.3"
+    version: "2.4.6"
   postgres_pool:
     dependency: transitive
     description:
@@ -637,21 +637,21 @@ packages:
       name: pub_semver
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0"
+    version: "2.1.1"
   pubspec_parse:
     dependency: transitive
     description:
       name: pubspec_parse
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0"
+    version: "1.2.1"
   quiver:
     dependency: transitive
     description:
       name: quiver
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.1+1"
+    version: "3.1.0"
   recase:
     dependency: transitive
     description:
@@ -672,7 +672,7 @@ packages:
       name: sasl_scram
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.1.0"
+    version: "0.1.1"
   saslprep:
     dependency: transitive
     description:
@@ -686,35 +686,35 @@ packages:
       name: shelf
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0"
+    version: "1.3.2"
   shelf_packages_handler:
     dependency: transitive
     description:
       name: shelf_packages_handler
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.0"
+    version: "3.0.1"
   shelf_static:
     dependency: transitive
     description:
       name: shelf_static
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0"
+    version: "1.1.1"
   shelf_web_socket:
     dependency: transitive
     description:
       name: shelf_web_socket
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.1"
+    version: "1.0.2"
   source_gen:
     dependency: transitive
     description:
       name: source_gen
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.1"
+    version: "1.2.2"
   source_map_stack_trace:
     dependency: transitive
     description:
@@ -735,7 +735,7 @@ packages:
       name: source_span
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.8.1"
+    version: "1.9.1"
   stack_trace:
     dependency: transitive
     description:
@@ -763,35 +763,35 @@ packages:
       name: string_scanner
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0"
+    version: "1.1.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0"
+    version: "1.2.1"
   test:
     dependency: "direct dev"
     description:
       name: test
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.20.1"
+    version: "1.21.5"
   test_api:
     dependency: transitive
     description:
       name: test_api
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.4.9"
+    version: "0.4.13"
   test_core:
     dependency: transitive
     description:
       name: test_core
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.4.11"
+    version: "0.4.17"
   timing:
     dependency: transitive
     description:
@@ -812,7 +812,7 @@ packages:
       name: typed_data
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.0"
+    version: "1.3.1"
   unorm_dart:
     dependency: transitive
     description:
@@ -826,14 +826,14 @@ packages:
       name: uuid
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.5"
+    version: "3.0.6"
   vm_service:
     dependency: transitive
     description:
       name: vm_service
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "8.1.0"
+    version: "9.3.0"
   watcher:
     dependency: transitive
     description:
@@ -847,20 +847,20 @@ packages:
       name: web_socket_channel
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.0"
+    version: "2.2.0"
   webkit_inspection_protocol:
     dependency: transitive
     description:
       name: webkit_inspection_protocol
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.0"
+    version: "1.2.0"
   yaml:
     dependency: transitive
     description:
       name: yaml
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.1.0"
+    version: "3.1.1"
 sdks:
-  dart: ">=2.14.0 <3.0.0"
+  dart: ">=2.18.0-146.0.dev <3.0.0"

+ 20 - 20
frameworks/Dart/angel3/orm/pubspec.yaml

@@ -3,33 +3,33 @@ version: 1.0.0
 description: A basic starter application template for Angel3 framework
 publish_to: none
 environment:
-  sdk: '>=2.12.0 <3.0.0'
+  sdk: '>=2.17.0 <3.0.0'
 dependencies:
-  angel3_auth: ^4.0.0
-  angel3_configuration: ^4.1.0
-  angel3_framework: ^4.2.0
-  angel3_jael: ^4.2.0
-  angel3_migration: ^4.0.0
-  angel3_orm: ^4.0.0
-  angel3_orm_postgres: ^3.0.0
-  angel3_serialize: ^4.1.0
-  angel3_production: ^3.1.0
-  angel3_static: ^4.1.0
-  angel3_validate: ^4.0.0
-  jael3: ^4.2.0
-  belatuk_pretty_logging: ^4.0.0
+  angel3_auth: ^7.0.0
+  angel3_configuration: ^7.0.0
+  angel3_framework: ^7.0.0
+  angel3_jael: ^7.0.0
+  angel3_migration: ^7.0.0
+  angel3_orm: ^7.0.0
+  angel3_orm_postgres: ^7.0.0
+  angel3_serialize: ^7.0.0
+  angel3_production: ^7.0.0
+  angel3_static: ^7.0.0
+  angel3_validate: ^7.0.0
+  jael3: ^7.0.0
+  belatuk_pretty_logging: ^5.0.0
   optional: ^6.0.0
   logging: ^1.0.0
 dev_dependencies:
-  angel3_hot: ^4.2.0
-  angel3_migration_runner: ^4.1.0
-  angel3_orm_generator: ^4.1.0
-  angel3_serialize_generator: ^4.2.0
-  angel3_test: ^4.0.0
+  angel3_hot: ^7.0.0
+  angel3_migration_runner: ^7.0.0
+  angel3_orm_generator: ^7.0.0
+  angel3_serialize_generator: ^7.0.0
+  angel3_test: ^7.0.0
   build_runner: ^2.0.3
   io: ^1.0.0
   test: ^1.17.5
-  lints: ^1.0.0
+  lints: ^2.0.0
 #dependency_overrides:
 #  angel3_orm:
 #    path: ../../../../../belatuk/packages/orm/angel_orm

+ 0 - 1
frameworks/Dart/angel3/orm/views/layout.jael

@@ -5,7 +5,6 @@
 
     <link href="https://fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css">
     <link rel="stylesheet" href="/css/site.css">
-    <link rel="icon" href="/images/favicon.png">
 </head>
 <body>
 <div class="container">

+ 32 - 0
frameworks/Dart/dia/src/.dart_tool/package_config.json

@@ -0,0 +1,32 @@
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "dia",
+      "rootUri": "file:///Users/duke/.pub-cache/hosted/pub.dartlang.org/dia-0.0.8",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    },
+    {
+      "name": "dia_router",
+      "rootUri": "file:///Users/duke/.pub-cache/hosted/pub.dartlang.org/dia_router-0.0.6",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    },
+    {
+      "name": "path_to_regexp",
+      "rootUri": "file:///Users/duke/.pub-cache/hosted/pub.dartlang.org/path_to_regexp-0.4.0",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    },
+    {
+      "name": "DiaBenchmark",
+      "rootUri": "../",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    }
+  ],
+  "generated": "2022-09-07T13:44:12.718551Z",
+  "generator": "pub",
+  "generatorVersion": "2.18.0"
+}

+ 26 - 0
frameworks/Dart/dia/src/pubspec.lock

@@ -0,0 +1,26 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+  dia:
+    dependency: "direct main"
+    description:
+      name: dia
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.0.8"
+  dia_router:
+    dependency: "direct main"
+    description:
+      name: dia_router
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.0.6"
+  path_to_regexp:
+    dependency: transitive
+    description:
+      name: path_to_regexp
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.4.0"
+sdks:
+  dart: ">=2.12.0 <3.0.0"