Skip to content

Commit 3b3efee

Browse files
PoolClient (#17)
* init * upd * init * part * more prope * upd * fix * todos * upd * constructor * parse * todo * upd * upd * fix comments * upd * upd * upd * constructor * upd * upd * export * tls options * finish? * upd * last
1 parent 611000c commit 3b3efee

12 files changed

+464
-4
lines changed

lib/deno_postgres_interop.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,21 @@
22
library;
33

44
export 'src/client.dart';
5+
export 'src/client_configuration.dart';
6+
export 'src/client_options.dart';
57
export 'src/command_type.dart';
8+
export 'src/connection_options.dart';
69
export 'src/isolation_level.dart';
10+
export 'src/partial/partial_connection_options.dart';
11+
export 'src/partial/partial_tls_options.dart';
12+
export 'src/pool.dart';
13+
export 'src/pool_client.dart';
714
export 'src/query.dart';
815
export 'src/query_client.dart';
916
export 'src/query_object.dart' show QueryArguments;
1017
export 'src/query_object_result.dart';
1118
export 'src/query_result.dart';
19+
export 'src/tls_options.dart';
1220
export 'src/transaction.dart';
1321
export 'src/transaction_options.dart';
22+
export 'src/transport.dart';

lib/src/client_configuration.dart

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import 'dart:js_interop';
2+
import 'dart:js_util';
3+
4+
import 'package:deno_postgres_interop/src/connection_options.dart';
5+
import 'package:deno_postgres_interop/src/tls_options.dart';
6+
import 'package:deno_postgres_interop/src/transport.dart';
7+
8+
/// [[email protected]/ClientConfiguration](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration).
9+
@JS()
10+
class ClientConfiguration {
11+
/// [[email protected]/ClientConfiguration/applicationName](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration#prop_applicationName).
12+
external String get applicationName;
13+
14+
/// [[email protected]/ClientConfiguration/connection](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration#prop_connection).
15+
external ConnectionOptions get connection;
16+
17+
/// [[email protected]/ClientConfiguration/database](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration#prop_database).
18+
external String get database;
19+
20+
/// [[email protected]/ClientConfiguration/hostname](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration#prop_hostname).
21+
external String get hostname;
22+
23+
/// [[email protected]/ClientConfiguration/options](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration#prop_options).
24+
external Map<String, String> get options;
25+
26+
/// [[email protected]/ClientConfiguration/password](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration#prop_password).
27+
external String? get password;
28+
29+
/// [[email protected]/ClientConfiguration/port](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration#prop_port).
30+
external int get port;
31+
32+
/// [[email protected]/ClientConfiguration/tls](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration#prop_tls).
33+
external TLSOptions get tls;
34+
35+
/// [[email protected]/ClientConfiguration/user](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration#prop_user).
36+
external String get user;
37+
38+
/// [[email protected]/ClientConfiguration](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration).
39+
factory ClientConfiguration({
40+
required String applicationName,
41+
required ConnectionOptions connection,
42+
required String database,
43+
required String hostname,
44+
required String options,
45+
required int port,
46+
required TLSOptions tls,
47+
required String user,
48+
required Transport hostType,
49+
String? password,
50+
}) =>
51+
jsify({
52+
'applicationName': applicationName,
53+
'connection': connection,
54+
'database': database,
55+
'hostname': hostname,
56+
'options': options,
57+
if (password != null) 'password': password,
58+
'port': port,
59+
'tls': tls,
60+
'user': user,
61+
'hostType': hostType.name,
62+
}) as ClientConfiguration;
63+
}
64+
65+
/// [[email protected]/ClientConfiguration](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration).
66+
extension ClientConfigurationProps on ClientConfiguration {
67+
/// [[email protected]/ClientConfiguration/host_type](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ClientConfiguration#prop_host_type).
68+
Transport get hostType => Transport.parse(getProperty(this, 'host_type'));
69+
}

lib/src/client_options.dart

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
import 'dart:js_interop';
2+
import 'dart:js_util';
3+
4+
import 'package:deno_postgres_interop/src/partial/partial_connection_options.dart';
5+
import 'package:deno_postgres_interop/src/partial/partial_tls_options.dart';
6+
import 'package:deno_postgres_interop/src/transport.dart';
7+
8+
/// [[email protected]/ClientOptions](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions).
9+
@JS()
10+
class ClientOptions {
11+
/// [[email protected]/ClientOptions/applicationName](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_applicationName).
12+
external String? get applicationName;
13+
14+
/// [[email protected]/ClientOptions/database](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_database).
15+
external String? get database;
16+
17+
/// [[email protected]/ClientOptions/hostname](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_hostname).
18+
external String? get hostname;
19+
20+
/// [[email protected]/ClientOptions/password](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_password).
21+
external String? get password;
22+
23+
/// [[email protected]/ClientOptions/user](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_applicationName/user).
24+
external String? get user;
25+
26+
/// [[email protected]/ClientOptions](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions).
27+
factory ClientOptions({
28+
String? applicationName,
29+
PartialConnectionOptions? connection,
30+
String? database,
31+
String? hostname,
32+
Transport? hostType,
33+
String? optionsString,
34+
Map<String, String>? optionsMap,
35+
String? password,
36+
String? portString,
37+
int? port,
38+
PartialTLSOptions? tls,
39+
String? user,
40+
}) {
41+
assert(optionsString == null || optionsMap == null);
42+
assert(portString == null || port == null);
43+
44+
return jsify(
45+
{
46+
if (applicationName != null) 'applicationName': applicationName,
47+
if (connection != null) 'connection': jsify(connection.asMap()),
48+
if (database != null) 'database': database,
49+
if (hostname != null) 'hostname': hostname,
50+
if (hostType != null) 'host_type': hostType.name,
51+
if (optionsString != null)
52+
'options': optionsString
53+
else if (optionsMap != null)
54+
'options': jsify(optionsMap),
55+
if (password != null) 'password': password,
56+
if (portString != null)
57+
'port': portString
58+
else if (port != null)
59+
'port': port,
60+
if (tls != null) 'tls': jsify(tls.asMap()),
61+
if (user != null) 'user': user,
62+
},
63+
) as ClientOptions;
64+
}
65+
}
66+
67+
/// [[email protected]/ClientOptions](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions).
68+
extension ClientOptionsProps on ClientOptions {
69+
/// [[email protected]/ClientOptions/host_type](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_host_type).
70+
Transport get hostType => Transport.parse(getProperty(this, 'host_type'));
71+
72+
/// [[email protected]/ClientOptions/options](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_options).
73+
///
74+
/// Either this or [optionsMap] is null.
75+
String? get optionsString {
76+
final prop = getProperty(this, 'options');
77+
78+
return prop is String ? prop : null;
79+
}
80+
81+
/// [[email protected]/ClientOptions/options](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_options).
82+
///
83+
/// Either this or [optionsString] is null.
84+
Map<String, String>? get optionsMap {
85+
final prop = getProperty(this, 'options');
86+
87+
return prop is String ? null : prop as Map<String, String>;
88+
}
89+
90+
/// [[email protected]/ClientOptions/port](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_port).
91+
///
92+
/// Either this or [port] is null.
93+
String? get portString {
94+
final prop = getProperty(this, 'port');
95+
96+
return prop is String ? prop : null;
97+
}
98+
99+
/// [[email protected]/ClientOptions/port](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_port).
100+
///
101+
/// Either this or [portString] is null.
102+
int? get port {
103+
final prop = getProperty(this, 'port');
104+
105+
return prop is int ? prop : null;
106+
}
107+
108+
/// [[email protected]/ClientOptions/connection](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_connection).
109+
PartialConnectionOptions? get connection {
110+
final map =
111+
dartify(getProperty(this, 'connection')) as Map<dynamic, dynamic>?;
112+
113+
return map == null ? null : PartialConnectionOptions.fromMap(map);
114+
}
115+
116+
/// [[email protected]/ClientOptions/tls](https://deno.land/x/[email protected]/mod.ts?s=ClientOptions#prop_tls).
117+
PartialTLSOptions? get tls {
118+
final map =
119+
dartify(getProperty(this, 'connection')) as Map<dynamic, dynamic>?;
120+
121+
if (map == null) return null;
122+
123+
return PartialTLSOptions(
124+
caCertificates: map['caCertificates'] as List<String>?,
125+
isEnabled: map['enabled'] as bool?,
126+
isEnforced: map['enforced'] as bool?,
127+
);
128+
}
129+
}

lib/src/connection_options.dart

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import 'dart:js_interop';
2+
import 'dart:js_util';
3+
4+
import 'package:deno_postgres_interop/src/partial/partial_connection_options.dart';
5+
6+
/// [[email protected]/ConnectionOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ConnectionOptions).
7+
@JS()
8+
class ConnectionOptions {
9+
/// [[email protected]/ConnectionOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ConnectionOptions#prop_attempts).
10+
external int get attempts;
11+
12+
/// [[email protected]/ConnectionOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ConnectionOptions).
13+
factory ConnectionOptions({
14+
required int attempts,
15+
int Function(int previousInterval)? nextInterval,
16+
int? interval,
17+
}) {
18+
return jsify(
19+
PartialConnectionOptions(
20+
attempts: attempts,
21+
nextInterval: nextInterval,
22+
interval: interval,
23+
).asMap(),
24+
) as ConnectionOptions;
25+
}
26+
}
27+
28+
/// [[email protected]/ConnectionOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ConnectionOptions).
29+
extension ConnectionOptionsProps on ConnectionOptions {
30+
/// [[email protected]/ConnectionOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ConnectionOptions#prop_interval).
31+
///
32+
/// Either this or [interval] is null.
33+
int Function(int previousInterval)? get nextInterval {
34+
final prop = getProperty(this, 'interval');
35+
36+
return prop is int ? null : prop as int Function(int previousInterval);
37+
}
38+
39+
/// [[email protected]/ConnectionOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ConnectionOptions#prop_interval).
40+
///
41+
/// Either this or [nextInterval] is null.
42+
int? get interval {
43+
final prop = getProperty(this, 'interval');
44+
45+
return prop is int ? prop : null;
46+
}
47+
}

lib/src/isolation_level.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
/// [[email protected]/Transaction Isolation](https://www.postgresql.org/docs/current/transaction-iso.html).
1+
/// [Transaction Isolation](https://www.postgresql.org/docs/current/transaction-iso.html).
22
enum IsolationLevel {
3-
/// [[email protected]/Transaction Isolation/Read Committed Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-READ-COMMITTED).
3+
/// [Transaction Isolation/Read Committed Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-READ-COMMITTED).
44
readCommitted,
55

6-
/// [[email protected]/Transaction Isolation/Repeatable Read Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-REPEATABLE-READ).
6+
/// [Transaction Isolation/Repeatable Read Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-REPEATABLE-READ).
77
repeatableRead,
88

9-
/// [[email protected]/Transaction Isolation/Serializable Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-SERIALIZABLE).
9+
/// [Transaction Isolation/Serializable Isolation Level](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-SERIALIZABLE).
1010
serializable;
1111

1212
/// Parses a string containing an [IsolationLevel] literal into its instance.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/// [[email protected]/ConnectionOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ConnectionOptions).
2+
class PartialConnectionOptions {
3+
/// [[email protected]/ConnectionOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ConnectionOptions#prop_attempts).
4+
final int? attempts;
5+
6+
/// [[email protected]/ConnectionOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ConnectionOptions#prop_interval).
7+
///
8+
/// Either this or [interval] is null.
9+
final int Function(int previousInterval)? nextInterval;
10+
11+
/// [[email protected]/ConnectionOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=ConnectionOptions#prop_interval).
12+
///
13+
/// Either this or [nextInterval] is null.
14+
final int? interval;
15+
16+
/// constructor.
17+
PartialConnectionOptions({
18+
this.attempts,
19+
this.nextInterval,
20+
this.interval,
21+
}) : assert(interval == null || nextInterval == null);
22+
23+
/// used for interop.
24+
factory PartialConnectionOptions.fromMap(Map<dynamic, dynamic> map) {
25+
final intervalProp = map['interval'];
26+
27+
return PartialConnectionOptions(
28+
attempts: map['attempts'] as int?,
29+
interval: intervalProp is int ? intervalProp : null,
30+
nextInterval: intervalProp is! int
31+
? intervalProp as int Function(int previousInterval)?
32+
: null,
33+
);
34+
}
35+
36+
/// used for jsify.
37+
Map<String, dynamic> asMap() {
38+
return {
39+
if (attempts != null) 'attempts': attempts,
40+
if (nextInterval != null)
41+
'interval': nextInterval
42+
else if (interval != null)
43+
'interval': interval,
44+
};
45+
}
46+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/// [[email protected]/TLSOptions](https://deno.land/x/[email protected]/connection/connection_params.ts?s=TLSOptions).
2+
class PartialTLSOptions {
3+
/// [[email protected]/TLSOptions/enabled](https://deno.land/x/[email protected]/connection/connection_params.ts?s=TLSOptions#prop_enabled).
4+
final bool? isEnabled;
5+
6+
/// [[email protected]/TLSOptions/enfroce](https://deno.land/x/[email protected]/connection/connection_params.ts?s=TLSOptions#prop_enfroce).
7+
final bool? isEnforced;
8+
9+
/// [[email protected]/TLSOptions/caCertificates](https://deno.land/x/[email protected]/connection/connection_params.ts?s=TLSOptions#prop_caCertificates).
10+
final List<String>? caCertificates;
11+
12+
/// constructor.
13+
PartialTLSOptions({
14+
this.isEnabled,
15+
this.isEnforced,
16+
this.caCertificates,
17+
});
18+
19+
/// used for interop.
20+
PartialTLSOptions.fromMap(Map<dynamic, dynamic> map)
21+
: caCertificates = map['caCertificates'] as List<String>?,
22+
isEnabled = map['enabled'] as bool?,
23+
isEnforced = map['enforced'] as bool?;
24+
25+
/// used for jsify.
26+
Map<String, dynamic> asMap() {
27+
return {
28+
if (isEnabled != null) 'enabled': isEnabled,
29+
if (isEnforced != null) 'enforce': isEnforced,
30+
if (caCertificates != null) 'caCertificates': caCertificates,
31+
};
32+
}
33+
}

0 commit comments

Comments
 (0)