@aerogel/plugin-local-first 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/aerogel-plugin-local-first.d.ts +48 -17
  2. package/dist/aerogel-plugin-local-first.js +1219 -1232
  3. package/dist/aerogel-plugin-local-first.js.map +1 -1
  4. package/package.json +5 -5
  5. package/src/components/Account.vue +9 -0
  6. package/src/components/AccountLoggedIn.vue +85 -0
  7. package/src/components/AccountLoggedOut.vue +26 -0
  8. package/src/components/AccountLoginModal.vue +36 -0
  9. package/src/components/AccountModal.vue +206 -0
  10. package/src/components/index.ts +5 -3
  11. package/src/components/settings/PurgeData.vue +43 -0
  12. package/src/components/settings/index.ts +10 -0
  13. package/src/index.css +1 -0
  14. package/src/index.ts +5 -1
  15. package/src/jobs/Migrate.test.ts +1 -1
  16. package/src/jobs/Migrate.ts +8 -1
  17. package/src/jobs/Sync.test.ts +313 -35
  18. package/src/jobs/Sync.ts +183 -77
  19. package/src/jobs/mixins/LoadsChildren.ts +48 -31
  20. package/src/jobs/mixins/LoadsTypeIndex.ts +7 -5
  21. package/src/jobs/mixins/TracksLocalModels.ts +4 -4
  22. package/src/lib/mirroring.ts +45 -21
  23. package/src/services/Cloud.ts +84 -25
  24. package/src/services/DocumentsCache.ts +6 -2
  25. package/src/testing/cloud.ts +1 -1
  26. package/src/testing/setup.ts +3 -2
  27. package/src/testing/stubs/Person.schema.ts +9 -0
  28. package/src/testing/stubs/Person.ts +18 -0
  29. package/src/testing/stubs/Post.schema.ts +17 -0
  30. package/src/testing/stubs/Post.ts +18 -0
  31. package/dist/InruptAuthenticator.lazy-BvpQLGoj-BvpQLGoj.js +0 -9
  32. package/dist/InruptAuthenticator.lazy-BvpQLGoj-BvpQLGoj.js.map +0 -1
  33. package/dist/LegacyAuthenticator.lazy-ChFFqP14-ChFFqP14.js +0 -5
  34. package/dist/LegacyAuthenticator.lazy-ChFFqP14-ChFFqP14.js.map +0 -1
  35. package/src/components/AGCloudStatus.vue +0 -31
@@ -1,3 +1,4 @@
1
+ import { AcceptRefs } from '@aerogel/core';
1
2
  import { Authenticator } from '@aerogel/plugin-solid';
2
3
  import { ComponentOptionsMixin } from 'vue';
3
4
  import { ComponentProvideOptions } from 'vue';
@@ -9,6 +10,7 @@ import { Facade } from '@noeldemartin/utils';
9
10
  import { Job } from '@aerogel/core';
10
11
  import { JobListener } from '@aerogel/core';
11
12
  import { JobStatus } from '@aerogel/core';
13
+ import { ModalExpose } from '@aerogel/core';
12
14
  import { Nullable } from '@noeldemartin/utils';
13
15
  import { ObjectsMap } from '@noeldemartin/utils';
14
16
  import { Plugin as Plugin_2 } from '@aerogel/core';
@@ -16,6 +18,7 @@ import { PublicProps } from 'vue';
16
18
  import { Replace } from '@aerogel/core';
17
19
  import { Semaphore } from '@noeldemartin/utils';
18
20
  import { ServiceWithState } from '@aerogel/core';
21
+ import { ShallowUnwrapRef } from 'vue';
19
22
  import { SolidContainer } from 'soukai-solid';
20
23
  import { SolidDocument } from 'soukai-solid';
21
24
  import { SolidModel } from 'soukai-solid';
@@ -24,11 +27,17 @@ import { SolidSchemaDefinition } from 'soukai-solid';
24
27
  import { SolidTypeIndex } from 'soukai-solid';
25
28
  import { Tombstone } from 'soukai-solid';
26
29
 
27
- export declare const AGCloudStatus: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
28
- sync: (...args: any[]) => void;
29
- }, string, PublicProps, Readonly<{}> & Readonly<{
30
- onSync?: ((...args: any[]) => any) | undefined;
31
- }>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
30
+ export declare const Account: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
31
+
32
+ export declare const AccountLoggedIn: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
33
+
34
+ export declare const AccountLoggedOut: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
35
+
36
+ export declare const AccountLoginModal: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
37
+
38
+ export declare const AccountModal: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {
39
+ $modalRef: ShallowUnwrapRef<AcceptRefs<ModalExpose<void>>> | null;
40
+ }, any>;
32
41
 
33
42
  export declare const Cloud: Facade<CloudService>;
34
43
 
@@ -63,6 +72,8 @@ export declare class CloudService extends _default {
63
72
  protected login(authenticator: Authenticator): void;
64
73
  protected logout(): void;
65
74
  private syncOnStartup;
75
+ private bustDocumentsCache;
76
+ private registerModels;
66
77
  }
67
78
 
68
79
  declare const CloudStatus: {
@@ -126,27 +137,30 @@ declare class LoadsChildren {
126
137
  protected loadContainedModels(model: SolidContainer, options?: {
127
138
  ignoreTombstones?: boolean;
128
139
  status?: ResourceJobStatus;
129
- onLoaded?: (urls: string[]) => unknown;
130
- onMalformedDocument?: (url: string) => unknown;
140
+ onDocumentLoaded?: () => unknown;
141
+ onDocumentError?: (error: unknown) => unknown;
142
+ onDocumentRead?: (document: SolidDocument) => unknown;
131
143
  }): Promise<SolidModel[]>;
132
- protected loadDocumentChildren(model: SolidModel, documentUrl: string, documents: ObjectsMap<SolidDocument>, onMalformedDocument?: (url: string) => unknown): Promise<{
144
+ protected loadDocumentChildren(model: SolidContainer, documentUrl: string, documents: ObjectsMap<SolidDocument>, onDocumentError?: (error: unknown) => unknown, onDocumentRead?: (document: SolidDocument) => unknown): Promise<{
133
145
  children: Record<string, SolidModel[]>;
134
146
  tombstones: Tombstone[];
135
147
  }>;
136
148
  protected loadDocumentChildrenFromLocal(model: SolidModel, document: SolidDocument): Promise<Record<string, SolidModel[]>>;
137
- protected loadDocumentChildrenFromRemote(model: SolidModel, documentUrl: string, onMalformedDocument?: (url: string) => unknown): Promise<{
149
+ protected loadDocumentChildrenFromRemote(model: SolidContainer, documentUrl: string, onDocumentError?: (error: unknown) => unknown, onDocumentRead?: (document: SolidDocument) => unknown): Promise<{
138
150
  children: Record<string, SolidModel[]>;
139
151
  tombstones: Tombstone[];
140
152
  }>;
141
153
  }
142
154
 
143
155
  declare class LoadsTypeIndex {
144
- protected loadTypeIndex(options: {
145
- create: true;
146
- }): Promise<SolidTypeIndex>;
147
156
  protected loadTypeIndex(options?: {
148
- create: false;
157
+ create?: false;
158
+ fresh?: boolean;
149
159
  }): Promise<SolidTypeIndex | null>;
160
+ protected loadTypeIndex(options?: {
161
+ create?: true;
162
+ fresh?: boolean;
163
+ }): Promise<SolidTypeIndex>;
150
164
  }
151
165
 
152
166
  declare function localFirst(): Plugin_2;
@@ -156,6 +170,7 @@ export declare type LocalFirstServices = typeof services;
156
170
 
157
171
  declare class Migrate extends Migrate_base {
158
172
  static restore(status: MigrateJobStatus): Migrate;
173
+ constructor();
159
174
  protected _models?: SolidModel[];
160
175
  get models(): SolidModel[] | undefined;
161
176
  set models(models: SolidModel[] | undefined);
@@ -195,21 +210,28 @@ declare const services: {
195
210
  };
196
211
 
197
212
  declare class Sync extends Sync_base {
213
+ readonly documentsWithErrors: Set<string>;
198
214
  protected models?: SolidModel[];
199
215
  protected dirtyRemoteModels?: SolidModel[];
200
216
  protected rootLocalModels: SolidModel[];
201
217
  protected tombstones: ObjectsMap<Tombstone>;
202
- protected malformedDocuments: Set<string>;
218
+ protected syncedModelUrls: Set<string>;
203
219
  protected documentsModifiedAt: Record<string, Date>;
220
+ protected screenLock: Promise<void | {
221
+ release(): Promise<void>;
222
+ }> | null;
204
223
  protected localModels: ObjectsMap<SolidModel>;
205
224
  constructor(models?: SolidModel[]);
206
225
  protected run(): Promise<void>;
226
+ protected lockScreen(): void;
227
+ protected releaseScreen(): void;
207
228
  protected getInitialStatus(): SyncJobStatus;
208
229
  protected calculateCurrentProgress(status?: JobStatus): number;
209
230
  private pullChanges;
210
231
  private pushChanges;
211
232
  private fetchRemoteModels;
212
233
  private fetchRemoteModelsForLocal;
234
+ private getTypeRegistrations;
213
235
  private updateTypeRegistrations;
214
236
  private loadChildren;
215
237
  private deleteChild;
@@ -218,7 +240,8 @@ declare class Sync extends Sync_base {
218
240
  private reconcileInconsistencies;
219
241
  private synchronizeContainerDocuments;
220
242
  private rememberModelDocuments;
221
- private ignoringMalformedDocumentErrors;
243
+ private ignoringDocumentErrors;
244
+ private handleDocumentError;
222
245
  }
223
246
 
224
247
  declare const Sync_base: typeof Job<JobListener, SyncJobStatus, SyncJobStatus> & Cr<LoadsChildren & LoadsTypeIndex & TracksLocalModels>;
@@ -229,9 +252,10 @@ declare interface SyncJobStatus extends JobStatus {
229
252
  }
230
253
 
231
254
  export declare interface SyncOptions extends JobListener {
232
- refreshUserProfile?: boolean;
233
255
  model?: SolidModel;
234
256
  models?: SolidModel[];
257
+ refreshUserProfile?: boolean;
258
+ syncDirty?: boolean;
235
259
  }
236
260
 
237
261
  declare interface SyncPullJobStatus extends JobStatus {
@@ -241,7 +265,7 @@ declare interface SyncPullJobStatus extends JobStatus {
241
265
  declare type TCloudStatus = (typeof CloudStatus)[keyof typeof CloudStatus];
242
266
 
243
267
  declare class TracksLocalModels {
244
- protected localModels?: ObjectsMap<SolidModel>;
268
+ protected localModels: ObjectsMap<SolidModel>;
245
269
  protected indexLocalModels(models: SolidModel[]): Promise<void>;
246
270
  protected addLocalModel(localModel: SolidModel): Promise<void>;
247
271
  }
@@ -267,3 +291,10 @@ declare module '@aerogel/core' {
267
291
  'cloud:sync-completed': SolidModel[] | undefined;
268
292
  }
269
293
  }
294
+
295
+
296
+ declare module 'soukai-solid' {
297
+ namespace SolidModel {
298
+ const cloud: boolean | RegisterOptions | undefined;
299
+ }
300
+ }