-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor(datastore): storage adapters #11073
refactor(datastore): storage adapters #11073
Conversation
Codecov Report
📣 This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more @@ Coverage Diff @@
## main #11073 +/- ##
==========================================
- Coverage 82.24% 82.16% -0.08%
==========================================
Files 193 194 +1
Lines 19367 19355 -12
Branches 4185 4204 +19
==========================================
- Hits 15928 15903 -25
- Misses 3151 3166 +15
+ Partials 288 286 -2 see 17 files with indirect coverage changes 📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
d7d8da6
to
9c4ab94
Compare
9c4ab94
to
6f6c261
Compare
The approach looks sound to me. IMO it is safe to move forward with the other adapters. I think there are some other areas to be DRYer (although I'm not sure it is worth the effort). index 121a2bc44..aa62b9cb6 100644
--- a/packages/datastore/src/storage/adapter/AsyncStorageAdapter.ts
+++ b/packages/datastore/src/storage/adapter/AsyncStorageAdapter.ts
@@ -46,11 +46,8 @@ export class AsyncStorageAdapter extends StorageAdapterBase {
return db;
}
- async clear(): Promise<void> {
+ async _clear(): Promise<void> {
await this.db.clear();
-
- this.db = undefined!;
- this.initPromise = undefined!;
}
async batchSave<T extends PersistentModel>(
diff --git a/packages/datastore/src/storage/adapter/IndexedDBAdapter.ts b/packages/datastore/src/storage/adapter/IndexedDBAdapter.ts
index 24cca6f33..c42be7117 100644
--- a/packages/datastore/src/storage/adapter/IndexedDBAdapter.ts
+++ b/packages/datastore/src/storage/adapter/IndexedDBAdapter.ts
@@ -198,14 +198,11 @@ class IndexedDBAdapter extends StorageAdapterBase {
return <T>result;
}
- async clear(): Promise<void> {
+ async _clear(): Promise<void> {
await this.checkPrivate();
this.db?.close();
await idb.deleteDB(this.dbName);
-
- this.db = undefined!;
- this.initPromise = undefined!;
}
async save<T extends PersistentModel>(
diff --git a/packages/datastore/src/storage/adapter/StorageAdapterBase.ts b/packages/datastore/src/storage/adapter/StorageAdapterBase.ts
index bdfa56aa1..88cb2badc 100644
--- a/packages/datastore/src/storage/adapter/StorageAdapterBase.ts
+++ b/packages/datastore/src/storage/adapter/StorageAdapterBase.ts
@@ -108,7 +108,14 @@ export abstract class StorageAdapterBase implements Adapter {
* Not enough implementation similarities between the adapters
* to consolidate in the base class
*/
- public abstract clear(): Promise<void>;
+ public clear(): Promise<void> {
+ return this._clear().then(() => {
+ this.db = undefined!;
+ this.initPromise = undefined!;
+ });
+ }
+
+ protected abstract _clear(): Promise<void>;
public abstract save<T extends PersistentModel>(
model: T, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Setting a good direction, IMO. As we discussed offline, I think there's more we can do moving some of the delete traversal up, etc.. But, a good direction! Thanks!
* feat(cognito): remove required domain param when create CookieStorage * test: enable integ test * test(cognito): update unit test * Revert "test: enable integ test" This reverts commit e3db965. * feat(cognito): make cookiestorage constructor parameter optional * chore: Docs updates (aws-amplify#11082) * chore(release): Publish [ci skip] - @aws-amplify/analytics@6.0.19 - @aws-amplify/api-graphql@3.1.7 - @aws-amplify/api-rest@3.0.19 - @aws-amplify/api@5.0.19 - @aws-amplify/auth@5.1.13 - aws-amplify@5.0.19 - @aws-amplify/cache@5.0.19 - @aws-amplify/core@5.1.2 - @aws-amplify/datastore-storage-adapter@2.0.19 - @aws-amplify/datastore@4.1.1 - @aws-amplify/geo@2.0.19 - @aws-amplify/interactions@5.0.19 - @aws-amplify/notifications@1.0.19 - @aws-amplify/predictions@5.0.19 - @aws-amplify/pubsub@5.1.2 - @aws-amplify/pushnotification@5.0.19 - @aws-amplify/storage@5.1.9 - @aws-amplify/xr@4.0.19 * chore(release): update version.ts [ci skip] * refactor(datastore): storage adapters (aws-amplify#11073) * chore: Docs updates (aws-amplify#11091) * chore: Tweaked `main` pre-id. (aws-amplify#11093) * chore(deps): bump activesupport from 6.1.7.2 to 7.0.4.3 in /docs Bumps [activesupport](https://github.com/rails/rails) from 6.1.7.2 to 7.0.4.3. - [Release notes](https://github.com/rails/rails/releases) - [Changelog](https://github.com/rails/rails/blob/v7.0.4.3/activesupport/CHANGELOG.md) - [Commits](rails/rails@v6.1.7.2...v7.0.4.3) --- updated-dependencies: - dependency-name: activesupport dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(release): Publish [ci skip] - @aws-amplify/analytics@6.0.20 - @aws-amplify/api-graphql@3.1.8 - @aws-amplify/api-rest@3.0.20 - @aws-amplify/api@5.0.20 - @aws-amplify/auth@5.1.14 - aws-amplify@5.0.20 - @aws-amplify/cache@5.0.20 - @aws-amplify/core@5.1.3 - @aws-amplify/datastore-storage-adapter@2.0.20 - @aws-amplify/datastore@4.1.2 - @aws-amplify/geo@2.0.20 - @aws-amplify/interactions@5.0.20 - @aws-amplify/notifications@1.0.20 - @aws-amplify/predictions@5.0.20 - @aws-amplify/pubsub@5.1.3 - @aws-amplify/pushnotification@5.0.20 - @aws-amplify/storage@5.1.10 - @aws-amplify/xr@4.0.20 * chore(release): update version.ts [ci skip] * chore(@aws-amplify/datastore): initial decomposition of test helpers (aws-amplify#11096) * moved test helpers to folder * first pass, rough decomposition of test helpers file * added readme for helpers * test helpers readme typo * Update packages/datastore/__tests__/helpers/README.md Co-authored-by: Ivan Artemiev <29709626+iartemiev@users.noreply.github.com> --------- Co-authored-by: Ivan Artemiev <29709626+iartemiev@users.noreply.github.com> * fix: add warning message when trying to use SQLite with CPK enabled (aws-amplify#11027) * fix(data): update SQLite utils to use 'instr' instead of 'like' when constructing WHERE conditions from predicates (aws-amplify#11108) * chore: Docs updates (aws-amplify#11111) * docs(cognito): excluding subdomains when domain cookie attr is omitted * chore(release): Publish [ci skip] - @aws-amplify/analytics@6.0.21 - @aws-amplify/api-graphql@3.1.9 - @aws-amplify/api-rest@3.0.21 - @aws-amplify/api@5.0.21 - @aws-amplify/auth@5.1.15 - aws-amplify@5.0.21 - @aws-amplify/cache@5.0.21 - @aws-amplify/core@5.1.4 - @aws-amplify/datastore-storage-adapter@2.0.21 - @aws-amplify/datastore@4.1.3 - @aws-amplify/geo@2.0.21 - @aws-amplify/interactions@5.0.21 - @aws-amplify/notifications@1.0.21 - @aws-amplify/predictions@5.0.21 - @aws-amplify/pubsub@5.1.4 - @aws-amplify/pushnotification@5.0.21 - @aws-amplify/storage@5.1.11 - @aws-amplify/xr@4.0.21 * chore(release): update version.ts [ci skip] * test: increase coverage for delete connection by model field (aws-amplify#11099) * Update config.yml Removes `Usage Question` link that sends users to an old 404 page for discussions * fix(datastore): stale observeQuery snapshot with sort param (aws-amplify#11119) * chore(notifications): Integrate refactored Android common utils * chore: Docs updates * Update config.yml Switched usage question to point at discord rather than deleting it * chore(release): Publish [ci skip] - amazon-cognito-identity-js@6.2.0 - @aws-amplify/analytics@6.0.22 - @aws-amplify/api-graphql@3.1.10 - @aws-amplify/api-rest@3.0.22 - @aws-amplify/api@5.0.22 - @aws-amplify/auth@5.2.0 - aws-amplify@5.0.22 - @aws-amplify/cache@5.0.22 - @aws-amplify/core@5.1.5 - @aws-amplify/datastore-storage-adapter@2.0.22 - @aws-amplify/datastore@4.1.4 - @aws-amplify/geo@2.0.22 - @aws-amplify/interactions@5.0.22 - @aws-amplify/notifications@1.0.22 - @aws-amplify/predictions@5.0.22 - @aws-amplify/pubsub@5.1.5 - @aws-amplify/pushnotification@5.0.22 - @aws-amplify/storage@5.1.12 - @aws-amplify/xr@4.0.22 * chore(release): update version.ts [ci skip] * fix(@aws-amplify/datastore): mutation hub event drops during reconnect (aws-amplify#11132) * fix(@aws-amplify/datastore): fixes mutation hub event dropped during races with reconnect * add explicit observer completion, expanded test coverage * fix(@aws-amplify/datastore): adds serialization for empty predicates (aws-amplify#11133) adds serialization for empty predicates * test(notifications): Add native Android unit tests (aws-amplify#11139) * test(notifications): Add native Android unit tests * Disable android tests from being automatically run in CI --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Allan Zheng <zheallan@amazon.com> Co-authored-by: aws-amplify-bot <aws@amazon.com> Co-authored-by: Ivan Artemiev <29709626+iartemiev@users.noreply.github.com> Co-authored-by: Jim Blanchard <jim.l.blanchard@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jon Wire <iambipedal@gmail.com> Co-authored-by: Dane Pilcher <dppilche@amazon.com> Co-authored-by: David McAfee <mcafd@amazon.com> Co-authored-by: Olya Balashova <42189299+helgabalashova@users.noreply.github.com> Co-authored-by: Bannon Tanner <bannonta@amazon.com> Co-authored-by: helgabalashova <helga.stolyarova@gmail.com> Co-authored-by: Aaron S <94858815+stocaaro@users.noreply.github.com>
Description of changes
Adds an abstract base class -
StorageAdapterBase
that encapsulates common storage adapter business logic.Individual storage adapters, e.g. IndexedDBStorageAdapter extend the base class and only implement platform-specific business logic
This PR migrates IndexedDB and AsyncStorage to this pattern. I would like to get a sanity check from the team on the soundness of this approach before migrating the remaining 2 adapters (SQLite and Expo SQLite)
Description of how you validated changes
Checklist
yarn test
passesBy submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.