UNPKG

@aws-amplify/datastore

Version:

AppSyncLocal support for aws-amplify

47 lines (45 loc) 1.75 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.ModelMerger = void 0; const types_1 = require("../types"); const utils_1 = require("./utils"); // https://github.com/aws-amplify/amplify-js/blob/datastore-docs/packages/datastore/docs/sync-engine.md#merger class ModelMerger { constructor(outbox, ownSymbol) { this.outbox = outbox; this.ownSymbol = ownSymbol; } /** * * @param storage Storage adapter that contains the data. * @param model The model from an outbox mutation. * @returns The type of operation (INSERT/UPDATE/DELETE) */ async merge(storage, model, modelDefinition) { let result; const mutationsForModel = await this.outbox.getForModel(storage, model, modelDefinition); const isDelete = model._deleted; if (mutationsForModel.length === 0) { if (isDelete) { result = types_1.OpType.DELETE; await storage.delete(model, undefined, this.ownSymbol); } else { [[, result]] = await storage.save(model, undefined, this.ownSymbol); } } return result; } async mergePage(storage, modelConstructor, items, modelDefinition) { const itemsMap = new Map(); for (const item of items) { // merge items by model id. Latest record for a given id remains. const modelId = (0, utils_1.getIdentifierValue)(modelDefinition, item); itemsMap.set(modelId, item); } const page = [...itemsMap.values()]; return storage.batchSave(modelConstructor, page, this.ownSymbol); } } exports.ModelMerger = ModelMerger; //# sourceMappingURL=merger.js.map