From 8117e3c3e0d9e4211b3ce7e3f7886a70aa34af20 Mon Sep 17 00:00:00 2001 From: Illia Aihistov Date: Tue, 4 Aug 2026 14:39:08 +0300 Subject: [PATCH 1/9] refactor: migrate JS interop classes to extension types for improved performance and type safety --- analysis_options.yaml | 8 ++ bin/add_imports.dart | 2 +- lib/src/client.dart | 15 +-- lib/src/client_common.dart | 16 +-- lib/src/client_configuration.dart | 55 +++++---- lib/src/client_options.dart | 121 +++++++++++--------- lib/src/column.dart | 64 ++++++----- lib/src/connection.dart | 63 ++++++---- lib/src/connection_options.dart | 44 ++++--- lib/src/encoded_arg.dart | 4 +- lib/src/errors/connection_error.dart | 4 +- lib/src/errors/connection_params_error.dart | 5 +- lib/src/errors/js_error.dart | 4 +- lib/src/errors/postgres_error.dart | 4 +- lib/src/errors/transaction_error.dart | 4 +- lib/src/notice.dart | 48 ++++---- lib/src/pool.dart | 67 +++++++---- lib/src/pool_client.dart | 13 ++- lib/src/promise.dart | 20 +--- lib/src/query.dart | 63 ++++++---- lib/src/query_array_result.dart | 16 ++- lib/src/query_client.dart | 58 +++++----- lib/src/query_object_options.dart | 27 ++--- lib/src/query_object_result.dart | 31 ++--- lib/src/query_options.dart | 37 ++++-- lib/src/query_result.dart | 36 +++--- lib/src/row_description.dart | 20 +++- lib/src/savepoint.dart | 41 ++++--- lib/src/session.dart | 16 +-- lib/src/tls_options.dart | 40 ++++--- lib/src/transaction.dart | 120 ++++++++++--------- lib/src/transaction_options.dart | 40 ++++--- lib/src/undefined.dart | 2 +- lib/src/util.dart | 27 +++-- pubspec.yaml | 4 +- 35 files changed, 660 insertions(+), 479 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 7e89be6..337c6d5 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,5 +1,13 @@ include: package:solid_lints/analysis_options.yaml +plugins: + solid_lints: + version: ^1.0.0-dev.1 + diagnostics: + number_of_parameters: false + cyclomatic_complexity: false + avoid_non_null_assertion: false + linter: rules: package_api_docs: true diff --git a/bin/add_imports.dart b/bin/add_imports.dart index 1f8f8fe..11bb477 100644 --- a/bin/add_imports.dart +++ b/bin/add_imports.dart @@ -35,7 +35,7 @@ String createNewSource(String sourceString, Config config) { final classes = RegExp(r'new self.([A-Za-z]+)\(') .allMatches(sourceString) .map((e) => e.group(1)) - .whereNotNull() + .nonNulls .toSet() .intersection(config.classes) .whereNot((e) => sourceString.contains('import { $e }')) diff --git a/lib/src/client.dart b/lib/src/client.dart index 6e988b2..2b4ec8d 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -1,19 +1,20 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/client_options.dart'; import 'package:deno_postgres_interop/src/query_client.dart'; /// [deno-postgres@v​0.17.0/Client](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client). -@JS() -class Client extends QueryClient { +@JS('Client') +extension type Client._(JSObject _) implements QueryClient, JSObject { /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). - external factory Client(String dbUrl); + factory Client(String dbUrl) => Client._internal(dbUrl.toJS); /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). - factory Client.config(ClientOptions config) => - callConstructor('Client', [config]); + factory Client.config(ClientOptions config) => Client._internal(config); /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). - factory Client.empty() => callConstructor('Client', null); + factory Client.empty() => Client._internal(); + + @JS('Client') + external factory Client._internal([JSAny? configOrUrl]); } diff --git a/lib/src/client_common.dart b/lib/src/client_common.dart index c041aee..5f11f84 100644 --- a/lib/src/client_common.dart +++ b/lib/src/client_common.dart @@ -1,3 +1,5 @@ +import 'dart:js_interop'; + import 'package:deno_postgres_interop/src/query_array_result.dart'; import 'package:deno_postgres_interop/src/query_object_options.dart'; import 'package:deno_postgres_interop/src/query_object_result.dart'; @@ -7,7 +9,7 @@ import 'package:deno_postgres_interop/src/util.dart'; typedef QueryArguments = Object; /// This class hosts common interops for clients. -class ClientCommon { +abstract final class ClientCommon { /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_0). /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_0). static Future> queryArray>( @@ -24,7 +26,7 @@ class ClientCommon { Object queryable, QueryObjectOptions config, ) => - callFutureMethod(queryable, 'queryArray', [config]); + callFutureMethod(queryable as JSObject, 'queryArray', [config]); // This one won't be implemented because it doesn't make much sense for dart, // the query here is of type TemplateStringsArray which is used in @@ -39,7 +41,7 @@ class ClientCommon { // https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_2 /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_0). - /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_0). + /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_0). static Future> queryObject( Object queryable, String query, [ @@ -48,12 +50,12 @@ class ClientCommon { _query('queryObject', queryable, query, arguments); /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). - /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_1). + /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). static Future> queryObjectWithOptions( Object queryable, QueryObjectOptions config, ) => - callFutureMethod(queryable, 'queryObject', [config]); + callFutureMethod(queryable as JSObject, 'queryObject', [config]); // This one won't be implemented because it doesn't make much sense for dart, // the query here is of type TemplateStringsArray which is used in @@ -61,7 +63,7 @@ class ClientCommon { // // [related issue](https://github.com/dart-lang/language/issues/1988). // - // [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_2). + // [deno-postgres@v0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_2). // Future> queryObjectWithOptions( // List query, // List args, @@ -77,7 +79,7 @@ class ClientCommon { _assertQueryArgumentsOrNull(arguments); return callFutureMethod( - queryable, + queryable as JSObject, function, [ query, diff --git a/lib/src/client_configuration.dart b/lib/src/client_configuration.dart index 9cd638c..04975d8 100644 --- a/lib/src/client_configuration.dart +++ b/lib/src/client_configuration.dart @@ -1,13 +1,12 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/connection_options.dart'; import 'package:deno_postgres_interop/src/tls_options.dart'; import 'package:deno_postgres_interop/src/transport.dart'; /// [deno-postgres@v​0.17.0/ClientConfiguration](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration). -@JS() -class ClientConfiguration { +@JS('ClientConfiguration') +extension type ClientConfiguration._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/ClientConfiguration/applicationName](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_applicationName). external String get applicationName; @@ -20,8 +19,18 @@ class ClientConfiguration { /// [deno-postgres@v​0.17.0/ClientConfiguration/hostname](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_hostname). external String get hostname; + @JS('options') + external JSAny? get _options; + /// [deno-postgres@v​0.17.0/ClientConfiguration/options](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_options). - external Map get options; + Map get options { + final map = _options?.dartify(); + if (map is Map) { + return map.cast(); + } + + return const {}; + } /// [deno-postgres@v​0.17.0/ClientConfiguration/password](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_password). external String? get password; @@ -35,6 +44,12 @@ class ClientConfiguration { /// [deno-postgres@v​0.17.0/ClientConfiguration/user](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_user). external String get user; + @JS('host_type') + external String get _hostType; + + /// [deno-postgres@v​0.17.0/ClientConfiguration/host_type](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_host_type). + Transport get hostType => Transport.parse(_hostType); + /// [deno-postgres@v​0.17.0/ClientConfiguration](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration). factory ClientConfiguration({ required String applicationName, @@ -48,22 +63,18 @@ class ClientConfiguration { required Transport hostType, String? password, }) => - jsify({ - 'applicationName': applicationName, - 'connection': connection, - 'database': database, - 'hostname': hostname, - 'options': options, - if (password != null) 'password': password, - 'port': port, - 'tls': tls, - 'user': user, - 'hostType': hostType.name, - }) as ClientConfiguration; -} - -/// [deno-postgres@v​0.17.0/ClientConfiguration](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration). -extension ClientConfigurationProps on ClientConfiguration { - /// [deno-postgres@v​0.17.0/ClientConfiguration/host_type](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_host_type). - Transport get hostType => Transport.parse(getProperty(this, 'host_type')); + ClientConfiguration._( + { + 'applicationName': applicationName, + 'connection': connection, + 'database': database, + 'hostname': hostname, + 'options': options, + if (password != null) 'password': password, + 'port': port, + 'tls': tls, + 'user': user, + 'hostType': hostType.name, + }.jsify()! as JSObject, + ); } diff --git a/lib/src/client_options.dart b/lib/src/client_options.dart index 368e507..6e6f7b2 100644 --- a/lib/src/client_options.dart +++ b/lib/src/client_options.dart @@ -1,13 +1,12 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/partial/partial_connection_options.dart'; import 'package:deno_postgres_interop/src/partial/partial_tls_options.dart'; import 'package:deno_postgres_interop/src/transport.dart'; /// [deno-postgres@v​0.17.0/ClientOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions). -@JS() -class ClientOptions { +@JS('ClientOptions') +extension type ClientOptions._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/ClientOptions/applicationName](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_applicationName). external String? get applicationName; @@ -23,57 +22,20 @@ class ClientOptions { /// [deno-postgres@v​0.17.0/ClientOptions/user](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_applicationName/user). external String? get user; - /// [deno-postgres@v​0.17.0/ClientOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions). - factory ClientOptions({ - String? applicationName, - PartialConnectionOptions? connection, - String? database, - String? hostname, - Transport? hostType, - String? optionsString, - Map? optionsMap, - String? password, - String? portString, - int? port, - PartialTLSOptions? tls, - String? user, - }) { - assert(optionsString == null || optionsMap == null); - assert(portString == null || port == null); + @JS('host_type') + external String? get _hostType; - return jsify( - { - if (applicationName != null) 'applicationName': applicationName, - if (connection != null) 'connection': jsify(connection.asMap()), - if (database != null) 'database': database, - if (hostname != null) 'hostname': hostname, - if (hostType != null) 'host_type': hostType.name, - if (optionsString != null) - 'options': optionsString - else if (optionsMap != null) - 'options': jsify(optionsMap), - if (password != null) 'password': password, - if (portString != null) - 'port': portString - else if (port != null) - 'port': port, - if (tls != null) 'tls': jsify(tls.asMap()), - if (user != null) 'user': user, - }, - ) as ClientOptions; - } -} - -/// [deno-postgres@v​0.17.0/ClientOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions). -extension ClientOptionsProps on ClientOptions { /// [deno-postgres@v​0.17.0/ClientOptions/host_type](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_host_type). - Transport get hostType => Transport.parse(getProperty(this, 'host_type')); + Transport get hostType => Transport.parse(_hostType ?? ''); + + @JS('options') + external JSAny? get _options; /// [deno-postgres@v​0.17.0/ClientOptions/options](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_options). /// /// Either this or [optionsMap] is null. String? get optionsString { - final prop = getProperty(this, 'options'); + final prop = _options?.dartify(); return prop is String ? prop : null; } @@ -82,16 +44,19 @@ extension ClientOptionsProps on ClientOptions { /// /// Either this or [optionsString] is null. Map? get optionsMap { - final prop = getProperty(this, 'options'); + final prop = _options?.dartify(); - return prop is String ? null : prop as Map; + return prop is Map ? prop.cast() : null; } + @JS('port') + external JSAny? get _port; + /// [deno-postgres@v​0.17.0/ClientOptions/port](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_port). /// /// Either this or [port] is null. String? get portString { - final prop = getProperty(this, 'port'); + final prop = _port?.dartify(); return prop is String ? prop : null; } @@ -100,30 +65,74 @@ extension ClientOptionsProps on ClientOptions { /// /// Either this or [portString] is null. int? get port { - final prop = getProperty(this, 'port'); + final prop = _port?.dartify(); return prop is int ? prop : null; } + @JS('connection') + external JSAny? get _connection; + /// [deno-postgres@v​0.17.0/ClientOptions/connection](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_connection). PartialConnectionOptions? get connection { - final map = - dartify(getProperty(this, 'connection')) as Map?; + final map = _connection?.dartify() as Map?; return map == null ? null : PartialConnectionOptions.fromMap(map); } + @JS('tls') + external JSAny? get _tls; + /// [deno-postgres@v​0.17.0/ClientOptions/tls](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_tls). PartialTLSOptions? get tls { - final map = - dartify(getProperty(this, 'connection')) as Map?; + final map = _tls?.dartify() as Map?; if (map == null) return null; return PartialTLSOptions( - caCertificates: map['caCertificates'] as List?, + caCertificates: (map['caCertificates'] as List?)?.cast(), isEnabled: map['enabled'] as bool?, isEnforced: map['enforced'] as bool?, ); } + + /// [deno-postgres@v​0.17.0/ClientOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions). + factory ClientOptions({ + String? applicationName, + PartialConnectionOptions? connection, + String? database, + String? hostname, + Transport? hostType, + String? optionsString, + Map? optionsMap, + String? password, + String? portString, + int? port, + PartialTLSOptions? tls, + String? user, + }) { + assert(optionsString == null || optionsMap == null); + assert(portString == null || port == null); + + return ClientOptions._( + { + if (applicationName != null) 'applicationName': applicationName, + if (connection != null) 'connection': connection.asMap(), + if (database != null) 'database': database, + if (hostname != null) 'hostname': hostname, + if (hostType != null) 'host_type': hostType.name, + if (optionsString != null) + 'options': optionsString + else if (optionsMap != null) + 'options': optionsMap, + if (password != null) 'password': password, + if (portString != null) + 'port': portString + else if (port != null) + 'port': port, + if (tls != null) 'tls': tls.asMap(), + if (user != null) 'user': user, + }.jsify()! as JSObject, + ); + } } diff --git a/lib/src/column.dart b/lib/src/column.dart index e440866..035c1a9 100644 --- a/lib/src/column.dart +++ b/lib/src/column.dart @@ -1,9 +1,39 @@ import 'dart:js_interop'; -import 'dart:js_util'; /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). -@JS() -class Column { +@JS('Column') +extension type Column._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column#ctor_0). + factory Column({ + required String name, + required int tableOid, + required int index, + required int typeOid, + required int columnLength, + required int typeModifier, + required ColumnFormat format, + }) => + Column._internal( + name, + tableOid, + index, + typeOid, + columnLength, + typeModifier, + format.id, + ); + + @JS('Column') + external factory Column._internal( + String name, + int tableOid, + int index, + int typeOid, + int columnLength, + int typeModifier, + int format, + ); + /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). external String get name; @@ -22,32 +52,12 @@ class Column { /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). external int get typeModifier; - /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column#ctor_0). - factory Column({ - required String name, - required int tableOid, - required int index, - required int typeOid, - required int columnLength, - required int typeModifier, - required ColumnFormat format, - }) => - callConstructor('Column', [ - name, - tableOid, - index, - typeOid, - columnLength, - typeModifier, - format.id, - ]); -} + @JS('format') + external int get _format; -/// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). -extension ColumnProps on Column { /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). - ColumnFormat get format => ColumnFormat.values - .firstWhere((e) => e.id == getProperty(this, 'format')); + ColumnFormat get format => + ColumnFormat.values.firstWhere((e) => e.id == _format); } /// enum Format { diff --git a/lib/src/connection.dart b/lib/src/connection.dart index cd45722..42ac547 100644 --- a/lib/src/connection.dart +++ b/lib/src/connection.dart @@ -1,50 +1,71 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/client_configuration.dart'; import 'package:deno_postgres_interop/src/promise.dart'; import 'package:deno_postgres_interop/src/query.dart'; import 'package:deno_postgres_interop/src/query_result.dart'; import 'package:deno_postgres_interop/src/transport.dart'; -import 'package:deno_postgres_interop/src/util.dart'; /// [deno-postgres@v​0.17.0/Connection](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection). -@JS() -class Connection { - /// [deno-postgres@v​0.17.0/Connection/connected](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#accessor_pid). - external int get pid; - +@JS('Connection') +extension type Connection._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/Connection/constructor](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#ctor_0). factory Connection({ required ClientConfiguration connectionParams, required Future Function() disconnectionCallback, }) => - callConstructor( - 'Connection', - [connectionParams, () => futureToPromise(disconnectionCallback())], + Connection._internal( + connectionParams, + (() => futureToPromise(disconnectionCallback())).toJS, ); -} -/// [deno-postgres@v​0.17.0/Connection](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection). -extension ConnectionProps on Connection { + @JS('Connection') + external factory Connection._internal( + ClientConfiguration connectionParams, + JSFunction disconnectionCallback, + ); + + /// [deno-postgres@v​0.17.0/Connection/connected](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#accessor_pid). + external int get pid; + /// [deno-postgres@v​0.17.0/Connection/connected](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#prop_connected). - bool get isConnected => getProperty(this, 'connected'); + @JS('connected') + external bool get isConnected; /// [deno-postgres@v​0.17.0/Connection/tls](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#accessor_tls). - bool get isCarriedOverTLS => getProperty(this, 'tls'); + @JS('tls') + external bool get isCarriedOverTLS; + + @JS('transport') + external String get _transport; /// [deno-postgres@v​0.17.0/Connection/transport](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#accessor_transport). - Transport get transport => Transport.parse(getProperty(this, 'transport')); + Transport get transport => Transport.parse(_transport); + + @JS('end') + external JSPromise _end(); /// [deno-postgres@v​0.17.0/Connection/end](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_end_0). - Future end() => callFutureMethod(this, 'end'); + Future end() async { + await _end().toDart; + } + + @JS('query') + external JSPromise _query(Query query); /// [deno-postgres@v​0.17.0/Connection/query](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_query_0). /// [deno-postgres@v​0.17.0/Connection/query](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_query_1). - Future queryArray(Query query) => - callFutureMethod(this, 'query', [query]); + Future queryArray(Query query) async { + final res = await _query(query).toDart; + + return res! as T; + } + + @JS('startup') + external JSPromise _startup(bool isReconnection); /// [deno-postgres@v​0.17.0/Connection/startup](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_startup_0). - Future startup({required bool isReconnection}) => - callFutureMethod(this, 'startup', [isReconnection]); + Future startup({required bool isReconnection}) async { + await _startup(isReconnection).toDart; + } } diff --git a/lib/src/connection_options.dart b/lib/src/connection_options.dart index c67e83f..936f619 100644 --- a/lib/src/connection_options.dart +++ b/lib/src/connection_options.dart @@ -1,47 +1,45 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/partial/partial_connection_options.dart'; /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions). -@JS() -class ConnectionOptions { +@JS('ConnectionOptions') +extension type ConnectionOptions._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_attempts). external int get attempts; - /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions). - factory ConnectionOptions({ - required int attempts, - int Function(int previousInterval)? nextInterval, - int? interval, - }) { - return jsify( - PartialConnectionOptions( - attempts: attempts, - nextInterval: nextInterval, - interval: interval, - ).asMap(), - ) as ConnectionOptions; - } -} + @JS('interval') + external JSAny? get _interval; -/// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions). -extension ConnectionOptionsProps on ConnectionOptions { /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_interval). /// /// Either this or [interval] is null. int Function(int previousInterval)? get nextInterval { - final prop = getProperty(this, 'interval'); + final prop = _interval?.dartify(); - return prop is int ? null : prop as int Function(int previousInterval); + return prop is int ? null : prop as int Function(int previousInterval)?; } /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_interval). /// /// Either this or [nextInterval] is null. int? get interval { - final prop = getProperty(this, 'interval'); + final prop = _interval?.dartify(); return prop is int ? prop : null; } + + /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions). + factory ConnectionOptions({ + required int attempts, + int Function(int previousInterval)? nextInterval, + int? interval, + }) => + ConnectionOptions._( + PartialConnectionOptions( + attempts: attempts, + nextInterval: nextInterval, + interval: interval, + ).asMap().jsify()! as JSObject, + ); } diff --git a/lib/src/encoded_arg.dart b/lib/src/encoded_arg.dart index 69a8a98..a8f0a1d 100644 --- a/lib/src/encoded_arg.dart +++ b/lib/src/encoded_arg.dart @@ -1,2 +1,4 @@ +import 'dart:js_interop'; + /// [deno-postgres@v​0.17.0/EncodedArg](https://deno.land/x/postgres@v0.17.0/query/encode.ts?s=EncodedArg). -typedef EncodedArg = dynamic; +typedef EncodedArg = JSAny?; diff --git a/lib/src/errors/connection_error.dart b/lib/src/errors/connection_error.dart index 92af58b..56295cd 100644 --- a/lib/src/errors/connection_error.dart +++ b/lib/src/errors/connection_error.dart @@ -3,5 +3,5 @@ import 'dart:js_interop'; import 'package:deno_postgres_interop/src/errors/js_error.dart'; /// [deno-postgres@v​0.17.0/ConnectionError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=ConnectionError). -@JS('Error') -class ConnectionError extends JSError {} +@JS('ConnectionError') +extension type ConnectionError._(JSObject _) implements JSError, JSObject {} diff --git a/lib/src/errors/connection_params_error.dart b/lib/src/errors/connection_params_error.dart index b0179ce..635c75f 100644 --- a/lib/src/errors/connection_params_error.dart +++ b/lib/src/errors/connection_params_error.dart @@ -3,5 +3,6 @@ import 'dart:js_interop'; import 'package:deno_postgres_interop/src/errors/js_error.dart'; /// [deno-postgres@v​0.17.0/ConnectionParamsError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=ConnectionParamsError). -@JS('Error') -class ConnectionParamsError extends JSError {} +@JS('ConnectionParamsError') +extension type ConnectionParamsError._(JSObject _) + implements JSError, JSObject {} diff --git a/lib/src/errors/js_error.dart b/lib/src/errors/js_error.dart index 3b5474c..2cdfec9 100644 --- a/lib/src/errors/js_error.dart +++ b/lib/src/errors/js_error.dart @@ -2,12 +2,12 @@ import 'dart:js_interop'; /// [js/Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error). @JS('Error') -class JSError { +extension type JSError._(JSObject _) implements JSObject { /// [js/Error/name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name). external String get name; /// [js/Error/cause](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause). - external Error? get cause; + external JSError? get cause; /// [js/Error/message](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message). external String get message; diff --git a/lib/src/errors/postgres_error.dart b/lib/src/errors/postgres_error.dart index 191ae48..4297519 100644 --- a/lib/src/errors/postgres_error.dart +++ b/lib/src/errors/postgres_error.dart @@ -4,8 +4,8 @@ import 'package:deno_postgres_interop/src/errors/js_error.dart'; import 'package:deno_postgres_interop/src/notice.dart'; /// [deno-postgres@v​0.17.0/PostgresError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=TransactionError). -@JS() -class PostgresError extends JSError { +@JS('PostgresError') +extension type PostgresError._(JSObject _) implements JSError, JSObject { /// [deno-postgres@v​0.17.0/PostgresError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=PostgresError#prop_fields). external Notice get fields; } diff --git a/lib/src/errors/transaction_error.dart b/lib/src/errors/transaction_error.dart index dd75097..cfd07c8 100644 --- a/lib/src/errors/transaction_error.dart +++ b/lib/src/errors/transaction_error.dart @@ -3,8 +3,8 @@ import 'dart:js_interop'; import 'package:deno_postgres_interop/src/errors/postgres_error.dart'; /// [deno-postgres@v​0.17.0/TransactionError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=TransactionError). -@JS() -class TransactionError { +@JS('TransactionError') +extension type TransactionError._(JSObject _) implements JSObject { /// [js/Error/cause](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause). /// [deno-postgres@v​0.17.0/TransactionError/constructor](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=TransactionError#ctor_0). external PostgresError get cause; diff --git a/lib/src/notice.dart b/lib/src/notice.dart index 9bbef3b..0474363 100644 --- a/lib/src/notice.dart +++ b/lib/src/notice.dart @@ -1,9 +1,8 @@ import 'dart:js_interop'; -import 'dart:js_util'; /// [deno-postgres@v​0.17.0/Notice](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice). -@JS() -class Notice { +@JS('Notice') +extension type Notice._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/Notice/severity](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_severity). external String get severity; @@ -74,25 +73,26 @@ class Notice { String? file, String? line, String? routine, - }) { - return jsify({ - 'severity': severity, - 'code': code, - 'message': message, - if (detail != null) 'detail': detail, - if (hint != null) 'hint': hint, - if (position != null) 'position': position, - if (internalPosition != null) 'internalPosition': internalPosition, - if (internalQuery != null) 'internalQuery': internalQuery, - if (where != null) 'where': where, - if (schema != null) 'schema': schema, - if (table != null) 'table': table, - if (column != null) 'column': column, - if (dataType != null) 'dataType': dataType, - if (constraint != null) 'constraint': constraint, - if (file != null) 'file': file, - if (line != null) 'line': line, - if (routine != null) 'routine': routine, - }) as Notice; - } + }) => + Notice._( + { + 'severity': severity, + 'code': code, + 'message': message, + if (detail != null) 'detail': detail, + if (hint != null) 'hint': hint, + if (position != null) 'position': position, + if (internalPosition != null) 'internalPosition': internalPosition, + if (internalQuery != null) 'internalQuery': internalQuery, + if (where != null) 'where': where, + if (schema != null) 'schema': schema, + if (table != null) 'table': table, + if (column != null) 'column': column, + if (dataType != null) 'dataType': dataType, + if (constraint != null) 'constraint': constraint, + if (file != null) 'file': file, + if (line != null) 'line': line, + if (routine != null) 'routine': routine, + }.jsify()! as JSObject, + ); } diff --git a/lib/src/pool.dart b/lib/src/pool.dart index d43c594..5c70245 100644 --- a/lib/src/pool.dart +++ b/lib/src/pool.dart @@ -1,24 +1,21 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/client_options.dart'; import 'package:deno_postgres_interop/src/pool_client.dart'; -import 'package:deno_postgres_interop/src/undefined.dart'; -import 'package:deno_postgres_interop/src/util.dart'; /// [deno-postgres@v​0.17.0/Pool](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool). -@JS() -class Pool { +@JS('Pool') +extension type Pool._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). factory Pool({ required int size, bool? lazy, }) => - callConstructor('Pool', [ - undefined, + Pool._internal( + null, size, - if (lazy != null) lazy, - ]); + lazy, + ); /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). factory Pool.withOptions({ @@ -26,11 +23,11 @@ class Pool { required int size, bool? lazy, }) => - callConstructor('Pool', [ + Pool._internal( connectionParams, size, - if (lazy != null) lazy, - ]); + lazy, + ); /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). factory Pool.withString({ @@ -38,28 +35,48 @@ class Pool { required int size, bool? lazy, }) => - callConstructor('Pool', [ - connectionString, + Pool._internal( + connectionString.toJS, size, - if (lazy != null) lazy, - ]); -} + lazy, + ); + + @JS('Pool') + external factory Pool._internal([ + JSAny? connectionParamsOrString, + int? size, + bool? lazy, + ]); -/// [deno-postgres@v​0.17.0/Pool](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool). -extension PoolProps on Pool { /// [deno-postgres@v​0.17.0/Pool/size](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#prop_size). - int get connectionsCount => getProperty(this, 'size'); + @JS('size') + external int get connectionsCount; /// [deno-postgres@v​0.17.0/Pool/available](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#prop_available). - int get openConnectionsCount => getProperty(this, 'available'); + @JS('available') + external int get openConnectionsCount; + + @JS('connect') + external JSPromise _connect(); /// [deno-postgres@v​0.17.0/Pool/connect](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#method_connect_0). - Future connect() => callFutureMethod(this, 'connect'); + Future connect() => _connect().toDart; + + @JS('end') + external JSPromise _end(); /// [deno-postgres@v​0.17.0/Pool/end](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#method_end_0). - Future end() => callFutureMethod(this, 'end'); + Future end() async { + await _end().toDart; + } + + @JS('initialized') + external JSPromise _initialized(); /// [deno-postgres@v​0.17.0/Pool/initialized](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#method_initialized_0). - Future initializedConnectionsCount() => - callFutureMethod(this, 'initialized'); + Future initializedConnectionsCount() async { + final res = await _initialized().toDart; + + return res.toDartInt; + } } diff --git a/lib/src/pool_client.dart b/lib/src/pool_client.dart index abaea9d..40e87ea 100644 --- a/lib/src/pool_client.dart +++ b/lib/src/pool_client.dart @@ -4,12 +4,19 @@ import 'package:deno_postgres_interop/src/client_configuration.dart'; import 'package:deno_postgres_interop/src/query_client.dart'; /// [deno-postgres@v​0.17.0/PoolClient](https://deno.land/x/postgres@v0.17.0/mod.ts?s=PoolClient). -@JS() -class PoolClient extends QueryClient { +@JS('PoolClient') +extension type PoolClient._(JSObject _) implements QueryClient, JSObject { /// [deno-postgres@v​0.17.0/PoolClient/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=PoolClient#ctor_0). - external factory PoolClient( + factory PoolClient( ClientConfiguration config, void Function() releaseCallback, + ) => + PoolClient._internal(config, releaseCallback.toJS); + + @JS('PoolClient') + external factory PoolClient._internal( + ClientConfiguration config, + JSFunction releaseCallback, ); /// [deno-postgres@v​0.17.0/PoolClient/constructor/release](https://deno.land/x/postgres@v0.17.0/mod.ts?s=PoolClient#method_release_0). diff --git a/lib/src/promise.dart b/lib/src/promise.dart index e8d3998..fc928f1 100644 --- a/lib/src/promise.dart +++ b/lib/src/promise.dart @@ -1,21 +1,9 @@ import 'dart:js_interop'; -import 'dart:js_util'; -typedef _Resolver = void Function(T result); -typedef _Executor = void Function(_Resolver resolve, Function reject); - -/// JS [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) interop. -@JS() -class Promise { - /// [js/Promise/constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise). - external Promise(_Executor executor); -} +/// JS [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). +typedef Promise = JSPromise; /// Convert darts [Future] to js' [Promise]. -Promise futureToPromise(Future future) { - return Promise( - allowInterop((resolve, reject) { - future.then(resolve, onError: reject); - }), - ); +JSPromise futureToPromise(Future future) { + return future.then((value) => value?.jsify()).toJS; } diff --git a/lib/src/query.dart b/lib/src/query.dart index ecded0e..729c772 100644 --- a/lib/src/query.dart +++ b/lib/src/query.dart @@ -1,5 +1,4 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/client_common.dart'; import 'package:deno_postgres_interop/src/encoded_arg.dart'; @@ -7,17 +6,8 @@ import 'package:deno_postgres_interop/src/query_object_options.dart'; import 'package:deno_postgres_interop/src/result_type.dart'; /// [deno-postgres@v​0.17.0/Query](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query). -@JS() -class Query { - /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_args). - external List args; - - /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_fields). - external List? get fields; - - /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_text). - external String get text; - +@JS('Query') +extension type Query._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_0). /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_2). factory Query.withConfig({ @@ -25,7 +15,11 @@ class Query { required ResultType resultType, QueryArguments? args, }) => - callConstructor('Query', [config, resultType, args]) as Query; + Query._internal( + config, + resultType.index, + args?.jsify(), + ); /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_1). /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_2). @@ -34,15 +28,44 @@ class Query { required ResultType resultType, QueryArguments? args, }) => - callConstructor('Query', [text, resultType, args]) as Query; -} + Query._internal( + text.toJS, + resultType.index, + args?.jsify(), + ); + + @JS('Query') + external factory Query._internal( + JSAny configOrText, + int resultType, + JSAny? args, + ); + + @JS('args') + external JSArray get _args; + @JS('args') + external set _args(JSArray val); + + /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_args). + List get args => _args.toDart; + set args(List val) => _args = val.toJS; + + @JS('fields') + external JSArray? get _fields; + + /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_fields). + List? get fields => _fields?.toDart.map((e) => e.toDart).toList(); + + /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_text). + external String get text; -/// [deno-postgres@v​0.17.0/Query](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query). -extension QueryProps on Query { /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_camelcase). - bool? get isCamelCase => getProperty(this, 'camelcase'); + @JS('camelcase') + external bool? get isCamelCase; + + @JS('result_type') + external int get _resultType; /// [deno-postgres@v​0.17.0/Query/result_type](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_result_type). - ResultType get resultType => - ResultType.values[getProperty(this, 'result_type')]; + ResultType get resultType => ResultType.values[_resultType]; } diff --git a/lib/src/query_array_result.dart b/lib/src/query_array_result.dart index 93d6803..c319b53 100644 --- a/lib/src/query_array_result.dart +++ b/lib/src/query_array_result.dart @@ -4,11 +4,17 @@ import 'package:deno_postgres_interop/src/query.dart'; import 'package:deno_postgres_interop/src/query_result.dart'; /// [deno-postgres@v​0.17.0/QueryArrayResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryArrayResult). -@JS() -class QueryArrayResult> extends QueryResult { - /// [deno-postgres@v​0.17.0/QueryArrayResult/rows](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryArrayResult#prop_rows). - external List get rows; - +@JS('QueryArrayResult') +extension type QueryArrayResult>._(JSObject _) + implements QueryResult, JSObject { /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). external factory QueryArrayResult(Query query); + + @JS('rows') + external JSArray> get _rows; + + /// [deno-postgres@v​0.17.0/QueryArrayResult/rows](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryArrayResult#prop_rows). + List get rows => _rows.toDart + .map((row) => row.toDart.map((e) => e?.dartify()).toList() as T) + .toList(); } diff --git a/lib/src/query_client.dart b/lib/src/query_client.dart index ae6840c..b3249b6 100644 --- a/lib/src/query_client.dart +++ b/lib/src/query_client.dart @@ -1,5 +1,4 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/client_common.dart'; import 'package:deno_postgres_interop/src/connection.dart'; @@ -9,49 +8,56 @@ import 'package:deno_postgres_interop/src/query_object_result.dart'; import 'package:deno_postgres_interop/src/session.dart'; import 'package:deno_postgres_interop/src/transaction.dart'; import 'package:deno_postgres_interop/src/transaction_options.dart'; -import 'package:deno_postgres_interop/src/util.dart'; /// [deno-postgres@v​0.17.0/QueryClient](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient). -@JS() -class QueryClient { - /// [deno-postgres@v​0.17.0/QueryClient/session](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#accessor_session). - external Session get session; - +@JS('QueryClient') +extension type QueryClient._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/QueryClient/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#ctor_0). external factory QueryClient(Connection connection); -} -/// [deno-postgres@v​0.17.0/QueryClient](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient). -extension QueryClientProps on QueryClient { + /// [deno-postgres@v​0.17.0/QueryClient/session](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#accessor_session). + external Session get session; + /// [deno-postgres@v​0.17.0/QueryClient/connected](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#accessor_connected). - bool get isConnected => getProperty(this, 'connected'); + @JS('connected') + external bool get isConnected; + + @JS('closeConnection') + external JSPromise _closeConnection(); /// [deno-postgres@v​0.17.0/QueryClient/closeConnection](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_closeConnection_0). - Future closeConnection() => callFutureMethod(this, 'closeConnection'); + Future closeConnection() async { + await _closeConnection().toDart; + } /// [deno-postgres@v​0.17.0/QueryClient/resetSessionMetadata](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_resetSessionMetadata_0). - void resetSessionMetadata() => callMethod(this, 'resetSessionMetadata', []); + external void resetSessionMetadata(); + + @JS('connect') + external JSPromise _connect(); /// [deno-postgres@v​0.17.0/QueryClient/connect](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_connect_0). - Future connect() => callFutureMethod(this, 'connect'); + Future connect() async { + await _connect().toDart; + } + + @JS('end') + external JSPromise _end(); /// [deno-postgres@v​0.17.0/QueryClient/end](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_end_0). - Future end() => callFutureMethod(this, 'end'); + Future end() async { + await _end().toDart; + } /// [deno-postgres@v​0.17.0/QueryClient/createTransaction](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_createTransaction_0). - Transaction createTransaction(String name, [TransactionOptions? options]) => - callMethod( - this, - 'createTransaction', - [ - name, - if (options != null) options, - ], - ); + external Transaction createTransaction( + String name, [ + TransactionOptions? options, + ]); /// Convinience wrapper for [createTransaction], - /// [TransactionProps.begin], - /// and [TransactionProps.commit]. + /// [Transaction.begin], + /// and [Transaction.commit]. Future transaction( String name, Future Function(Transaction) f, [ diff --git a/lib/src/query_object_options.dart b/lib/src/query_object_options.dart index 083e3a3..78d4b6f 100644 --- a/lib/src/query_object_options.dart +++ b/lib/src/query_object_options.dart @@ -1,26 +1,27 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/query_options.dart'; /// [deno-postgres@v​0.17.0/QueryObjectOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryObjectOptions). -@JS() -class QueryObjectOptions extends QueryOptions { +@JS('QueryObjectOptions') +extension type QueryObjectOptions._(JSObject _) + implements QueryOptions, JSObject { + @JS('fields') + external JSArray? get _fields; + /// [deno-postgres@v​0.17.0/QueryObjectOptions/fields](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#prop_fields). - external List? get fields; + List? get fields => _fields?.toDart.map((e) => e.toDart).toList(); + + /// [deno-postgres@v​0.17.0/QueryObjectOptions/camelcase](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#prop_camelcase). + @JS('camelcase') + external bool? get isCamelCase; /// [deno-postgres@v​0.17.0/QueryObjectOptions](https://deno.land/x/postgres@v0.17.0/query/mod.ts?s=QueryObjectOptions). factory QueryObjectOptions({List? fields, bool? isCamelCase}) => - jsify( + QueryObjectOptions._( { if (isCamelCase != null) 'camelcase': isCamelCase, if (fields != null) 'fields': fields, - }, - ) as QueryObjectOptions; -} - -/// [deno-postgres@v​0.17.0/QueryObjectOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryObjectOptions). -extension QueryObjectOptionsProps on QueryObjectOptions { - /// [deno-postgres@v​0.17.0/QueryObjectOptions/camelcase](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#prop_camelcase). - bool? get isCamelCase => getProperty(this, 'camelcase'); + }.jsify()! as JSObject, + ); } diff --git a/lib/src/query_object_result.dart b/lib/src/query_object_result.dart index bc98b32..f67d9ec 100644 --- a/lib/src/query_object_result.dart +++ b/lib/src/query_object_result.dart @@ -1,26 +1,27 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/query.dart'; import 'package:deno_postgres_interop/src/query_result.dart'; /// [deno-postgres@v​0.17.0/QueryObjectResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult). -@JS() -class QueryObjectResult extends QueryResult { - /// [deno-postgres@v​0.17.0/QueryObjectResult/columns](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult#prop_columns). - external List? get columns; - +@JS('QueryObjectResult') +extension type QueryObjectResult._(JSObject _) + implements QueryResult, JSObject { /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). external factory QueryObjectResult(Query query); -} -/// [deno-postgres@v​0.17.0/QueryObjectResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult). -extension QueryObjectResultProps on QueryObjectResult { + @JS('columns') + external JSArray? get _columns; + + /// [deno-postgres@v​0.17.0/QueryObjectResult/columns](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult#prop_columns). + List? get columns => _columns?.toDart.map((e) => e.toDart).toList(); + + @JS('rows') + external JSArray get _rows; + /// [deno-postgres@v​0.17.0/QueryObjectResult/rows](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult#prop_rows). - List> get rows => - // ignore: cast_nullable_to_non_nullable - (dartify(getProperty(this, 'rows')) as List) - .cast>() - .map((e) => e.cast()) - .toList(); + List> get rows => (_rows.dartify()! as List) + .cast>() + .map((e) => e.cast()) + .toList(); } diff --git a/lib/src/query_options.dart b/lib/src/query_options.dart index 52e3e9e..9c459f9 100644 --- a/lib/src/query_options.dart +++ b/lib/src/query_options.dart @@ -1,22 +1,32 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/client_common.dart'; import 'package:deno_postgres_interop/src/encoded_arg.dart'; /// [deno-postgres@v​0.17.0/QueryOptions](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions). -@JS() -class QueryOptions { +@JS('QueryOptions') +extension type QueryOptions._(JSObject _) implements JSObject { + @JS('args') + external JSAny? get _args; + /// [deno-postgres@v​0.17.0/QueryOptions/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_args). - external QueryArguments? get args; + QueryArguments? get args => _args?.dartify(); + + @JS('encoder') + external JSFunction? get _encoder; /// [deno-postgres@v​0.17.0/QueryOptions/encoder](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_encoder). - external EncodedArg Function(dynamic arg)? get encoder; + EncodedArg Function(dynamic arg)? get encoder { + final fn = _encoder; + if (fn == null) return null; + + return (Object? arg) => fn.callAsFunction(null, arg?.jsify()); + } /// [deno-postgres@v​0.17.0/QueryOptions/name](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_name). external String? get name; - /// [deno-postgres@v​0.17.0/QueryOptions/text](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_text. + /// [deno-postgres@v​0.17.0/QueryOptions/text](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_text). external String get text; /// [deno-postgres@v​0.17.0/QueryOptions](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions). @@ -26,10 +36,13 @@ class QueryOptions { EncodedArg Function(dynamic arg)? encoder, String? name, }) => - jsify({ - if (args != null) 'args': args, - if (encoder != null) 'encoder': encoder, - if (name != null) 'name': name, - 'text': text, - }) as QueryOptions; + QueryOptions._( + { + if (args != null) 'args': args, + if (encoder != null) + 'encoder': ((JSAny? arg) => encoder(arg?.dartify())).toJS, + if (name != null) 'name': name, + 'text': text, + }.jsify()! as JSObject, + ); } diff --git a/lib/src/query_result.dart b/lib/src/query_result.dart index d518d15..47f3fb5 100644 --- a/lib/src/query_result.dart +++ b/lib/src/query_result.dart @@ -1,5 +1,4 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/command_type.dart'; import 'package:deno_postgres_interop/src/notice.dart'; @@ -7,13 +6,19 @@ import 'package:deno_postgres_interop/src/query.dart'; import 'package:deno_postgres_interop/src/row_description.dart'; /// [deno-postgres@v​0.17.0/QueryResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult). -@JS() -class QueryResult { +@JS('QueryResult') +extension type QueryResult._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). + external factory QueryResult(Query query); + /// [deno-postgres@v​0.17.0/QueryResult/rowCount](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#prop_rowCount). external int? get rowCount; + @JS('warnings') + external JSArray get _warnings; + /// [deno-postgres@v​0.17.0/QueryResult/warnings](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#prop_warnings). - external List get warnings; + List get warnings => _warnings.toDart; /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). external Query get query; @@ -21,23 +26,26 @@ class QueryResult { /// [deno-postgres@v​0.17.0/QueryResult/rowDescription](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#accessor_rowDescription). external RowDescription? get rowDescription; - /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). - external factory QueryResult(Query query); - /// [deno-postgres@v​0.17.0/QueryResult/handleCommandComplete](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#method_handleCommandComplete_0). external void handleCommandComplete(String commandTag); /// [deno-postgres@v​0.17.0/QueryResult/loadColumnDescriptions](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#method_loadColumnDescriptions_0). external void loadColumnDescriptions(RowDescription description); -} -/// [deno-postgres@v​0.17.0/QueryResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult). -extension QueryResultProps on QueryResult { + @JS('insertRow') + external void _insertRow(JSArray> row); + /// [deno-postgres@v​0.17.0/QueryResult/insertRow](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#method_insertRow_0). - void insertRow(List> row) => callMethod(this, 'insertRow', [row]); + void insertRow(List> row) => _insertRow( + row + .map((inner) => inner.map((e) => e.toJS).toList().toJS) + .toList() + .toJS, + ); + + @JS('command') + external String? get _command; /// [deno-postgres@v​0.17.0/QueryResult/command](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#prop_command). - CommandType get command => CommandType.parse( - getProperty(this, 'command'), - ); + CommandType get command => CommandType.parse(_command ?? ''); } diff --git a/lib/src/row_description.dart b/lib/src/row_description.dart index 735956a..f05b990 100644 --- a/lib/src/row_description.dart +++ b/lib/src/row_description.dart @@ -3,14 +3,24 @@ import 'dart:js_interop'; import 'package:deno_postgres_interop/src/column.dart'; /// [deno-postgres@v​0.17.0/RowDescription](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription). -@JS() -class RowDescription { +@JS('RowDescription') +extension type RowDescription._(JSObject _) implements JSObject { /// https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription#ctor_0 - external int get columnCount; + factory RowDescription(int columnCount, List columns) => + RowDescription._internal(columnCount, columns.toJS); + + @JS('RowDescription') + external factory RowDescription._internal( + int columnCount, + JSArray columns, + ); /// https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription#ctor_0 - external List get columns; + external int get columnCount; + + @JS('columns') + external JSArray get _columns; /// https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription#ctor_0 - external factory RowDescription(int columnCount, List columns); + List get columns => _columns.toDart; } diff --git a/lib/src/savepoint.dart b/lib/src/savepoint.dart index b872af5..cc52fd9 100644 --- a/lib/src/savepoint.dart +++ b/lib/src/savepoint.dart @@ -1,33 +1,46 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/promise.dart'; -import 'package:deno_postgres_interop/src/util.dart'; /// [deno-postgres@v​0.17.0/Savepoint](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint). -@JS() -class Savepoint { +@JS('Savepoint') +extension type Savepoint._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/Savepoint/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#ctor_0). factory Savepoint( String name, Future Function(String name) updateCallback, Future Function(String name) releaseCallback, ) => - callConstructor('Savepoint', [ + Savepoint._internal( name, - (String name) => futureToPromise(updateCallback(name)), - (String name) => futureToPromise(releaseCallback(name)), - ]); -} + ((JSString name) => futureToPromise(updateCallback(name.toDart))).toJS, + ((JSString name) => futureToPromise(releaseCallback(name.toDart))).toJS, + ); + + @JS('Savepoint') + external factory Savepoint._internal( + String name, + JSFunction updateCallback, + JSFunction releaseCallback, + ); -/// [deno-postgres@v​0.17.0/Savepoint](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint). -extension SavepointProps on Savepoint { /// [deno-postgres@v​0.17.0/Savepoint/instances](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#accessor_instances). - int get instancesCount => getProperty(this, 'instances'); + @JS('instances') + external int get instancesCount; + + @JS('release') + external JSPromise _release(); /// [deno-postgres@v​0.17.0/Savepoint/instances](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#method_release_0). - Future release() => callFutureMethod(this, 'release'); + Future release() async { + await _release().toDart; + } + + @JS('update') + external JSPromise _update(); /// [deno-postgres@v​0.17.0/Savepoint/instances](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#method_update_0). - Future update() => callFutureMethod(this, 'update'); + Future update() async { + await _update().toDart; + } } diff --git a/lib/src/session.dart b/lib/src/session.dart index 3b2d40c..9474232 100644 --- a/lib/src/session.dart +++ b/lib/src/session.dart @@ -1,26 +1,26 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/transport.dart'; /// [deno-postgres@v​0.17.0/Session](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session). -@JS() -class Session { +@JS('Session') +extension type Session._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/Session/pid](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_pid) external int? get pid; /// [deno-postgres@v​0.17.0/Session/tls](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_tls) external bool? get tls; -} -/// [deno-postgres@v​0.17.0/Session](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session). -extension SessionProps on Session { /// [deno-postgres@v​0.17.0/Session/current_transaction](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_current_transaction) - String? get currentTransacton => getProperty(this, 'current_transaction'); + @JS('current_transaction') + external String? get currentTransacton; + + @JS('transport') + external String? get _transport; /// [deno-postgres@v​0.17.0/Session/transport](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_transport) Transport? get transport { - final string = getProperty(this, 'transport'); + final string = _transport; return string == null ? null : Transport.parse(string); } diff --git a/lib/src/tls_options.dart b/lib/src/tls_options.dart index 7b3f3c4..c91227e 100644 --- a/lib/src/tls_options.dart +++ b/lib/src/tls_options.dart @@ -1,11 +1,22 @@ import 'dart:js_interop'; -import 'dart:js_util'; /// [deno-postgres@v​0.17.0/TLSOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions). -@JS() -class TLSOptions { +@JS('TLSOptions') +extension type TLSOptions._(JSObject _) implements JSObject { + @JS('caCertificates') + external JSArray get _caCertificates; + /// [deno-postgres@v​0.17.0/TLSOptions/caCertificates](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_caCertificates). - external List get caCertificates; + List get caCertificates => + _caCertificates.toDart.map((e) => e.toDart).toList(); + + /// [deno-postgres@v​0.17.0/TLSOptions/enabled](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_enabled). + @JS('enabled') + external bool get isEnabled; + + /// [deno-postgres@v​0.17.0/TLSOptions/enforce](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_enforce). + @JS('enforce') + external bool get isEnforced; /// [deno-postgres@v​0.17.0/TLSOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions). factory TLSOptions({ @@ -13,18 +24,11 @@ class TLSOptions { required bool isEnabled, required bool isEnforced, }) => - jsify({ - 'caCertificates': caCertificates, - 'enabled': isEnabled, - 'enforce': isEnforced, - }) as TLSOptions; -} - -/// [deno-postgres@v​0.17.0/TLSOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions). -extension TLSOptionsProps on TLSOptions { - /// [deno-postgres@v​0.17.0/TLSOptions/enabled](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_enabled). - bool get isEnabled => getProperty(this, 'isEnabled'); - - /// [deno-postgres@v​0.17.0/TLSOptions/enforce](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_enforce). - bool get isEnforced => getProperty(this, 'enforce'); + TLSOptions._( + { + 'caCertificates': caCertificates, + 'enabled': isEnabled, + 'enforce': isEnforced, + }.jsify()! as JSObject, + ); } diff --git a/lib/src/transaction.dart b/lib/src/transaction.dart index 7c112e1..b07b30d 100644 --- a/lib/src/transaction.dart +++ b/lib/src/transaction.dart @@ -1,5 +1,4 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/client_common.dart'; import 'package:deno_postgres_interop/src/isolation_level.dart'; @@ -12,15 +11,10 @@ import 'package:deno_postgres_interop/src/query_object_result.dart'; import 'package:deno_postgres_interop/src/query_result.dart'; import 'package:deno_postgres_interop/src/savepoint.dart'; import 'package:deno_postgres_interop/src/transaction_options.dart'; -import 'package:deno_postgres_interop/src/undefined.dart'; -import 'package:deno_postgres_interop/src/util.dart'; /// [deno-postgres@v​0.17.0/Transaction](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction). -@JS() -class Transaction { - /// [deno-postgres@v​0.17.0/Transaction/savepoints](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#accessor_savepoints). - external List get savepoints; - +@JS('Transaction') +extension type Transaction._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/Transaction/construtor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#ctor_0). factory Transaction({ required String name, @@ -29,45 +23,71 @@ class Transaction { required void Function(String? name) updateClientLockCallback, TransactionOptions? options, }) => - callConstructor( - 'Transaction', - [ - name, - if (options != null) options else undefined, - client, - (Query query) => futureToPromise(executeQueryCallback(query)), - updateClientLockCallback, - ], + Transaction._internal( + name, + options, + client, + ((Query query) => futureToPromise(executeQueryCallback(query))).toJS, + ((JSString? name) => updateClientLockCallback(name?.toDart)).toJS, ); + @JS('Transaction') + external factory Transaction._internal( + String name, + TransactionOptions? options, + QueryClient client, + JSFunction executeQueryCallback, + JSFunction updateClientLockCallback, + ); + + @JS('savepoints') + external JSArray get _savepoints; + + /// [deno-postgres@v​0.17.0/Transaction/savepoints](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#accessor_savepoints). + List get savepoints => _savepoints.toDart; + /// [deno-postgres@v​0.17.0/Transaction/getSavepoint](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_getSavepoint_0). external Savepoint? getSavepoint(String name); -} -/// [deno-postgres@v​0.17.0/Transaction](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction). -extension TransactionProps on Transaction { + @JS('isolation_name') + external String get _isolationName; + /// [deno-postgres@v​0.17.0/Transaction/isolation_level](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#accessor_isolation_level). - IsolationLevel get isolationLevel => - IsolationLevel.parse(getProperty(this, 'isolation_name')); + IsolationLevel get isolationLevel => IsolationLevel.parse(_isolationName); + + @JS('begin') + external JSPromise _begin(); /// [deno-postgres@v​0.17.0/Transaction/begin](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_begin_0). - Future begin() => callFutureMethod(this, 'begin'); + Future begin() async { + await _begin().toDart; + } + + @JS('commit') + external JSPromise _commit([JSObject? options]); /// [deno-postgres@v​0.17.0/Transaction/commit](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_commit_0). - Future commit({bool? chain}) => callFutureMethod( - this, - 'commit', - [ - if (chain != null) {'chain': chain}, - ], - ); + Future commit({bool? chain}) async { + await _commit(chain != null ? {'chain': chain}.jsify()! as JSObject : null) + .toDart; + } + + @JS('getSavepoints') + external JSArray _getSavepoints(); /// [deno-postgres@v​0.17.0/Transaction/getSavepoints](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_getSavepoints_0). List getActiveSavepointsNames() => - callMethod(this, 'getSavepoints', []); + _getSavepoints().toDart.map((e) => e.toDart).toList(); + + @JS('getSnapshot') + external JSPromise _getSnapshot(); /// [deno-postgres@v​0.17.0/Transaction/getSnapshot](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_getSnapshot_0). - Future get snapshot => callFutureMethod(this, 'getSnapshot'); + Future get snapshot async { + final res = await _getSnapshot().toDart; + + return res.toDart; + } /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_0). Future> queryArray>( @@ -82,33 +102,29 @@ extension TransactionProps on Transaction { ) => ClientCommon.queryArrayWithOptions(this, config); - /// [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_0). - Future rollback([Savepoint? savepoint]) => callFutureMethod( - this, - 'rollback', - [if (savepoint != null) savepoint], - ); + @JS('rollback') + external JSPromise _rollback([JSAny? savepointOrOptions]); - // [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_1). - // this has the same functionality as [rollback] and [rollbackByName] - // so it won't be implemented. + /// [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_0). + Future rollback([Savepoint? savepoint]) async { + await _rollback(savepoint).toDart; + } /// [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_2). - Future rollbackWithChain() => callFutureMethod( - this, - 'rollback', - [ - jsify({'chain': true}), - ], - ); + Future rollbackWithChain() async { + await _rollback({'chain': true}.jsify()).toDart; + } /// [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_0). - Future rollbackByName(String savepoint) => - callFutureMethod(this, 'rollback', [savepoint]); + Future rollbackByName(String savepoint) async { + await _rollback(savepoint.toJS).toDart; + } + + @JS('savepoint') + external JSPromise _savepoint(String name); /// [deno-postgres@v​0.17.0/Transaction/savepoint](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_savepoint_0). - Future createSavepoint(String name) => - callFutureMethod(this, 'savepoint', [name]); + Future createSavepoint(String name) => _savepoint(name).toDart; /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_0). Future> queryObject( diff --git a/lib/src/transaction_options.dart b/lib/src/transaction_options.dart index fa23292..2e9d396 100644 --- a/lib/src/transaction_options.dart +++ b/lib/src/transaction_options.dart @@ -1,36 +1,38 @@ import 'dart:js_interop'; -import 'dart:js_util'; import 'package:deno_postgres_interop/src/isolation_level.dart'; /// [deno-postgres@v​0.17.0/TransactionOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). -@JS() -class TransactionOptions { +@JS('TransactionOptions') +extension type TransactionOptions._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/TransactionOptions/snapshot](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). external String? get snapshot; - /// [deno-postgres@v​0.17.0/TransactionOptions/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). - factory TransactionOptions({ - IsolationLevel? isolationLevel, - bool? isReadOnly, - String? snapshot, - }) => - jsify({ - if (isolationLevel != null) 'isolation_level': isolationLevel.name, - if (isReadOnly != null) 'read_only': isReadOnly, - if (snapshot != null) 'snapshot': snapshot, - }) as TransactionOptions; -} + @JS('isolation_level') + external String? get _isolationLevel; -/// [deno-postgres@v​0.17.0/TransactionOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). -extension TransactionOptionsProps on TransactionOptions { /// [deno-postgres@v​0.17.0/TransactionOptions/isolation_level](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). IsolationLevel? get isolationLevel { - final jsProperty = getProperty(this, 'isolation_level'); + final jsProperty = _isolationLevel; return jsProperty == null ? null : IsolationLevel.parse(jsProperty); } /// [deno-postgres@v​0.17.0/TransactionOptions/read_only](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). - bool? get isReadOnly => getProperty(this, 'read_only'); + @JS('read_only') + external bool? get isReadOnly; + + /// [deno-postgres@v​0.17.0/TransactionOptions/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). + factory TransactionOptions({ + IsolationLevel? isolationLevel, + bool? isReadOnly, + String? snapshot, + }) => + TransactionOptions._( + { + if (isolationLevel != null) 'isolation_level': isolationLevel.name, + if (isReadOnly != null) 'read_only': isReadOnly, + if (snapshot != null) 'snapshot': snapshot, + }.jsify()! as JSObject, + ); } diff --git a/lib/src/undefined.dart b/lib/src/undefined.dart index 4615e4c..9dd3457 100644 --- a/lib/src/undefined.dart +++ b/lib/src/undefined.dart @@ -2,4 +2,4 @@ import 'dart:js_interop'; /// The js' undefined. @JS() -external dynamic get undefined; +external JSAny? get undefined; diff --git a/lib/src/util.dart b/lib/src/util.dart index 8b09a01..d84d5e0 100644 --- a/lib/src/util.dart +++ b/lib/src/util.dart @@ -1,15 +1,18 @@ -import 'dart:js_util'; +import 'dart:js_interop'; +import 'dart:js_interop_unsafe'; -/// Convinience wrapper for [promiseToFuture] and [callMethod]. +/// Convenience wrapper for promise to future call. Future callFutureMethod( - Object o, - Object method, [ + JSObject o, + String method, [ List args = const [], -]) => - promiseToFuture( - callMethod( - o, - method, - args, - ), - ); +]) async { + final jsArgs = args.map((e) => e?.jsify()).toList(); + final promise = o.callMethodVarArgs>( + method.toJS, + jsArgs, + ); + final result = await promise.toDart; + + return result?.dartify() as T; +} diff --git a/pubspec.yaml b/pubspec.yaml index 18d3298..3ad8f73 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ version: 0.0.4 repository: https://github.com/solid-software/deno_postgres_interop environment: - sdk: ^3.0.0 + sdk: ">=3.3.0 <4.0.0" dependencies: args: ^2.4.2 @@ -14,7 +14,7 @@ dependencies: yaml: ^3.1.2 dev_dependencies: - solid_lints: ^0.0.19 + solid_lints: ^1.0.0-dev.1 platforms: web: From fc130ce572409eef5c613f01b5f7021e3ac448f3 Mon Sep 17 00:00:00 2001 From: Illia Aihistov Date: Tue, 4 Aug 2026 14:42:42 +0300 Subject: [PATCH 2/9] feat: refactor JS interop to extension types and update SDK constraint to 3.3.0 --- CHANGELOG.md | 5 +++++ README.md | 1 - pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e006bb5..7707e4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.0-dev.1 +- Refactored JS Interop layer to modern Dart 3.3+ `extension type` (`dart:js_interop`). +- Updated SDK constraint to `>=3.3.0 <4.0.0` supporting Dart SDK 3.12+ (Flutter 3.44+). +- Removed legacy `@JS()` class annotations and `dart:js_util`. + ## 0.0.4 - Fixed links in docs. - Updated supported platforms. diff --git a/README.md b/README.md index 029624f..77c567c 100644 --- a/README.md +++ b/README.md @@ -58,4 +58,3 @@ The main scenario is Supabase Edge Functions, but it should also work for other 6. You can use the function now. -Note that because of the [bug in dart_edge](https://github.com/invertase/dart_edge/issues/50), SDK versions >= 3.1.0 are not actually supported. diff --git a/pubspec.yaml b/pubspec.yaml index 3ad8f73..2f76338 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: deno_postgres_interop description: An interop for js package deno-postgres - PostgreSQL driver that can be used in deno-deploy (supabase edge functions). -version: 0.0.4 +version: 1.0.0-dev.1 repository: https://github.com/solid-software/deno_postgres_interop environment: From bbb49f9d1f5526e981db5cb3305a68984ed4c6f9 Mon Sep 17 00:00:00 2001 From: Illia Aihistov Date: Tue, 4 Aug 2026 20:10:36 +0300 Subject: [PATCH 3/9] refactor: replace JS factory constructors with manual globalContext lookups for improved type safety and use globalThis in import script --- bin/add_imports.dart | 11 +++-------- lib/src/client.dart | 19 ++++++++++++++----- lib/src/pool.dart | 26 +++++++++++++++++++------- lib/src/transaction.dart | 25 +++++++++++++++++++------ 4 files changed, 55 insertions(+), 26 deletions(-) diff --git a/bin/add_imports.dart b/bin/add_imports.dart index 11bb477..a52c932 100644 --- a/bin/add_imports.dart +++ b/bin/add_imports.dart @@ -32,18 +32,13 @@ void main(List arguments) { } String createNewSource(String sourceString, Config config) { - final classes = RegExp(r'new self.([A-Za-z]+)\(') - .allMatches(sourceString) - .map((e) => e.group(1)) - .nonNulls - .toSet() - .intersection(config.classes) + final classesToImport = config.classes .whereNot((e) => sourceString.contains('import { $e }')) .toList(); return [ - ...[config.importStringForClass, (e) => 'self.$e = $e;'] - .map(classes.map) + ...[config.importStringForClass, (e) => 'globalThis.$e = $e;'] + .map(classesToImport.map) .flattened, sourceString, ].join('\n'); diff --git a/lib/src/client.dart b/lib/src/client.dart index 2b4ec8d..dfc7968 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -1,4 +1,5 @@ import 'dart:js_interop'; +import 'dart:js_interop_unsafe'; import 'package:deno_postgres_interop/src/client_options.dart'; import 'package:deno_postgres_interop/src/query_client.dart'; @@ -7,14 +8,22 @@ import 'package:deno_postgres_interop/src/query_client.dart'; @JS('Client') extension type Client._(JSObject _) implements QueryClient, JSObject { /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). - factory Client(String dbUrl) => Client._internal(dbUrl.toJS); + factory Client(String dbUrl) => _createClient(dbUrl.toJS); /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). - factory Client.config(ClientOptions config) => Client._internal(config); + factory Client.config(ClientOptions config) => _createClient(config); /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). - factory Client.empty() => Client._internal(); + factory Client.empty() => _createClient(); - @JS('Client') - external factory Client._internal([JSAny? configOrUrl]); + static Client _createClient([JSAny? configOrUrl]) { + final constructor = globalContext['Client'] as JSFunction?; + if (constructor == null) { + throw StateError('Client constructor not found in global context.'); + } + + return configOrUrl != null + ? constructor.callAsConstructor(configOrUrl) + : constructor.callAsConstructor(); + } } diff --git a/lib/src/pool.dart b/lib/src/pool.dart index 5c70245..8d6656a 100644 --- a/lib/src/pool.dart +++ b/lib/src/pool.dart @@ -1,7 +1,9 @@ import 'dart:js_interop'; +import 'dart:js_interop_unsafe'; import 'package:deno_postgres_interop/src/client_options.dart'; import 'package:deno_postgres_interop/src/pool_client.dart'; +import 'package:deno_postgres_interop/src/undefined.dart'; /// [deno-postgres@v​0.17.0/Pool](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool). @JS('Pool') @@ -11,8 +13,8 @@ extension type Pool._(JSObject _) implements JSObject { required int size, bool? lazy, }) => - Pool._internal( - null, + _createPool( + undefined, size, lazy, ); @@ -23,7 +25,7 @@ extension type Pool._(JSObject _) implements JSObject { required int size, bool? lazy, }) => - Pool._internal( + _createPool( connectionParams, size, lazy, @@ -35,18 +37,28 @@ extension type Pool._(JSObject _) implements JSObject { required int size, bool? lazy, }) => - Pool._internal( + _createPool( connectionString.toJS, size, lazy, ); - @JS('Pool') - external factory Pool._internal([ + static Pool _createPool([ JSAny? connectionParamsOrString, int? size, bool? lazy, - ]); + ]) { + final constructor = globalContext['Pool'] as JSFunction?; + if (constructor == null) { + throw StateError('Pool constructor not found in global context.'); + } + + return constructor.callAsConstructor( + connectionParamsOrString, + size?.toJS, + lazy?.toJS, + ); + } /// [deno-postgres@v​0.17.0/Pool/size](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#prop_size). @JS('size') diff --git a/lib/src/transaction.dart b/lib/src/transaction.dart index b07b30d..1e48468 100644 --- a/lib/src/transaction.dart +++ b/lib/src/transaction.dart @@ -1,4 +1,5 @@ import 'dart:js_interop'; +import 'dart:js_interop_unsafe'; import 'package:deno_postgres_interop/src/client_common.dart'; import 'package:deno_postgres_interop/src/isolation_level.dart'; @@ -23,22 +24,34 @@ extension type Transaction._(JSObject _) implements JSObject { required void Function(String? name) updateClientLockCallback, TransactionOptions? options, }) => - Transaction._internal( - name, + _createTransaction( + name.toJS, options, client, ((Query query) => futureToPromise(executeQueryCallback(query))).toJS, ((JSString? name) => updateClientLockCallback(name?.toDart)).toJS, ); - @JS('Transaction') - external factory Transaction._internal( - String name, + static Transaction _createTransaction( + JSString name, TransactionOptions? options, QueryClient client, JSFunction executeQueryCallback, JSFunction updateClientLockCallback, - ); + ) { + final constructor = globalContext['Transaction'] as JSFunction?; + if (constructor == null) { + throw StateError('Transaction constructor not found in global context.'); + } + + return constructor.callAsConstructorVarArgs([ + name, + options, + client, + executeQueryCallback, + updateClientLockCallback, + ]); + } @JS('savepoints') external JSArray get _savepoints; From ec0b0515a5dfb88a59f3cc2c9741b70de39ec887 Mon Sep 17 00:00:00 2001 From: Illia Aihistov Date: Tue, 4 Aug 2026 20:30:53 +0300 Subject: [PATCH 4/9] build: update Dart SDK requirement and CI workflow to version 3.3.0 --- .github/workflows/on-pr-push-code-check.yml | 2 +- example/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/on-pr-push-code-check.yml b/.github/workflows/on-pr-push-code-check.yml index 7b4d864..4714935 100644 --- a/.github/workflows/on-pr-push-code-check.yml +++ b/.github/workflows/on-pr-push-code-check.yml @@ -29,7 +29,7 @@ jobs: uses: dart-lang/setup-dart@v1 with: # https://github.com/invertase/dart_edge/issues/50 - sdk: 3.0.0 + sdk: 3.3.0 - name: Get main dependencies run: dart pub get diff --git a/example/pubspec.yaml b/example/pubspec.yaml index fc968b5..810f3e3 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: none environment: - sdk: ^3.0.0 + sdk: ">=3.3.0 <4.0.0" dependencies: deno_postgres_interop: From 7c7ce199937da86a9ec18b87e95179e07e507c59 Mon Sep 17 00:00:00 2001 From: Illia Aihistov Date: Tue, 4 Aug 2026 20:33:59 +0300 Subject: [PATCH 5/9] chore: bump minimum Dart SDK requirement to 3.5.0 --- .github/workflows/on-pr-push-code-check.yml | 2 +- example/pubspec.yaml | 2 +- pubspec.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/on-pr-push-code-check.yml b/.github/workflows/on-pr-push-code-check.yml index 4714935..4bfa4c3 100644 --- a/.github/workflows/on-pr-push-code-check.yml +++ b/.github/workflows/on-pr-push-code-check.yml @@ -29,7 +29,7 @@ jobs: uses: dart-lang/setup-dart@v1 with: # https://github.com/invertase/dart_edge/issues/50 - sdk: 3.3.0 + sdk: 3.5.0 - name: Get main dependencies run: dart pub get diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 810f3e3..6d06542 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: none environment: - sdk: ">=3.3.0 <4.0.0" + sdk: ">=3.5.0 <4.0.0" dependencies: deno_postgres_interop: diff --git a/pubspec.yaml b/pubspec.yaml index 2f76338..4ddc5ed 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ version: 1.0.0-dev.1 repository: https://github.com/solid-software/deno_postgres_interop environment: - sdk: ">=3.3.0 <4.0.0" + sdk: ">=3.5.0 <4.0.0" dependencies: args: ^2.4.2 From 90c65284ee025975ce10c441a8100e9b78169772 Mon Sep 17 00:00:00 2001 From: Illia Aihistov Date: Tue, 4 Aug 2026 20:39:37 +0300 Subject: [PATCH 6/9] chore: bump minimum Dart SDK requirement to 3.9.0 across project and CI workflows --- .github/workflows/on-pr-push-code-check.yml | 2 +- example/pubspec.yaml | 2 +- pubspec.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/on-pr-push-code-check.yml b/.github/workflows/on-pr-push-code-check.yml index 4bfa4c3..67400e1 100644 --- a/.github/workflows/on-pr-push-code-check.yml +++ b/.github/workflows/on-pr-push-code-check.yml @@ -29,7 +29,7 @@ jobs: uses: dart-lang/setup-dart@v1 with: # https://github.com/invertase/dart_edge/issues/50 - sdk: 3.5.0 + sdk: 3.9.0 - name: Get main dependencies run: dart pub get diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 6d06542..e102102 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: none environment: - sdk: ">=3.5.0 <4.0.0" + sdk: ">=3.9.0 <4.0.0" dependencies: deno_postgres_interop: diff --git a/pubspec.yaml b/pubspec.yaml index 4ddc5ed..33bc3b2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ version: 1.0.0-dev.1 repository: https://github.com/solid-software/deno_postgres_interop environment: - sdk: ">=3.5.0 <4.0.0" + sdk: ">=3.9.0 <4.0.0" dependencies: args: ^2.4.2 From 7074eec1bc6ae603540672505644b9c03d56015d Mon Sep 17 00:00:00 2001 From: Illia Aihistov Date: Tue, 4 Aug 2026 20:48:05 +0300 Subject: [PATCH 7/9] chore: format codebase and update analysis options --- analysis_options.yaml | 3 +- bin/add_imports.dart | 7 +- lib/src/client_common.dart | 17 +- lib/src/client_configuration.dart | 10 +- lib/src/client_options.dart | 35 ++-- lib/src/column.dart | 19 ++- lib/src/connection.dart | 9 +- lib/src/connection_options.dart | 10 +- lib/src/notice.dart | 10 +- lib/src/partial/partial_tls_options.dart | 6 +- lib/src/pool.dart | 33 ++-- lib/src/pool_client.dart | 3 +- lib/src/query.dart | 22 ++- lib/src/query_client.dart | 12 +- lib/src/query_object_options.dart | 7 +- lib/src/query_options.dart | 10 +- lib/src/query_result.dart | 7 +- lib/src/result_type.dart | 2 +- lib/src/savepoint.dart | 11 +- lib/src/tls_options.dart | 10 +- lib/src/transaction.dart | 32 ++-- lib/src/transaction_options.dart | 10 +- test_format/bin/add_imports.dart | 46 ++++++ test_format/lib/deno_postgres_interop.dart | 34 ++++ test_format/lib/src/add_imports/args.dart | 30 ++++ test_format/lib/src/add_imports/config.dart | 44 +++++ test_format/lib/src/client.dart | 29 ++++ test_format/lib/src/client_common.dart | 101 ++++++++++++ test_format/lib/src/client_configuration.dart | 80 ++++++++++ test_format/lib/src/client_options.dart | 139 ++++++++++++++++ test_format/lib/src/column.dart | 77 +++++++++ test_format/lib/src/command_type.dart | 27 ++++ test_format/lib/src/connection.dart | 70 ++++++++ test_format/lib/src/connection_options.dart | 45 ++++++ test_format/lib/src/encoded_arg.dart | 4 + .../lib/src/errors/connection_error.dart | 7 + .../src/errors/connection_params_error.dart | 8 + test_format/lib/src/errors/js_error.dart | 14 ++ .../lib/src/errors/postgres_error.dart | 11 ++ .../lib/src/errors/transaction_error.dart | 17 ++ test_format/lib/src/isolation_level.dart | 15 ++ test_format/lib/src/notice.dart | 98 ++++++++++++ .../partial/partial_connection_options.dart | 46 ++++++ .../lib/src/partial/partial_tls_options.dart | 33 ++++ test_format/lib/src/pool.dart | 91 +++++++++++ test_format/lib/src/pool_client.dart | 23 +++ test_format/lib/src/promise.dart | 9 ++ test_format/lib/src/query.dart | 69 ++++++++ test_format/lib/src/query_array_result.dart | 20 +++ test_format/lib/src/query_client.dart | 95 +++++++++++ test_format/lib/src/query_object_options.dart | 28 ++++ test_format/lib/src/query_object_result.dart | 27 ++++ test_format/lib/src/query_options.dart | 48 ++++++ test_format/lib/src/query_result.dart | 48 ++++++ test_format/lib/src/result_type.dart | 8 + test_format/lib/src/row_description.dart | 26 +++ test_format/lib/src/savepoint.dart | 45 ++++++ test_format/lib/src/session.dart | 27 ++++ test_format/lib/src/tls_options.dart | 34 ++++ test_format/lib/src/transaction.dart | 150 ++++++++++++++++++ test_format/lib/src/transaction_options.dart | 38 +++++ test_format/lib/src/transport.dart | 12 ++ test_format/lib/src/undefined.dart | 5 + test_format/lib/src/util.dart | 18 +++ 64 files changed, 1929 insertions(+), 152 deletions(-) create mode 100644 test_format/bin/add_imports.dart create mode 100644 test_format/lib/deno_postgres_interop.dart create mode 100644 test_format/lib/src/add_imports/args.dart create mode 100644 test_format/lib/src/add_imports/config.dart create mode 100644 test_format/lib/src/client.dart create mode 100644 test_format/lib/src/client_common.dart create mode 100644 test_format/lib/src/client_configuration.dart create mode 100644 test_format/lib/src/client_options.dart create mode 100644 test_format/lib/src/column.dart create mode 100644 test_format/lib/src/command_type.dart create mode 100644 test_format/lib/src/connection.dart create mode 100644 test_format/lib/src/connection_options.dart create mode 100644 test_format/lib/src/encoded_arg.dart create mode 100644 test_format/lib/src/errors/connection_error.dart create mode 100644 test_format/lib/src/errors/connection_params_error.dart create mode 100644 test_format/lib/src/errors/js_error.dart create mode 100644 test_format/lib/src/errors/postgres_error.dart create mode 100644 test_format/lib/src/errors/transaction_error.dart create mode 100644 test_format/lib/src/isolation_level.dart create mode 100644 test_format/lib/src/notice.dart create mode 100644 test_format/lib/src/partial/partial_connection_options.dart create mode 100644 test_format/lib/src/partial/partial_tls_options.dart create mode 100644 test_format/lib/src/pool.dart create mode 100644 test_format/lib/src/pool_client.dart create mode 100644 test_format/lib/src/promise.dart create mode 100644 test_format/lib/src/query.dart create mode 100644 test_format/lib/src/query_array_result.dart create mode 100644 test_format/lib/src/query_client.dart create mode 100644 test_format/lib/src/query_object_options.dart create mode 100644 test_format/lib/src/query_object_result.dart create mode 100644 test_format/lib/src/query_options.dart create mode 100644 test_format/lib/src/query_result.dart create mode 100644 test_format/lib/src/result_type.dart create mode 100644 test_format/lib/src/row_description.dart create mode 100644 test_format/lib/src/savepoint.dart create mode 100644 test_format/lib/src/session.dart create mode 100644 test_format/lib/src/tls_options.dart create mode 100644 test_format/lib/src/transaction.dart create mode 100644 test_format/lib/src/transaction_options.dart create mode 100644 test_format/lib/src/transport.dart create mode 100644 test_format/lib/src/undefined.dart create mode 100644 test_format/lib/src/util.dart diff --git a/analysis_options.yaml b/analysis_options.yaml index 337c6d5..dd9518d 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -7,9 +7,10 @@ plugins: number_of_parameters: false cyclomatic_complexity: false avoid_non_null_assertion: false + avoid_duplicate_code: false linter: rules: - package_api_docs: true prefer_foreach: true prefer_single_quotes: true + diff --git a/bin/add_imports.dart b/bin/add_imports.dart index a52c932..e154327 100644 --- a/bin/add_imports.dart +++ b/bin/add_imports.dart @@ -37,9 +37,10 @@ String createNewSource(String sourceString, Config config) { .toList(); return [ - ...[config.importStringForClass, (e) => 'globalThis.$e = $e;'] - .map(classesToImport.map) - .flattened, + ...[ + config.importStringForClass, + (e) => 'globalThis.$e = $e;', + ].map(classesToImport.map).flattened, sourceString, ].join('\n'); } diff --git a/lib/src/client_common.dart b/lib/src/client_common.dart index 5f11f84..472bf19 100644 --- a/lib/src/client_common.dart +++ b/lib/src/client_common.dart @@ -16,17 +16,15 @@ abstract final class ClientCommon { Object queryable, String query, [ QueryArguments? arguments, - ]) => - _query('queryArray', queryable, query, arguments); + ]) => _query('queryArray', queryable, query, arguments); /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_1). /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_1). static Future> - queryArrayWithOptions>( + queryArrayWithOptions>( Object queryable, QueryObjectOptions config, - ) => - callFutureMethod(queryable as JSObject, 'queryArray', [config]); + ) => callFutureMethod(queryable as JSObject, 'queryArray', [config]); // This one won't be implemented because it doesn't make much sense for dart, // the query here is of type TemplateStringsArray which is used in @@ -46,16 +44,14 @@ abstract final class ClientCommon { Object queryable, String query, [ QueryArguments? arguments, - ]) => - _query('queryObject', queryable, query, arguments); + ]) => _query('queryObject', queryable, query, arguments); /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). static Future> queryObjectWithOptions( Object queryable, QueryObjectOptions config, - ) => - callFutureMethod(queryable as JSObject, 'queryObject', [config]); + ) => callFutureMethod(queryable as JSObject, 'queryObject', [config]); // This one won't be implemented because it doesn't make much sense for dart, // the query here is of type TemplateStringsArray which is used in @@ -90,7 +86,8 @@ abstract final class ClientCommon { } void _assertQueryArgumentsOrNull(QueryArguments? arguments) { - final isCorrectType = arguments is List || + final isCorrectType = + arguments is List || arguments is Map || arguments == null; diff --git a/lib/src/client_configuration.dart b/lib/src/client_configuration.dart index 04975d8..5eef68f 100644 --- a/lib/src/client_configuration.dart +++ b/lib/src/client_configuration.dart @@ -62,9 +62,8 @@ extension type ClientConfiguration._(JSObject _) implements JSObject { required String user, required Transport hostType, String? password, - }) => - ClientConfiguration._( - { + }) => ClientConfiguration._( + { 'applicationName': applicationName, 'connection': connection, 'database': database, @@ -75,6 +74,7 @@ extension type ClientConfiguration._(JSObject _) implements JSObject { 'tls': tls, 'user': user, 'hostType': hostType.name, - }.jsify()! as JSObject, - ); + }.jsify()! + as JSObject, + ); } diff --git a/lib/src/client_options.dart b/lib/src/client_options.dart index 6e6f7b2..83ec83c 100644 --- a/lib/src/client_options.dart +++ b/lib/src/client_options.dart @@ -116,23 +116,24 @@ extension type ClientOptions._(JSObject _) implements JSObject { return ClientOptions._( { - if (applicationName != null) 'applicationName': applicationName, - if (connection != null) 'connection': connection.asMap(), - if (database != null) 'database': database, - if (hostname != null) 'hostname': hostname, - if (hostType != null) 'host_type': hostType.name, - if (optionsString != null) - 'options': optionsString - else if (optionsMap != null) - 'options': optionsMap, - if (password != null) 'password': password, - if (portString != null) - 'port': portString - else if (port != null) - 'port': port, - if (tls != null) 'tls': tls.asMap(), - if (user != null) 'user': user, - }.jsify()! as JSObject, + if (applicationName != null) 'applicationName': applicationName, + if (connection != null) 'connection': connection.asMap(), + if (database != null) 'database': database, + if (hostname != null) 'hostname': hostname, + if (hostType != null) 'host_type': hostType.name, + if (optionsString != null) + 'options': optionsString + else if (optionsMap != null) + 'options': optionsMap, + if (password != null) 'password': password, + if (portString != null) + 'port': portString + else if (port != null) + 'port': port, + if (tls != null) 'tls': tls.asMap(), + if (user != null) 'user': user, + }.jsify()! + as JSObject, ); } } diff --git a/lib/src/column.dart b/lib/src/column.dart index 035c1a9..24d52fa 100644 --- a/lib/src/column.dart +++ b/lib/src/column.dart @@ -12,16 +12,15 @@ extension type Column._(JSObject _) implements JSObject { required int columnLength, required int typeModifier, required ColumnFormat format, - }) => - Column._internal( - name, - tableOid, - index, - typeOid, - columnLength, - typeModifier, - format.id, - ); + }) => Column._internal( + name, + tableOid, + index, + typeOid, + columnLength, + typeModifier, + format.id, + ); @JS('Column') external factory Column._internal( diff --git a/lib/src/connection.dart b/lib/src/connection.dart index 42ac547..3787f53 100644 --- a/lib/src/connection.dart +++ b/lib/src/connection.dart @@ -13,11 +13,10 @@ extension type Connection._(JSObject _) implements JSObject { factory Connection({ required ClientConfiguration connectionParams, required Future Function() disconnectionCallback, - }) => - Connection._internal( - connectionParams, - (() => futureToPromise(disconnectionCallback())).toJS, - ); + }) => Connection._internal( + connectionParams, + (() => futureToPromise(disconnectionCallback())).toJS, + ); @JS('Connection') external factory Connection._internal( diff --git a/lib/src/connection_options.dart b/lib/src/connection_options.dart index 936f619..d0ffd2c 100644 --- a/lib/src/connection_options.dart +++ b/lib/src/connection_options.dart @@ -34,12 +34,12 @@ extension type ConnectionOptions._(JSObject _) implements JSObject { required int attempts, int Function(int previousInterval)? nextInterval, int? interval, - }) => - ConnectionOptions._( - PartialConnectionOptions( + }) => ConnectionOptions._( + PartialConnectionOptions( attempts: attempts, nextInterval: nextInterval, interval: interval, - ).asMap().jsify()! as JSObject, - ); + ).asMap().jsify()! + as JSObject, + ); } diff --git a/lib/src/notice.dart b/lib/src/notice.dart index 0474363..c4c09bc 100644 --- a/lib/src/notice.dart +++ b/lib/src/notice.dart @@ -73,9 +73,8 @@ extension type Notice._(JSObject _) implements JSObject { String? file, String? line, String? routine, - }) => - Notice._( - { + }) => Notice._( + { 'severity': severity, 'code': code, 'message': message, @@ -93,6 +92,7 @@ extension type Notice._(JSObject _) implements JSObject { if (file != null) 'file': file, if (line != null) 'line': line, if (routine != null) 'routine': routine, - }.jsify()! as JSObject, - ); + }.jsify()! + as JSObject, + ); } diff --git a/lib/src/partial/partial_tls_options.dart b/lib/src/partial/partial_tls_options.dart index 0b63de6..1dae44f 100644 --- a/lib/src/partial/partial_tls_options.dart +++ b/lib/src/partial/partial_tls_options.dart @@ -18,9 +18,9 @@ class PartialTLSOptions { /// used for interop. PartialTLSOptions.fromMap(Map map) - : caCertificates = map['caCertificates'] as List?, - isEnabled = map['enabled'] as bool?, - isEnforced = map['enforced'] as bool?; + : caCertificates = map['caCertificates'] as List?, + isEnabled = map['enabled'] as bool?, + isEnforced = map['enforced'] as bool?; /// used for jsify. Map asMap() { diff --git a/lib/src/pool.dart b/lib/src/pool.dart index 8d6656a..fd09767 100644 --- a/lib/src/pool.dart +++ b/lib/src/pool.dart @@ -12,36 +12,33 @@ extension type Pool._(JSObject _) implements JSObject { factory Pool({ required int size, bool? lazy, - }) => - _createPool( - undefined, - size, - lazy, - ); + }) => _createPool( + undefined, + size, + lazy, + ); /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). factory Pool.withOptions({ required ClientOptions connectionParams, required int size, bool? lazy, - }) => - _createPool( - connectionParams, - size, - lazy, - ); + }) => _createPool( + connectionParams, + size, + lazy, + ); /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). factory Pool.withString({ required String connectionString, required int size, bool? lazy, - }) => - _createPool( - connectionString.toJS, - size, - lazy, - ); + }) => _createPool( + connectionString.toJS, + size, + lazy, + ); static Pool _createPool([ JSAny? connectionParamsOrString, diff --git a/lib/src/pool_client.dart b/lib/src/pool_client.dart index 40e87ea..0adf5db 100644 --- a/lib/src/pool_client.dart +++ b/lib/src/pool_client.dart @@ -10,8 +10,7 @@ extension type PoolClient._(JSObject _) implements QueryClient, JSObject { factory PoolClient( ClientConfiguration config, void Function() releaseCallback, - ) => - PoolClient._internal(config, releaseCallback.toJS); + ) => PoolClient._internal(config, releaseCallback.toJS); @JS('PoolClient') external factory PoolClient._internal( diff --git a/lib/src/query.dart b/lib/src/query.dart index 729c772..5e889c5 100644 --- a/lib/src/query.dart +++ b/lib/src/query.dart @@ -14,12 +14,11 @@ extension type Query._(JSObject _) implements JSObject { required QueryObjectOptions config, required ResultType resultType, QueryArguments? args, - }) => - Query._internal( - config, - resultType.index, - args?.jsify(), - ); + }) => Query._internal( + config, + resultType.index, + args?.jsify(), + ); /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_1). /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_2). @@ -27,12 +26,11 @@ extension type Query._(JSObject _) implements JSObject { required String text, required ResultType resultType, QueryArguments? args, - }) => - Query._internal( - text.toJS, - resultType.index, - args?.jsify(), - ); + }) => Query._internal( + text.toJS, + resultType.index, + args?.jsify(), + ); @JS('Query') external factory Query._internal( diff --git a/lib/src/query_client.dart b/lib/src/query_client.dart index b3249b6..541bb52 100644 --- a/lib/src/query_client.dart +++ b/lib/src/query_client.dart @@ -75,25 +75,21 @@ extension type QueryClient._(JSObject _) implements JSObject { Future> queryArray>( String query, [ QueryArguments? args, - ]) => - ClientCommon.queryArray(this, query, args); + ]) => ClientCommon.queryArray(this, query, args); /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_1). Future> queryArrayWithOptions>( QueryObjectOptions config, - ) => - ClientCommon.queryArrayWithOptions(this, config); + ) => ClientCommon.queryArrayWithOptions(this, config); /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_0). Future> queryObject( String query, [ QueryArguments? arguments, - ]) => - ClientCommon.queryObject(this, query, arguments); + ]) => ClientCommon.queryObject(this, query, arguments); /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_1). Future> queryObjectWithOptions( QueryObjectOptions config, - ) => - ClientCommon.queryObjectWithOptions(this, config); + ) => ClientCommon.queryObjectWithOptions(this, config); } diff --git a/lib/src/query_object_options.dart b/lib/src/query_object_options.dart index 78d4b6f..829addd 100644 --- a/lib/src/query_object_options.dart +++ b/lib/src/query_object_options.dart @@ -20,8 +20,9 @@ extension type QueryObjectOptions._(JSObject _) factory QueryObjectOptions({List? fields, bool? isCamelCase}) => QueryObjectOptions._( { - if (isCamelCase != null) 'camelcase': isCamelCase, - if (fields != null) 'fields': fields, - }.jsify()! as JSObject, + if (isCamelCase != null) 'camelcase': isCamelCase, + if (fields != null) 'fields': fields, + }.jsify()! + as JSObject, ); } diff --git a/lib/src/query_options.dart b/lib/src/query_options.dart index 9c459f9..9f43218 100644 --- a/lib/src/query_options.dart +++ b/lib/src/query_options.dart @@ -35,14 +35,14 @@ extension type QueryOptions._(JSObject _) implements JSObject { QueryArguments? args, EncodedArg Function(dynamic arg)? encoder, String? name, - }) => - QueryOptions._( - { + }) => QueryOptions._( + { if (args != null) 'args': args, if (encoder != null) 'encoder': ((JSAny? arg) => encoder(arg?.dartify())).toJS, if (name != null) 'name': name, 'text': text, - }.jsify()! as JSObject, - ); + }.jsify()! + as JSObject, + ); } diff --git a/lib/src/query_result.dart b/lib/src/query_result.dart index 47f3fb5..400eeb0 100644 --- a/lib/src/query_result.dart +++ b/lib/src/query_result.dart @@ -37,11 +37,8 @@ extension type QueryResult._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/QueryResult/insertRow](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#method_insertRow_0). void insertRow(List> row) => _insertRow( - row - .map((inner) => inner.map((e) => e.toJS).toList().toJS) - .toList() - .toJS, - ); + row.map((inner) => inner.map((e) => e.toJS).toList().toJS).toList().toJS, + ); @JS('command') external String? get _command; diff --git a/lib/src/result_type.dart b/lib/src/result_type.dart index a1e518d..fc9611c 100644 --- a/lib/src/result_type.dart +++ b/lib/src/result_type.dart @@ -4,5 +4,5 @@ enum ResultType { array, /// object. - object; + object, } diff --git a/lib/src/savepoint.dart b/lib/src/savepoint.dart index cc52fd9..24d4750 100644 --- a/lib/src/savepoint.dart +++ b/lib/src/savepoint.dart @@ -10,12 +10,11 @@ extension type Savepoint._(JSObject _) implements JSObject { String name, Future Function(String name) updateCallback, Future Function(String name) releaseCallback, - ) => - Savepoint._internal( - name, - ((JSString name) => futureToPromise(updateCallback(name.toDart))).toJS, - ((JSString name) => futureToPromise(releaseCallback(name.toDart))).toJS, - ); + ) => Savepoint._internal( + name, + ((JSString name) => futureToPromise(updateCallback(name.toDart))).toJS, + ((JSString name) => futureToPromise(releaseCallback(name.toDart))).toJS, + ); @JS('Savepoint') external factory Savepoint._internal( diff --git a/lib/src/tls_options.dart b/lib/src/tls_options.dart index c91227e..fa26391 100644 --- a/lib/src/tls_options.dart +++ b/lib/src/tls_options.dart @@ -23,12 +23,12 @@ extension type TLSOptions._(JSObject _) implements JSObject { required List caCertificates, required bool isEnabled, required bool isEnforced, - }) => - TLSOptions._( - { + }) => TLSOptions._( + { 'caCertificates': caCertificates, 'enabled': isEnabled, 'enforce': isEnforced, - }.jsify()! as JSObject, - ); + }.jsify()! + as JSObject, + ); } diff --git a/lib/src/transaction.dart b/lib/src/transaction.dart index 1e48468..45de8d6 100644 --- a/lib/src/transaction.dart +++ b/lib/src/transaction.dart @@ -23,14 +23,13 @@ extension type Transaction._(JSObject _) implements JSObject { required Future Function(Query query) executeQueryCallback, required void Function(String? name) updateClientLockCallback, TransactionOptions? options, - }) => - _createTransaction( - name.toJS, - options, - client, - ((Query query) => futureToPromise(executeQueryCallback(query))).toJS, - ((JSString? name) => updateClientLockCallback(name?.toDart)).toJS, - ); + }) => _createTransaction( + name.toJS, + options, + client, + ((Query query) => futureToPromise(executeQueryCallback(query))).toJS, + ((JSString? name) => updateClientLockCallback(name?.toDart)).toJS, + ); static Transaction _createTransaction( JSString name, @@ -81,8 +80,9 @@ extension type Transaction._(JSObject _) implements JSObject { /// [deno-postgres@v​0.17.0/Transaction/commit](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_commit_0). Future commit({bool? chain}) async { - await _commit(chain != null ? {'chain': chain}.jsify()! as JSObject : null) - .toDart; + await _commit( + chain != null ? {'chain': chain}.jsify()! as JSObject : null, + ).toDart; } @JS('getSavepoints') @@ -106,14 +106,12 @@ extension type Transaction._(JSObject _) implements JSObject { Future> queryArray>( String query, [ QueryArguments? args, - ]) => - ClientCommon.queryArray(this, query, args); + ]) => ClientCommon.queryArray(this, query, args); /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_1). Future> queryArrayWithOptions>( QueryObjectOptions config, - ) => - ClientCommon.queryArrayWithOptions(this, config); + ) => ClientCommon.queryArrayWithOptions(this, config); @JS('rollback') external JSPromise _rollback([JSAny? savepointOrOptions]); @@ -143,12 +141,10 @@ extension type Transaction._(JSObject _) implements JSObject { Future> queryObject( String query, [ QueryArguments? arguments, - ]) => - ClientCommon.queryObject(this, query, arguments); + ]) => ClientCommon.queryObject(this, query, arguments); /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). Future> queryObjectWithOptions( QueryObjectOptions config, - ) => - ClientCommon.queryObjectWithOptions(this, config); + ) => ClientCommon.queryObjectWithOptions(this, config); } diff --git a/lib/src/transaction_options.dart b/lib/src/transaction_options.dart index 2e9d396..dfc8075 100644 --- a/lib/src/transaction_options.dart +++ b/lib/src/transaction_options.dart @@ -27,12 +27,12 @@ extension type TransactionOptions._(JSObject _) implements JSObject { IsolationLevel? isolationLevel, bool? isReadOnly, String? snapshot, - }) => - TransactionOptions._( - { + }) => TransactionOptions._( + { if (isolationLevel != null) 'isolation_level': isolationLevel.name, if (isReadOnly != null) 'read_only': isReadOnly, if (snapshot != null) 'snapshot': snapshot, - }.jsify()! as JSObject, - ); + }.jsify()! + as JSObject, + ); } diff --git a/test_format/bin/add_imports.dart b/test_format/bin/add_imports.dart new file mode 100644 index 0000000..e154327 --- /dev/null +++ b/test_format/bin/add_imports.dart @@ -0,0 +1,46 @@ +// This is a CLI tool so it is okay here. +// ignore_for_file: avoid_print + +import 'dart:io'; + +import 'package:args/args.dart'; +import 'package:collection/collection.dart'; +import 'package:deno_postgres_interop/src/add_imports/args.dart'; +import 'package:deno_postgres_interop/src/add_imports/config.dart'; +import 'package:yaml/yaml.dart'; + +void main(List arguments) { + try { + final Args(:filename, :configpath) = Args.parse(arguments); + + final configString = File(configpath).readAsStringSync(); + final config = Config.fromYaml(configString); + + final sourceFile = File(filename); + final sourceString = sourceFile.readAsStringSync(); + final newSource = createNewSource(sourceString, config); + if (newSource == sourceString) return; + + sourceFile.writeAsStringSync(newSource); + } on FileSystemException catch (e) { + print('Error while accessing ${e.path}'); + } on YamlException { + print('Error while parsing config'); + } on ArgParserException { + print(Args.usage); + } +} + +String createNewSource(String sourceString, Config config) { + final classesToImport = config.classes + .whereNot((e) => sourceString.contains('import { $e }')) + .toList(); + + return [ + ...[ + config.importStringForClass, + (e) => 'globalThis.$e = $e;', + ].map(classesToImport.map).flattened, + sourceString, + ].join('\n'); +} diff --git a/test_format/lib/deno_postgres_interop.dart b/test_format/lib/deno_postgres_interop.dart new file mode 100644 index 0000000..6b97815 --- /dev/null +++ b/test_format/lib/deno_postgres_interop.dart @@ -0,0 +1,34 @@ +/// An interop for [deno-postgres@v​0.17.0](https://deno.land/x/postgres@v0.17.0). +library; + +export 'src/client.dart'; +export 'src/client_configuration.dart'; +export 'src/client_options.dart'; +export 'src/column.dart'; +export 'src/command_type.dart'; +export 'src/connection.dart'; +export 'src/connection_options.dart'; +export 'src/encoded_arg.dart'; +export 'src/errors/connection_error.dart'; +export 'src/errors/connection_params_error.dart'; +export 'src/errors/postgres_error.dart'; +export 'src/errors/transaction_error.dart'; +export 'src/isolation_level.dart'; +export 'src/notice.dart'; +export 'src/partial/partial_connection_options.dart'; +export 'src/partial/partial_tls_options.dart'; +export 'src/pool.dart'; +export 'src/pool_client.dart'; +export 'src/query.dart'; +export 'src/query_array_result.dart'; +export 'src/query_client.dart'; +export 'src/query_object_result.dart'; +export 'src/query_result.dart'; +export 'src/result_type.dart'; +export 'src/row_description.dart'; +export 'src/savepoint.dart'; +export 'src/session.dart'; +export 'src/tls_options.dart'; +export 'src/transaction.dart'; +export 'src/transaction_options.dart'; +export 'src/transport.dart'; diff --git a/test_format/lib/src/add_imports/args.dart b/test_format/lib/src/add_imports/args.dart new file mode 100644 index 0000000..026631a --- /dev/null +++ b/test_format/lib/src/add_imports/args.dart @@ -0,0 +1,30 @@ +// This is an internal implementation so it is okay here. +// ignore_for_file: public_member_api_docs + +import 'package:args/args.dart'; + +class Args { + static final _parser = ArgParser() + ..addOption('filename') + ..addOption('configpath', defaultsTo: 'add_imports.yaml'); + + final String filename; + final String configpath; + + static String get usage => _parser.usage; + + Args({required this.filename, required this.configpath}); + + factory Args.parse(List arguments) { + try { + final result = _parser.parse(arguments); + + return Args( + filename: result['filename'] as String, + configpath: result['configpath'] as String, + ); + } catch (_) { + throw ArgParserException(''); + } + } +} diff --git a/test_format/lib/src/add_imports/config.dart b/test_format/lib/src/add_imports/config.dart new file mode 100644 index 0000000..1146c91 --- /dev/null +++ b/test_format/lib/src/add_imports/config.dart @@ -0,0 +1,44 @@ +// This is an internal implementation so it is okay here. +// ignore_for_file: public_member_api_docs + +import 'package:collection/collection.dart'; +import 'package:yaml/yaml.dart'; + +class Config { + final String fileUrlPrefix; + final Map> classesMap; + + Set get classes => classesMap.values.flattened.toSet(); + + Config({required this.fileUrlPrefix, required this.classesMap}); + + factory Config.fromYaml(String yamlString) { + try { + final parsedYaml = loadYaml(yamlString) as YamlMap; + + final classesMap = (parsedYaml['classes_map'] as YamlMap).map( + (key, value) => MapEntry( + key as String, + [...value as YamlList].cast(), + ), + ); + + return Config( + classesMap: classesMap, + fileUrlPrefix: parsedYaml['file_url_prefix'] as String, + ); + } catch (_) { + throw YamlException('', null); + } + } + + String _filenameForClass(String classname) => + classesMap.entries.firstWhere((e) => e.value.contains(classname)).key; + + String importStringForClass(String classname) { + final filename = _filenameForClass(classname); + final url = '$fileUrlPrefix$filename'; + + return 'import { $classname } from "$url";'; + } +} diff --git a/test_format/lib/src/client.dart b/test_format/lib/src/client.dart new file mode 100644 index 0000000..dfc7968 --- /dev/null +++ b/test_format/lib/src/client.dart @@ -0,0 +1,29 @@ +import 'dart:js_interop'; +import 'dart:js_interop_unsafe'; + +import 'package:deno_postgres_interop/src/client_options.dart'; +import 'package:deno_postgres_interop/src/query_client.dart'; + +/// [deno-postgres@v​0.17.0/Client](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client). +@JS('Client') +extension type Client._(JSObject _) implements QueryClient, JSObject { + /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). + factory Client(String dbUrl) => _createClient(dbUrl.toJS); + + /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). + factory Client.config(ClientOptions config) => _createClient(config); + + /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). + factory Client.empty() => _createClient(); + + static Client _createClient([JSAny? configOrUrl]) { + final constructor = globalContext['Client'] as JSFunction?; + if (constructor == null) { + throw StateError('Client constructor not found in global context.'); + } + + return configOrUrl != null + ? constructor.callAsConstructor(configOrUrl) + : constructor.callAsConstructor(); + } +} diff --git a/test_format/lib/src/client_common.dart b/test_format/lib/src/client_common.dart new file mode 100644 index 0000000..472bf19 --- /dev/null +++ b/test_format/lib/src/client_common.dart @@ -0,0 +1,101 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/query_array_result.dart'; +import 'package:deno_postgres_interop/src/query_object_options.dart'; +import 'package:deno_postgres_interop/src/query_object_result.dart'; +import 'package:deno_postgres_interop/src/util.dart'; + +/// [deno-postgres@v​0.17.0/QueryArguments](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryArguments). +typedef QueryArguments = Object; + +/// This class hosts common interops for clients. +abstract final class ClientCommon { + /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_0). + /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_0). + static Future> queryArray>( + Object queryable, + String query, [ + QueryArguments? arguments, + ]) => _query('queryArray', queryable, query, arguments); + + /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_1). + /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_1). + static Future> + queryArrayWithOptions>( + Object queryable, + QueryObjectOptions config, + ) => callFutureMethod(queryable as JSObject, 'queryArray', [config]); + + // This one won't be implemented because it doesn't make much sense for dart, + // the query here is of type TemplateStringsArray which is used in + // [tagged templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates). + // + // [related issue](https://github.com/dart-lang/language/issues/1988). + // + // queryArray>( + // strings: TemplateStringsArray, + // ...args: unknown[], + // ): Promise> + // https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_2 + + /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_0). + /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_0). + static Future> queryObject( + Object queryable, + String query, [ + QueryArguments? arguments, + ]) => _query('queryObject', queryable, query, arguments); + + /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). + /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). + static Future> queryObjectWithOptions( + Object queryable, + QueryObjectOptions config, + ) => callFutureMethod(queryable as JSObject, 'queryObject', [config]); + + // This one won't be implemented because it doesn't make much sense for dart, + // the query here is of type TemplateStringsArray which is used in + // [tagged templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates). + // + // [related issue](https://github.com/dart-lang/language/issues/1988). + // + // [deno-postgres@v0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_2). + // Future> queryObjectWithOptions( + // List query, + // List args, + // ) => + // throw UnimplementedError(); + + static Future _query( + String function, + Object queryable, + String query, [ + QueryArguments? arguments, + ]) { + _assertQueryArgumentsOrNull(arguments); + + return callFutureMethod( + queryable as JSObject, + function, + [ + query, + if (arguments != null) arguments, + ], + ); + } +} + +void _assertQueryArgumentsOrNull(QueryArguments? arguments) { + final isCorrectType = + arguments is List || + arguments is Map || + arguments == null; + + if (!isCorrectType) { + throw ArgumentError.value( + arguments, + 'arguments', + 'Accepted types are List and Map.', + ); + } +} diff --git a/test_format/lib/src/client_configuration.dart b/test_format/lib/src/client_configuration.dart new file mode 100644 index 0000000..5eef68f --- /dev/null +++ b/test_format/lib/src/client_configuration.dart @@ -0,0 +1,80 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/connection_options.dart'; +import 'package:deno_postgres_interop/src/tls_options.dart'; +import 'package:deno_postgres_interop/src/transport.dart'; + +/// [deno-postgres@v​0.17.0/ClientConfiguration](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration). +@JS('ClientConfiguration') +extension type ClientConfiguration._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/ClientConfiguration/applicationName](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_applicationName). + external String get applicationName; + + /// [deno-postgres@v​0.17.0/ClientConfiguration/connection](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_connection). + external ConnectionOptions get connection; + + /// [deno-postgres@v​0.17.0/ClientConfiguration/database](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_database). + external String get database; + + /// [deno-postgres@v​0.17.0/ClientConfiguration/hostname](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_hostname). + external String get hostname; + + @JS('options') + external JSAny? get _options; + + /// [deno-postgres@v​0.17.0/ClientConfiguration/options](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_options). + Map get options { + final map = _options?.dartify(); + if (map is Map) { + return map.cast(); + } + + return const {}; + } + + /// [deno-postgres@v​0.17.0/ClientConfiguration/password](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_password). + external String? get password; + + /// [deno-postgres@v​0.17.0/ClientConfiguration/port](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_port). + external int get port; + + /// [deno-postgres@v​0.17.0/ClientConfiguration/tls](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_tls). + external TLSOptions get tls; + + /// [deno-postgres@v​0.17.0/ClientConfiguration/user](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_user). + external String get user; + + @JS('host_type') + external String get _hostType; + + /// [deno-postgres@v​0.17.0/ClientConfiguration/host_type](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_host_type). + Transport get hostType => Transport.parse(_hostType); + + /// [deno-postgres@v​0.17.0/ClientConfiguration](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration). + factory ClientConfiguration({ + required String applicationName, + required ConnectionOptions connection, + required String database, + required String hostname, + required String options, + required int port, + required TLSOptions tls, + required String user, + required Transport hostType, + String? password, + }) => ClientConfiguration._( + { + 'applicationName': applicationName, + 'connection': connection, + 'database': database, + 'hostname': hostname, + 'options': options, + if (password != null) 'password': password, + 'port': port, + 'tls': tls, + 'user': user, + 'hostType': hostType.name, + }.jsify()! + as JSObject, + ); +} diff --git a/test_format/lib/src/client_options.dart b/test_format/lib/src/client_options.dart new file mode 100644 index 0000000..83ec83c --- /dev/null +++ b/test_format/lib/src/client_options.dart @@ -0,0 +1,139 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/partial/partial_connection_options.dart'; +import 'package:deno_postgres_interop/src/partial/partial_tls_options.dart'; +import 'package:deno_postgres_interop/src/transport.dart'; + +/// [deno-postgres@v​0.17.0/ClientOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions). +@JS('ClientOptions') +extension type ClientOptions._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/ClientOptions/applicationName](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_applicationName). + external String? get applicationName; + + /// [deno-postgres@v​0.17.0/ClientOptions/database](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_database). + external String? get database; + + /// [deno-postgres@v​0.17.0/ClientOptions/hostname](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_hostname). + external String? get hostname; + + /// [deno-postgres@v​0.17.0/ClientOptions/password](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_password). + external String? get password; + + /// [deno-postgres@v​0.17.0/ClientOptions/user](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_applicationName/user). + external String? get user; + + @JS('host_type') + external String? get _hostType; + + /// [deno-postgres@v​0.17.0/ClientOptions/host_type](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_host_type). + Transport get hostType => Transport.parse(_hostType ?? ''); + + @JS('options') + external JSAny? get _options; + + /// [deno-postgres@v​0.17.0/ClientOptions/options](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_options). + /// + /// Either this or [optionsMap] is null. + String? get optionsString { + final prop = _options?.dartify(); + + return prop is String ? prop : null; + } + + /// [deno-postgres@v​0.17.0/ClientOptions/options](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_options). + /// + /// Either this or [optionsString] is null. + Map? get optionsMap { + final prop = _options?.dartify(); + + return prop is Map ? prop.cast() : null; + } + + @JS('port') + external JSAny? get _port; + + /// [deno-postgres@v​0.17.0/ClientOptions/port](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_port). + /// + /// Either this or [port] is null. + String? get portString { + final prop = _port?.dartify(); + + return prop is String ? prop : null; + } + + /// [deno-postgres@v​0.17.0/ClientOptions/port](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_port). + /// + /// Either this or [portString] is null. + int? get port { + final prop = _port?.dartify(); + + return prop is int ? prop : null; + } + + @JS('connection') + external JSAny? get _connection; + + /// [deno-postgres@v​0.17.0/ClientOptions/connection](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_connection). + PartialConnectionOptions? get connection { + final map = _connection?.dartify() as Map?; + + return map == null ? null : PartialConnectionOptions.fromMap(map); + } + + @JS('tls') + external JSAny? get _tls; + + /// [deno-postgres@v​0.17.0/ClientOptions/tls](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_tls). + PartialTLSOptions? get tls { + final map = _tls?.dartify() as Map?; + + if (map == null) return null; + + return PartialTLSOptions( + caCertificates: (map['caCertificates'] as List?)?.cast(), + isEnabled: map['enabled'] as bool?, + isEnforced: map['enforced'] as bool?, + ); + } + + /// [deno-postgres@v​0.17.0/ClientOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions). + factory ClientOptions({ + String? applicationName, + PartialConnectionOptions? connection, + String? database, + String? hostname, + Transport? hostType, + String? optionsString, + Map? optionsMap, + String? password, + String? portString, + int? port, + PartialTLSOptions? tls, + String? user, + }) { + assert(optionsString == null || optionsMap == null); + assert(portString == null || port == null); + + return ClientOptions._( + { + if (applicationName != null) 'applicationName': applicationName, + if (connection != null) 'connection': connection.asMap(), + if (database != null) 'database': database, + if (hostname != null) 'hostname': hostname, + if (hostType != null) 'host_type': hostType.name, + if (optionsString != null) + 'options': optionsString + else if (optionsMap != null) + 'options': optionsMap, + if (password != null) 'password': password, + if (portString != null) + 'port': portString + else if (port != null) + 'port': port, + if (tls != null) 'tls': tls.asMap(), + if (user != null) 'user': user, + }.jsify()! + as JSObject, + ); + } +} diff --git a/test_format/lib/src/column.dart b/test_format/lib/src/column.dart new file mode 100644 index 0000000..24d52fa --- /dev/null +++ b/test_format/lib/src/column.dart @@ -0,0 +1,77 @@ +import 'dart:js_interop'; + +/// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). +@JS('Column') +extension type Column._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column#ctor_0). + factory Column({ + required String name, + required int tableOid, + required int index, + required int typeOid, + required int columnLength, + required int typeModifier, + required ColumnFormat format, + }) => Column._internal( + name, + tableOid, + index, + typeOid, + columnLength, + typeModifier, + format.id, + ); + + @JS('Column') + external factory Column._internal( + String name, + int tableOid, + int index, + int typeOid, + int columnLength, + int typeModifier, + int format, + ); + + /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). + external String get name; + + /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). + external int get tableOid; + + /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). + external int get index; + + /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). + external int get typeOid; + + /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). + external int get columnLength; + + /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). + external int get typeModifier; + + @JS('format') + external int get _format; + + /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). + ColumnFormat get format => + ColumnFormat.values.firstWhere((e) => e.id == _format); +} + +/// enum Format { +/// TEXT = 0, +/// BINARY = 1, +/// } +enum ColumnFormat { + /// text. + text(0), + + /// binary. + binary(1); + + /// Used for interop. + final int id; + + const ColumnFormat(this.id); +} diff --git a/test_format/lib/src/command_type.dart b/test_format/lib/src/command_type.dart new file mode 100644 index 0000000..13a781f --- /dev/null +++ b/test_format/lib/src/command_type.dart @@ -0,0 +1,27 @@ +/// All sql commands. +enum CommandType { + /// insert. + insert, + + /// delete. + delete, + + /// update. + update, + + /// select. + select, + + /// move. + move, + + /// fetch. + fetch, + + /// copy. + copy; + + /// Parses a string containing an [CommandType] literal into its instance. + static CommandType parse(String string) => + values.firstWhere((e) => e.name.toUpperCase() == string); +} diff --git a/test_format/lib/src/connection.dart b/test_format/lib/src/connection.dart new file mode 100644 index 0000000..3787f53 --- /dev/null +++ b/test_format/lib/src/connection.dart @@ -0,0 +1,70 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/client_configuration.dart'; +import 'package:deno_postgres_interop/src/promise.dart'; +import 'package:deno_postgres_interop/src/query.dart'; +import 'package:deno_postgres_interop/src/query_result.dart'; +import 'package:deno_postgres_interop/src/transport.dart'; + +/// [deno-postgres@v​0.17.0/Connection](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection). +@JS('Connection') +extension type Connection._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/Connection/constructor](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#ctor_0). + factory Connection({ + required ClientConfiguration connectionParams, + required Future Function() disconnectionCallback, + }) => Connection._internal( + connectionParams, + (() => futureToPromise(disconnectionCallback())).toJS, + ); + + @JS('Connection') + external factory Connection._internal( + ClientConfiguration connectionParams, + JSFunction disconnectionCallback, + ); + + /// [deno-postgres@v​0.17.0/Connection/connected](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#accessor_pid). + external int get pid; + + /// [deno-postgres@v​0.17.0/Connection/connected](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#prop_connected). + @JS('connected') + external bool get isConnected; + + /// [deno-postgres@v​0.17.0/Connection/tls](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#accessor_tls). + @JS('tls') + external bool get isCarriedOverTLS; + + @JS('transport') + external String get _transport; + + /// [deno-postgres@v​0.17.0/Connection/transport](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#accessor_transport). + Transport get transport => Transport.parse(_transport); + + @JS('end') + external JSPromise _end(); + + /// [deno-postgres@v​0.17.0/Connection/end](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_end_0). + Future end() async { + await _end().toDart; + } + + @JS('query') + external JSPromise _query(Query query); + + /// [deno-postgres@v​0.17.0/Connection/query](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_query_0). + /// [deno-postgres@v​0.17.0/Connection/query](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_query_1). + Future queryArray(Query query) async { + final res = await _query(query).toDart; + + return res! as T; + } + + @JS('startup') + external JSPromise _startup(bool isReconnection); + + /// [deno-postgres@v​0.17.0/Connection/startup](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_startup_0). + Future startup({required bool isReconnection}) async { + await _startup(isReconnection).toDart; + } +} diff --git a/test_format/lib/src/connection_options.dart b/test_format/lib/src/connection_options.dart new file mode 100644 index 0000000..d0ffd2c --- /dev/null +++ b/test_format/lib/src/connection_options.dart @@ -0,0 +1,45 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/partial/partial_connection_options.dart'; + +/// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions). +@JS('ConnectionOptions') +extension type ConnectionOptions._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_attempts). + external int get attempts; + + @JS('interval') + external JSAny? get _interval; + + /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_interval). + /// + /// Either this or [interval] is null. + int Function(int previousInterval)? get nextInterval { + final prop = _interval?.dartify(); + + return prop is int ? null : prop as int Function(int previousInterval)?; + } + + /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_interval). + /// + /// Either this or [nextInterval] is null. + int? get interval { + final prop = _interval?.dartify(); + + return prop is int ? prop : null; + } + + /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions). + factory ConnectionOptions({ + required int attempts, + int Function(int previousInterval)? nextInterval, + int? interval, + }) => ConnectionOptions._( + PartialConnectionOptions( + attempts: attempts, + nextInterval: nextInterval, + interval: interval, + ).asMap().jsify()! + as JSObject, + ); +} diff --git a/test_format/lib/src/encoded_arg.dart b/test_format/lib/src/encoded_arg.dart new file mode 100644 index 0000000..a8f0a1d --- /dev/null +++ b/test_format/lib/src/encoded_arg.dart @@ -0,0 +1,4 @@ +import 'dart:js_interop'; + +/// [deno-postgres@v​0.17.0/EncodedArg](https://deno.land/x/postgres@v0.17.0/query/encode.ts?s=EncodedArg). +typedef EncodedArg = JSAny?; diff --git a/test_format/lib/src/errors/connection_error.dart b/test_format/lib/src/errors/connection_error.dart new file mode 100644 index 0000000..56295cd --- /dev/null +++ b/test_format/lib/src/errors/connection_error.dart @@ -0,0 +1,7 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/errors/js_error.dart'; + +/// [deno-postgres@v​0.17.0/ConnectionError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=ConnectionError). +@JS('ConnectionError') +extension type ConnectionError._(JSObject _) implements JSError, JSObject {} diff --git a/test_format/lib/src/errors/connection_params_error.dart b/test_format/lib/src/errors/connection_params_error.dart new file mode 100644 index 0000000..635c75f --- /dev/null +++ b/test_format/lib/src/errors/connection_params_error.dart @@ -0,0 +1,8 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/errors/js_error.dart'; + +/// [deno-postgres@v​0.17.0/ConnectionParamsError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=ConnectionParamsError). +@JS('ConnectionParamsError') +extension type ConnectionParamsError._(JSObject _) + implements JSError, JSObject {} diff --git a/test_format/lib/src/errors/js_error.dart b/test_format/lib/src/errors/js_error.dart new file mode 100644 index 0000000..2cdfec9 --- /dev/null +++ b/test_format/lib/src/errors/js_error.dart @@ -0,0 +1,14 @@ +import 'dart:js_interop'; + +/// [js/Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error). +@JS('Error') +extension type JSError._(JSObject _) implements JSObject { + /// [js/Error/name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name). + external String get name; + + /// [js/Error/cause](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause). + external JSError? get cause; + + /// [js/Error/message](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message). + external String get message; +} diff --git a/test_format/lib/src/errors/postgres_error.dart b/test_format/lib/src/errors/postgres_error.dart new file mode 100644 index 0000000..4297519 --- /dev/null +++ b/test_format/lib/src/errors/postgres_error.dart @@ -0,0 +1,11 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/errors/js_error.dart'; +import 'package:deno_postgres_interop/src/notice.dart'; + +/// [deno-postgres@v​0.17.0/PostgresError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=TransactionError). +@JS('PostgresError') +extension type PostgresError._(JSObject _) implements JSError, JSObject { + /// [deno-postgres@v​0.17.0/PostgresError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=PostgresError#prop_fields). + external Notice get fields; +} diff --git a/test_format/lib/src/errors/transaction_error.dart b/test_format/lib/src/errors/transaction_error.dart new file mode 100644 index 0000000..cfd07c8 --- /dev/null +++ b/test_format/lib/src/errors/transaction_error.dart @@ -0,0 +1,17 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/errors/postgres_error.dart'; + +/// [deno-postgres@v​0.17.0/TransactionError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=TransactionError). +@JS('TransactionError') +extension type TransactionError._(JSObject _) implements JSObject { + /// [js/Error/cause](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause). + /// [deno-postgres@v​0.17.0/TransactionError/constructor](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=TransactionError#ctor_0). + external PostgresError get cause; + + /// [js/Error/message](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message). + external String get message; + + /// [js/Error/name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name). + external String get name; +} diff --git a/test_format/lib/src/isolation_level.dart b/test_format/lib/src/isolation_level.dart new file mode 100644 index 0000000..2c0a48f --- /dev/null +++ b/test_format/lib/src/isolation_level.dart @@ -0,0 +1,15 @@ +/// [Transaction Isolation](https://www.postgresql.org/docs/current/transaction-iso.html). +enum IsolationLevel { + /// [Transaction Isolation/Read Committed Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-READ-COMMITTED). + readCommitted, + + /// [Transaction Isolation/Repeatable Read Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-REPEATABLE-READ). + repeatableRead, + + /// [Transaction Isolation/Serializable Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-SERIALIZABLE). + serializable; + + /// Parses a string containing an [IsolationLevel] literal into its instance. + static IsolationLevel parse(String string) => + values.firstWhere((e) => e.name == string); +} diff --git a/test_format/lib/src/notice.dart b/test_format/lib/src/notice.dart new file mode 100644 index 0000000..c4c09bc --- /dev/null +++ b/test_format/lib/src/notice.dart @@ -0,0 +1,98 @@ +import 'dart:js_interop'; + +/// [deno-postgres@v​0.17.0/Notice](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice). +@JS('Notice') +extension type Notice._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/Notice/severity](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_severity). + external String get severity; + + /// [deno-postgres@v​0.17.0/Notice/code](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_code). + external String get code; + + /// [deno-postgres@v​0.17.0/Notice/message](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_message). + external String get message; + + /// [deno-postgres@v​0.17.0/Notice/detail](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_detail). + external String? get detail; + + /// [deno-postgres@v​0.17.0/Notice/hint](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_hint). + external String? get hint; + + /// [deno-postgres@v​0.17.0/Notice/position](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_position). + external String? get position; + + /// [deno-postgres@v​0.17.0/Notice/internalPosition](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_internalPosition). + external String? get internalPosition; + + /// [deno-postgres@v​0.17.0/Notice/internalQuery](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_internalQuery). + external String? get internalQuery; + + /// [deno-postgres@v​0.17.0/Notice/where](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_where). + external String? get where; + + /// [deno-postgres@v​0.17.0/Notice/schema](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_schema). + external String? get schema; + + /// [deno-postgres@v​0.17.0/Notice/table](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_table). + external String? get table; + + /// [deno-postgres@v​0.17.0/Notice/column](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_column). + external String? get column; + + /// [deno-postgres@v​0.17.0/Notice/dataType](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_dataType). + external String? get dataType; + + /// [deno-postgres@v​0.17.0/Notice/constraint](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_constraint). + external String? get constraint; + + /// [deno-postgres@v​0.17.0/Notice/file](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_file). + external String? get file; + + /// [deno-postgres@v​0.17.0/Notice/line](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_line). + external String? get line; + + /// [deno-postgres@v​0.17.0/Notice/routine](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_routine). + external String? get routine; + + /// [deno-postgres@v​0.17.0/Notice](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice). + factory Notice({ + required String severity, + required String code, + required String message, + String? detail, + String? hint, + String? position, + String? internalPosition, + String? internalQuery, + String? where, + String? schema, + String? table, + String? column, + String? dataType, + String? constraint, + String? file, + String? line, + String? routine, + }) => Notice._( + { + 'severity': severity, + 'code': code, + 'message': message, + if (detail != null) 'detail': detail, + if (hint != null) 'hint': hint, + if (position != null) 'position': position, + if (internalPosition != null) 'internalPosition': internalPosition, + if (internalQuery != null) 'internalQuery': internalQuery, + if (where != null) 'where': where, + if (schema != null) 'schema': schema, + if (table != null) 'table': table, + if (column != null) 'column': column, + if (dataType != null) 'dataType': dataType, + if (constraint != null) 'constraint': constraint, + if (file != null) 'file': file, + if (line != null) 'line': line, + if (routine != null) 'routine': routine, + }.jsify()! + as JSObject, + ); +} diff --git a/test_format/lib/src/partial/partial_connection_options.dart b/test_format/lib/src/partial/partial_connection_options.dart new file mode 100644 index 0000000..1e2f7ba --- /dev/null +++ b/test_format/lib/src/partial/partial_connection_options.dart @@ -0,0 +1,46 @@ +/// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions). +class PartialConnectionOptions { + /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_attempts). + final int? attempts; + + /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_interval). + /// + /// Either this or [interval] is null. + final int Function(int previousInterval)? nextInterval; + + /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_interval). + /// + /// Either this or [nextInterval] is null. + final int? interval; + + /// constructor. + PartialConnectionOptions({ + this.attempts, + this.nextInterval, + this.interval, + }) : assert(interval == null || nextInterval == null); + + /// used for interop. + factory PartialConnectionOptions.fromMap(Map map) { + final intervalProp = map['interval']; + + return PartialConnectionOptions( + attempts: map['attempts'] as int?, + interval: intervalProp is int ? intervalProp : null, + nextInterval: intervalProp is! int + ? intervalProp as int Function(int previousInterval)? + : null, + ); + } + + /// used for jsify. + Map asMap() { + return { + if (attempts != null) 'attempts': attempts, + if (nextInterval != null) + 'interval': nextInterval + else if (interval != null) + 'interval': interval, + }; + } +} diff --git a/test_format/lib/src/partial/partial_tls_options.dart b/test_format/lib/src/partial/partial_tls_options.dart new file mode 100644 index 0000000..1dae44f --- /dev/null +++ b/test_format/lib/src/partial/partial_tls_options.dart @@ -0,0 +1,33 @@ +/// [deno-postgres@v​0.17.0/TLSOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=TLSOptions). +class PartialTLSOptions { + /// [deno-postgres@v​0.17.0/TLSOptions/enabled](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=TLSOptions#prop_enabled). + final bool? isEnabled; + + /// [deno-postgres@v​0.17.0/TLSOptions/enfroce](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=TLSOptions#prop_enfroce). + final bool? isEnforced; + + /// [deno-postgres@v​0.17.0/TLSOptions/caCertificates](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=TLSOptions#prop_caCertificates). + final List? caCertificates; + + /// constructor. + PartialTLSOptions({ + this.isEnabled, + this.isEnforced, + this.caCertificates, + }); + + /// used for interop. + PartialTLSOptions.fromMap(Map map) + : caCertificates = map['caCertificates'] as List?, + isEnabled = map['enabled'] as bool?, + isEnforced = map['enforced'] as bool?; + + /// used for jsify. + Map asMap() { + return { + if (isEnabled != null) 'enabled': isEnabled, + if (isEnforced != null) 'enforce': isEnforced, + if (caCertificates != null) 'caCertificates': caCertificates, + }; + } +} diff --git a/test_format/lib/src/pool.dart b/test_format/lib/src/pool.dart new file mode 100644 index 0000000..fd09767 --- /dev/null +++ b/test_format/lib/src/pool.dart @@ -0,0 +1,91 @@ +import 'dart:js_interop'; +import 'dart:js_interop_unsafe'; + +import 'package:deno_postgres_interop/src/client_options.dart'; +import 'package:deno_postgres_interop/src/pool_client.dart'; +import 'package:deno_postgres_interop/src/undefined.dart'; + +/// [deno-postgres@v​0.17.0/Pool](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool). +@JS('Pool') +extension type Pool._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). + factory Pool({ + required int size, + bool? lazy, + }) => _createPool( + undefined, + size, + lazy, + ); + + /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). + factory Pool.withOptions({ + required ClientOptions connectionParams, + required int size, + bool? lazy, + }) => _createPool( + connectionParams, + size, + lazy, + ); + + /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). + factory Pool.withString({ + required String connectionString, + required int size, + bool? lazy, + }) => _createPool( + connectionString.toJS, + size, + lazy, + ); + + static Pool _createPool([ + JSAny? connectionParamsOrString, + int? size, + bool? lazy, + ]) { + final constructor = globalContext['Pool'] as JSFunction?; + if (constructor == null) { + throw StateError('Pool constructor not found in global context.'); + } + + return constructor.callAsConstructor( + connectionParamsOrString, + size?.toJS, + lazy?.toJS, + ); + } + + /// [deno-postgres@v​0.17.0/Pool/size](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#prop_size). + @JS('size') + external int get connectionsCount; + + /// [deno-postgres@v​0.17.0/Pool/available](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#prop_available). + @JS('available') + external int get openConnectionsCount; + + @JS('connect') + external JSPromise _connect(); + + /// [deno-postgres@v​0.17.0/Pool/connect](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#method_connect_0). + Future connect() => _connect().toDart; + + @JS('end') + external JSPromise _end(); + + /// [deno-postgres@v​0.17.0/Pool/end](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#method_end_0). + Future end() async { + await _end().toDart; + } + + @JS('initialized') + external JSPromise _initialized(); + + /// [deno-postgres@v​0.17.0/Pool/initialized](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#method_initialized_0). + Future initializedConnectionsCount() async { + final res = await _initialized().toDart; + + return res.toDartInt; + } +} diff --git a/test_format/lib/src/pool_client.dart b/test_format/lib/src/pool_client.dart new file mode 100644 index 0000000..0adf5db --- /dev/null +++ b/test_format/lib/src/pool_client.dart @@ -0,0 +1,23 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/client_configuration.dart'; +import 'package:deno_postgres_interop/src/query_client.dart'; + +/// [deno-postgres@v​0.17.0/PoolClient](https://deno.land/x/postgres@v0.17.0/mod.ts?s=PoolClient). +@JS('PoolClient') +extension type PoolClient._(JSObject _) implements QueryClient, JSObject { + /// [deno-postgres@v​0.17.0/PoolClient/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=PoolClient#ctor_0). + factory PoolClient( + ClientConfiguration config, + void Function() releaseCallback, + ) => PoolClient._internal(config, releaseCallback.toJS); + + @JS('PoolClient') + external factory PoolClient._internal( + ClientConfiguration config, + JSFunction releaseCallback, + ); + + /// [deno-postgres@v​0.17.0/PoolClient/constructor/release](https://deno.land/x/postgres@v0.17.0/mod.ts?s=PoolClient#method_release_0). + external void release(); +} diff --git a/test_format/lib/src/promise.dart b/test_format/lib/src/promise.dart new file mode 100644 index 0000000..fc928f1 --- /dev/null +++ b/test_format/lib/src/promise.dart @@ -0,0 +1,9 @@ +import 'dart:js_interop'; + +/// JS [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). +typedef Promise = JSPromise; + +/// Convert darts [Future] to js' [Promise]. +JSPromise futureToPromise(Future future) { + return future.then((value) => value?.jsify()).toJS; +} diff --git a/test_format/lib/src/query.dart b/test_format/lib/src/query.dart new file mode 100644 index 0000000..5e889c5 --- /dev/null +++ b/test_format/lib/src/query.dart @@ -0,0 +1,69 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/client_common.dart'; +import 'package:deno_postgres_interop/src/encoded_arg.dart'; +import 'package:deno_postgres_interop/src/query_object_options.dart'; +import 'package:deno_postgres_interop/src/result_type.dart'; + +/// [deno-postgres@v​0.17.0/Query](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query). +@JS('Query') +extension type Query._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_0). + /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_2). + factory Query.withConfig({ + required QueryObjectOptions config, + required ResultType resultType, + QueryArguments? args, + }) => Query._internal( + config, + resultType.index, + args?.jsify(), + ); + + /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_1). + /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_2). + factory Query.withArgs({ + required String text, + required ResultType resultType, + QueryArguments? args, + }) => Query._internal( + text.toJS, + resultType.index, + args?.jsify(), + ); + + @JS('Query') + external factory Query._internal( + JSAny configOrText, + int resultType, + JSAny? args, + ); + + @JS('args') + external JSArray get _args; + @JS('args') + external set _args(JSArray val); + + /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_args). + List get args => _args.toDart; + set args(List val) => _args = val.toJS; + + @JS('fields') + external JSArray? get _fields; + + /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_fields). + List? get fields => _fields?.toDart.map((e) => e.toDart).toList(); + + /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_text). + external String get text; + + /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_camelcase). + @JS('camelcase') + external bool? get isCamelCase; + + @JS('result_type') + external int get _resultType; + + /// [deno-postgres@v​0.17.0/Query/result_type](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_result_type). + ResultType get resultType => ResultType.values[_resultType]; +} diff --git a/test_format/lib/src/query_array_result.dart b/test_format/lib/src/query_array_result.dart new file mode 100644 index 0000000..c319b53 --- /dev/null +++ b/test_format/lib/src/query_array_result.dart @@ -0,0 +1,20 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/query.dart'; +import 'package:deno_postgres_interop/src/query_result.dart'; + +/// [deno-postgres@v​0.17.0/QueryArrayResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryArrayResult). +@JS('QueryArrayResult') +extension type QueryArrayResult>._(JSObject _) + implements QueryResult, JSObject { + /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). + external factory QueryArrayResult(Query query); + + @JS('rows') + external JSArray> get _rows; + + /// [deno-postgres@v​0.17.0/QueryArrayResult/rows](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryArrayResult#prop_rows). + List get rows => _rows.toDart + .map((row) => row.toDart.map((e) => e?.dartify()).toList() as T) + .toList(); +} diff --git a/test_format/lib/src/query_client.dart b/test_format/lib/src/query_client.dart new file mode 100644 index 0000000..541bb52 --- /dev/null +++ b/test_format/lib/src/query_client.dart @@ -0,0 +1,95 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/client_common.dart'; +import 'package:deno_postgres_interop/src/connection.dart'; +import 'package:deno_postgres_interop/src/query_array_result.dart'; +import 'package:deno_postgres_interop/src/query_object_options.dart'; +import 'package:deno_postgres_interop/src/query_object_result.dart'; +import 'package:deno_postgres_interop/src/session.dart'; +import 'package:deno_postgres_interop/src/transaction.dart'; +import 'package:deno_postgres_interop/src/transaction_options.dart'; + +/// [deno-postgres@v​0.17.0/QueryClient](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient). +@JS('QueryClient') +extension type QueryClient._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/QueryClient/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#ctor_0). + external factory QueryClient(Connection connection); + + /// [deno-postgres@v​0.17.0/QueryClient/session](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#accessor_session). + external Session get session; + + /// [deno-postgres@v​0.17.0/QueryClient/connected](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#accessor_connected). + @JS('connected') + external bool get isConnected; + + @JS('closeConnection') + external JSPromise _closeConnection(); + + /// [deno-postgres@v​0.17.0/QueryClient/closeConnection](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_closeConnection_0). + Future closeConnection() async { + await _closeConnection().toDart; + } + + /// [deno-postgres@v​0.17.0/QueryClient/resetSessionMetadata](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_resetSessionMetadata_0). + external void resetSessionMetadata(); + + @JS('connect') + external JSPromise _connect(); + + /// [deno-postgres@v​0.17.0/QueryClient/connect](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_connect_0). + Future connect() async { + await _connect().toDart; + } + + @JS('end') + external JSPromise _end(); + + /// [deno-postgres@v​0.17.0/QueryClient/end](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_end_0). + Future end() async { + await _end().toDart; + } + + /// [deno-postgres@v​0.17.0/QueryClient/createTransaction](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_createTransaction_0). + external Transaction createTransaction( + String name, [ + TransactionOptions? options, + ]); + + /// Convinience wrapper for [createTransaction], + /// [Transaction.begin], + /// and [Transaction.commit]. + Future transaction( + String name, + Future Function(Transaction) f, [ + TransactionOptions? options, + ]) async { + final transaction = createTransaction(name, options); + await transaction.begin(); + final result = await f(transaction); + await transaction.commit(); + + return result; + } + + /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_0). + Future> queryArray>( + String query, [ + QueryArguments? args, + ]) => ClientCommon.queryArray(this, query, args); + + /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_1). + Future> queryArrayWithOptions>( + QueryObjectOptions config, + ) => ClientCommon.queryArrayWithOptions(this, config); + + /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_0). + Future> queryObject( + String query, [ + QueryArguments? arguments, + ]) => ClientCommon.queryObject(this, query, arguments); + + /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_1). + Future> queryObjectWithOptions( + QueryObjectOptions config, + ) => ClientCommon.queryObjectWithOptions(this, config); +} diff --git a/test_format/lib/src/query_object_options.dart b/test_format/lib/src/query_object_options.dart new file mode 100644 index 0000000..829addd --- /dev/null +++ b/test_format/lib/src/query_object_options.dart @@ -0,0 +1,28 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/query_options.dart'; + +/// [deno-postgres@v​0.17.0/QueryObjectOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryObjectOptions). +@JS('QueryObjectOptions') +extension type QueryObjectOptions._(JSObject _) + implements QueryOptions, JSObject { + @JS('fields') + external JSArray? get _fields; + + /// [deno-postgres@v​0.17.0/QueryObjectOptions/fields](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#prop_fields). + List? get fields => _fields?.toDart.map((e) => e.toDart).toList(); + + /// [deno-postgres@v​0.17.0/QueryObjectOptions/camelcase](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#prop_camelcase). + @JS('camelcase') + external bool? get isCamelCase; + + /// [deno-postgres@v​0.17.0/QueryObjectOptions](https://deno.land/x/postgres@v0.17.0/query/mod.ts?s=QueryObjectOptions). + factory QueryObjectOptions({List? fields, bool? isCamelCase}) => + QueryObjectOptions._( + { + if (isCamelCase != null) 'camelcase': isCamelCase, + if (fields != null) 'fields': fields, + }.jsify()! + as JSObject, + ); +} diff --git a/test_format/lib/src/query_object_result.dart b/test_format/lib/src/query_object_result.dart new file mode 100644 index 0000000..f67d9ec --- /dev/null +++ b/test_format/lib/src/query_object_result.dart @@ -0,0 +1,27 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/query.dart'; +import 'package:deno_postgres_interop/src/query_result.dart'; + +/// [deno-postgres@v​0.17.0/QueryObjectResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult). +@JS('QueryObjectResult') +extension type QueryObjectResult._(JSObject _) + implements QueryResult, JSObject { + /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). + external factory QueryObjectResult(Query query); + + @JS('columns') + external JSArray? get _columns; + + /// [deno-postgres@v​0.17.0/QueryObjectResult/columns](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult#prop_columns). + List? get columns => _columns?.toDart.map((e) => e.toDart).toList(); + + @JS('rows') + external JSArray get _rows; + + /// [deno-postgres@v​0.17.0/QueryObjectResult/rows](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult#prop_rows). + List> get rows => (_rows.dartify()! as List) + .cast>() + .map((e) => e.cast()) + .toList(); +} diff --git a/test_format/lib/src/query_options.dart b/test_format/lib/src/query_options.dart new file mode 100644 index 0000000..9f43218 --- /dev/null +++ b/test_format/lib/src/query_options.dart @@ -0,0 +1,48 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/client_common.dart'; +import 'package:deno_postgres_interop/src/encoded_arg.dart'; + +/// [deno-postgres@v​0.17.0/QueryOptions](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions). +@JS('QueryOptions') +extension type QueryOptions._(JSObject _) implements JSObject { + @JS('args') + external JSAny? get _args; + + /// [deno-postgres@v​0.17.0/QueryOptions/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_args). + QueryArguments? get args => _args?.dartify(); + + @JS('encoder') + external JSFunction? get _encoder; + + /// [deno-postgres@v​0.17.0/QueryOptions/encoder](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_encoder). + EncodedArg Function(dynamic arg)? get encoder { + final fn = _encoder; + if (fn == null) return null; + + return (Object? arg) => fn.callAsFunction(null, arg?.jsify()); + } + + /// [deno-postgres@v​0.17.0/QueryOptions/name](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_name). + external String? get name; + + /// [deno-postgres@v​0.17.0/QueryOptions/text](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_text). + external String get text; + + /// [deno-postgres@v​0.17.0/QueryOptions](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions). + factory QueryOptions({ + required String text, + QueryArguments? args, + EncodedArg Function(dynamic arg)? encoder, + String? name, + }) => QueryOptions._( + { + if (args != null) 'args': args, + if (encoder != null) + 'encoder': ((JSAny? arg) => encoder(arg?.dartify())).toJS, + if (name != null) 'name': name, + 'text': text, + }.jsify()! + as JSObject, + ); +} diff --git a/test_format/lib/src/query_result.dart b/test_format/lib/src/query_result.dart new file mode 100644 index 0000000..400eeb0 --- /dev/null +++ b/test_format/lib/src/query_result.dart @@ -0,0 +1,48 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/command_type.dart'; +import 'package:deno_postgres_interop/src/notice.dart'; +import 'package:deno_postgres_interop/src/query.dart'; +import 'package:deno_postgres_interop/src/row_description.dart'; + +/// [deno-postgres@v​0.17.0/QueryResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult). +@JS('QueryResult') +extension type QueryResult._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). + external factory QueryResult(Query query); + + /// [deno-postgres@v​0.17.0/QueryResult/rowCount](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#prop_rowCount). + external int? get rowCount; + + @JS('warnings') + external JSArray get _warnings; + + /// [deno-postgres@v​0.17.0/QueryResult/warnings](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#prop_warnings). + List get warnings => _warnings.toDart; + + /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). + external Query get query; + + /// [deno-postgres@v​0.17.0/QueryResult/rowDescription](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#accessor_rowDescription). + external RowDescription? get rowDescription; + + /// [deno-postgres@v​0.17.0/QueryResult/handleCommandComplete](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#method_handleCommandComplete_0). + external void handleCommandComplete(String commandTag); + + /// [deno-postgres@v​0.17.0/QueryResult/loadColumnDescriptions](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#method_loadColumnDescriptions_0). + external void loadColumnDescriptions(RowDescription description); + + @JS('insertRow') + external void _insertRow(JSArray> row); + + /// [deno-postgres@v​0.17.0/QueryResult/insertRow](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#method_insertRow_0). + void insertRow(List> row) => _insertRow( + row.map((inner) => inner.map((e) => e.toJS).toList().toJS).toList().toJS, + ); + + @JS('command') + external String? get _command; + + /// [deno-postgres@v​0.17.0/QueryResult/command](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#prop_command). + CommandType get command => CommandType.parse(_command ?? ''); +} diff --git a/test_format/lib/src/result_type.dart b/test_format/lib/src/result_type.dart new file mode 100644 index 0000000..fc9611c --- /dev/null +++ b/test_format/lib/src/result_type.dart @@ -0,0 +1,8 @@ +/// [deno-postgres@v​0.17.0/ResultType](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=ResultType). +enum ResultType { + /// array. + array, + + /// object. + object, +} diff --git a/test_format/lib/src/row_description.dart b/test_format/lib/src/row_description.dart new file mode 100644 index 0000000..f05b990 --- /dev/null +++ b/test_format/lib/src/row_description.dart @@ -0,0 +1,26 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/column.dart'; + +/// [deno-postgres@v​0.17.0/RowDescription](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription). +@JS('RowDescription') +extension type RowDescription._(JSObject _) implements JSObject { + /// https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription#ctor_0 + factory RowDescription(int columnCount, List columns) => + RowDescription._internal(columnCount, columns.toJS); + + @JS('RowDescription') + external factory RowDescription._internal( + int columnCount, + JSArray columns, + ); + + /// https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription#ctor_0 + external int get columnCount; + + @JS('columns') + external JSArray get _columns; + + /// https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription#ctor_0 + List get columns => _columns.toDart; +} diff --git a/test_format/lib/src/savepoint.dart b/test_format/lib/src/savepoint.dart new file mode 100644 index 0000000..24d4750 --- /dev/null +++ b/test_format/lib/src/savepoint.dart @@ -0,0 +1,45 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/promise.dart'; + +/// [deno-postgres@v​0.17.0/Savepoint](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint). +@JS('Savepoint') +extension type Savepoint._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/Savepoint/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#ctor_0). + factory Savepoint( + String name, + Future Function(String name) updateCallback, + Future Function(String name) releaseCallback, + ) => Savepoint._internal( + name, + ((JSString name) => futureToPromise(updateCallback(name.toDart))).toJS, + ((JSString name) => futureToPromise(releaseCallback(name.toDart))).toJS, + ); + + @JS('Savepoint') + external factory Savepoint._internal( + String name, + JSFunction updateCallback, + JSFunction releaseCallback, + ); + + /// [deno-postgres@v​0.17.0/Savepoint/instances](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#accessor_instances). + @JS('instances') + external int get instancesCount; + + @JS('release') + external JSPromise _release(); + + /// [deno-postgres@v​0.17.0/Savepoint/instances](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#method_release_0). + Future release() async { + await _release().toDart; + } + + @JS('update') + external JSPromise _update(); + + /// [deno-postgres@v​0.17.0/Savepoint/instances](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#method_update_0). + Future update() async { + await _update().toDart; + } +} diff --git a/test_format/lib/src/session.dart b/test_format/lib/src/session.dart new file mode 100644 index 0000000..9474232 --- /dev/null +++ b/test_format/lib/src/session.dart @@ -0,0 +1,27 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/transport.dart'; + +/// [deno-postgres@v​0.17.0/Session](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session). +@JS('Session') +extension type Session._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/Session/pid](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_pid) + external int? get pid; + + /// [deno-postgres@v​0.17.0/Session/tls](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_tls) + external bool? get tls; + + /// [deno-postgres@v​0.17.0/Session/current_transaction](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_current_transaction) + @JS('current_transaction') + external String? get currentTransacton; + + @JS('transport') + external String? get _transport; + + /// [deno-postgres@v​0.17.0/Session/transport](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_transport) + Transport? get transport { + final string = _transport; + + return string == null ? null : Transport.parse(string); + } +} diff --git a/test_format/lib/src/tls_options.dart b/test_format/lib/src/tls_options.dart new file mode 100644 index 0000000..fa26391 --- /dev/null +++ b/test_format/lib/src/tls_options.dart @@ -0,0 +1,34 @@ +import 'dart:js_interop'; + +/// [deno-postgres@v​0.17.0/TLSOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions). +@JS('TLSOptions') +extension type TLSOptions._(JSObject _) implements JSObject { + @JS('caCertificates') + external JSArray get _caCertificates; + + /// [deno-postgres@v​0.17.0/TLSOptions/caCertificates](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_caCertificates). + List get caCertificates => + _caCertificates.toDart.map((e) => e.toDart).toList(); + + /// [deno-postgres@v​0.17.0/TLSOptions/enabled](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_enabled). + @JS('enabled') + external bool get isEnabled; + + /// [deno-postgres@v​0.17.0/TLSOptions/enforce](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_enforce). + @JS('enforce') + external bool get isEnforced; + + /// [deno-postgres@v​0.17.0/TLSOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions). + factory TLSOptions({ + required List caCertificates, + required bool isEnabled, + required bool isEnforced, + }) => TLSOptions._( + { + 'caCertificates': caCertificates, + 'enabled': isEnabled, + 'enforce': isEnforced, + }.jsify()! + as JSObject, + ); +} diff --git a/test_format/lib/src/transaction.dart b/test_format/lib/src/transaction.dart new file mode 100644 index 0000000..45de8d6 --- /dev/null +++ b/test_format/lib/src/transaction.dart @@ -0,0 +1,150 @@ +import 'dart:js_interop'; +import 'dart:js_interop_unsafe'; + +import 'package:deno_postgres_interop/src/client_common.dart'; +import 'package:deno_postgres_interop/src/isolation_level.dart'; +import 'package:deno_postgres_interop/src/promise.dart'; +import 'package:deno_postgres_interop/src/query.dart'; +import 'package:deno_postgres_interop/src/query_array_result.dart'; +import 'package:deno_postgres_interop/src/query_client.dart'; +import 'package:deno_postgres_interop/src/query_object_options.dart'; +import 'package:deno_postgres_interop/src/query_object_result.dart'; +import 'package:deno_postgres_interop/src/query_result.dart'; +import 'package:deno_postgres_interop/src/savepoint.dart'; +import 'package:deno_postgres_interop/src/transaction_options.dart'; + +/// [deno-postgres@v​0.17.0/Transaction](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction). +@JS('Transaction') +extension type Transaction._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/Transaction/construtor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#ctor_0). + factory Transaction({ + required String name, + required QueryClient client, + required Future Function(Query query) executeQueryCallback, + required void Function(String? name) updateClientLockCallback, + TransactionOptions? options, + }) => _createTransaction( + name.toJS, + options, + client, + ((Query query) => futureToPromise(executeQueryCallback(query))).toJS, + ((JSString? name) => updateClientLockCallback(name?.toDart)).toJS, + ); + + static Transaction _createTransaction( + JSString name, + TransactionOptions? options, + QueryClient client, + JSFunction executeQueryCallback, + JSFunction updateClientLockCallback, + ) { + final constructor = globalContext['Transaction'] as JSFunction?; + if (constructor == null) { + throw StateError('Transaction constructor not found in global context.'); + } + + return constructor.callAsConstructorVarArgs([ + name, + options, + client, + executeQueryCallback, + updateClientLockCallback, + ]); + } + + @JS('savepoints') + external JSArray get _savepoints; + + /// [deno-postgres@v​0.17.0/Transaction/savepoints](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#accessor_savepoints). + List get savepoints => _savepoints.toDart; + + /// [deno-postgres@v​0.17.0/Transaction/getSavepoint](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_getSavepoint_0). + external Savepoint? getSavepoint(String name); + + @JS('isolation_name') + external String get _isolationName; + + /// [deno-postgres@v​0.17.0/Transaction/isolation_level](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#accessor_isolation_level). + IsolationLevel get isolationLevel => IsolationLevel.parse(_isolationName); + + @JS('begin') + external JSPromise _begin(); + + /// [deno-postgres@v​0.17.0/Transaction/begin](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_begin_0). + Future begin() async { + await _begin().toDart; + } + + @JS('commit') + external JSPromise _commit([JSObject? options]); + + /// [deno-postgres@v​0.17.0/Transaction/commit](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_commit_0). + Future commit({bool? chain}) async { + await _commit( + chain != null ? {'chain': chain}.jsify()! as JSObject : null, + ).toDart; + } + + @JS('getSavepoints') + external JSArray _getSavepoints(); + + /// [deno-postgres@v​0.17.0/Transaction/getSavepoints](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_getSavepoints_0). + List getActiveSavepointsNames() => + _getSavepoints().toDart.map((e) => e.toDart).toList(); + + @JS('getSnapshot') + external JSPromise _getSnapshot(); + + /// [deno-postgres@v​0.17.0/Transaction/getSnapshot](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_getSnapshot_0). + Future get snapshot async { + final res = await _getSnapshot().toDart; + + return res.toDart; + } + + /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_0). + Future> queryArray>( + String query, [ + QueryArguments? args, + ]) => ClientCommon.queryArray(this, query, args); + + /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_1). + Future> queryArrayWithOptions>( + QueryObjectOptions config, + ) => ClientCommon.queryArrayWithOptions(this, config); + + @JS('rollback') + external JSPromise _rollback([JSAny? savepointOrOptions]); + + /// [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_0). + Future rollback([Savepoint? savepoint]) async { + await _rollback(savepoint).toDart; + } + + /// [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_2). + Future rollbackWithChain() async { + await _rollback({'chain': true}.jsify()).toDart; + } + + /// [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_0). + Future rollbackByName(String savepoint) async { + await _rollback(savepoint.toJS).toDart; + } + + @JS('savepoint') + external JSPromise _savepoint(String name); + + /// [deno-postgres@v​0.17.0/Transaction/savepoint](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_savepoint_0). + Future createSavepoint(String name) => _savepoint(name).toDart; + + /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_0). + Future> queryObject( + String query, [ + QueryArguments? arguments, + ]) => ClientCommon.queryObject(this, query, arguments); + + /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). + Future> queryObjectWithOptions( + QueryObjectOptions config, + ) => ClientCommon.queryObjectWithOptions(this, config); +} diff --git a/test_format/lib/src/transaction_options.dart b/test_format/lib/src/transaction_options.dart new file mode 100644 index 0000000..dfc8075 --- /dev/null +++ b/test_format/lib/src/transaction_options.dart @@ -0,0 +1,38 @@ +import 'dart:js_interop'; + +import 'package:deno_postgres_interop/src/isolation_level.dart'; + +/// [deno-postgres@v​0.17.0/TransactionOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). +@JS('TransactionOptions') +extension type TransactionOptions._(JSObject _) implements JSObject { + /// [deno-postgres@v​0.17.0/TransactionOptions/snapshot](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). + external String? get snapshot; + + @JS('isolation_level') + external String? get _isolationLevel; + + /// [deno-postgres@v​0.17.0/TransactionOptions/isolation_level](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). + IsolationLevel? get isolationLevel { + final jsProperty = _isolationLevel; + + return jsProperty == null ? null : IsolationLevel.parse(jsProperty); + } + + /// [deno-postgres@v​0.17.0/TransactionOptions/read_only](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). + @JS('read_only') + external bool? get isReadOnly; + + /// [deno-postgres@v​0.17.0/TransactionOptions/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). + factory TransactionOptions({ + IsolationLevel? isolationLevel, + bool? isReadOnly, + String? snapshot, + }) => TransactionOptions._( + { + if (isolationLevel != null) 'isolation_level': isolationLevel.name, + if (isReadOnly != null) 'read_only': isReadOnly, + if (snapshot != null) 'snapshot': snapshot, + }.jsify()! + as JSObject, + ); +} diff --git a/test_format/lib/src/transport.dart b/test_format/lib/src/transport.dart new file mode 100644 index 0000000..1223791 --- /dev/null +++ b/test_format/lib/src/transport.dart @@ -0,0 +1,12 @@ +/// TCP | SOCKET. +enum Transport { + /// tcp. + tcp, + + /// socket. + socket; + + /// Parses a string containing an [Transport] literal into its instance. + static Transport parse(String string) => + values.firstWhere((e) => e.name == string); +} diff --git a/test_format/lib/src/undefined.dart b/test_format/lib/src/undefined.dart new file mode 100644 index 0000000..9dd3457 --- /dev/null +++ b/test_format/lib/src/undefined.dart @@ -0,0 +1,5 @@ +import 'dart:js_interop'; + +/// The js' undefined. +@JS() +external JSAny? get undefined; diff --git a/test_format/lib/src/util.dart b/test_format/lib/src/util.dart new file mode 100644 index 0000000..d84d5e0 --- /dev/null +++ b/test_format/lib/src/util.dart @@ -0,0 +1,18 @@ +import 'dart:js_interop'; +import 'dart:js_interop_unsafe'; + +/// Convenience wrapper for promise to future call. +Future callFutureMethod( + JSObject o, + String method, [ + List args = const [], +]) async { + final jsArgs = args.map((e) => e?.jsify()).toList(); + final promise = o.callMethodVarArgs>( + method.toJS, + jsArgs, + ); + final result = await promise.toDart; + + return result?.dartify() as T; +} From 212113b7b4231a0f70aa46689ccafe52f32d3c68 Mon Sep 17 00:00:00 2001 From: Illia Aihistov Date: Tue, 4 Aug 2026 20:49:37 +0300 Subject: [PATCH 8/9] chore: remove test_format directory --- test_format/bin/add_imports.dart | 46 ------ test_format/lib/deno_postgres_interop.dart | 34 ---- test_format/lib/src/add_imports/args.dart | 30 ---- test_format/lib/src/add_imports/config.dart | 44 ----- test_format/lib/src/client.dart | 29 ---- test_format/lib/src/client_common.dart | 101 ------------ test_format/lib/src/client_configuration.dart | 80 ---------- test_format/lib/src/client_options.dart | 139 ---------------- test_format/lib/src/column.dart | 77 --------- test_format/lib/src/command_type.dart | 27 ---- test_format/lib/src/connection.dart | 70 -------- test_format/lib/src/connection_options.dart | 45 ------ test_format/lib/src/encoded_arg.dart | 4 - .../lib/src/errors/connection_error.dart | 7 - .../src/errors/connection_params_error.dart | 8 - test_format/lib/src/errors/js_error.dart | 14 -- .../lib/src/errors/postgres_error.dart | 11 -- .../lib/src/errors/transaction_error.dart | 17 -- test_format/lib/src/isolation_level.dart | 15 -- test_format/lib/src/notice.dart | 98 ------------ .../partial/partial_connection_options.dart | 46 ------ .../lib/src/partial/partial_tls_options.dart | 33 ---- test_format/lib/src/pool.dart | 91 ----------- test_format/lib/src/pool_client.dart | 23 --- test_format/lib/src/promise.dart | 9 -- test_format/lib/src/query.dart | 69 -------- test_format/lib/src/query_array_result.dart | 20 --- test_format/lib/src/query_client.dart | 95 ----------- test_format/lib/src/query_object_options.dart | 28 ---- test_format/lib/src/query_object_result.dart | 27 ---- test_format/lib/src/query_options.dart | 48 ------ test_format/lib/src/query_result.dart | 48 ------ test_format/lib/src/result_type.dart | 8 - test_format/lib/src/row_description.dart | 26 --- test_format/lib/src/savepoint.dart | 45 ------ test_format/lib/src/session.dart | 27 ---- test_format/lib/src/tls_options.dart | 34 ---- test_format/lib/src/transaction.dart | 150 ------------------ test_format/lib/src/transaction_options.dart | 38 ----- test_format/lib/src/transport.dart | 12 -- test_format/lib/src/undefined.dart | 5 - test_format/lib/src/util.dart | 18 --- 42 files changed, 1796 deletions(-) delete mode 100644 test_format/bin/add_imports.dart delete mode 100644 test_format/lib/deno_postgres_interop.dart delete mode 100644 test_format/lib/src/add_imports/args.dart delete mode 100644 test_format/lib/src/add_imports/config.dart delete mode 100644 test_format/lib/src/client.dart delete mode 100644 test_format/lib/src/client_common.dart delete mode 100644 test_format/lib/src/client_configuration.dart delete mode 100644 test_format/lib/src/client_options.dart delete mode 100644 test_format/lib/src/column.dart delete mode 100644 test_format/lib/src/command_type.dart delete mode 100644 test_format/lib/src/connection.dart delete mode 100644 test_format/lib/src/connection_options.dart delete mode 100644 test_format/lib/src/encoded_arg.dart delete mode 100644 test_format/lib/src/errors/connection_error.dart delete mode 100644 test_format/lib/src/errors/connection_params_error.dart delete mode 100644 test_format/lib/src/errors/js_error.dart delete mode 100644 test_format/lib/src/errors/postgres_error.dart delete mode 100644 test_format/lib/src/errors/transaction_error.dart delete mode 100644 test_format/lib/src/isolation_level.dart delete mode 100644 test_format/lib/src/notice.dart delete mode 100644 test_format/lib/src/partial/partial_connection_options.dart delete mode 100644 test_format/lib/src/partial/partial_tls_options.dart delete mode 100644 test_format/lib/src/pool.dart delete mode 100644 test_format/lib/src/pool_client.dart delete mode 100644 test_format/lib/src/promise.dart delete mode 100644 test_format/lib/src/query.dart delete mode 100644 test_format/lib/src/query_array_result.dart delete mode 100644 test_format/lib/src/query_client.dart delete mode 100644 test_format/lib/src/query_object_options.dart delete mode 100644 test_format/lib/src/query_object_result.dart delete mode 100644 test_format/lib/src/query_options.dart delete mode 100644 test_format/lib/src/query_result.dart delete mode 100644 test_format/lib/src/result_type.dart delete mode 100644 test_format/lib/src/row_description.dart delete mode 100644 test_format/lib/src/savepoint.dart delete mode 100644 test_format/lib/src/session.dart delete mode 100644 test_format/lib/src/tls_options.dart delete mode 100644 test_format/lib/src/transaction.dart delete mode 100644 test_format/lib/src/transaction_options.dart delete mode 100644 test_format/lib/src/transport.dart delete mode 100644 test_format/lib/src/undefined.dart delete mode 100644 test_format/lib/src/util.dart diff --git a/test_format/bin/add_imports.dart b/test_format/bin/add_imports.dart deleted file mode 100644 index e154327..0000000 --- a/test_format/bin/add_imports.dart +++ /dev/null @@ -1,46 +0,0 @@ -// This is a CLI tool so it is okay here. -// ignore_for_file: avoid_print - -import 'dart:io'; - -import 'package:args/args.dart'; -import 'package:collection/collection.dart'; -import 'package:deno_postgres_interop/src/add_imports/args.dart'; -import 'package:deno_postgres_interop/src/add_imports/config.dart'; -import 'package:yaml/yaml.dart'; - -void main(List arguments) { - try { - final Args(:filename, :configpath) = Args.parse(arguments); - - final configString = File(configpath).readAsStringSync(); - final config = Config.fromYaml(configString); - - final sourceFile = File(filename); - final sourceString = sourceFile.readAsStringSync(); - final newSource = createNewSource(sourceString, config); - if (newSource == sourceString) return; - - sourceFile.writeAsStringSync(newSource); - } on FileSystemException catch (e) { - print('Error while accessing ${e.path}'); - } on YamlException { - print('Error while parsing config'); - } on ArgParserException { - print(Args.usage); - } -} - -String createNewSource(String sourceString, Config config) { - final classesToImport = config.classes - .whereNot((e) => sourceString.contains('import { $e }')) - .toList(); - - return [ - ...[ - config.importStringForClass, - (e) => 'globalThis.$e = $e;', - ].map(classesToImport.map).flattened, - sourceString, - ].join('\n'); -} diff --git a/test_format/lib/deno_postgres_interop.dart b/test_format/lib/deno_postgres_interop.dart deleted file mode 100644 index 6b97815..0000000 --- a/test_format/lib/deno_postgres_interop.dart +++ /dev/null @@ -1,34 +0,0 @@ -/// An interop for [deno-postgres@v​0.17.0](https://deno.land/x/postgres@v0.17.0). -library; - -export 'src/client.dart'; -export 'src/client_configuration.dart'; -export 'src/client_options.dart'; -export 'src/column.dart'; -export 'src/command_type.dart'; -export 'src/connection.dart'; -export 'src/connection_options.dart'; -export 'src/encoded_arg.dart'; -export 'src/errors/connection_error.dart'; -export 'src/errors/connection_params_error.dart'; -export 'src/errors/postgres_error.dart'; -export 'src/errors/transaction_error.dart'; -export 'src/isolation_level.dart'; -export 'src/notice.dart'; -export 'src/partial/partial_connection_options.dart'; -export 'src/partial/partial_tls_options.dart'; -export 'src/pool.dart'; -export 'src/pool_client.dart'; -export 'src/query.dart'; -export 'src/query_array_result.dart'; -export 'src/query_client.dart'; -export 'src/query_object_result.dart'; -export 'src/query_result.dart'; -export 'src/result_type.dart'; -export 'src/row_description.dart'; -export 'src/savepoint.dart'; -export 'src/session.dart'; -export 'src/tls_options.dart'; -export 'src/transaction.dart'; -export 'src/transaction_options.dart'; -export 'src/transport.dart'; diff --git a/test_format/lib/src/add_imports/args.dart b/test_format/lib/src/add_imports/args.dart deleted file mode 100644 index 026631a..0000000 --- a/test_format/lib/src/add_imports/args.dart +++ /dev/null @@ -1,30 +0,0 @@ -// This is an internal implementation so it is okay here. -// ignore_for_file: public_member_api_docs - -import 'package:args/args.dart'; - -class Args { - static final _parser = ArgParser() - ..addOption('filename') - ..addOption('configpath', defaultsTo: 'add_imports.yaml'); - - final String filename; - final String configpath; - - static String get usage => _parser.usage; - - Args({required this.filename, required this.configpath}); - - factory Args.parse(List arguments) { - try { - final result = _parser.parse(arguments); - - return Args( - filename: result['filename'] as String, - configpath: result['configpath'] as String, - ); - } catch (_) { - throw ArgParserException(''); - } - } -} diff --git a/test_format/lib/src/add_imports/config.dart b/test_format/lib/src/add_imports/config.dart deleted file mode 100644 index 1146c91..0000000 --- a/test_format/lib/src/add_imports/config.dart +++ /dev/null @@ -1,44 +0,0 @@ -// This is an internal implementation so it is okay here. -// ignore_for_file: public_member_api_docs - -import 'package:collection/collection.dart'; -import 'package:yaml/yaml.dart'; - -class Config { - final String fileUrlPrefix; - final Map> classesMap; - - Set get classes => classesMap.values.flattened.toSet(); - - Config({required this.fileUrlPrefix, required this.classesMap}); - - factory Config.fromYaml(String yamlString) { - try { - final parsedYaml = loadYaml(yamlString) as YamlMap; - - final classesMap = (parsedYaml['classes_map'] as YamlMap).map( - (key, value) => MapEntry( - key as String, - [...value as YamlList].cast(), - ), - ); - - return Config( - classesMap: classesMap, - fileUrlPrefix: parsedYaml['file_url_prefix'] as String, - ); - } catch (_) { - throw YamlException('', null); - } - } - - String _filenameForClass(String classname) => - classesMap.entries.firstWhere((e) => e.value.contains(classname)).key; - - String importStringForClass(String classname) { - final filename = _filenameForClass(classname); - final url = '$fileUrlPrefix$filename'; - - return 'import { $classname } from "$url";'; - } -} diff --git a/test_format/lib/src/client.dart b/test_format/lib/src/client.dart deleted file mode 100644 index dfc7968..0000000 --- a/test_format/lib/src/client.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'dart:js_interop'; -import 'dart:js_interop_unsafe'; - -import 'package:deno_postgres_interop/src/client_options.dart'; -import 'package:deno_postgres_interop/src/query_client.dart'; - -/// [deno-postgres@v​0.17.0/Client](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client). -@JS('Client') -extension type Client._(JSObject _) implements QueryClient, JSObject { - /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). - factory Client(String dbUrl) => _createClient(dbUrl.toJS); - - /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). - factory Client.config(ClientOptions config) => _createClient(config); - - /// [deno-postgres@v​0.17.0/Client/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Client#ctor_0). - factory Client.empty() => _createClient(); - - static Client _createClient([JSAny? configOrUrl]) { - final constructor = globalContext['Client'] as JSFunction?; - if (constructor == null) { - throw StateError('Client constructor not found in global context.'); - } - - return configOrUrl != null - ? constructor.callAsConstructor(configOrUrl) - : constructor.callAsConstructor(); - } -} diff --git a/test_format/lib/src/client_common.dart b/test_format/lib/src/client_common.dart deleted file mode 100644 index 472bf19..0000000 --- a/test_format/lib/src/client_common.dart +++ /dev/null @@ -1,101 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/query_array_result.dart'; -import 'package:deno_postgres_interop/src/query_object_options.dart'; -import 'package:deno_postgres_interop/src/query_object_result.dart'; -import 'package:deno_postgres_interop/src/util.dart'; - -/// [deno-postgres@v​0.17.0/QueryArguments](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryArguments). -typedef QueryArguments = Object; - -/// This class hosts common interops for clients. -abstract final class ClientCommon { - /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_0). - /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_0). - static Future> queryArray>( - Object queryable, - String query, [ - QueryArguments? arguments, - ]) => _query('queryArray', queryable, query, arguments); - - /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_1). - /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_1). - static Future> - queryArrayWithOptions>( - Object queryable, - QueryObjectOptions config, - ) => callFutureMethod(queryable as JSObject, 'queryArray', [config]); - - // This one won't be implemented because it doesn't make much sense for dart, - // the query here is of type TemplateStringsArray which is used in - // [tagged templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates). - // - // [related issue](https://github.com/dart-lang/language/issues/1988). - // - // queryArray>( - // strings: TemplateStringsArray, - // ...args: unknown[], - // ): Promise> - // https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_2 - - /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_0). - /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_0). - static Future> queryObject( - Object queryable, - String query, [ - QueryArguments? arguments, - ]) => _query('queryObject', queryable, query, arguments); - - /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). - /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). - static Future> queryObjectWithOptions( - Object queryable, - QueryObjectOptions config, - ) => callFutureMethod(queryable as JSObject, 'queryObject', [config]); - - // This one won't be implemented because it doesn't make much sense for dart, - // the query here is of type TemplateStringsArray which is used in - // [tagged templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates). - // - // [related issue](https://github.com/dart-lang/language/issues/1988). - // - // [deno-postgres@v0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_2). - // Future> queryObjectWithOptions( - // List query, - // List args, - // ) => - // throw UnimplementedError(); - - static Future _query( - String function, - Object queryable, - String query, [ - QueryArguments? arguments, - ]) { - _assertQueryArgumentsOrNull(arguments); - - return callFutureMethod( - queryable as JSObject, - function, - [ - query, - if (arguments != null) arguments, - ], - ); - } -} - -void _assertQueryArgumentsOrNull(QueryArguments? arguments) { - final isCorrectType = - arguments is List || - arguments is Map || - arguments == null; - - if (!isCorrectType) { - throw ArgumentError.value( - arguments, - 'arguments', - 'Accepted types are List and Map.', - ); - } -} diff --git a/test_format/lib/src/client_configuration.dart b/test_format/lib/src/client_configuration.dart deleted file mode 100644 index 5eef68f..0000000 --- a/test_format/lib/src/client_configuration.dart +++ /dev/null @@ -1,80 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/connection_options.dart'; -import 'package:deno_postgres_interop/src/tls_options.dart'; -import 'package:deno_postgres_interop/src/transport.dart'; - -/// [deno-postgres@v​0.17.0/ClientConfiguration](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration). -@JS('ClientConfiguration') -extension type ClientConfiguration._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/ClientConfiguration/applicationName](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_applicationName). - external String get applicationName; - - /// [deno-postgres@v​0.17.0/ClientConfiguration/connection](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_connection). - external ConnectionOptions get connection; - - /// [deno-postgres@v​0.17.0/ClientConfiguration/database](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_database). - external String get database; - - /// [deno-postgres@v​0.17.0/ClientConfiguration/hostname](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_hostname). - external String get hostname; - - @JS('options') - external JSAny? get _options; - - /// [deno-postgres@v​0.17.0/ClientConfiguration/options](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_options). - Map get options { - final map = _options?.dartify(); - if (map is Map) { - return map.cast(); - } - - return const {}; - } - - /// [deno-postgres@v​0.17.0/ClientConfiguration/password](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_password). - external String? get password; - - /// [deno-postgres@v​0.17.0/ClientConfiguration/port](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_port). - external int get port; - - /// [deno-postgres@v​0.17.0/ClientConfiguration/tls](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_tls). - external TLSOptions get tls; - - /// [deno-postgres@v​0.17.0/ClientConfiguration/user](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_user). - external String get user; - - @JS('host_type') - external String get _hostType; - - /// [deno-postgres@v​0.17.0/ClientConfiguration/host_type](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration#prop_host_type). - Transport get hostType => Transport.parse(_hostType); - - /// [deno-postgres@v​0.17.0/ClientConfiguration](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ClientConfiguration). - factory ClientConfiguration({ - required String applicationName, - required ConnectionOptions connection, - required String database, - required String hostname, - required String options, - required int port, - required TLSOptions tls, - required String user, - required Transport hostType, - String? password, - }) => ClientConfiguration._( - { - 'applicationName': applicationName, - 'connection': connection, - 'database': database, - 'hostname': hostname, - 'options': options, - if (password != null) 'password': password, - 'port': port, - 'tls': tls, - 'user': user, - 'hostType': hostType.name, - }.jsify()! - as JSObject, - ); -} diff --git a/test_format/lib/src/client_options.dart b/test_format/lib/src/client_options.dart deleted file mode 100644 index 83ec83c..0000000 --- a/test_format/lib/src/client_options.dart +++ /dev/null @@ -1,139 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/partial/partial_connection_options.dart'; -import 'package:deno_postgres_interop/src/partial/partial_tls_options.dart'; -import 'package:deno_postgres_interop/src/transport.dart'; - -/// [deno-postgres@v​0.17.0/ClientOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions). -@JS('ClientOptions') -extension type ClientOptions._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/ClientOptions/applicationName](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_applicationName). - external String? get applicationName; - - /// [deno-postgres@v​0.17.0/ClientOptions/database](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_database). - external String? get database; - - /// [deno-postgres@v​0.17.0/ClientOptions/hostname](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_hostname). - external String? get hostname; - - /// [deno-postgres@v​0.17.0/ClientOptions/password](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_password). - external String? get password; - - /// [deno-postgres@v​0.17.0/ClientOptions/user](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_applicationName/user). - external String? get user; - - @JS('host_type') - external String? get _hostType; - - /// [deno-postgres@v​0.17.0/ClientOptions/host_type](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_host_type). - Transport get hostType => Transport.parse(_hostType ?? ''); - - @JS('options') - external JSAny? get _options; - - /// [deno-postgres@v​0.17.0/ClientOptions/options](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_options). - /// - /// Either this or [optionsMap] is null. - String? get optionsString { - final prop = _options?.dartify(); - - return prop is String ? prop : null; - } - - /// [deno-postgres@v​0.17.0/ClientOptions/options](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_options). - /// - /// Either this or [optionsString] is null. - Map? get optionsMap { - final prop = _options?.dartify(); - - return prop is Map ? prop.cast() : null; - } - - @JS('port') - external JSAny? get _port; - - /// [deno-postgres@v​0.17.0/ClientOptions/port](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_port). - /// - /// Either this or [port] is null. - String? get portString { - final prop = _port?.dartify(); - - return prop is String ? prop : null; - } - - /// [deno-postgres@v​0.17.0/ClientOptions/port](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_port). - /// - /// Either this or [portString] is null. - int? get port { - final prop = _port?.dartify(); - - return prop is int ? prop : null; - } - - @JS('connection') - external JSAny? get _connection; - - /// [deno-postgres@v​0.17.0/ClientOptions/connection](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_connection). - PartialConnectionOptions? get connection { - final map = _connection?.dartify() as Map?; - - return map == null ? null : PartialConnectionOptions.fromMap(map); - } - - @JS('tls') - external JSAny? get _tls; - - /// [deno-postgres@v​0.17.0/ClientOptions/tls](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions#prop_tls). - PartialTLSOptions? get tls { - final map = _tls?.dartify() as Map?; - - if (map == null) return null; - - return PartialTLSOptions( - caCertificates: (map['caCertificates'] as List?)?.cast(), - isEnabled: map['enabled'] as bool?, - isEnforced: map['enforced'] as bool?, - ); - } - - /// [deno-postgres@v​0.17.0/ClientOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=ClientOptions). - factory ClientOptions({ - String? applicationName, - PartialConnectionOptions? connection, - String? database, - String? hostname, - Transport? hostType, - String? optionsString, - Map? optionsMap, - String? password, - String? portString, - int? port, - PartialTLSOptions? tls, - String? user, - }) { - assert(optionsString == null || optionsMap == null); - assert(portString == null || port == null); - - return ClientOptions._( - { - if (applicationName != null) 'applicationName': applicationName, - if (connection != null) 'connection': connection.asMap(), - if (database != null) 'database': database, - if (hostname != null) 'hostname': hostname, - if (hostType != null) 'host_type': hostType.name, - if (optionsString != null) - 'options': optionsString - else if (optionsMap != null) - 'options': optionsMap, - if (password != null) 'password': password, - if (portString != null) - 'port': portString - else if (port != null) - 'port': port, - if (tls != null) 'tls': tls.asMap(), - if (user != null) 'user': user, - }.jsify()! - as JSObject, - ); - } -} diff --git a/test_format/lib/src/column.dart b/test_format/lib/src/column.dart deleted file mode 100644 index 24d52fa..0000000 --- a/test_format/lib/src/column.dart +++ /dev/null @@ -1,77 +0,0 @@ -import 'dart:js_interop'; - -/// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). -@JS('Column') -extension type Column._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column#ctor_0). - factory Column({ - required String name, - required int tableOid, - required int index, - required int typeOid, - required int columnLength, - required int typeModifier, - required ColumnFormat format, - }) => Column._internal( - name, - tableOid, - index, - typeOid, - columnLength, - typeModifier, - format.id, - ); - - @JS('Column') - external factory Column._internal( - String name, - int tableOid, - int index, - int typeOid, - int columnLength, - int typeModifier, - int format, - ); - - /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). - external String get name; - - /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). - external int get tableOid; - - /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). - external int get index; - - /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). - external int get typeOid; - - /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). - external int get columnLength; - - /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). - external int get typeModifier; - - @JS('format') - external int get _format; - - /// [deno-postgres@v​0.17.0/Column](https://deno.land/x/postgres@v0.17.0/query/decode.ts?s=Column). - ColumnFormat get format => - ColumnFormat.values.firstWhere((e) => e.id == _format); -} - -/// enum Format { -/// TEXT = 0, -/// BINARY = 1, -/// } -enum ColumnFormat { - /// text. - text(0), - - /// binary. - binary(1); - - /// Used for interop. - final int id; - - const ColumnFormat(this.id); -} diff --git a/test_format/lib/src/command_type.dart b/test_format/lib/src/command_type.dart deleted file mode 100644 index 13a781f..0000000 --- a/test_format/lib/src/command_type.dart +++ /dev/null @@ -1,27 +0,0 @@ -/// All sql commands. -enum CommandType { - /// insert. - insert, - - /// delete. - delete, - - /// update. - update, - - /// select. - select, - - /// move. - move, - - /// fetch. - fetch, - - /// copy. - copy; - - /// Parses a string containing an [CommandType] literal into its instance. - static CommandType parse(String string) => - values.firstWhere((e) => e.name.toUpperCase() == string); -} diff --git a/test_format/lib/src/connection.dart b/test_format/lib/src/connection.dart deleted file mode 100644 index 3787f53..0000000 --- a/test_format/lib/src/connection.dart +++ /dev/null @@ -1,70 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/client_configuration.dart'; -import 'package:deno_postgres_interop/src/promise.dart'; -import 'package:deno_postgres_interop/src/query.dart'; -import 'package:deno_postgres_interop/src/query_result.dart'; -import 'package:deno_postgres_interop/src/transport.dart'; - -/// [deno-postgres@v​0.17.0/Connection](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection). -@JS('Connection') -extension type Connection._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/Connection/constructor](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#ctor_0). - factory Connection({ - required ClientConfiguration connectionParams, - required Future Function() disconnectionCallback, - }) => Connection._internal( - connectionParams, - (() => futureToPromise(disconnectionCallback())).toJS, - ); - - @JS('Connection') - external factory Connection._internal( - ClientConfiguration connectionParams, - JSFunction disconnectionCallback, - ); - - /// [deno-postgres@v​0.17.0/Connection/connected](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#accessor_pid). - external int get pid; - - /// [deno-postgres@v​0.17.0/Connection/connected](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#prop_connected). - @JS('connected') - external bool get isConnected; - - /// [deno-postgres@v​0.17.0/Connection/tls](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#accessor_tls). - @JS('tls') - external bool get isCarriedOverTLS; - - @JS('transport') - external String get _transport; - - /// [deno-postgres@v​0.17.0/Connection/transport](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#accessor_transport). - Transport get transport => Transport.parse(_transport); - - @JS('end') - external JSPromise _end(); - - /// [deno-postgres@v​0.17.0/Connection/end](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_end_0). - Future end() async { - await _end().toDart; - } - - @JS('query') - external JSPromise _query(Query query); - - /// [deno-postgres@v​0.17.0/Connection/query](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_query_0). - /// [deno-postgres@v​0.17.0/Connection/query](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_query_1). - Future queryArray(Query query) async { - final res = await _query(query).toDart; - - return res! as T; - } - - @JS('startup') - external JSPromise _startup(bool isReconnection); - - /// [deno-postgres@v​0.17.0/Connection/startup](https://deno.land/x/postgres@v0.17.0/connection/connection.ts?s=Connection#method_startup_0). - Future startup({required bool isReconnection}) async { - await _startup(isReconnection).toDart; - } -} diff --git a/test_format/lib/src/connection_options.dart b/test_format/lib/src/connection_options.dart deleted file mode 100644 index d0ffd2c..0000000 --- a/test_format/lib/src/connection_options.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/partial/partial_connection_options.dart'; - -/// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions). -@JS('ConnectionOptions') -extension type ConnectionOptions._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_attempts). - external int get attempts; - - @JS('interval') - external JSAny? get _interval; - - /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_interval). - /// - /// Either this or [interval] is null. - int Function(int previousInterval)? get nextInterval { - final prop = _interval?.dartify(); - - return prop is int ? null : prop as int Function(int previousInterval)?; - } - - /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_interval). - /// - /// Either this or [nextInterval] is null. - int? get interval { - final prop = _interval?.dartify(); - - return prop is int ? prop : null; - } - - /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions). - factory ConnectionOptions({ - required int attempts, - int Function(int previousInterval)? nextInterval, - int? interval, - }) => ConnectionOptions._( - PartialConnectionOptions( - attempts: attempts, - nextInterval: nextInterval, - interval: interval, - ).asMap().jsify()! - as JSObject, - ); -} diff --git a/test_format/lib/src/encoded_arg.dart b/test_format/lib/src/encoded_arg.dart deleted file mode 100644 index a8f0a1d..0000000 --- a/test_format/lib/src/encoded_arg.dart +++ /dev/null @@ -1,4 +0,0 @@ -import 'dart:js_interop'; - -/// [deno-postgres@v​0.17.0/EncodedArg](https://deno.land/x/postgres@v0.17.0/query/encode.ts?s=EncodedArg). -typedef EncodedArg = JSAny?; diff --git a/test_format/lib/src/errors/connection_error.dart b/test_format/lib/src/errors/connection_error.dart deleted file mode 100644 index 56295cd..0000000 --- a/test_format/lib/src/errors/connection_error.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/errors/js_error.dart'; - -/// [deno-postgres@v​0.17.0/ConnectionError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=ConnectionError). -@JS('ConnectionError') -extension type ConnectionError._(JSObject _) implements JSError, JSObject {} diff --git a/test_format/lib/src/errors/connection_params_error.dart b/test_format/lib/src/errors/connection_params_error.dart deleted file mode 100644 index 635c75f..0000000 --- a/test_format/lib/src/errors/connection_params_error.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/errors/js_error.dart'; - -/// [deno-postgres@v​0.17.0/ConnectionParamsError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=ConnectionParamsError). -@JS('ConnectionParamsError') -extension type ConnectionParamsError._(JSObject _) - implements JSError, JSObject {} diff --git a/test_format/lib/src/errors/js_error.dart b/test_format/lib/src/errors/js_error.dart deleted file mode 100644 index 2cdfec9..0000000 --- a/test_format/lib/src/errors/js_error.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'dart:js_interop'; - -/// [js/Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error). -@JS('Error') -extension type JSError._(JSObject _) implements JSObject { - /// [js/Error/name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name). - external String get name; - - /// [js/Error/cause](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause). - external JSError? get cause; - - /// [js/Error/message](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message). - external String get message; -} diff --git a/test_format/lib/src/errors/postgres_error.dart b/test_format/lib/src/errors/postgres_error.dart deleted file mode 100644 index 4297519..0000000 --- a/test_format/lib/src/errors/postgres_error.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/errors/js_error.dart'; -import 'package:deno_postgres_interop/src/notice.dart'; - -/// [deno-postgres@v​0.17.0/PostgresError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=TransactionError). -@JS('PostgresError') -extension type PostgresError._(JSObject _) implements JSError, JSObject { - /// [deno-postgres@v​0.17.0/PostgresError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=PostgresError#prop_fields). - external Notice get fields; -} diff --git a/test_format/lib/src/errors/transaction_error.dart b/test_format/lib/src/errors/transaction_error.dart deleted file mode 100644 index cfd07c8..0000000 --- a/test_format/lib/src/errors/transaction_error.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/errors/postgres_error.dart'; - -/// [deno-postgres@v​0.17.0/TransactionError](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=TransactionError). -@JS('TransactionError') -extension type TransactionError._(JSObject _) implements JSObject { - /// [js/Error/cause](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause). - /// [deno-postgres@v​0.17.0/TransactionError/constructor](https://deno.land/x/postgres@v0.17.0/client/error.ts?s=TransactionError#ctor_0). - external PostgresError get cause; - - /// [js/Error/message](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message). - external String get message; - - /// [js/Error/name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name). - external String get name; -} diff --git a/test_format/lib/src/isolation_level.dart b/test_format/lib/src/isolation_level.dart deleted file mode 100644 index 2c0a48f..0000000 --- a/test_format/lib/src/isolation_level.dart +++ /dev/null @@ -1,15 +0,0 @@ -/// [Transaction Isolation](https://www.postgresql.org/docs/current/transaction-iso.html). -enum IsolationLevel { - /// [Transaction Isolation/Read Committed Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-READ-COMMITTED). - readCommitted, - - /// [Transaction Isolation/Repeatable Read Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-REPEATABLE-READ). - repeatableRead, - - /// [Transaction Isolation/Serializable Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-SERIALIZABLE). - serializable; - - /// Parses a string containing an [IsolationLevel] literal into its instance. - static IsolationLevel parse(String string) => - values.firstWhere((e) => e.name == string); -} diff --git a/test_format/lib/src/notice.dart b/test_format/lib/src/notice.dart deleted file mode 100644 index c4c09bc..0000000 --- a/test_format/lib/src/notice.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'dart:js_interop'; - -/// [deno-postgres@v​0.17.0/Notice](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice). -@JS('Notice') -extension type Notice._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/Notice/severity](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_severity). - external String get severity; - - /// [deno-postgres@v​0.17.0/Notice/code](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_code). - external String get code; - - /// [deno-postgres@v​0.17.0/Notice/message](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_message). - external String get message; - - /// [deno-postgres@v​0.17.0/Notice/detail](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_detail). - external String? get detail; - - /// [deno-postgres@v​0.17.0/Notice/hint](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_hint). - external String? get hint; - - /// [deno-postgres@v​0.17.0/Notice/position](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_position). - external String? get position; - - /// [deno-postgres@v​0.17.0/Notice/internalPosition](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_internalPosition). - external String? get internalPosition; - - /// [deno-postgres@v​0.17.0/Notice/internalQuery](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_internalQuery). - external String? get internalQuery; - - /// [deno-postgres@v​0.17.0/Notice/where](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_where). - external String? get where; - - /// [deno-postgres@v​0.17.0/Notice/schema](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_schema). - external String? get schema; - - /// [deno-postgres@v​0.17.0/Notice/table](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_table). - external String? get table; - - /// [deno-postgres@v​0.17.0/Notice/column](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_column). - external String? get column; - - /// [deno-postgres@v​0.17.0/Notice/dataType](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_dataType). - external String? get dataType; - - /// [deno-postgres@v​0.17.0/Notice/constraint](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_constraint). - external String? get constraint; - - /// [deno-postgres@v​0.17.0/Notice/file](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_file). - external String? get file; - - /// [deno-postgres@v​0.17.0/Notice/line](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_line). - external String? get line; - - /// [deno-postgres@v​0.17.0/Notice/routine](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice#prop_routine). - external String? get routine; - - /// [deno-postgres@v​0.17.0/Notice](https://deno.land/x/postgres@v0.17.0/connection/message.ts?s=Notice). - factory Notice({ - required String severity, - required String code, - required String message, - String? detail, - String? hint, - String? position, - String? internalPosition, - String? internalQuery, - String? where, - String? schema, - String? table, - String? column, - String? dataType, - String? constraint, - String? file, - String? line, - String? routine, - }) => Notice._( - { - 'severity': severity, - 'code': code, - 'message': message, - if (detail != null) 'detail': detail, - if (hint != null) 'hint': hint, - if (position != null) 'position': position, - if (internalPosition != null) 'internalPosition': internalPosition, - if (internalQuery != null) 'internalQuery': internalQuery, - if (where != null) 'where': where, - if (schema != null) 'schema': schema, - if (table != null) 'table': table, - if (column != null) 'column': column, - if (dataType != null) 'dataType': dataType, - if (constraint != null) 'constraint': constraint, - if (file != null) 'file': file, - if (line != null) 'line': line, - if (routine != null) 'routine': routine, - }.jsify()! - as JSObject, - ); -} diff --git a/test_format/lib/src/partial/partial_connection_options.dart b/test_format/lib/src/partial/partial_connection_options.dart deleted file mode 100644 index 1e2f7ba..0000000 --- a/test_format/lib/src/partial/partial_connection_options.dart +++ /dev/null @@ -1,46 +0,0 @@ -/// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions). -class PartialConnectionOptions { - /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_attempts). - final int? attempts; - - /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_interval). - /// - /// Either this or [interval] is null. - final int Function(int previousInterval)? nextInterval; - - /// [deno-postgres@v​0.17.0/ConnectionOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=ConnectionOptions#prop_interval). - /// - /// Either this or [nextInterval] is null. - final int? interval; - - /// constructor. - PartialConnectionOptions({ - this.attempts, - this.nextInterval, - this.interval, - }) : assert(interval == null || nextInterval == null); - - /// used for interop. - factory PartialConnectionOptions.fromMap(Map map) { - final intervalProp = map['interval']; - - return PartialConnectionOptions( - attempts: map['attempts'] as int?, - interval: intervalProp is int ? intervalProp : null, - nextInterval: intervalProp is! int - ? intervalProp as int Function(int previousInterval)? - : null, - ); - } - - /// used for jsify. - Map asMap() { - return { - if (attempts != null) 'attempts': attempts, - if (nextInterval != null) - 'interval': nextInterval - else if (interval != null) - 'interval': interval, - }; - } -} diff --git a/test_format/lib/src/partial/partial_tls_options.dart b/test_format/lib/src/partial/partial_tls_options.dart deleted file mode 100644 index 1dae44f..0000000 --- a/test_format/lib/src/partial/partial_tls_options.dart +++ /dev/null @@ -1,33 +0,0 @@ -/// [deno-postgres@v​0.17.0/TLSOptions](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=TLSOptions). -class PartialTLSOptions { - /// [deno-postgres@v​0.17.0/TLSOptions/enabled](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=TLSOptions#prop_enabled). - final bool? isEnabled; - - /// [deno-postgres@v​0.17.0/TLSOptions/enfroce](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=TLSOptions#prop_enfroce). - final bool? isEnforced; - - /// [deno-postgres@v​0.17.0/TLSOptions/caCertificates](https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts?s=TLSOptions#prop_caCertificates). - final List? caCertificates; - - /// constructor. - PartialTLSOptions({ - this.isEnabled, - this.isEnforced, - this.caCertificates, - }); - - /// used for interop. - PartialTLSOptions.fromMap(Map map) - : caCertificates = map['caCertificates'] as List?, - isEnabled = map['enabled'] as bool?, - isEnforced = map['enforced'] as bool?; - - /// used for jsify. - Map asMap() { - return { - if (isEnabled != null) 'enabled': isEnabled, - if (isEnforced != null) 'enforce': isEnforced, - if (caCertificates != null) 'caCertificates': caCertificates, - }; - } -} diff --git a/test_format/lib/src/pool.dart b/test_format/lib/src/pool.dart deleted file mode 100644 index fd09767..0000000 --- a/test_format/lib/src/pool.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'dart:js_interop'; -import 'dart:js_interop_unsafe'; - -import 'package:deno_postgres_interop/src/client_options.dart'; -import 'package:deno_postgres_interop/src/pool_client.dart'; -import 'package:deno_postgres_interop/src/undefined.dart'; - -/// [deno-postgres@v​0.17.0/Pool](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool). -@JS('Pool') -extension type Pool._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). - factory Pool({ - required int size, - bool? lazy, - }) => _createPool( - undefined, - size, - lazy, - ); - - /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). - factory Pool.withOptions({ - required ClientOptions connectionParams, - required int size, - bool? lazy, - }) => _createPool( - connectionParams, - size, - lazy, - ); - - /// [deno-postgres@v​0.17.0/Pool/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#ctor_0). - factory Pool.withString({ - required String connectionString, - required int size, - bool? lazy, - }) => _createPool( - connectionString.toJS, - size, - lazy, - ); - - static Pool _createPool([ - JSAny? connectionParamsOrString, - int? size, - bool? lazy, - ]) { - final constructor = globalContext['Pool'] as JSFunction?; - if (constructor == null) { - throw StateError('Pool constructor not found in global context.'); - } - - return constructor.callAsConstructor( - connectionParamsOrString, - size?.toJS, - lazy?.toJS, - ); - } - - /// [deno-postgres@v​0.17.0/Pool/size](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#prop_size). - @JS('size') - external int get connectionsCount; - - /// [deno-postgres@v​0.17.0/Pool/available](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#prop_available). - @JS('available') - external int get openConnectionsCount; - - @JS('connect') - external JSPromise _connect(); - - /// [deno-postgres@v​0.17.0/Pool/connect](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#method_connect_0). - Future connect() => _connect().toDart; - - @JS('end') - external JSPromise _end(); - - /// [deno-postgres@v​0.17.0/Pool/end](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#method_end_0). - Future end() async { - await _end().toDart; - } - - @JS('initialized') - external JSPromise _initialized(); - - /// [deno-postgres@v​0.17.0/Pool/initialized](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Pool#method_initialized_0). - Future initializedConnectionsCount() async { - final res = await _initialized().toDart; - - return res.toDartInt; - } -} diff --git a/test_format/lib/src/pool_client.dart b/test_format/lib/src/pool_client.dart deleted file mode 100644 index 0adf5db..0000000 --- a/test_format/lib/src/pool_client.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/client_configuration.dart'; -import 'package:deno_postgres_interop/src/query_client.dart'; - -/// [deno-postgres@v​0.17.0/PoolClient](https://deno.land/x/postgres@v0.17.0/mod.ts?s=PoolClient). -@JS('PoolClient') -extension type PoolClient._(JSObject _) implements QueryClient, JSObject { - /// [deno-postgres@v​0.17.0/PoolClient/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=PoolClient#ctor_0). - factory PoolClient( - ClientConfiguration config, - void Function() releaseCallback, - ) => PoolClient._internal(config, releaseCallback.toJS); - - @JS('PoolClient') - external factory PoolClient._internal( - ClientConfiguration config, - JSFunction releaseCallback, - ); - - /// [deno-postgres@v​0.17.0/PoolClient/constructor/release](https://deno.land/x/postgres@v0.17.0/mod.ts?s=PoolClient#method_release_0). - external void release(); -} diff --git a/test_format/lib/src/promise.dart b/test_format/lib/src/promise.dart deleted file mode 100644 index fc928f1..0000000 --- a/test_format/lib/src/promise.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'dart:js_interop'; - -/// JS [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). -typedef Promise = JSPromise; - -/// Convert darts [Future] to js' [Promise]. -JSPromise futureToPromise(Future future) { - return future.then((value) => value?.jsify()).toJS; -} diff --git a/test_format/lib/src/query.dart b/test_format/lib/src/query.dart deleted file mode 100644 index 5e889c5..0000000 --- a/test_format/lib/src/query.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/client_common.dart'; -import 'package:deno_postgres_interop/src/encoded_arg.dart'; -import 'package:deno_postgres_interop/src/query_object_options.dart'; -import 'package:deno_postgres_interop/src/result_type.dart'; - -/// [deno-postgres@v​0.17.0/Query](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query). -@JS('Query') -extension type Query._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_0). - /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_2). - factory Query.withConfig({ - required QueryObjectOptions config, - required ResultType resultType, - QueryArguments? args, - }) => Query._internal( - config, - resultType.index, - args?.jsify(), - ); - - /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_1). - /// [deno-postgres@v​0.17.0/Query/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#ctor_2). - factory Query.withArgs({ - required String text, - required ResultType resultType, - QueryArguments? args, - }) => Query._internal( - text.toJS, - resultType.index, - args?.jsify(), - ); - - @JS('Query') - external factory Query._internal( - JSAny configOrText, - int resultType, - JSAny? args, - ); - - @JS('args') - external JSArray get _args; - @JS('args') - external set _args(JSArray val); - - /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_args). - List get args => _args.toDart; - set args(List val) => _args = val.toJS; - - @JS('fields') - external JSArray? get _fields; - - /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_fields). - List? get fields => _fields?.toDart.map((e) => e.toDart).toList(); - - /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_text). - external String get text; - - /// [deno-postgres@v​0.17.0/Query/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_camelcase). - @JS('camelcase') - external bool? get isCamelCase; - - @JS('result_type') - external int get _resultType; - - /// [deno-postgres@v​0.17.0/Query/result_type](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=Query#prop_result_type). - ResultType get resultType => ResultType.values[_resultType]; -} diff --git a/test_format/lib/src/query_array_result.dart b/test_format/lib/src/query_array_result.dart deleted file mode 100644 index c319b53..0000000 --- a/test_format/lib/src/query_array_result.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/query.dart'; -import 'package:deno_postgres_interop/src/query_result.dart'; - -/// [deno-postgres@v​0.17.0/QueryArrayResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryArrayResult). -@JS('QueryArrayResult') -extension type QueryArrayResult>._(JSObject _) - implements QueryResult, JSObject { - /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). - external factory QueryArrayResult(Query query); - - @JS('rows') - external JSArray> get _rows; - - /// [deno-postgres@v​0.17.0/QueryArrayResult/rows](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryArrayResult#prop_rows). - List get rows => _rows.toDart - .map((row) => row.toDart.map((e) => e?.dartify()).toList() as T) - .toList(); -} diff --git a/test_format/lib/src/query_client.dart b/test_format/lib/src/query_client.dart deleted file mode 100644 index 541bb52..0000000 --- a/test_format/lib/src/query_client.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/client_common.dart'; -import 'package:deno_postgres_interop/src/connection.dart'; -import 'package:deno_postgres_interop/src/query_array_result.dart'; -import 'package:deno_postgres_interop/src/query_object_options.dart'; -import 'package:deno_postgres_interop/src/query_object_result.dart'; -import 'package:deno_postgres_interop/src/session.dart'; -import 'package:deno_postgres_interop/src/transaction.dart'; -import 'package:deno_postgres_interop/src/transaction_options.dart'; - -/// [deno-postgres@v​0.17.0/QueryClient](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient). -@JS('QueryClient') -extension type QueryClient._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/QueryClient/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#ctor_0). - external factory QueryClient(Connection connection); - - /// [deno-postgres@v​0.17.0/QueryClient/session](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#accessor_session). - external Session get session; - - /// [deno-postgres@v​0.17.0/QueryClient/connected](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#accessor_connected). - @JS('connected') - external bool get isConnected; - - @JS('closeConnection') - external JSPromise _closeConnection(); - - /// [deno-postgres@v​0.17.0/QueryClient/closeConnection](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_closeConnection_0). - Future closeConnection() async { - await _closeConnection().toDart; - } - - /// [deno-postgres@v​0.17.0/QueryClient/resetSessionMetadata](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_resetSessionMetadata_0). - external void resetSessionMetadata(); - - @JS('connect') - external JSPromise _connect(); - - /// [deno-postgres@v​0.17.0/QueryClient/connect](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_connect_0). - Future connect() async { - await _connect().toDart; - } - - @JS('end') - external JSPromise _end(); - - /// [deno-postgres@v​0.17.0/QueryClient/end](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_end_0). - Future end() async { - await _end().toDart; - } - - /// [deno-postgres@v​0.17.0/QueryClient/createTransaction](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_createTransaction_0). - external Transaction createTransaction( - String name, [ - TransactionOptions? options, - ]); - - /// Convinience wrapper for [createTransaction], - /// [Transaction.begin], - /// and [Transaction.commit]. - Future transaction( - String name, - Future Function(Transaction) f, [ - TransactionOptions? options, - ]) async { - final transaction = createTransaction(name, options); - await transaction.begin(); - final result = await f(transaction); - await transaction.commit(); - - return result; - } - - /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_0). - Future> queryArray>( - String query, [ - QueryArguments? args, - ]) => ClientCommon.queryArray(this, query, args); - - /// [deno-postgres@v​0.17.0/QueryClient/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryArray_1). - Future> queryArrayWithOptions>( - QueryObjectOptions config, - ) => ClientCommon.queryArrayWithOptions(this, config); - - /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_0). - Future> queryObject( - String query, [ - QueryArguments? arguments, - ]) => ClientCommon.queryObject(this, query, arguments); - - /// [deno-postgres@v​0.17.0/QueryClient/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#method_queryObject_1). - Future> queryObjectWithOptions( - QueryObjectOptions config, - ) => ClientCommon.queryObjectWithOptions(this, config); -} diff --git a/test_format/lib/src/query_object_options.dart b/test_format/lib/src/query_object_options.dart deleted file mode 100644 index 829addd..0000000 --- a/test_format/lib/src/query_object_options.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/query_options.dart'; - -/// [deno-postgres@v​0.17.0/QueryObjectOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryObjectOptions). -@JS('QueryObjectOptions') -extension type QueryObjectOptions._(JSObject _) - implements QueryOptions, JSObject { - @JS('fields') - external JSArray? get _fields; - - /// [deno-postgres@v​0.17.0/QueryObjectOptions/fields](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#prop_fields). - List? get fields => _fields?.toDart.map((e) => e.toDart).toList(); - - /// [deno-postgres@v​0.17.0/QueryObjectOptions/camelcase](https://deno.land/x/postgres@v0.17.0/mod.ts?s=QueryClient#prop_camelcase). - @JS('camelcase') - external bool? get isCamelCase; - - /// [deno-postgres@v​0.17.0/QueryObjectOptions](https://deno.land/x/postgres@v0.17.0/query/mod.ts?s=QueryObjectOptions). - factory QueryObjectOptions({List? fields, bool? isCamelCase}) => - QueryObjectOptions._( - { - if (isCamelCase != null) 'camelcase': isCamelCase, - if (fields != null) 'fields': fields, - }.jsify()! - as JSObject, - ); -} diff --git a/test_format/lib/src/query_object_result.dart b/test_format/lib/src/query_object_result.dart deleted file mode 100644 index f67d9ec..0000000 --- a/test_format/lib/src/query_object_result.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/query.dart'; -import 'package:deno_postgres_interop/src/query_result.dart'; - -/// [deno-postgres@v​0.17.0/QueryObjectResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult). -@JS('QueryObjectResult') -extension type QueryObjectResult._(JSObject _) - implements QueryResult, JSObject { - /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). - external factory QueryObjectResult(Query query); - - @JS('columns') - external JSArray? get _columns; - - /// [deno-postgres@v​0.17.0/QueryObjectResult/columns](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult#prop_columns). - List? get columns => _columns?.toDart.map((e) => e.toDart).toList(); - - @JS('rows') - external JSArray get _rows; - - /// [deno-postgres@v​0.17.0/QueryObjectResult/rows](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryObjectResult#prop_rows). - List> get rows => (_rows.dartify()! as List) - .cast>() - .map((e) => e.cast()) - .toList(); -} diff --git a/test_format/lib/src/query_options.dart b/test_format/lib/src/query_options.dart deleted file mode 100644 index 9f43218..0000000 --- a/test_format/lib/src/query_options.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/client_common.dart'; -import 'package:deno_postgres_interop/src/encoded_arg.dart'; - -/// [deno-postgres@v​0.17.0/QueryOptions](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions). -@JS('QueryOptions') -extension type QueryOptions._(JSObject _) implements JSObject { - @JS('args') - external JSAny? get _args; - - /// [deno-postgres@v​0.17.0/QueryOptions/args](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_args). - QueryArguments? get args => _args?.dartify(); - - @JS('encoder') - external JSFunction? get _encoder; - - /// [deno-postgres@v​0.17.0/QueryOptions/encoder](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_encoder). - EncodedArg Function(dynamic arg)? get encoder { - final fn = _encoder; - if (fn == null) return null; - - return (Object? arg) => fn.callAsFunction(null, arg?.jsify()); - } - - /// [deno-postgres@v​0.17.0/QueryOptions/name](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_name). - external String? get name; - - /// [deno-postgres@v​0.17.0/QueryOptions/text](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions#prop_text). - external String get text; - - /// [deno-postgres@v​0.17.0/QueryOptions](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryOptions). - factory QueryOptions({ - required String text, - QueryArguments? args, - EncodedArg Function(dynamic arg)? encoder, - String? name, - }) => QueryOptions._( - { - if (args != null) 'args': args, - if (encoder != null) - 'encoder': ((JSAny? arg) => encoder(arg?.dartify())).toJS, - if (name != null) 'name': name, - 'text': text, - }.jsify()! - as JSObject, - ); -} diff --git a/test_format/lib/src/query_result.dart b/test_format/lib/src/query_result.dart deleted file mode 100644 index 400eeb0..0000000 --- a/test_format/lib/src/query_result.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/command_type.dart'; -import 'package:deno_postgres_interop/src/notice.dart'; -import 'package:deno_postgres_interop/src/query.dart'; -import 'package:deno_postgres_interop/src/row_description.dart'; - -/// [deno-postgres@v​0.17.0/QueryResult](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult). -@JS('QueryResult') -extension type QueryResult._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). - external factory QueryResult(Query query); - - /// [deno-postgres@v​0.17.0/QueryResult/rowCount](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#prop_rowCount). - external int? get rowCount; - - @JS('warnings') - external JSArray get _warnings; - - /// [deno-postgres@v​0.17.0/QueryResult/warnings](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#prop_warnings). - List get warnings => _warnings.toDart; - - /// [deno-postgres@v​0.17.0/QueryResult/constructor](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#ctor_0). - external Query get query; - - /// [deno-postgres@v​0.17.0/QueryResult/rowDescription](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#accessor_rowDescription). - external RowDescription? get rowDescription; - - /// [deno-postgres@v​0.17.0/QueryResult/handleCommandComplete](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#method_handleCommandComplete_0). - external void handleCommandComplete(String commandTag); - - /// [deno-postgres@v​0.17.0/QueryResult/loadColumnDescriptions](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#method_loadColumnDescriptions_0). - external void loadColumnDescriptions(RowDescription description); - - @JS('insertRow') - external void _insertRow(JSArray> row); - - /// [deno-postgres@v​0.17.0/QueryResult/insertRow](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#method_insertRow_0). - void insertRow(List> row) => _insertRow( - row.map((inner) => inner.map((e) => e.toJS).toList().toJS).toList().toJS, - ); - - @JS('command') - external String? get _command; - - /// [deno-postgres@v​0.17.0/QueryResult/command](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=QueryResult#prop_command). - CommandType get command => CommandType.parse(_command ?? ''); -} diff --git a/test_format/lib/src/result_type.dart b/test_format/lib/src/result_type.dart deleted file mode 100644 index fc9611c..0000000 --- a/test_format/lib/src/result_type.dart +++ /dev/null @@ -1,8 +0,0 @@ -/// [deno-postgres@v​0.17.0/ResultType](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=ResultType). -enum ResultType { - /// array. - array, - - /// object. - object, -} diff --git a/test_format/lib/src/row_description.dart b/test_format/lib/src/row_description.dart deleted file mode 100644 index f05b990..0000000 --- a/test_format/lib/src/row_description.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/column.dart'; - -/// [deno-postgres@v​0.17.0/RowDescription](https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription). -@JS('RowDescription') -extension type RowDescription._(JSObject _) implements JSObject { - /// https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription#ctor_0 - factory RowDescription(int columnCount, List columns) => - RowDescription._internal(columnCount, columns.toJS); - - @JS('RowDescription') - external factory RowDescription._internal( - int columnCount, - JSArray columns, - ); - - /// https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription#ctor_0 - external int get columnCount; - - @JS('columns') - external JSArray get _columns; - - /// https://deno.land/x/postgres@v0.17.0/query/query.ts?s=RowDescription#ctor_0 - List get columns => _columns.toDart; -} diff --git a/test_format/lib/src/savepoint.dart b/test_format/lib/src/savepoint.dart deleted file mode 100644 index 24d4750..0000000 --- a/test_format/lib/src/savepoint.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/promise.dart'; - -/// [deno-postgres@v​0.17.0/Savepoint](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint). -@JS('Savepoint') -extension type Savepoint._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/Savepoint/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#ctor_0). - factory Savepoint( - String name, - Future Function(String name) updateCallback, - Future Function(String name) releaseCallback, - ) => Savepoint._internal( - name, - ((JSString name) => futureToPromise(updateCallback(name.toDart))).toJS, - ((JSString name) => futureToPromise(releaseCallback(name.toDart))).toJS, - ); - - @JS('Savepoint') - external factory Savepoint._internal( - String name, - JSFunction updateCallback, - JSFunction releaseCallback, - ); - - /// [deno-postgres@v​0.17.0/Savepoint/instances](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#accessor_instances). - @JS('instances') - external int get instancesCount; - - @JS('release') - external JSPromise _release(); - - /// [deno-postgres@v​0.17.0/Savepoint/instances](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#method_release_0). - Future release() async { - await _release().toDart; - } - - @JS('update') - external JSPromise _update(); - - /// [deno-postgres@v​0.17.0/Savepoint/instances](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Savepoint#method_update_0). - Future update() async { - await _update().toDart; - } -} diff --git a/test_format/lib/src/session.dart b/test_format/lib/src/session.dart deleted file mode 100644 index 9474232..0000000 --- a/test_format/lib/src/session.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/transport.dart'; - -/// [deno-postgres@v​0.17.0/Session](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session). -@JS('Session') -extension type Session._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/Session/pid](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_pid) - external int? get pid; - - /// [deno-postgres@v​0.17.0/Session/tls](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_tls) - external bool? get tls; - - /// [deno-postgres@v​0.17.0/Session/current_transaction](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_current_transaction) - @JS('current_transaction') - external String? get currentTransacton; - - @JS('transport') - external String? get _transport; - - /// [deno-postgres@v​0.17.0/Session/transport](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Session#prop_transport) - Transport? get transport { - final string = _transport; - - return string == null ? null : Transport.parse(string); - } -} diff --git a/test_format/lib/src/tls_options.dart b/test_format/lib/src/tls_options.dart deleted file mode 100644 index fa26391..0000000 --- a/test_format/lib/src/tls_options.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'dart:js_interop'; - -/// [deno-postgres@v​0.17.0/TLSOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions). -@JS('TLSOptions') -extension type TLSOptions._(JSObject _) implements JSObject { - @JS('caCertificates') - external JSArray get _caCertificates; - - /// [deno-postgres@v​0.17.0/TLSOptions/caCertificates](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_caCertificates). - List get caCertificates => - _caCertificates.toDart.map((e) => e.toDart).toList(); - - /// [deno-postgres@v​0.17.0/TLSOptions/enabled](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_enabled). - @JS('enabled') - external bool get isEnabled; - - /// [deno-postgres@v​0.17.0/TLSOptions/enforce](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions#prop_enforce). - @JS('enforce') - external bool get isEnforced; - - /// [deno-postgres@v​0.17.0/TLSOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TLSOptions). - factory TLSOptions({ - required List caCertificates, - required bool isEnabled, - required bool isEnforced, - }) => TLSOptions._( - { - 'caCertificates': caCertificates, - 'enabled': isEnabled, - 'enforce': isEnforced, - }.jsify()! - as JSObject, - ); -} diff --git a/test_format/lib/src/transaction.dart b/test_format/lib/src/transaction.dart deleted file mode 100644 index 45de8d6..0000000 --- a/test_format/lib/src/transaction.dart +++ /dev/null @@ -1,150 +0,0 @@ -import 'dart:js_interop'; -import 'dart:js_interop_unsafe'; - -import 'package:deno_postgres_interop/src/client_common.dart'; -import 'package:deno_postgres_interop/src/isolation_level.dart'; -import 'package:deno_postgres_interop/src/promise.dart'; -import 'package:deno_postgres_interop/src/query.dart'; -import 'package:deno_postgres_interop/src/query_array_result.dart'; -import 'package:deno_postgres_interop/src/query_client.dart'; -import 'package:deno_postgres_interop/src/query_object_options.dart'; -import 'package:deno_postgres_interop/src/query_object_result.dart'; -import 'package:deno_postgres_interop/src/query_result.dart'; -import 'package:deno_postgres_interop/src/savepoint.dart'; -import 'package:deno_postgres_interop/src/transaction_options.dart'; - -/// [deno-postgres@v​0.17.0/Transaction](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction). -@JS('Transaction') -extension type Transaction._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/Transaction/construtor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#ctor_0). - factory Transaction({ - required String name, - required QueryClient client, - required Future Function(Query query) executeQueryCallback, - required void Function(String? name) updateClientLockCallback, - TransactionOptions? options, - }) => _createTransaction( - name.toJS, - options, - client, - ((Query query) => futureToPromise(executeQueryCallback(query))).toJS, - ((JSString? name) => updateClientLockCallback(name?.toDart)).toJS, - ); - - static Transaction _createTransaction( - JSString name, - TransactionOptions? options, - QueryClient client, - JSFunction executeQueryCallback, - JSFunction updateClientLockCallback, - ) { - final constructor = globalContext['Transaction'] as JSFunction?; - if (constructor == null) { - throw StateError('Transaction constructor not found in global context.'); - } - - return constructor.callAsConstructorVarArgs([ - name, - options, - client, - executeQueryCallback, - updateClientLockCallback, - ]); - } - - @JS('savepoints') - external JSArray get _savepoints; - - /// [deno-postgres@v​0.17.0/Transaction/savepoints](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#accessor_savepoints). - List get savepoints => _savepoints.toDart; - - /// [deno-postgres@v​0.17.0/Transaction/getSavepoint](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_getSavepoint_0). - external Savepoint? getSavepoint(String name); - - @JS('isolation_name') - external String get _isolationName; - - /// [deno-postgres@v​0.17.0/Transaction/isolation_level](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#accessor_isolation_level). - IsolationLevel get isolationLevel => IsolationLevel.parse(_isolationName); - - @JS('begin') - external JSPromise _begin(); - - /// [deno-postgres@v​0.17.0/Transaction/begin](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_begin_0). - Future begin() async { - await _begin().toDart; - } - - @JS('commit') - external JSPromise _commit([JSObject? options]); - - /// [deno-postgres@v​0.17.0/Transaction/commit](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_commit_0). - Future commit({bool? chain}) async { - await _commit( - chain != null ? {'chain': chain}.jsify()! as JSObject : null, - ).toDart; - } - - @JS('getSavepoints') - external JSArray _getSavepoints(); - - /// [deno-postgres@v​0.17.0/Transaction/getSavepoints](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_getSavepoints_0). - List getActiveSavepointsNames() => - _getSavepoints().toDart.map((e) => e.toDart).toList(); - - @JS('getSnapshot') - external JSPromise _getSnapshot(); - - /// [deno-postgres@v​0.17.0/Transaction/getSnapshot](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_getSnapshot_0). - Future get snapshot async { - final res = await _getSnapshot().toDart; - - return res.toDart; - } - - /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_0). - Future> queryArray>( - String query, [ - QueryArguments? args, - ]) => ClientCommon.queryArray(this, query, args); - - /// [deno-postgres@v​0.17.0/Transaction/queryArray](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryArray_1). - Future> queryArrayWithOptions>( - QueryObjectOptions config, - ) => ClientCommon.queryArrayWithOptions(this, config); - - @JS('rollback') - external JSPromise _rollback([JSAny? savepointOrOptions]); - - /// [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_0). - Future rollback([Savepoint? savepoint]) async { - await _rollback(savepoint).toDart; - } - - /// [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_2). - Future rollbackWithChain() async { - await _rollback({'chain': true}.jsify()).toDart; - } - - /// [deno-postgres@v​0.17.0/Transaction/rollback](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_rollback_0). - Future rollbackByName(String savepoint) async { - await _rollback(savepoint.toJS).toDart; - } - - @JS('savepoint') - external JSPromise _savepoint(String name); - - /// [deno-postgres@v​0.17.0/Transaction/savepoint](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_savepoint_0). - Future createSavepoint(String name) => _savepoint(name).toDart; - - /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_0). - Future> queryObject( - String query, [ - QueryArguments? arguments, - ]) => ClientCommon.queryObject(this, query, arguments); - - /// [deno-postgres@v​0.17.0/Transaction/queryObject](https://deno.land/x/postgres@v0.17.0/mod.ts?s=Transaction#method_queryObject_1). - Future> queryObjectWithOptions( - QueryObjectOptions config, - ) => ClientCommon.queryObjectWithOptions(this, config); -} diff --git a/test_format/lib/src/transaction_options.dart b/test_format/lib/src/transaction_options.dart deleted file mode 100644 index dfc8075..0000000 --- a/test_format/lib/src/transaction_options.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'dart:js_interop'; - -import 'package:deno_postgres_interop/src/isolation_level.dart'; - -/// [deno-postgres@v​0.17.0/TransactionOptions](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). -@JS('TransactionOptions') -extension type TransactionOptions._(JSObject _) implements JSObject { - /// [deno-postgres@v​0.17.0/TransactionOptions/snapshot](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). - external String? get snapshot; - - @JS('isolation_level') - external String? get _isolationLevel; - - /// [deno-postgres@v​0.17.0/TransactionOptions/isolation_level](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). - IsolationLevel? get isolationLevel { - final jsProperty = _isolationLevel; - - return jsProperty == null ? null : IsolationLevel.parse(jsProperty); - } - - /// [deno-postgres@v​0.17.0/TransactionOptions/read_only](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). - @JS('read_only') - external bool? get isReadOnly; - - /// [deno-postgres@v​0.17.0/TransactionOptions/constructor](https://deno.land/x/postgres@v0.17.0/mod.ts?s=TransactionOptions). - factory TransactionOptions({ - IsolationLevel? isolationLevel, - bool? isReadOnly, - String? snapshot, - }) => TransactionOptions._( - { - if (isolationLevel != null) 'isolation_level': isolationLevel.name, - if (isReadOnly != null) 'read_only': isReadOnly, - if (snapshot != null) 'snapshot': snapshot, - }.jsify()! - as JSObject, - ); -} diff --git a/test_format/lib/src/transport.dart b/test_format/lib/src/transport.dart deleted file mode 100644 index 1223791..0000000 --- a/test_format/lib/src/transport.dart +++ /dev/null @@ -1,12 +0,0 @@ -/// TCP | SOCKET. -enum Transport { - /// tcp. - tcp, - - /// socket. - socket; - - /// Parses a string containing an [Transport] literal into its instance. - static Transport parse(String string) => - values.firstWhere((e) => e.name == string); -} diff --git a/test_format/lib/src/undefined.dart b/test_format/lib/src/undefined.dart deleted file mode 100644 index 9dd3457..0000000 --- a/test_format/lib/src/undefined.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'dart:js_interop'; - -/// The js' undefined. -@JS() -external JSAny? get undefined; diff --git a/test_format/lib/src/util.dart b/test_format/lib/src/util.dart deleted file mode 100644 index d84d5e0..0000000 --- a/test_format/lib/src/util.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'dart:js_interop'; -import 'dart:js_interop_unsafe'; - -/// Convenience wrapper for promise to future call. -Future callFutureMethod( - JSObject o, - String method, [ - List args = const [], -]) async { - final jsArgs = args.map((e) => e?.jsify()).toList(); - final promise = o.callMethodVarArgs>( - method.toJS, - jsArgs, - ); - final result = await promise.toDart; - - return result?.dartify() as T; -} From 4b0da9d1324a1fd40cdf7aca3e6760d4893dce2e Mon Sep 17 00:00:00 2001 From: Illia Aihistov Date: Tue, 4 Aug 2026 20:55:25 +0300 Subject: [PATCH 9/9] chore: add local formatter rules to analysis_options.yaml --- analysis_options.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/analysis_options.yaml b/analysis_options.yaml index dd9518d..aa6bc53 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -14,3 +14,7 @@ linter: prefer_foreach: true prefer_single_quotes: true +formatter: + trailing_commas: preserve + +