Skip to content

Commit e5f08ff

Browse files
committed
feat: added SurrealWasmMutex class
1 parent 26d2a0c commit e5f08ff

File tree

8 files changed

+172
-7
lines changed

8 files changed

+172
-7
lines changed

example/flutter_console_widget/lib/flutter_console.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ class FlutterConsole extends StatelessWidget {
1616
required this.height,
1717
this.inputBackground = const Color(0xff333333),
1818
this.inputTextColor = Colors.white,
19-
Key? key,
19+
super.key,
2020
this.scrollColor = Colors.grey,
2121
required this.width,
22-
}) : super(key: key);
22+
});
2323

2424
final Color consoleBackground;
2525
final Color consoleTextColor;

example/flutter_console_widget/lib/selectable_colored_text.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ class SelectableColoredText extends StatefulWidget {
1010

1111
const SelectableColoredText(
1212
this.text, {
13-
Key? key,
13+
super.key,
1414
this.style,
1515
required this.selectedTextColor,
1616
required this.selectedTextBackgroundColor,
17-
}) : super(key: key);
17+
});
1818

1919
@override
2020
// ignore: library_private_types_in_public_api

integration_test/patch_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:surrealdb_wasm/surrealdb_wasm.dart';
55
void main({bool wasm = false}) {
66
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
77

8-
final db = SurrealWasm.getInstance();
8+
final db = SurrealWasmMutex.getInstance();
99

1010
setUpAll(() async {
1111
if (wasm) {

integration_test/surrealdb_wasm_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import 'package:surrealdb_wasm/surrealdb_wasm.dart';
88
void main({bool wasm = false}) {
99
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
1010

11-
final db = SurrealWasm.getInstance();
11+
final db = SurrealWasmMutex.getInstance();
1212
//Tests run with local SurrealDB instance started with the command below:
1313
//surreal start memory --log trace --allow-all --auth --user root --pass root
1414
setUpAll(() async {

integration_test/transaction_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import 'package:surrealdb_wasm/surrealdb_wasm.dart';
1010
void main({bool wasm = false}) {
1111
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
1212

13-
final db = SurrealWasm.getInstance();
13+
final db = SurrealWasmMutex.getInstance();
1414

1515
setUpAll(() async {
1616
if (wasm) {

lib/src/surreal_wasm_mutex.dart

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
import 'package:mutex/mutex.dart';
2+
import 'package:surrealdb_js/surrealdb_js.dart';
3+
import 'package:surrealdb_wasm/surrealdb_wasm.dart';
4+
5+
/// The class implemented to workaround the following issue
6+
/// of the surrealdb.wasm:
7+
/// https://github.com/surrealdb/surrealdb.wasm/issues/87.
8+
class SurrealWasmMutex extends Surreal {
9+
/// Instantiation of the [Surreal] class with the [WasmEngine].
10+
SurrealWasmMutex() : super({'engines': WasmEngine()});
11+
final _mutex = Mutex();
12+
13+
/// Returns a new instance of the [Surreal] class
14+
/// with the [SurrealWasmMutex] implementation.
15+
static Surreal getInstance() {
16+
return SurrealWasmMutex();
17+
}
18+
19+
@override
20+
Future<void> let(String key, Object value) async {
21+
await _mutex.protect(() async {
22+
return super.let(key, value);
23+
});
24+
}
25+
26+
@override
27+
Future<void> unset(String key) async {
28+
await _mutex.protect(() async {
29+
return super.unset(key);
30+
});
31+
}
32+
33+
@override
34+
Future<Object?> signup(Map<String, dynamic> credentials) async {
35+
return _mutex.protect(() async {
36+
return super.signup(credentials);
37+
});
38+
}
39+
40+
@override
41+
Future<Object?> signin(Map<String, dynamic> credentials) async {
42+
return _mutex.protect(() async {
43+
return super.signin(credentials);
44+
});
45+
}
46+
47+
@override
48+
Future<void> invalidate() async {
49+
await _mutex.protect(() async {
50+
return super.invalidate();
51+
});
52+
}
53+
54+
@override
55+
Future<void> authenticate(String token) async {
56+
await _mutex.protect(() async {
57+
return super.authenticate(token);
58+
});
59+
}
60+
61+
@override
62+
Future<Object?> info() async {
63+
return _mutex.protect(() async {
64+
return super.info();
65+
});
66+
}
67+
68+
@override
69+
Future<Object?> patch(
70+
String resource,
71+
List<Map<String, dynamic>> data,
72+
) async {
73+
return _mutex.protect(() async {
74+
return super.patch(resource, data);
75+
});
76+
}
77+
78+
@override
79+
Future<String> version() async {
80+
return _mutex.protect(() async {
81+
return super.version();
82+
});
83+
}
84+
85+
@override
86+
Future<void> connect(
87+
String endpoint, {
88+
Map<String, dynamic> options = const {},
89+
}) async {
90+
await _mutex.protect(() async {
91+
return super.connect(endpoint, options: options);
92+
});
93+
}
94+
95+
@override
96+
Future<void> close() async {
97+
await _mutex.protect(() async {
98+
return super.close();
99+
});
100+
}
101+
102+
@override
103+
Future<void> use({String? namespace, String? database}) async {
104+
await _mutex.protect(() async {
105+
return super.use(namespace: namespace, database: database);
106+
});
107+
}
108+
109+
@override
110+
Future<Object?> create(String resource, Object data) async {
111+
return _mutex.protect(() async {
112+
return super.create(resource, data);
113+
});
114+
}
115+
116+
@override
117+
Future<Object?> update(String resource, Object data) async {
118+
return _mutex.protect(() async {
119+
return super.update(resource, data);
120+
});
121+
}
122+
123+
@override
124+
Future<Object?> merge(String resource, Object data) async {
125+
return _mutex.protect(() async {
126+
return super.merge(resource, data);
127+
});
128+
}
129+
130+
@override
131+
Future<Object?> select(String resource) async {
132+
return _mutex.protect(() async {
133+
return super.select(resource);
134+
});
135+
}
136+
137+
@override
138+
Future<Object?> query(
139+
String sql, {
140+
Map<String, dynamic> bindings = const {},
141+
}) async {
142+
return _mutex.protect(() async {
143+
return super.query(sql, bindings: bindings);
144+
});
145+
}
146+
147+
@override
148+
Future<Object?> delete(String resource) async {
149+
return _mutex.protect(() async {
150+
return super.delete(resource);
151+
});
152+
}
153+
154+
@override
155+
Future<Object?> transaction(
156+
Future<void> Function(Transaction txn) action, {
157+
Duration timeout = const Duration(seconds: 5),
158+
}) async {
159+
return _mutex.protect(() async {
160+
return super.transaction(action, timeout: timeout);
161+
});
162+
}
163+
}

lib/surrealdb_wasm.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ library surrealdb_wasm;
33

44
export 'src/js.dart';
55
export 'src/surreal_wasm.dart';
6+
export 'src/surreal_wasm_mutex.dart';

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ environment:
1010
dependencies:
1111
flutter:
1212
sdk: flutter
13+
mutex: ^3.1.0
1314
surrealdb_js: ^1.0.0-beta.20+4
1415

1516
dev_dependencies:

0 commit comments

Comments
 (0)