@aws-amplify/datastore 3.7.1-unstable.5 → 3.7.3-unstable.1
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/CHANGELOG.md +20 -0
- package/dist/aws-amplify-datastore.js +53 -8
- package/dist/aws-amplify-datastore.js.map +1 -1
- package/dist/aws-amplify-datastore.min.js +2 -2
- package/dist/aws-amplify-datastore.min.js.map +1 -1
- package/lib/datastore/datastore.js +4 -2
- package/lib/datastore/datastore.js.map +1 -1
- package/lib/storage/adapter/InMemoryStore.native.d.ts +1 -2
- package/lib/sync/outbox.d.ts +1 -0
- package/lib/sync/outbox.js +39 -5
- package/lib/sync/outbox.js.map +1 -1
- package/lib-esm/datastore/datastore.js +4 -2
- package/lib-esm/datastore/datastore.js.map +1 -1
- package/lib-esm/storage/adapter/InMemoryStore.native.d.ts +1 -2
- package/lib-esm/sync/outbox.d.ts +1 -0
- package/lib-esm/sync/outbox.js +40 -6
- package/lib-esm/sync/outbox.js.map +1 -1
- package/package.json +7 -7
- package/src/datastore/datastore.ts +87 -98
- package/src/sync/outbox.ts +57 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbox.js","sourceRoot":"","sources":["../../src/sync/outbox.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAOtD,OAAO,EAIN,QAAQ,GACR,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"outbox.js","sourceRoot":"","sources":["../../src/sync/outbox.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-amplify/datastore",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.3-unstable.1+b0b57fb1b",
|
|
4
4
|
"description": "AppSyncLocal support for aws-amplify",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"module": "./lib-esm/index.js",
|
|
@@ -48,11 +48,11 @@
|
|
|
48
48
|
"fake-indexeddb": "3.0.0"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@aws-amplify/api": "4.0.
|
|
52
|
-
"@aws-amplify/auth": "4.3.
|
|
53
|
-
"@aws-amplify/core": "4.3.
|
|
54
|
-
"@aws-amplify/pubsub": "4.2.
|
|
55
|
-
"amazon-cognito-identity-js": "5.2.4-unstable.
|
|
51
|
+
"@aws-amplify/api": "4.0.29-unstable.1+b0b57fb1b",
|
|
52
|
+
"@aws-amplify/auth": "4.3.19-unstable.1+b0b57fb1b",
|
|
53
|
+
"@aws-amplify/core": "4.3.11-unstable.1+b0b57fb1b",
|
|
54
|
+
"@aws-amplify/pubsub": "4.2.5-unstable.1+b0b57fb1b",
|
|
55
|
+
"amazon-cognito-identity-js": "5.2.4-unstable.37+b0b57fb1b",
|
|
56
56
|
"idb": "5.0.6",
|
|
57
57
|
"immer": "9.0.6",
|
|
58
58
|
"ulid": "2.3.0",
|
|
@@ -111,5 +111,5 @@
|
|
|
111
111
|
"lib-esm"
|
|
112
112
|
]
|
|
113
113
|
},
|
|
114
|
-
"gitHead": "
|
|
114
|
+
"gitHead": "b0b57fb1ba81d8ad190c4e67efb878ef4c6a2344"
|
|
115
115
|
}
|
|
@@ -258,108 +258,101 @@ function modelInstanceCreator<T extends PersistentModel = PersistentModel>(
|
|
|
258
258
|
return <T>new modelConstructor(init);
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
-
const validateModelFields =
|
|
262
|
-
k: string,
|
|
263
|
-
|
|
264
|
-
) => {
|
|
265
|
-
const fieldDefinition = modelDefinition.fields[k];
|
|
261
|
+
const validateModelFields =
|
|
262
|
+
(modelDefinition: SchemaModel | SchemaNonModel) => (k: string, v: any) => {
|
|
263
|
+
const fieldDefinition = modelDefinition.fields[k];
|
|
266
264
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
isRequired,
|
|
271
|
-
isArrayNullable,
|
|
272
|
-
name,
|
|
273
|
-
isArray,
|
|
274
|
-
} = fieldDefinition;
|
|
265
|
+
if (fieldDefinition !== undefined) {
|
|
266
|
+
const { type, isRequired, isArrayNullable, name, isArray } =
|
|
267
|
+
fieldDefinition;
|
|
275
268
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
269
|
+
if (
|
|
270
|
+
((!isArray && isRequired) || (isArray && !isArrayNullable)) &&
|
|
271
|
+
(v === null || v === undefined)
|
|
272
|
+
) {
|
|
273
|
+
throw new Error(`Field ${name} is required`);
|
|
274
|
+
}
|
|
282
275
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
276
|
+
if (isGraphQLScalarType(type)) {
|
|
277
|
+
const jsType = GraphQLScalarType.getJSType(type);
|
|
278
|
+
const validateScalar = GraphQLScalarType.getValidationFunction(type);
|
|
286
279
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
if (typeof v === 'string') {
|
|
292
|
-
try {
|
|
293
|
-
JSON.parse(v);
|
|
280
|
+
if (type === 'AWSJSON') {
|
|
281
|
+
if (typeof v === jsType) {
|
|
294
282
|
return;
|
|
295
|
-
}
|
|
296
|
-
|
|
283
|
+
}
|
|
284
|
+
if (typeof v === 'string') {
|
|
285
|
+
try {
|
|
286
|
+
JSON.parse(v);
|
|
287
|
+
return;
|
|
288
|
+
} catch (error) {
|
|
289
|
+
throw new Error(`Field ${name} is an invalid JSON object. ${v}`);
|
|
290
|
+
}
|
|
297
291
|
}
|
|
298
292
|
}
|
|
299
|
-
}
|
|
300
293
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
294
|
+
if (isArray) {
|
|
295
|
+
let errorTypeText: string = jsType;
|
|
296
|
+
if (!isRequired) {
|
|
297
|
+
errorTypeText = `${jsType} | null | undefined`;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (!Array.isArray(v) && !isArrayNullable) {
|
|
301
|
+
throw new Error(
|
|
302
|
+
`Field ${name} should be of type [${errorTypeText}], ${typeof v} received. ${v}`
|
|
303
|
+
);
|
|
304
|
+
}
|
|
306
305
|
|
|
307
|
-
|
|
306
|
+
if (
|
|
307
|
+
!isNullOrUndefined(v) &&
|
|
308
|
+
(<[]>v).some(e =>
|
|
309
|
+
isNullOrUndefined(e) ? isRequired : typeof e !== jsType
|
|
310
|
+
)
|
|
311
|
+
) {
|
|
312
|
+
const elemTypes = (<[]>v)
|
|
313
|
+
.map(e => (e === null ? 'null' : typeof e))
|
|
314
|
+
.join(',');
|
|
315
|
+
|
|
316
|
+
throw new Error(
|
|
317
|
+
`All elements in the ${name} array should be of type ${errorTypeText}, [${elemTypes}] received. ${v}`
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
if (validateScalar && !isNullOrUndefined(v)) {
|
|
322
|
+
const validationStatus = (<[]>v).map(e => {
|
|
323
|
+
if (!isNullOrUndefined(e)) {
|
|
324
|
+
return validateScalar(e);
|
|
325
|
+
} else if (isNullOrUndefined(e) && !isRequired) {
|
|
326
|
+
return true;
|
|
327
|
+
} else {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
if (!validationStatus.every(s => s)) {
|
|
333
|
+
throw new Error(
|
|
334
|
+
`All elements in the ${name} array should be of type ${type}, validation failed for one or more elements. ${v}`
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
} else if (!isRequired && v === undefined) {
|
|
339
|
+
return;
|
|
340
|
+
} else if (typeof v !== jsType && v !== null) {
|
|
308
341
|
throw new Error(
|
|
309
|
-
`Field ${name} should be of type
|
|
342
|
+
`Field ${name} should be of type ${jsType}, ${typeof v} received. ${v}`
|
|
310
343
|
);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
if (
|
|
344
|
+
} else if (
|
|
314
345
|
!isNullOrUndefined(v) &&
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
)
|
|
346
|
+
validateScalar &&
|
|
347
|
+
!validateScalar(v)
|
|
318
348
|
) {
|
|
319
|
-
const elemTypes = (<[]>v)
|
|
320
|
-
.map(e => (e === null ? 'null' : typeof e))
|
|
321
|
-
.join(',');
|
|
322
|
-
|
|
323
349
|
throw new Error(
|
|
324
|
-
`
|
|
350
|
+
`Field ${name} should be of type ${type}, validation failed. ${v}`
|
|
325
351
|
);
|
|
326
352
|
}
|
|
327
|
-
|
|
328
|
-
if (validateScalar && !isNullOrUndefined(v)) {
|
|
329
|
-
const validationStatus = (<[]>v).map(e => {
|
|
330
|
-
if (!isNullOrUndefined(e)) {
|
|
331
|
-
return validateScalar(e);
|
|
332
|
-
} else if (isNullOrUndefined(e) && !isRequired) {
|
|
333
|
-
return true;
|
|
334
|
-
} else {
|
|
335
|
-
return false;
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
if (!validationStatus.every(s => s)) {
|
|
340
|
-
throw new Error(
|
|
341
|
-
`All elements in the ${name} array should be of type ${type}, validation failed for one or more elements. ${v}`
|
|
342
|
-
);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
} else if (!isRequired && v === undefined) {
|
|
346
|
-
return;
|
|
347
|
-
} else if (typeof v !== jsType && v !== null) {
|
|
348
|
-
throw new Error(
|
|
349
|
-
`Field ${name} should be of type ${jsType}, ${typeof v} received. ${v}`
|
|
350
|
-
);
|
|
351
|
-
} else if (
|
|
352
|
-
!isNullOrUndefined(v) &&
|
|
353
|
-
validateScalar &&
|
|
354
|
-
!validateScalar(v)
|
|
355
|
-
) {
|
|
356
|
-
throw new Error(
|
|
357
|
-
`Field ${name} should be of type ${type}, validation failed. ${v}`
|
|
358
|
-
);
|
|
359
353
|
}
|
|
360
354
|
}
|
|
361
|
-
}
|
|
362
|
-
};
|
|
355
|
+
};
|
|
363
356
|
|
|
364
357
|
const castInstanceType = (
|
|
365
358
|
modelDefinition: SchemaModel | SchemaNonModel,
|
|
@@ -414,11 +407,10 @@ const createModelClass = <T extends PersistentModel>(
|
|
|
414
407
|
(draft: Draft<T & ModelInstanceMetadata>) => {
|
|
415
408
|
initializeInstance(init, modelDefinition, draft);
|
|
416
409
|
|
|
417
|
-
const modelInstanceMetadata: ModelInstanceMetadata =
|
|
418
|
-
init
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
: <ModelInstanceMetadata>{};
|
|
410
|
+
const modelInstanceMetadata: ModelInstanceMetadata =
|
|
411
|
+
instancesMetadata.has(init)
|
|
412
|
+
? <ModelInstanceMetadata>(<unknown>init)
|
|
413
|
+
: <ModelInstanceMetadata>{};
|
|
422
414
|
const {
|
|
423
415
|
id: _id,
|
|
424
416
|
_version,
|
|
@@ -614,9 +606,8 @@ async function checkSchemaVersion(
|
|
|
614
606
|
storage: Storage,
|
|
615
607
|
version: string
|
|
616
608
|
): Promise<void> {
|
|
617
|
-
const Setting =
|
|
618
|
-
Setting
|
|
619
|
-
>;
|
|
609
|
+
const Setting =
|
|
610
|
+
dataStoreClasses.Setting as PersistentModelConstructor<Setting>;
|
|
620
611
|
|
|
621
612
|
const modelDefinition = schema.namespaces[DATASTORE].models.Setting;
|
|
622
613
|
|
|
@@ -704,10 +695,8 @@ class DataStore {
|
|
|
704
695
|
private sync: SyncEngine;
|
|
705
696
|
private syncPageSize: number;
|
|
706
697
|
private syncExpressions: SyncExpression[];
|
|
707
|
-
private syncPredicates: WeakMap<
|
|
708
|
-
SchemaModel,
|
|
709
|
-
ModelPredicate<any>
|
|
710
|
-
> = new WeakMap<SchemaModel, ModelPredicate<any>>();
|
|
698
|
+
private syncPredicates: WeakMap<SchemaModel, ModelPredicate<any>> =
|
|
699
|
+
new WeakMap<SchemaModel, ModelPredicate<any>>();
|
|
711
700
|
private sessionId: string;
|
|
712
701
|
private storageAdapter: Adapter;
|
|
713
702
|
|
|
@@ -1206,7 +1195,7 @@ class DataStore {
|
|
|
1206
1195
|
itemsChanged.set(element.id, element);
|
|
1207
1196
|
}
|
|
1208
1197
|
|
|
1209
|
-
const isSynced = this.sync
|
|
1198
|
+
const isSynced = this.sync?.getModelSyncedStatus(model) ?? false;
|
|
1210
1199
|
|
|
1211
1200
|
const limit =
|
|
1212
1201
|
itemsChanged.size - deletedItemIds.length >= this.syncPageSize;
|
|
@@ -1228,7 +1217,7 @@ class DataStore {
|
|
|
1228
1217
|
|
|
1229
1218
|
// TODO: abstract this function into a util file to be able to write better unit tests
|
|
1230
1219
|
const generateSnapshot = (): DataStoreSnapshot<T> => {
|
|
1231
|
-
const isSynced = this.sync
|
|
1220
|
+
const isSynced = this.sync?.getModelSyncedStatus(model) ?? false;
|
|
1232
1221
|
const itemsArray = [
|
|
1233
1222
|
...Array.from(items.values()),
|
|
1234
1223
|
...Array.from(itemsChanged.values()),
|
package/src/sync/outbox.ts
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
PersistentModelConstructor,
|
|
13
13
|
QueryOne,
|
|
14
14
|
} from '../types';
|
|
15
|
-
import { SYNC, valuesEqual } from '../util';
|
|
15
|
+
import { USER, SYNC, valuesEqual } from '../util';
|
|
16
16
|
import { TransformerMutationType } from './utils';
|
|
17
17
|
|
|
18
18
|
// TODO: Persist deleted ids
|
|
@@ -31,9 +31,8 @@ class MutationEventOutbox {
|
|
|
31
31
|
mutationEvent: MutationEvent
|
|
32
32
|
): Promise<void> {
|
|
33
33
|
storage.runExclusive(async s => {
|
|
34
|
-
const mutationEventModelDefinition =
|
|
35
|
-
'MutationEvent'
|
|
36
|
-
];
|
|
34
|
+
const mutationEventModelDefinition =
|
|
35
|
+
this.schema.namespaces[SYNC].models['MutationEvent'];
|
|
37
36
|
|
|
38
37
|
const predicate = ModelPredicateCreator.createFromExisting<MutationEvent>(
|
|
39
38
|
mutationEventModelDefinition,
|
|
@@ -124,8 +123,8 @@ class MutationEventOutbox {
|
|
|
124
123
|
storage: StorageFacade,
|
|
125
124
|
model: T
|
|
126
125
|
): Promise<MutationEvent[]> {
|
|
127
|
-
const mutationEventModelDefinition =
|
|
128
|
-
.MutationEvent;
|
|
126
|
+
const mutationEventModelDefinition =
|
|
127
|
+
this.schema.namespaces[SYNC].models.MutationEvent;
|
|
129
128
|
|
|
130
129
|
const mutationEvents = await storage.query(
|
|
131
130
|
this.MutationEvent,
|
|
@@ -161,7 +160,9 @@ class MutationEventOutbox {
|
|
|
161
160
|
return;
|
|
162
161
|
}
|
|
163
162
|
|
|
164
|
-
const { _version, _lastChangedAt, _deleted, ...
|
|
163
|
+
const { _version, _lastChangedAt, _deleted, ..._incomingData } = record;
|
|
164
|
+
const incomingData = this.removeTimestampFields(head.model, _incomingData);
|
|
165
|
+
|
|
165
166
|
const data = JSON.parse(head.data);
|
|
166
167
|
|
|
167
168
|
if (!data) {
|
|
@@ -172,8 +173,9 @@ class MutationEventOutbox {
|
|
|
172
173
|
_version: __version,
|
|
173
174
|
_lastChangedAt: __lastChangedAt,
|
|
174
175
|
_deleted: __deleted,
|
|
175
|
-
...
|
|
176
|
+
..._outgoingData
|
|
176
177
|
} = data;
|
|
178
|
+
const outgoingData = this.removeTimestampFields(head.model, _outgoingData);
|
|
177
179
|
|
|
178
180
|
// Don't sync the version when the data in the response does not match the data
|
|
179
181
|
// in the request, i.e., when there's a handled conflict
|
|
@@ -181,9 +183,8 @@ class MutationEventOutbox {
|
|
|
181
183
|
return;
|
|
182
184
|
}
|
|
183
185
|
|
|
184
|
-
const mutationEventModelDefinition =
|
|
185
|
-
'MutationEvent'
|
|
186
|
-
];
|
|
186
|
+
const mutationEventModelDefinition =
|
|
187
|
+
this.schema.namespaces[SYNC].models['MutationEvent'];
|
|
187
188
|
|
|
188
189
|
const predicate = ModelPredicateCreator.createFromExisting<MutationEvent>(
|
|
189
190
|
mutationEventModelDefinition,
|
|
@@ -222,13 +223,8 @@ class MutationEventOutbox {
|
|
|
222
223
|
previous: MutationEvent,
|
|
223
224
|
current: MutationEvent
|
|
224
225
|
): MutationEvent {
|
|
225
|
-
const {
|
|
226
|
-
|
|
227
|
-
id,
|
|
228
|
-
_lastChangedAt,
|
|
229
|
-
_deleted,
|
|
230
|
-
...previousData
|
|
231
|
-
} = JSON.parse(previous.data);
|
|
226
|
+
const { _version, id, _lastChangedAt, _deleted, ...previousData } =
|
|
227
|
+
JSON.parse(previous.data);
|
|
232
228
|
|
|
233
229
|
const {
|
|
234
230
|
id: __id,
|
|
@@ -252,6 +248,49 @@ class MutationEventOutbox {
|
|
|
252
248
|
data,
|
|
253
249
|
});
|
|
254
250
|
}
|
|
251
|
+
|
|
252
|
+
/*
|
|
253
|
+
if a model is using custom timestamp fields
|
|
254
|
+
the custom field names will be stored in the model attributes
|
|
255
|
+
|
|
256
|
+
e.g.
|
|
257
|
+
"attributes": [
|
|
258
|
+
{
|
|
259
|
+
"type": "model",
|
|
260
|
+
"properties": {
|
|
261
|
+
"timestamps": {
|
|
262
|
+
"createdAt": "createdOn",
|
|
263
|
+
"updatedAt": "updatedOn"
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
]
|
|
268
|
+
*/
|
|
269
|
+
private removeTimestampFields(
|
|
270
|
+
model: string,
|
|
271
|
+
record: PersistentModel
|
|
272
|
+
): PersistentModel {
|
|
273
|
+
const CREATED_AT_DEFAULT_KEY = 'createdAt';
|
|
274
|
+
const UPDATED_AT_DEFAULT_KEY = 'updatedAt';
|
|
275
|
+
|
|
276
|
+
let createdTimestampKey = CREATED_AT_DEFAULT_KEY;
|
|
277
|
+
let updatedTimestampKey = UPDATED_AT_DEFAULT_KEY;
|
|
278
|
+
|
|
279
|
+
const modelAttributes = this.schema.namespaces[USER].models[
|
|
280
|
+
model
|
|
281
|
+
].attributes?.find(attr => attr.type === 'model');
|
|
282
|
+
const timestampFieldsMap = modelAttributes?.properties?.timestamps;
|
|
283
|
+
|
|
284
|
+
if (timestampFieldsMap) {
|
|
285
|
+
createdTimestampKey = timestampFieldsMap[CREATED_AT_DEFAULT_KEY];
|
|
286
|
+
updatedTimestampKey = timestampFieldsMap[UPDATED_AT_DEFAULT_KEY];
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
delete (record as Record<string, any>)[createdTimestampKey];
|
|
290
|
+
delete (record as Record<string, any>)[updatedTimestampKey];
|
|
291
|
+
|
|
292
|
+
return record;
|
|
293
|
+
}
|
|
255
294
|
}
|
|
256
295
|
|
|
257
296
|
export { MutationEventOutbox };
|