Skip to content

Commit 7283306

Browse files
committed
initial commit
1 parent 7f694e0 commit 7283306

12 files changed

+214
-4
lines changed

ferry/lib/ferry.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ class Client extends TypedLink {
3434
this.updateCacheHandlers = const {},
3535
this.defaultFetchPolicies = const {},
3636
this.addTypename = true,
37-
}) : cache = cache ?? Cache(),
37+
}) : cache = cache ??
38+
Cache(
39+
typePolicies: typePolicies,
40+
addTypename: addTypename,
41+
),
3842
requestController = requestController ?? StreamController.broadcast() {
3943
_typedLink = TypedLink.from([
4044
RequestControllerTypedLink(this.requestController),

ferry/lib/typed_links.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ export 'package:ferry/src/add_typename_typed_link.dart';
22
export 'package:ferry/src/cache_typed_link.dart';
33
export 'package:ferry/src/fetch_policy_typed_link.dart';
44
export 'package:ferry/src/gql_typed_link.dart';
5-
export 'package:ferry/src/offline_mutation_typed_link.dart';
65
export 'package:ferry/src/optimistic_typed_link.dart';
76
export 'package:ferry/src/request_controller_typed_link.dart';
87
export 'package:ferry/src/update_cache_typed_link.dart';

ferry/pubspec.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ dependencies:
1212
gql_exec: ^0.2.4
1313
meta: ^1.1.8
1414
collection: ^1.14.12
15-
hive: ^1.4.4
1615
built_value: ^7.1.0
1716
ferry_exec: ^0.0.2
1817
normalize: ^0.4.5

ferry_offline_client/.gitignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Dart
2+
.dart_tool
3+
.packages
4+
pubspec.lock
5+
6+
# Documentation
7+
doc/api
8+
9+
build/
10+
11+
test/__hive_data__

ferry_offline_client/CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [Unreleased]
9+
10+
## [0.0.1]
11+
12+
- initial commit
13+

ferry_offline_client/LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
The MIT License (MIT)
2+
3+
Copyright (c) 2020 Sat Mandir Khalsa
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

ferry_offline_client/README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[![MIT License][license-badge]][license-link]
2+
[![PRs Welcome][prs-badge]][prs-link]
3+
[![Watch on GitHub][github-watch-badge]][github-watch-link]
4+
[![Star on GitHub][github-star-badge]][github-star-link]
5+
[![Watch on GitHub][github-forks-badge]][github-forks-link]
6+
[![Discord][discord-badge]][discord-link]
7+
8+
[license-badge]: https://img.shields.io/github/license/gql-dart/ferry.svg?style=for-the-badge
9+
[license-link]: https://github.com/gql-dart/ferry/blob/master/LICENSE
10+
[prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge
11+
[prs-link]: https://github.com/gql-dart/ferry/issues
12+
13+
[github-watch-badge]: https://img.shields.io/github/watchers/gql-dart/ferry.svg?style=for-the-badge&logo=github&logoColor=ffffff
14+
[github-watch-link]: https://github.com/gql-dart/ferry/watchers
15+
[github-star-badge]: https://img.shields.io/github/stars/gql-dart/ferry.svg?style=for-the-badge&logo=github&logoColor=ffffff
16+
[github-star-link]: https://github.com/gql-dart/ferry/stargazers
17+
[github-forks-badge]: https://img.shields.io/github/forks/gql-dart/ferry.svg?style=for-the-badge&logo=github&logoColor=ffffff
18+
[github-forks-link]: https://github.com/gql-dart/ferry/network/members
19+
20+
[discord-badge]: https://img.shields.io/discord/559455668810153989.svg?style=for-the-badge&logo=discord&logoColor=ffffff
21+
[discord-link]: https://discord.gg/QRTfXE
22+
23+
An offline-ready `ferry` GraphQL Client.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
include: package:pedantic/analysis_options.yaml
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
import 'dart:async';
2+
import 'package:meta/meta.dart';
3+
import 'package:ferry_exec/ferry_exec.dart';
4+
import 'package:gql/ast.dart';
5+
import 'package:built_value/serializer.dart';
6+
import 'package:hive_flutter/hive_flutter.dart';
7+
import 'package:hive/hive.dart';
8+
import 'package:ferry/typed_links.dart';
9+
export 'package:ferry_cache/ferry_cache.dart';
10+
export 'package:gql_link/gql_link.dart';
11+
export 'package:normalize/policies.dart';
12+
export 'package:ferry/src/update_cache_typed_link.dart' show UpdateCacheHandler;
13+
export 'package:ferry_exec/ferry_exec.dart';
14+
export 'package:gql/ast.dart' show OperationType;
15+
import 'package:ferry_hive_store/ferry_hive_store.dart';
16+
17+
import './src/offline_mutation_typed_link.dart';
18+
19+
class OfflineClientConfig {
20+
final LinkExceptionHandler linkExceptionHandler;
21+
22+
OfflineClientConfig({
23+
this.linkExceptionHandler,
24+
});
25+
}
26+
27+
class OfflineClient extends TypedLink {
28+
final Link link;
29+
final StreamController<OperationRequest> requestController;
30+
final Map<String, TypePolicy> typePolicies;
31+
final Map<String, Function> updateCacheHandlers;
32+
final Map<OperationType, FetchPolicy> defaultFetchPolicies;
33+
final bool addTypename;
34+
final Box storeBox;
35+
final Box mutationQueueBox;
36+
final Cache cache;
37+
final OfflineClientConfig offlineConfig;
38+
final Serializers serializers;
39+
40+
TypedLink _typedLink;
41+
42+
OfflineClient({
43+
@required this.link,
44+
@required this.storeBox,
45+
@required this.mutationQueueBox,
46+
@required this.serializers,
47+
this.offlineConfig,
48+
StreamController<OperationRequest> requestController,
49+
this.typePolicies = const {},
50+
this.updateCacheHandlers = const {},
51+
this.defaultFetchPolicies = const {},
52+
this.addTypename = true,
53+
}) : cache = Cache(
54+
store: HiveStore(storeBox),
55+
typePolicies: typePolicies,
56+
addTypename: addTypename,
57+
),
58+
requestController = requestController ?? StreamController.broadcast() {
59+
_typedLink = TypedLink.from([
60+
RequestControllerTypedLink(this.requestController),
61+
OfflineMutationTypedLink(
62+
cache: cache,
63+
mutationQueueBox: mutationQueueBox,
64+
serializers: serializers,
65+
requestController: this.requestController,
66+
linkExceptionHandler: offlineConfig?.linkExceptionHandler,
67+
),
68+
if (addTypename) AddTypenameTypedLink(),
69+
if (updateCacheHandlers.isNotEmpty)
70+
UpdateCacheTypedLink(
71+
cache: cache,
72+
updateCacheHandlers: updateCacheHandlers,
73+
),
74+
FetchPolicyTypedLink(
75+
link: link,
76+
cache: cache,
77+
defaultFetchPolicies: defaultFetchPolicies,
78+
)
79+
]);
80+
}
81+
82+
@override
83+
Stream<OperationResponse<TData, TVars>> request<TData, TVars>(
84+
OperationRequest<TData, TVars> request, [
85+
forward,
86+
]) =>
87+
_typedLink.request(request, forward);
88+
89+
/// Initializes an [OfflineClient] with default hive boxes
90+
static Future<OfflineClient> init({
91+
@required Link link,
92+
@required Serializers serializers,
93+
OfflineClientConfig offlineConfig,
94+
StreamController<OperationRequest> requestController,
95+
Map<String, TypePolicy> typePolicies,
96+
Map<String, Function> updateCacheHandlers,
97+
Map<OperationType, FetchPolicy> defaultFetchPolicies,
98+
bool addTypename,
99+
}) async {
100+
await Hive.initFlutter();
101+
final storeBox = await Hive.openBox<Map<String, dynamic>>('ferry_store');
102+
final mutationQueueBox =
103+
await Hive.openBox<Map<String, dynamic>>('ferry_mutation_queue');
104+
return OfflineClient(
105+
link: link,
106+
storeBox: storeBox,
107+
mutationQueueBox: mutationQueueBox,
108+
serializers: serializers,
109+
offlineConfig: offlineConfig,
110+
requestController: requestController,
111+
typePolicies: typePolicies,
112+
updateCacheHandlers: updateCacheHandlers,
113+
defaultFetchPolicies: defaultFetchPolicies,
114+
addTypename: addTypename,
115+
);
116+
}
117+
}

ferry_offline_client/pubspec.yaml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
name: ferry_offline_client
2+
version: 0.0.1
3+
homepage: https://ferrygraphql.com/
4+
description: An offline-ready Ferry GraphQL Client
5+
repository: https://github.com/gql-dart/ferry
6+
environment:
7+
sdk: '>=2.10.0 <3.0.0'
8+
dependencies:
9+
gql_link: ^0.3.0
10+
meta: ^1.1.8
11+
hive: ^1.4.4
12+
hive_flutter: ^0.3.0+2
13+
ferry_exec: ^0.0.2
14+
ferry_cache: ^0.4.2
15+
ferry_hive_store: ^0.3.2
16+
ferry: ^0.9.2
17+
flutter:
18+
sdk: flutter
19+
dev_dependencies:
20+
test: ^1.9.4
21+
pedantic: ^1.9.0
22+
ferry_test_graphql: ^0.0.2

ferry/test/typed_links/offline_mutation_typed_link_test.dart renamed to ferry_offline_client/test/offline_mutation_typed_link_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:rxdart/rxdart.dart';
55
import 'package:ferry_exec/ferry_exec.dart';
66
import 'package:async/async.dart';
77

8-
import 'package:ferry/src/offline_mutation_typed_link.dart';
8+
import 'package:ferry_offline_client/src/offline_mutation_typed_link.dart';
99

1010
import 'package:ferry_test_graphql/schema/serializers.gql.dart';
1111
import 'package:ferry_test_graphql/mutations/variables/create_review.req.gql.dart';

0 commit comments

Comments
 (0)