From 789adf60591d9493b4a2a3f7d4163afda1e98b41 Mon Sep 17 00:00:00 2001 From: danylo-safonov-solid Date: Thu, 21 Sep 2023 21:49:09 +0300 Subject: [PATCH] jserror --- example/lib/main.dart | 60 ++++++++++++++++++++++++++---------- lib/src/errors/js_error.dart | 14 +++++++++ 2 files changed, 58 insertions(+), 16 deletions(-) create mode 100644 lib/src/errors/js_error.dart diff --git a/example/lib/main.dart b/example/lib/main.dart index a837448..8544d9e 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,3 +1,6 @@ +import 'dart:js_interop'; +import 'dart:js_util'; + import 'package:deno_postgres_interop/deno_postgres_interop.dart'; import 'package:supabase_functions/supabase_functions.dart'; @@ -9,34 +12,46 @@ Future fetch(Request _) async { final client = Client(dbUrl); await client.connect(); - final result = await client.transaction( - 'transaction', - transaction, - TransactionOptions(isolationLevel: IsolationLevel.serializable), - ); - await client.end(); + try { + final result = await client.transaction( + 'transaction', + transaction, + TransactionOptions(isolationLevel: IsolationLevel.serializable), + ); + await client.end(); - return Response( - [ - result.command == CommandType.select, - 'warnings = ${result.warnings}', - ''' + return Response( + [ + result.command == CommandType.select, + 'warnings = ${result.warnings}', + ''' rowDescription = columnCount = ${result.rowDescription?.columnCount} columns = ${result.rowDescription?.columns.map((e) => ' name = ${e.name}').join('\n')} ''', - result.query.resultType, - ...result.rows.map(rowToPrettyString), - ].join('\n\n'), - ); + result.query.resultType, + ...result.rows.map(rowToPrettyString), + ].join('\n\n'), + ); + } on JSError catch (e) { + await client.end(); + + return Response(''' +${e.name} +${e.cause} +${e.message} +$e +'''); + } } Future> transaction(Transaction transaction) async { await transaction.queryObject( 'UPDATE public."User" ' r'SET username=$1 ' - "WHERE last_name='user'", + "WHERE last_name='user'" + 'AND y = z', ["'user${transaction.hashCode}'"], ); await Future.delayed(const Duration(seconds: 10)); @@ -48,3 +63,16 @@ String rowToPrettyString(Map row) => row .toString() .replaceAll(', ', '\n') .replaceAllMapped(RegExp(r'\{|\}'), (_) => ''); + +/// [js/Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error). +@JS('Error') +class JSError { + /// [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; + + /// [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/js_error.dart b/lib/src/errors/js_error.dart new file mode 100644 index 0000000..3b5474c --- /dev/null +++ b/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') +class JSError { + /// [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; + + /// [js/Error/message](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message). + external String get message; +}