@aerogel/plugin-local-first 0.0.0-next.4c77ee2164e8a4f72bdd920cb56ec059299ccc5f
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.
- package/dist/InruptAuthenticator.lazy-BvpQLGoj-BvpQLGoj.js +9 -0
- package/dist/InruptAuthenticator.lazy-BvpQLGoj-BvpQLGoj.js.map +1 -0
- package/dist/LegacyAuthenticator.lazy-ChFFqP14-ChFFqP14.js +5 -0
- package/dist/LegacyAuthenticator.lazy-ChFFqP14-ChFFqP14.js.map +1 -0
- package/dist/aerogel-plugin-local-first.d.ts +269 -0
- package/dist/aerogel-plugin-local-first.js +1686 -0
- package/dist/aerogel-plugin-local-first.js.map +1 -0
- package/package.json +50 -0
- package/src/components/AGCloudStatus.vue +31 -0
- package/src/components/index.ts +3 -0
- package/src/index.ts +29 -0
- package/src/jobs/Backup.ts +98 -0
- package/src/jobs/Migrate.test.ts +217 -0
- package/src/jobs/Migrate.ts +179 -0
- package/src/jobs/Sync.test.ts +982 -0
- package/src/jobs/Sync.ts +590 -0
- package/src/jobs/mixins/LoadsChildren.ts +210 -0
- package/src/jobs/mixins/LoadsTypeIndex.ts +23 -0
- package/src/jobs/mixins/TracksLocalModels.ts +32 -0
- package/src/lib/SyncQueue.ts +94 -0
- package/src/lib/inference.ts +124 -0
- package/src/lib/mirroring.ts +327 -0
- package/src/lib/utils.ts +21 -0
- package/src/services/Cloud.state.ts +111 -0
- package/src/services/Cloud.ts +450 -0
- package/src/services/DocumentsCache.ts +35 -0
- package/src/testing/cloud.ts +193 -0
- package/src/testing/mocks/Solid.mock.ts +34 -0
- package/src/testing/setup.ts +32 -0
- package/src/testing/stubs/LegacyTask.schema.ts +15 -0
- package/src/testing/stubs/Movie.schema.ts +15 -0
- package/src/testing/stubs/Movie.ts +3 -0
- package/src/testing/stubs/MoviesContainer.ts +20 -0
- package/src/testing/stubs/Task.schema.ts +12 -0
- package/src/testing/stubs/Task.ts +3 -0
- package/src/testing/stubs/TasksList.ts +20 -0
- package/src/testing/stubs/Workspace.ts +15 -0
- package/src/types/shims.d.ts +7 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { events as n, fetch as t, handleIncomingRedirect as c, login as g, logout as i } from "@inrupt/solid-client-authn-browser";
|
|
2
|
+
export {
|
|
3
|
+
n as events,
|
|
4
|
+
t as fetch,
|
|
5
|
+
c as handleIncomingRedirect,
|
|
6
|
+
g as login,
|
|
7
|
+
i as logout
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=InruptAuthenticator.lazy-BvpQLGoj-BvpQLGoj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InruptAuthenticator.lazy-BvpQLGoj-BvpQLGoj.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegacyAuthenticator.lazy-ChFFqP14-ChFFqP14.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { Authenticator } from '@aerogel/plugin-solid';
|
|
2
|
+
import { ComponentOptionsMixin } from 'vue';
|
|
3
|
+
import { ComponentProvideOptions } from 'vue';
|
|
4
|
+
import { Cr } from '@noeldemartin/utils';
|
|
5
|
+
import { DefineComponent } from 'vue';
|
|
6
|
+
import { Engine } from 'soukai';
|
|
7
|
+
import { ErrorSource } from '@aerogel/core';
|
|
8
|
+
import { Facade } from '@noeldemartin/utils';
|
|
9
|
+
import { Job } from '@aerogel/core';
|
|
10
|
+
import { JobListener } from '@aerogel/core';
|
|
11
|
+
import { JobStatus } from '@aerogel/core';
|
|
12
|
+
import { Nullable } from '@noeldemartin/utils';
|
|
13
|
+
import { ObjectsMap } from '@noeldemartin/utils';
|
|
14
|
+
import { Plugin as Plugin_2 } from '@aerogel/core';
|
|
15
|
+
import { PublicProps } from 'vue';
|
|
16
|
+
import { Replace } from '@aerogel/core';
|
|
17
|
+
import { Semaphore } from '@noeldemartin/utils';
|
|
18
|
+
import { ServiceWithState } from '@aerogel/core';
|
|
19
|
+
import { SolidContainer } from 'soukai-solid';
|
|
20
|
+
import { SolidDocument } from 'soukai-solid';
|
|
21
|
+
import { SolidModel } from 'soukai-solid';
|
|
22
|
+
import { SolidModelConstructor } from 'soukai-solid';
|
|
23
|
+
import { SolidSchemaDefinition } from 'soukai-solid';
|
|
24
|
+
import { SolidTypeIndex } from 'soukai-solid';
|
|
25
|
+
import { Tombstone } from 'soukai-solid';
|
|
26
|
+
|
|
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>;
|
|
32
|
+
|
|
33
|
+
export declare const Cloud: Facade<CloudService>;
|
|
34
|
+
|
|
35
|
+
export declare class CloudService extends _default {
|
|
36
|
+
protected asyncLock: Semaphore;
|
|
37
|
+
protected engine: Engine | null;
|
|
38
|
+
protected pollingInterval: NodeJS.Timeout | null;
|
|
39
|
+
whenReady<T>(callback: () => T): Promise<T>;
|
|
40
|
+
setup(modelUrlMappings?: WeakMap<SolidModelConstructor, Record<string, string>>): Promise<void>;
|
|
41
|
+
dismissSetup(): void;
|
|
42
|
+
dismissMigration(): void;
|
|
43
|
+
postponeMigration(): void;
|
|
44
|
+
syncIfOnline(options?: SyncOptions): Promise<void>;
|
|
45
|
+
syncIfOnline(model: SolidModel): Promise<void>;
|
|
46
|
+
syncIfOnline(models: SolidModel[]): Promise<void>;
|
|
47
|
+
sync(options?: SyncOptions): Promise<void>;
|
|
48
|
+
sync(model: SolidModel): Promise<void>;
|
|
49
|
+
sync(models: SolidModel[]): Promise<void>;
|
|
50
|
+
shouldMigrate(): boolean;
|
|
51
|
+
migrate(listener?: JobListener): Promise<void>;
|
|
52
|
+
register(modelClass: SolidModelConstructor, options?: RegisterOptions): Promise<void>;
|
|
53
|
+
registerSchemaMigration(modelClass: SolidModelConstructor, schema: SolidModelConstructor | SolidSchemaDefinition): void;
|
|
54
|
+
requireRemoteCollection(modelClass: SolidModelConstructor): string;
|
|
55
|
+
protected boot(): Promise<void>;
|
|
56
|
+
protected getDirtyLocalModels(): SolidModel[];
|
|
57
|
+
protected getModelsIn(urls: string[], model: SolidModel): SolidModel[];
|
|
58
|
+
protected requireEngine(): Engine;
|
|
59
|
+
protected setReady(ready: boolean): Promise<void>;
|
|
60
|
+
protected backup(modelUrlMappings?: WeakMap<SolidModelConstructor, Record<string, string>>): Promise<void>;
|
|
61
|
+
protected onApplicationReady(): Promise<void>;
|
|
62
|
+
protected onApplicationMounted(): Promise<void>;
|
|
63
|
+
protected login(authenticator: Authenticator): void;
|
|
64
|
+
protected logout(): void;
|
|
65
|
+
private syncOnStartup;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
declare const CloudStatus: {
|
|
69
|
+
readonly Disconnected: "disconnected";
|
|
70
|
+
readonly Online: "online";
|
|
71
|
+
readonly Syncing: "syncing";
|
|
72
|
+
readonly Migrating: "migrating";
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
declare const _default: ServiceWithState< {
|
|
76
|
+
autoPush: boolean;
|
|
77
|
+
localModelUpdates: Record<string, number>;
|
|
78
|
+
migrationDismissed: boolean;
|
|
79
|
+
migrationJob: Nullable<Migrate>;
|
|
80
|
+
migrationPostponed: boolean;
|
|
81
|
+
modelCollections: Record<string, string[]>;
|
|
82
|
+
pollingEnabled: boolean;
|
|
83
|
+
pollingMinutes: number;
|
|
84
|
+
ready: boolean;
|
|
85
|
+
registeredModels: ModelRegistration[];
|
|
86
|
+
schemaMigrations: Map<SolidModelConstructor, SolidModelConstructor | SolidSchemaDefinition>;
|
|
87
|
+
setupDismissed: boolean;
|
|
88
|
+
setupOngoing: boolean;
|
|
89
|
+
startupSync: boolean;
|
|
90
|
+
status: TCloudStatus;
|
|
91
|
+
syncError: Nullable<ErrorSource>;
|
|
92
|
+
syncJob: Nullable<Sync>;
|
|
93
|
+
}, {
|
|
94
|
+
disconnected: boolean;
|
|
95
|
+
online: boolean;
|
|
96
|
+
syncing: boolean;
|
|
97
|
+
migrating: boolean;
|
|
98
|
+
localChanges: number;
|
|
99
|
+
dirty: boolean;
|
|
100
|
+
migrationStarted: boolean;
|
|
101
|
+
migrationDisabledReason: string | null;
|
|
102
|
+
}, Replace<Partial<{
|
|
103
|
+
autoPush: boolean;
|
|
104
|
+
localModelUpdates: Record<string, number>;
|
|
105
|
+
migrationDismissed: boolean;
|
|
106
|
+
migrationJob: Nullable<Migrate>;
|
|
107
|
+
migrationPostponed: boolean;
|
|
108
|
+
modelCollections: Record<string, string[]>;
|
|
109
|
+
pollingEnabled: boolean;
|
|
110
|
+
pollingMinutes: number;
|
|
111
|
+
ready: boolean;
|
|
112
|
+
registeredModels: ModelRegistration[];
|
|
113
|
+
schemaMigrations: Map<SolidModelConstructor, SolidModelConstructor | SolidSchemaDefinition>;
|
|
114
|
+
setupDismissed: boolean;
|
|
115
|
+
setupOngoing: boolean;
|
|
116
|
+
startupSync: boolean;
|
|
117
|
+
status: TCloudStatus;
|
|
118
|
+
syncError: Nullable<ErrorSource>;
|
|
119
|
+
syncJob: Nullable<Sync>;
|
|
120
|
+
}>, {
|
|
121
|
+
migrationJob: MigrateJobStatus | undefined;
|
|
122
|
+
}>>;
|
|
123
|
+
|
|
124
|
+
declare class LoadsChildren {
|
|
125
|
+
protected localModels?: ObjectsMap<SolidModel>;
|
|
126
|
+
protected loadContainedModels(model: SolidContainer, options?: {
|
|
127
|
+
ignoreTombstones?: boolean;
|
|
128
|
+
status?: ResourceJobStatus;
|
|
129
|
+
onLoaded?: (urls: string[]) => unknown;
|
|
130
|
+
onMalformedDocument?: (url: string) => unknown;
|
|
131
|
+
}): Promise<SolidModel[]>;
|
|
132
|
+
protected loadDocumentChildren(model: SolidModel, documentUrl: string, documents: ObjectsMap<SolidDocument>, onMalformedDocument?: (url: string) => unknown): Promise<{
|
|
133
|
+
children: Record<string, SolidModel[]>;
|
|
134
|
+
tombstones: Tombstone[];
|
|
135
|
+
}>;
|
|
136
|
+
protected loadDocumentChildrenFromLocal(model: SolidModel, document: SolidDocument): Promise<Record<string, SolidModel[]>>;
|
|
137
|
+
protected loadDocumentChildrenFromRemote(model: SolidModel, documentUrl: string, onMalformedDocument?: (url: string) => unknown): Promise<{
|
|
138
|
+
children: Record<string, SolidModel[]>;
|
|
139
|
+
tombstones: Tombstone[];
|
|
140
|
+
}>;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
declare class LoadsTypeIndex {
|
|
144
|
+
protected loadTypeIndex(options: {
|
|
145
|
+
create: true;
|
|
146
|
+
}): Promise<SolidTypeIndex>;
|
|
147
|
+
protected loadTypeIndex(options?: {
|
|
148
|
+
create: false;
|
|
149
|
+
}): Promise<SolidTypeIndex | null>;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
declare function localFirst(): Plugin_2;
|
|
153
|
+
export default localFirst;
|
|
154
|
+
|
|
155
|
+
export declare type LocalFirstServices = typeof services;
|
|
156
|
+
|
|
157
|
+
declare class Migrate extends Migrate_base {
|
|
158
|
+
static restore(status: MigrateJobStatus): Migrate;
|
|
159
|
+
protected _models?: SolidModel[];
|
|
160
|
+
get models(): SolidModel[] | undefined;
|
|
161
|
+
set models(models: SolidModel[] | undefined);
|
|
162
|
+
protected run(): Promise<void>;
|
|
163
|
+
protected migrateRegisteredModel(model: SolidModel, status: MigrateModelJobStatus, typeIndex?: Nullable<SolidTypeIndex>): Promise<void>;
|
|
164
|
+
protected migrate(localModel: SolidModel, status: MigrateModelJobStatus): Promise<void>;
|
|
165
|
+
protected migrateChildren(localModel: SolidModel, status: MigrateModelJobStatus): Promise<void>;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
declare const Migrate_base: typeof Job<JobListener, MigrateJobStatus, MigrateJobStatus> & Cr<LoadsChildren & LoadsTypeIndex & TracksLocalModels>;
|
|
169
|
+
|
|
170
|
+
declare interface MigrateJobStatus extends JobStatus {
|
|
171
|
+
children?: MigrateModelJobStatus[];
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
declare interface MigrateModelJobStatus extends JobStatus {
|
|
175
|
+
modelUrl: string;
|
|
176
|
+
children?: MigrateModelJobStatus[];
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
declare interface ModelRegistration {
|
|
180
|
+
modelClass: SolidModelConstructor;
|
|
181
|
+
path?: string;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export declare interface RegisterOptions {
|
|
185
|
+
path?: string;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
declare interface ResourceJobStatus extends JobStatus {
|
|
189
|
+
documentUrl?: string;
|
|
190
|
+
children?: ResourceJobStatus[];
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
declare const services: {
|
|
194
|
+
$cloud: Facade<CloudService>;
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
declare class Sync extends Sync_base {
|
|
198
|
+
protected models?: SolidModel[];
|
|
199
|
+
protected dirtyRemoteModels?: SolidModel[];
|
|
200
|
+
protected rootLocalModels: SolidModel[];
|
|
201
|
+
protected tombstones: ObjectsMap<Tombstone>;
|
|
202
|
+
protected malformedDocuments: Set<string>;
|
|
203
|
+
protected documentsModifiedAt: Record<string, Date>;
|
|
204
|
+
protected localModels: ObjectsMap<SolidModel>;
|
|
205
|
+
constructor(models?: SolidModel[]);
|
|
206
|
+
protected run(): Promise<void>;
|
|
207
|
+
protected getInitialStatus(): SyncJobStatus;
|
|
208
|
+
protected calculateCurrentProgress(status?: JobStatus): number;
|
|
209
|
+
private pullChanges;
|
|
210
|
+
private pushChanges;
|
|
211
|
+
private fetchRemoteModels;
|
|
212
|
+
private fetchRemoteModelsForLocal;
|
|
213
|
+
private updateTypeRegistrations;
|
|
214
|
+
private loadChildren;
|
|
215
|
+
private deleteChild;
|
|
216
|
+
private saveModelAndChildren;
|
|
217
|
+
private synchronizeModels;
|
|
218
|
+
private reconcileInconsistencies;
|
|
219
|
+
private synchronizeContainerDocuments;
|
|
220
|
+
private rememberModelDocuments;
|
|
221
|
+
private ignoringMalformedDocumentErrors;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
declare const Sync_base: typeof Job<JobListener, SyncJobStatus, SyncJobStatus> & Cr<LoadsChildren & LoadsTypeIndex & TracksLocalModels>;
|
|
225
|
+
|
|
226
|
+
declare interface SyncJobStatus extends JobStatus {
|
|
227
|
+
root: true;
|
|
228
|
+
children: [SyncPullJobStatus, JobStatus];
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export declare interface SyncOptions extends JobListener {
|
|
232
|
+
refreshUserProfile?: boolean;
|
|
233
|
+
model?: SolidModel;
|
|
234
|
+
models?: SolidModel[];
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
declare interface SyncPullJobStatus extends JobStatus {
|
|
238
|
+
children?: ResourceJobStatus[];
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
declare type TCloudStatus = (typeof CloudStatus)[keyof typeof CloudStatus];
|
|
242
|
+
|
|
243
|
+
declare class TracksLocalModels {
|
|
244
|
+
protected localModels?: ObjectsMap<SolidModel>;
|
|
245
|
+
protected indexLocalModels(models: SolidModel[]): Promise<void>;
|
|
246
|
+
protected addLocalModel(localModel: SolidModel): Promise<void>;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export { }
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
declare module '@aerogel/core' {
|
|
253
|
+
interface Services extends LocalFirstServices {
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
declare module '@aerogel/core' {
|
|
259
|
+
interface EventsPayload {
|
|
260
|
+
'cloud:ready': void;
|
|
261
|
+
'cloud:backup-started': void;
|
|
262
|
+
'cloud:backup-completed': void;
|
|
263
|
+
'cloud:migration-started': SolidModel[];
|
|
264
|
+
'cloud:migration-cancelled': SolidModel[];
|
|
265
|
+
'cloud:migration-completed': SolidModel[];
|
|
266
|
+
'cloud:sync-started': SolidModel[] | undefined;
|
|
267
|
+
'cloud:sync-completed': SolidModel[] | undefined;
|
|
268
|
+
}
|
|
269
|
+
}
|