@aws-amplify/datastore 5.0.32 → 5.0.33-s-auth.30d0cd2.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.
- package/dist/cjs/authModeStrategies/multiAuthStrategy.js +1 -1
- package/dist/cjs/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/dist/cjs/datastore/datastore.js +46 -41
- package/dist/cjs/datastore/datastore.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/predicates/index.js +1 -0
- package/dist/cjs/predicates/index.js.map +1 -1
- package/dist/cjs/predicates/next.js +13 -12
- package/dist/cjs/predicates/next.js.map +1 -1
- package/dist/cjs/predicates/sort.js +2 -2
- package/dist/cjs/predicates/sort.js.map +1 -1
- package/dist/cjs/storage/adapter/AsyncStorageAdapter.js +21 -18
- package/dist/cjs/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/dist/cjs/storage/adapter/AsyncStorageDatabase.js +10 -9
- package/dist/cjs/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/dist/cjs/storage/adapter/InMemoryStore.js +4 -1
- package/dist/cjs/storage/adapter/InMemoryStore.js.map +1 -1
- package/dist/cjs/storage/adapter/IndexedDBAdapter.js +21 -23
- package/dist/cjs/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/dist/cjs/storage/adapter/StorageAdapterBase.js +7 -7
- package/dist/cjs/storage/adapter/StorageAdapterBase.js.map +1 -1
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.js +4 -1
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.js.map +1 -1
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js +1 -0
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js.map +1 -1
- package/dist/cjs/storage/relationship.js +1 -0
- package/dist/cjs/storage/relationship.js.map +1 -1
- package/dist/cjs/storage/storage.js +14 -14
- package/dist/cjs/storage/storage.js.map +1 -1
- package/dist/cjs/sync/datastoreConnectivity.js +0 -3
- package/dist/cjs/sync/datastoreConnectivity.js.map +1 -1
- package/dist/cjs/sync/index.js +47 -43
- package/dist/cjs/sync/index.js.map +1 -1
- package/dist/cjs/sync/merger.js +1 -1
- package/dist/cjs/sync/merger.js.map +1 -1
- package/dist/cjs/sync/outbox.js +19 -17
- package/dist/cjs/sync/outbox.js.map +1 -1
- package/dist/cjs/sync/processors/errorMaps.js.map +1 -1
- package/dist/cjs/sync/processors/mutation.js +31 -28
- package/dist/cjs/sync/processors/mutation.js.map +1 -1
- package/dist/cjs/sync/processors/subscription.js +21 -12
- package/dist/cjs/sync/processors/subscription.js.map +1 -1
- package/dist/cjs/sync/processors/sync.js +25 -21
- package/dist/cjs/sync/processors/sync.js.map +1 -1
- package/dist/cjs/sync/utils.js +20 -21
- package/dist/cjs/sync/utils.js.map +1 -1
- package/dist/cjs/types.js +1 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/util.js +46 -25
- package/dist/cjs/util.js.map +1 -1
- package/dist/esm/authModeStrategies/multiAuthStrategy.d.ts +1 -1
- package/dist/esm/authModeStrategies/multiAuthStrategy.mjs +1 -1
- package/dist/esm/authModeStrategies/multiAuthStrategy.mjs.map +1 -1
- package/dist/esm/datastore/datastore.d.ts +4 -6
- package/dist/esm/datastore/datastore.mjs +42 -34
- package/dist/esm/datastore/datastore.mjs.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/predicates/index.mjs +1 -0
- package/dist/esm/predicates/index.mjs.map +1 -1
- package/dist/esm/predicates/next.d.ts +7 -7
- package/dist/esm/predicates/next.mjs +13 -12
- package/dist/esm/predicates/next.mjs.map +1 -1
- package/dist/esm/predicates/sort.d.ts +1 -1
- package/dist/esm/predicates/sort.mjs +2 -2
- package/dist/esm/predicates/sort.mjs.map +1 -1
- package/dist/esm/storage/adapter/AsyncStorageAdapter.d.ts +1 -1
- package/dist/esm/storage/adapter/AsyncStorageAdapter.mjs +21 -18
- package/dist/esm/storage/adapter/AsyncStorageAdapter.mjs.map +1 -1
- package/dist/esm/storage/adapter/AsyncStorageDatabase.mjs +10 -9
- package/dist/esm/storage/adapter/AsyncStorageDatabase.mjs.map +1 -1
- package/dist/esm/storage/adapter/InMemoryStore.mjs +4 -1
- package/dist/esm/storage/adapter/InMemoryStore.mjs.map +1 -1
- package/dist/esm/storage/adapter/IndexedDBAdapter.mjs +21 -23
- package/dist/esm/storage/adapter/IndexedDBAdapter.mjs.map +1 -1
- package/dist/esm/storage/adapter/StorageAdapterBase.d.ts +2 -2
- package/dist/esm/storage/adapter/StorageAdapterBase.mjs +7 -7
- package/dist/esm/storage/adapter/StorageAdapterBase.mjs.map +1 -1
- package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs +3 -1
- package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs.map +1 -1
- package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs +1 -0
- package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs.map +1 -1
- package/dist/esm/storage/adapter/index.d.ts +1 -1
- package/dist/esm/storage/relationship.mjs +1 -0
- package/dist/esm/storage/relationship.mjs.map +1 -1
- package/dist/esm/storage/storage.d.ts +11 -11
- package/dist/esm/storage/storage.mjs +10 -10
- package/dist/esm/storage/storage.mjs.map +1 -1
- package/dist/esm/sync/datastoreConnectivity.d.ts +2 -2
- package/dist/esm/sync/datastoreConnectivity.mjs +0 -3
- package/dist/esm/sync/datastoreConnectivity.mjs.map +1 -1
- package/dist/esm/sync/index.d.ts +3 -3
- package/dist/esm/sync/index.mjs +47 -43
- package/dist/esm/sync/index.mjs.map +1 -1
- package/dist/esm/sync/merger.d.ts +1 -1
- package/dist/esm/sync/merger.mjs +1 -1
- package/dist/esm/sync/merger.mjs.map +1 -1
- package/dist/esm/sync/outbox.d.ts +4 -4
- package/dist/esm/sync/outbox.mjs +19 -17
- package/dist/esm/sync/outbox.mjs.map +1 -1
- package/dist/esm/sync/processors/errorMaps.mjs.map +1 -1
- package/dist/esm/sync/processors/mutation.d.ts +5 -5
- package/dist/esm/sync/processors/mutation.mjs +31 -28
- package/dist/esm/sync/processors/mutation.mjs.map +1 -1
- package/dist/esm/sync/processors/subscription.d.ts +1 -1
- package/dist/esm/sync/processors/subscription.mjs +21 -12
- package/dist/esm/sync/processors/subscription.mjs.map +1 -1
- package/dist/esm/sync/processors/sync.d.ts +3 -3
- package/dist/esm/sync/processors/sync.mjs +13 -9
- package/dist/esm/sync/processors/sync.mjs.map +1 -1
- package/dist/esm/sync/utils.d.ts +11 -13
- package/dist/esm/sync/utils.mjs +20 -21
- package/dist/esm/sync/utils.mjs.map +1 -1
- package/dist/esm/types.d.ts +121 -131
- package/dist/esm/types.mjs +3 -2
- package/dist/esm/types.mjs.map +1 -1
- package/dist/esm/util.d.ts +5 -5
- package/dist/esm/util.mjs +46 -25
- package/dist/esm/util.mjs.map +1 -1
- package/package.json +74 -73
- package/src/authModeStrategies/multiAuthStrategy.ts +8 -4
- package/src/datastore/datastore.ts +145 -123
- package/src/index.ts +10 -8
- package/src/predicates/index.ts +10 -2
- package/src/predicates/next.ts +39 -28
- package/src/predicates/sort.ts +23 -26
- package/src/storage/adapter/AsyncStorageAdapter.ts +43 -25
- package/src/storage/adapter/AsyncStorageDatabase.ts +18 -10
- package/src/storage/adapter/InMemoryStore.ts +5 -1
- package/src/storage/adapter/IndexedDBAdapter.ts +50 -37
- package/src/storage/adapter/StorageAdapterBase.ts +24 -18
- package/src/storage/adapter/getDefaultAdapter/index.native.ts +1 -0
- package/src/storage/adapter/getDefaultAdapter/index.ts +4 -1
- package/src/storage/adapter/index.ts +2 -2
- package/src/storage/relationship.ts +5 -1
- package/src/storage/storage.ts +38 -30
- package/src/sync/datastoreConnectivity.ts +4 -6
- package/src/sync/index.ts +228 -230
- package/src/sync/merger.ts +4 -3
- package/src/sync/outbox.ts +26 -24
- package/src/sync/processors/errorMaps.ts +5 -0
- package/src/sync/processors/mutation.ts +80 -72
- package/src/sync/processors/subscription.ts +69 -53
- package/src/sync/processors/sync.ts +49 -37
- package/src/sync/utils.ts +60 -41
- package/src/types.ts +165 -165
- package/src/util.ts +89 -53
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/sync/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyncEngine = exports.ControlMessage = void 0;\nconst tslib_1 = require(\"tslib\");\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst core_1 = require(\"@aws-amplify/core\");\nconst rxjs_1 = require(\"rxjs\");\nconst predicates_1 = require(\"../predicates\");\nconst types_1 = require(\"../types\");\nconst util_1 = require(\"../util\");\nconst datastoreConnectivity_1 = tslib_1.__importDefault(require(\"./datastoreConnectivity\"));\nconst merger_1 = require(\"./merger\");\nconst outbox_1 = require(\"./outbox\");\nconst mutation_1 = require(\"./processors/mutation\");\nconst subscription_1 = require(\"./processors/subscription\");\nconst sync_1 = require(\"./processors/sync\");\nconst utils_2 = require(\"./utils\");\nconst api_graphql_1 = require(\"@aws-amplify/api-graphql\");\nconst logger = new core_1.ConsoleLogger('DataStore');\nconst ownSymbol = Symbol('sync');\nvar ControlMessage;\n(function (ControlMessage) {\n ControlMessage[\"SYNC_ENGINE_STORAGE_SUBSCRIBED\"] = \"storageSubscribed\";\n ControlMessage[\"SYNC_ENGINE_SUBSCRIPTIONS_ESTABLISHED\"] = \"subscriptionsEstablished\";\n ControlMessage[\"SYNC_ENGINE_SYNC_QUERIES_STARTED\"] = \"syncQueriesStarted\";\n ControlMessage[\"SYNC_ENGINE_SYNC_QUERIES_READY\"] = \"syncQueriesReady\";\n ControlMessage[\"SYNC_ENGINE_MODEL_SYNCED\"] = \"modelSynced\";\n ControlMessage[\"SYNC_ENGINE_OUTBOX_MUTATION_ENQUEUED\"] = \"outboxMutationEnqueued\";\n ControlMessage[\"SYNC_ENGINE_OUTBOX_MUTATION_PROCESSED\"] = \"outboxMutationProcessed\";\n ControlMessage[\"SYNC_ENGINE_OUTBOX_STATUS\"] = \"outboxStatus\";\n ControlMessage[\"SYNC_ENGINE_NETWORK_STATUS\"] = \"networkStatus\";\n ControlMessage[\"SYNC_ENGINE_READY\"] = \"ready\";\n})(ControlMessage = exports.ControlMessage || (exports.ControlMessage = {}));\nclass SyncEngine {\n getModelSyncedStatus(modelConstructor) {\n return this.modelSyncedStatus.get(modelConstructor);\n }\n constructor(schema, namespaceResolver, modelClasses, userModelClasses, storage, modelInstanceCreator, conflictHandler, errorHandler, syncPredicates, amplifyConfig = {}, authModeStrategy, amplifyContext, connectivityMonitor) {\n this.schema = schema;\n this.namespaceResolver = namespaceResolver;\n this.modelClasses = modelClasses;\n this.userModelClasses = userModelClasses;\n this.storage = storage;\n this.modelInstanceCreator = modelInstanceCreator;\n this.syncPredicates = syncPredicates;\n this.amplifyConfig = amplifyConfig;\n this.authModeStrategy = authModeStrategy;\n this.amplifyContext = amplifyContext;\n this.connectivityMonitor = connectivityMonitor;\n this.online = false;\n this.modelSyncedStatus = new WeakMap();\n this.connectionDisrupted = false;\n this.runningProcesses = new utils_1.BackgroundProcessManager();\n this.waitForSleepState = new Promise(resolve => {\n this.syncQueriesObservableStartSleeping = resolve;\n });\n const MutationEvent = this.modelClasses['MutationEvent'];\n this.outbox = new outbox_1.MutationEventOutbox(this.schema, MutationEvent, modelInstanceCreator, ownSymbol);\n this.modelMerger = new merger_1.ModelMerger(this.outbox, ownSymbol);\n this.syncQueriesProcessor = new sync_1.SyncProcessor(this.schema, this.syncPredicates, this.amplifyConfig, this.authModeStrategy, errorHandler, this.amplifyContext);\n this.subscriptionsProcessor = new subscription_1.SubscriptionProcessor(this.schema, this.syncPredicates, this.amplifyConfig, this.authModeStrategy, errorHandler, this.amplifyContext);\n this.mutationsProcessor = new mutation_1.MutationProcessor(this.schema, this.storage, this.userModelClasses, this.outbox, this.modelInstanceCreator, MutationEvent, this.amplifyConfig, this.authModeStrategy, errorHandler, conflictHandler, this.amplifyContext);\n this.datastoreConnectivity =\n this.connectivityMonitor || new datastoreConnectivity_1.default();\n }\n start(params) {\n return new rxjs_1.Observable(observer => {\n logger.log('starting sync engine...');\n let subscriptions = [];\n this.runningProcesses.add(async () => {\n try {\n await this.setupModels(params);\n }\n catch (err) {\n observer.error(err);\n return;\n }\n // this is awaited at the bottom. so, we don't need to register\n // this explicitly with the context. it's already contained.\n const startPromise = new Promise((doneStarting, failedStarting) => {\n this.datastoreConnectivity.status().subscribe(async ({ online }) => this.runningProcesses.isOpen &&\n this.runningProcesses.add(async (onTerminate) => {\n // From offline to online\n if (online && !this.online) {\n this.online = online;\n observer.next({\n type: ControlMessage.SYNC_ENGINE_NETWORK_STATUS,\n data: {\n active: this.online,\n },\n });\n let ctlSubsObservable;\n let dataSubsObservable;\n this.stopDisruptionListener =\n this.startDisruptionListener();\n //#region GraphQL Subscriptions\n [ctlSubsObservable, dataSubsObservable] =\n this.subscriptionsProcessor.start();\n try {\n await new Promise((resolve, reject) => {\n onTerminate.then(reject);\n const ctlSubsSubscription = ctlSubsObservable.subscribe({\n next: msg => {\n if (msg === subscription_1.CONTROL_MSG.CONNECTED) {\n resolve();\n }\n },\n error: err => {\n reject(err);\n const handleDisconnect = this.disconnectionHandler();\n handleDisconnect(err);\n },\n });\n subscriptions.push(ctlSubsSubscription);\n });\n }\n catch (err) {\n observer.error(err);\n failedStarting();\n return;\n }\n logger.log('Realtime ready');\n observer.next({\n type: ControlMessage.SYNC_ENGINE_SUBSCRIPTIONS_ESTABLISHED,\n });\n //#endregion\n //#region Base & Sync queries\n try {\n await new Promise((resolve, reject) => {\n const syncQuerySubscription = this.syncQueriesObservable().subscribe({\n next: message => {\n const { type } = message;\n if (type ===\n ControlMessage.SYNC_ENGINE_SYNC_QUERIES_READY) {\n resolve();\n }\n observer.next(message);\n },\n complete: () => {\n resolve();\n },\n error: error => {\n reject(error);\n },\n });\n if (syncQuerySubscription) {\n subscriptions.push(syncQuerySubscription);\n }\n });\n }\n catch (error) {\n observer.error(error);\n failedStarting();\n return;\n }\n //#endregion\n //#region process mutations (outbox)\n subscriptions.push(this.mutationsProcessor\n .start()\n .subscribe(({ modelDefinition, model: item, hasMore }) => this.runningProcesses.add(async () => {\n const modelConstructor = this.userModelClasses[modelDefinition.name];\n const model = this.modelInstanceCreator(modelConstructor, item);\n await this.storage.runExclusive(storage => this.modelMerger.merge(storage, model, modelDefinition));\n observer.next({\n type: ControlMessage.SYNC_ENGINE_OUTBOX_MUTATION_PROCESSED,\n data: {\n model: modelConstructor,\n element: model,\n },\n });\n observer.next({\n type: ControlMessage.SYNC_ENGINE_OUTBOX_STATUS,\n data: {\n isEmpty: !hasMore,\n },\n });\n }, 'mutation processor event')));\n //#endregion\n //#region Merge subscriptions buffer\n subscriptions.push(dataSubsObservable.subscribe(([_transformerMutationType, modelDefinition, item]) => this.runningProcesses.add(async () => {\n const modelConstructor = this.userModelClasses[modelDefinition.name];\n const model = this.modelInstanceCreator(modelConstructor, item);\n await this.storage.runExclusive(storage => this.modelMerger.merge(storage, model, modelDefinition));\n }, 'subscription dataSubsObservable event')));\n //#endregion\n }\n else if (!online) {\n this.online = online;\n observer.next({\n type: ControlMessage.SYNC_ENGINE_NETWORK_STATUS,\n data: {\n active: this.online,\n },\n });\n subscriptions.forEach(sub => sub.unsubscribe());\n subscriptions = [];\n }\n doneStarting();\n }, 'datastore connectivity event'));\n });\n this.storage\n .observe(null, null, ownSymbol)\n .pipe((0, rxjs_1.filter)(({ model }) => {\n const modelDefinition = this.getModelDefinition(model);\n return modelDefinition.syncable === true;\n }))\n .subscribe({\n next: async ({ opType, model, element, condition }) => this.runningProcesses.add(async () => {\n const namespace = this.schema.namespaces[this.namespaceResolver(model)];\n const MutationEventConstructor = this.modelClasses['MutationEvent'];\n const modelDefinition = this.getModelDefinition(model);\n const graphQLCondition = (0, utils_2.predicateToGraphQLCondition)(condition, modelDefinition);\n const mutationEvent = (0, utils_2.createMutationInstanceFromModelOperation)(namespace.relationships, this.getModelDefinition(model), opType, model, element, graphQLCondition, MutationEventConstructor, this.modelInstanceCreator);\n await this.outbox.enqueue(this.storage, mutationEvent);\n observer.next({\n type: ControlMessage.SYNC_ENGINE_OUTBOX_MUTATION_ENQUEUED,\n data: {\n model,\n element,\n },\n });\n observer.next({\n type: ControlMessage.SYNC_ENGINE_OUTBOX_STATUS,\n data: {\n isEmpty: false,\n },\n });\n await startPromise;\n // Set by the this.datastoreConnectivity.status().subscribe() loop\n if (this.online) {\n this.mutationsProcessor.resume();\n }\n }, 'storage event'),\n });\n observer.next({\n type: ControlMessage.SYNC_ENGINE_STORAGE_SUBSCRIBED,\n });\n const hasMutationsInOutbox = (await this.outbox.peek(this.storage)) === undefined;\n observer.next({\n type: ControlMessage.SYNC_ENGINE_OUTBOX_STATUS,\n data: {\n isEmpty: hasMutationsInOutbox,\n },\n });\n await startPromise;\n observer.next({\n type: ControlMessage.SYNC_ENGINE_READY,\n });\n }, 'sync start');\n });\n }\n async getModelsMetadataWithNextFullSync(currentTimeStamp) {\n const modelLastSync = new Map((await this.runningProcesses.add(() => this.getModelsMetadata(), 'sync/index getModelsMetadataWithNextFullSync')).map(({ namespace, model, lastSync, lastFullSync, fullSyncInterval, lastSyncPredicate, }) => {\n const nextFullSync = lastFullSync + fullSyncInterval;\n const syncFrom = !lastFullSync || nextFullSync < currentTimeStamp\n ? 0 // perform full sync if expired\n : lastSync; // perform delta sync\n return [\n this.schema.namespaces[namespace].models[model],\n [namespace, syncFrom],\n ];\n }));\n return modelLastSync;\n }\n syncQueriesObservable() {\n if (!this.online) {\n return (0, rxjs_1.of)({}); // TODO(v6): fix this\n }\n return new rxjs_1.Observable(observer => {\n let syncQueriesSubscription;\n this.runningProcesses.isOpen &&\n this.runningProcesses.add(async (onTerminate) => {\n let terminated = false;\n while (!observer.closed && !terminated) {\n const count = new WeakMap();\n const modelLastSync = await this.getModelsMetadataWithNextFullSync(Date.now());\n const paginatingModels = new Set(modelLastSync.keys());\n let lastFullSyncStartedAt;\n let syncInterval;\n let start;\n let syncDuration;\n let lastStartedAt;\n await new Promise((resolve, reject) => {\n if (!this.runningProcesses.isOpen)\n resolve();\n onTerminate.then(() => resolve());\n syncQueriesSubscription = this.syncQueriesProcessor\n .start(modelLastSync)\n .subscribe({\n next: async ({ namespace, modelDefinition, items, done, startedAt, isFullSync, }) => {\n const modelConstructor = this.userModelClasses[modelDefinition.name];\n if (!count.has(modelConstructor)) {\n count.set(modelConstructor, {\n new: 0,\n updated: 0,\n deleted: 0,\n });\n start = (0, util_1.getNow)();\n lastStartedAt =\n lastStartedAt === undefined\n ? startedAt\n : Math.max(lastStartedAt, startedAt);\n }\n /**\n * If there are mutations in the outbox for a given id, those need to be\n * merged individually. Otherwise, we can merge them in batches.\n */\n await this.storage.runExclusive(async (storage) => {\n const idsInOutbox = await this.outbox.getModelIds(storage);\n const oneByOne = [];\n const page = items.filter(item => {\n const itemId = (0, utils_2.getIdentifierValue)(modelDefinition, item);\n if (!idsInOutbox.has(itemId)) {\n return true;\n }\n oneByOne.push(item);\n return false;\n });\n const opTypeCount = [];\n for (const item of oneByOne) {\n const opType = await this.modelMerger.merge(storage, item, modelDefinition);\n if (opType !== undefined) {\n opTypeCount.push([item, opType]);\n }\n }\n opTypeCount.push(...(await this.modelMerger.mergePage(storage, modelConstructor, page, modelDefinition)));\n const counts = count.get(modelConstructor);\n opTypeCount.forEach(([, opType]) => {\n switch (opType) {\n case types_1.OpType.INSERT:\n counts.new++;\n break;\n case types_1.OpType.UPDATE:\n counts.updated++;\n break;\n case types_1.OpType.DELETE:\n counts.deleted++;\n break;\n default:\n throw new Error(`Invalid opType ${opType}`);\n }\n });\n });\n if (done) {\n const { name: modelName } = modelDefinition;\n //#region update last sync for type\n let modelMetadata = await this.getModelMetadata(namespace, modelName);\n const { lastFullSync, fullSyncInterval } = modelMetadata;\n syncInterval = fullSyncInterval;\n lastFullSyncStartedAt =\n lastFullSyncStartedAt === undefined\n ? lastFullSync\n : Math.max(lastFullSyncStartedAt, isFullSync ? startedAt : lastFullSync);\n modelMetadata = this.modelClasses\n .ModelMetadata.copyOf(modelMetadata, draft => {\n draft.lastSync = startedAt;\n draft.lastFullSync = isFullSync\n ? startedAt\n : modelMetadata.lastFullSync;\n });\n await this.storage.save(modelMetadata, undefined, ownSymbol);\n //#endregion\n const counts = count.get(modelConstructor);\n this.modelSyncedStatus.set(modelConstructor, true);\n observer.next({\n type: ControlMessage.SYNC_ENGINE_MODEL_SYNCED,\n data: {\n model: modelConstructor,\n isFullSync,\n isDeltaSync: !isFullSync,\n counts,\n },\n });\n paginatingModels.delete(modelDefinition);\n if (paginatingModels.size === 0) {\n syncDuration = (0, util_1.getNow)() - start;\n resolve();\n observer.next({\n type: ControlMessage.SYNC_ENGINE_SYNC_QUERIES_READY,\n });\n syncQueriesSubscription.unsubscribe();\n }\n }\n },\n error: error => {\n observer.error(error);\n },\n });\n observer.next({\n type: ControlMessage.SYNC_ENGINE_SYNC_QUERIES_STARTED,\n data: {\n models: Array.from(paginatingModels).map(({ name }) => name),\n },\n });\n });\n // null is cast to 0 resulting in unexpected behavior.\n // undefined in arithmetic operations results in NaN also resulting in unexpected behavior.\n // If lastFullSyncStartedAt is null this is the first sync.\n // Assume lastStartedAt is is also newest full sync.\n let msNextFullSync;\n if (!lastFullSyncStartedAt) {\n msNextFullSync = syncInterval - syncDuration;\n }\n else {\n msNextFullSync =\n lastFullSyncStartedAt +\n syncInterval -\n (lastStartedAt + syncDuration);\n }\n logger.debug(`Next fullSync in ${msNextFullSync / 1000} seconds. (${new Date(Date.now() + msNextFullSync)})`);\n // TODO: create `BackgroundProcessManager.sleep()` ... but, need to put\n // a lot of thought into what that contract looks like to\n // support possible use-cases:\n //\n // 1. non-cancelable\n // 2. cancelable, unsleep on exit()\n // 3. cancelable, throw Error on exit()\n // 4. cancelable, callback first on exit()?\n // 5. ... etc. ? ...\n //\n // TLDR; this is a lot of complexity here for a sleep(),\n // but, it's not clear to me yet how to support an\n // extensible, centralized cancelable `sleep()` elegantly.\n await this.runningProcesses.add(async (onTerminate) => {\n let sleepTimer;\n let unsleep;\n const sleep = new Promise(_unsleep => {\n unsleep = _unsleep;\n sleepTimer = setTimeout(unsleep, msNextFullSync);\n });\n onTerminate.then(() => {\n terminated = true;\n this.syncQueriesObservableStartSleeping();\n unsleep();\n });\n this.unsleepSyncQueriesObservable = unsleep;\n this.syncQueriesObservableStartSleeping();\n return sleep;\n }, 'syncQueriesObservable sleep');\n this.unsleepSyncQueriesObservable = null;\n this.waitForSleepState = new Promise(resolve => {\n this.syncQueriesObservableStartSleeping = resolve;\n });\n }\n }, 'syncQueriesObservable main');\n });\n }\n disconnectionHandler() {\n return (msg) => {\n // This implementation is tied to AWSAppSyncRealTimeProvider 'Connection closed', 'Timeout disconnect' msg\n if (api_graphql_1.CONTROL_MSG.CONNECTION_CLOSED === msg ||\n api_graphql_1.CONTROL_MSG.TIMEOUT_DISCONNECT === msg) {\n this.datastoreConnectivity.socketDisconnected();\n }\n };\n }\n unsubscribeConnectivity() {\n this.datastoreConnectivity.unsubscribe();\n }\n /**\n * Stops all subscription activities and resolves when all activies report\n * that they're disconnected, done retrying, etc..\n */\n async stop() {\n logger.debug('stopping sync engine');\n /**\n * Gracefully disconnecting subscribers first just prevents *more* work\n * from entering the pipelines.\n */\n this.unsubscribeConnectivity();\n /**\n * Stop listening for websocket connection disruption\n */\n this.stopDisruptionListener && this.stopDisruptionListener();\n /**\n * aggressively shut down any lingering background processes.\n * some of this might be semi-redundant with unsubscribing. however,\n * unsubscribing doesn't allow us to wait for settling.\n * (Whereas `stop()` does.)\n */\n await this.mutationsProcessor.stop();\n await this.subscriptionsProcessor.stop();\n await this.datastoreConnectivity.stop();\n await this.syncQueriesProcessor.stop();\n await this.runningProcesses.close();\n await this.runningProcesses.open();\n logger.debug('sync engine stopped and ready to restart');\n }\n async setupModels(params) {\n const { fullSyncInterval } = params;\n const ModelMetadataConstructor = this.modelClasses\n .ModelMetadata;\n const models = [];\n let savedModel;\n Object.values(this.schema.namespaces).forEach(namespace => {\n Object.values(namespace.models)\n .filter(({ syncable }) => syncable)\n .forEach(model => {\n models.push([namespace.name, model]);\n if (namespace.name === util_1.USER) {\n const modelConstructor = this.userModelClasses[model.name];\n this.modelSyncedStatus.set(modelConstructor, false);\n }\n });\n });\n const promises = models.map(async ([namespace, model]) => {\n const modelMetadata = await this.getModelMetadata(namespace, model.name);\n const syncPredicate = predicates_1.ModelPredicateCreator.getPredicates(this.syncPredicates.get(model), false);\n const lastSyncPredicate = syncPredicate\n ? JSON.stringify(syncPredicate)\n : null;\n if (modelMetadata === undefined) {\n [[savedModel]] = await this.storage.save(this.modelInstanceCreator(ModelMetadataConstructor, {\n model: model.name,\n namespace,\n lastSync: null,\n fullSyncInterval,\n lastFullSync: null,\n lastSyncPredicate,\n }), undefined, ownSymbol);\n }\n else {\n const prevSyncPredicate = modelMetadata.lastSyncPredicate\n ? modelMetadata.lastSyncPredicate\n : null;\n const syncPredicateUpdated = prevSyncPredicate !== lastSyncPredicate;\n [[savedModel]] = await this.storage.save(ModelMetadataConstructor.copyOf(modelMetadata, draft => {\n draft.fullSyncInterval = fullSyncInterval;\n // perform a base sync if the syncPredicate changed in between calls to DataStore.start\n // ensures that the local store contains all the data specified by the syncExpression\n if (syncPredicateUpdated) {\n draft.lastSync = null;\n draft.lastFullSync = null;\n draft.lastSyncPredicate = lastSyncPredicate;\n }\n }));\n }\n return savedModel;\n });\n const result = {};\n for (const modelMetadata of await Promise.all(promises)) {\n const { model: modelName } = modelMetadata;\n result[modelName] = modelMetadata;\n }\n return result;\n }\n async getModelsMetadata() {\n const ModelMetadata = this.modelClasses\n .ModelMetadata;\n const modelsMetadata = await this.storage.query(ModelMetadata);\n return modelsMetadata;\n }\n async getModelMetadata(namespace, model) {\n const ModelMetadata = this.modelClasses\n .ModelMetadata;\n const predicate = predicates_1.ModelPredicateCreator.createFromAST(this.schema.namespaces[util_1.SYNC].models[ModelMetadata.name], { and: [{ namespace: { eq: namespace } }, { model: { eq: model } }] });\n const [modelMetadata] = await this.storage.query(ModelMetadata, predicate, {\n page: 0,\n limit: 1,\n });\n return modelMetadata;\n }\n getModelDefinition(modelConstructor) {\n const namespaceName = this.namespaceResolver(modelConstructor);\n const modelDefinition = this.schema.namespaces[namespaceName].models[modelConstructor.name];\n return modelDefinition;\n }\n static getNamespace() {\n const namespace = {\n name: util_1.SYNC,\n relationships: {},\n enums: {\n OperationType: {\n name: 'OperationType',\n values: ['CREATE', 'UPDATE', 'DELETE'],\n },\n },\n nonModels: {},\n models: {\n MutationEvent: {\n name: 'MutationEvent',\n pluralName: 'MutationEvents',\n syncable: false,\n fields: {\n id: {\n name: 'id',\n type: 'ID',\n isRequired: true,\n isArray: false,\n },\n model: {\n name: 'model',\n type: 'String',\n isRequired: true,\n isArray: false,\n },\n data: {\n name: 'data',\n type: 'String',\n isRequired: true,\n isArray: false,\n },\n modelId: {\n name: 'modelId',\n type: 'String',\n isRequired: true,\n isArray: false,\n },\n operation: {\n name: 'operation',\n type: {\n enum: 'Operationtype',\n },\n isArray: false,\n isRequired: true,\n },\n condition: {\n name: 'condition',\n type: 'String',\n isArray: false,\n isRequired: true,\n },\n },\n },\n ModelMetadata: {\n name: 'ModelMetadata',\n pluralName: 'ModelsMetadata',\n syncable: false,\n fields: {\n id: {\n name: 'id',\n type: 'ID',\n isRequired: true,\n isArray: false,\n },\n namespace: {\n name: 'namespace',\n type: 'String',\n isRequired: true,\n isArray: false,\n },\n model: {\n name: 'model',\n type: 'String',\n isRequired: true,\n isArray: false,\n },\n lastSync: {\n name: 'lastSync',\n type: 'Int',\n isRequired: false,\n isArray: false,\n },\n lastFullSync: {\n name: 'lastFullSync',\n type: 'Int',\n isRequired: false,\n isArray: false,\n },\n fullSyncInterval: {\n name: 'fullSyncInterval',\n type: 'Int',\n isRequired: true,\n isArray: false,\n },\n lastSyncPredicate: {\n name: 'lastSyncPredicate',\n type: 'String',\n isRequired: false,\n isArray: false,\n },\n },\n },\n },\n };\n return namespace;\n }\n /**\n * listen for websocket connection disruption\n *\n * May indicate there was a period of time where messages\n * from AppSync were missed. A sync needs to be triggered to\n * retrieve the missed data.\n */\n startDisruptionListener() {\n return core_1.Hub.listen('api', (data) => {\n if (data.source === 'PubSub' &&\n data.payload.event === api_graphql_1.CONNECTION_STATE_CHANGE) {\n const connectionState = data.payload.data\n .connectionState;\n switch (connectionState) {\n // Do not need to listen for ConnectionDisruptedPendingNetwork\n // Normal network reconnection logic will handle the sync\n case api_graphql_1.ConnectionState.ConnectionDisrupted:\n this.connectionDisrupted = true;\n break;\n case api_graphql_1.ConnectionState.Connected:\n if (this.connectionDisrupted) {\n this.scheduleSync();\n }\n this.connectionDisrupted = false;\n break;\n }\n }\n });\n }\n /*\n * Schedule a sync to start when syncQueriesObservable enters sleep state\n * Start sync immediately if syncQueriesObservable is already in sleep state\n */\n scheduleSync() {\n return (this.runningProcesses.isOpen &&\n this.runningProcesses.add(() => this.waitForSleepState.then(() => {\n // unsleepSyncQueriesObservable will be set if waitForSleepState has resolved\n this.unsleepSyncQueriesObservable();\n })));\n }\n}\nexports.SyncEngine = SyncEngine;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/sync/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyncEngine = exports.ControlMessage = void 0;\nconst tslib_1 = require(\"tslib\");\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst core_1 = require(\"@aws-amplify/core\");\nconst rxjs_1 = require(\"rxjs\");\nconst api_graphql_1 = require(\"@aws-amplify/api-graphql\");\nconst predicates_1 = require(\"../predicates\");\nconst types_1 = require(\"../types\");\nconst util_1 = require(\"../util\");\nconst datastoreConnectivity_1 = tslib_1.__importDefault(require(\"./datastoreConnectivity\"));\nconst merger_1 = require(\"./merger\");\nconst outbox_1 = require(\"./outbox\");\nconst mutation_1 = require(\"./processors/mutation\");\nconst subscription_1 = require(\"./processors/subscription\");\nconst sync_1 = require(\"./processors/sync\");\nconst utils_2 = require(\"./utils\");\nconst logger = new core_1.ConsoleLogger('DataStore');\nconst ownSymbol = Symbol('sync');\nvar ControlMessage;\n(function (ControlMessage) {\n ControlMessage[\"SYNC_ENGINE_STORAGE_SUBSCRIBED\"] = \"storageSubscribed\";\n ControlMessage[\"SYNC_ENGINE_SUBSCRIPTIONS_ESTABLISHED\"] = \"subscriptionsEstablished\";\n ControlMessage[\"SYNC_ENGINE_SYNC_QUERIES_STARTED\"] = \"syncQueriesStarted\";\n ControlMessage[\"SYNC_ENGINE_SYNC_QUERIES_READY\"] = \"syncQueriesReady\";\n ControlMessage[\"SYNC_ENGINE_MODEL_SYNCED\"] = \"modelSynced\";\n ControlMessage[\"SYNC_ENGINE_OUTBOX_MUTATION_ENQUEUED\"] = \"outboxMutationEnqueued\";\n ControlMessage[\"SYNC_ENGINE_OUTBOX_MUTATION_PROCESSED\"] = \"outboxMutationProcessed\";\n ControlMessage[\"SYNC_ENGINE_OUTBOX_STATUS\"] = \"outboxStatus\";\n ControlMessage[\"SYNC_ENGINE_NETWORK_STATUS\"] = \"networkStatus\";\n ControlMessage[\"SYNC_ENGINE_READY\"] = \"ready\";\n})(ControlMessage = exports.ControlMessage || (exports.ControlMessage = {}));\nclass SyncEngine {\n getModelSyncedStatus(modelConstructor) {\n return this.modelSyncedStatus.get(modelConstructor);\n }\n constructor(schema, namespaceResolver, modelClasses, userModelClasses, storage, modelInstanceCreator, conflictHandler, errorHandler, syncPredicates, amplifyConfig = {}, authModeStrategy, amplifyContext, connectivityMonitor) {\n this.schema = schema;\n this.namespaceResolver = namespaceResolver;\n this.modelClasses = modelClasses;\n this.userModelClasses = userModelClasses;\n this.storage = storage;\n this.modelInstanceCreator = modelInstanceCreator;\n this.syncPredicates = syncPredicates;\n this.amplifyConfig = amplifyConfig;\n this.authModeStrategy = authModeStrategy;\n this.amplifyContext = amplifyContext;\n this.connectivityMonitor = connectivityMonitor;\n this.online = false;\n this.modelSyncedStatus = new WeakMap();\n this.connectionDisrupted = false;\n this.runningProcesses = new utils_1.BackgroundProcessManager();\n this.waitForSleepState = new Promise(resolve => {\n this.syncQueriesObservableStartSleeping = resolve;\n });\n const MutationEventCtor = this.modelClasses\n .MutationEvent;\n this.outbox = new outbox_1.MutationEventOutbox(this.schema, MutationEventCtor, modelInstanceCreator, ownSymbol);\n this.modelMerger = new merger_1.ModelMerger(this.outbox, ownSymbol);\n this.syncQueriesProcessor = new sync_1.SyncProcessor(this.schema, this.syncPredicates, this.amplifyConfig, this.authModeStrategy, errorHandler, this.amplifyContext);\n this.subscriptionsProcessor = new subscription_1.SubscriptionProcessor(this.schema, this.syncPredicates, this.amplifyConfig, this.authModeStrategy, errorHandler, this.amplifyContext);\n this.mutationsProcessor = new mutation_1.MutationProcessor(this.schema, this.storage, this.userModelClasses, this.outbox, this.modelInstanceCreator, MutationEventCtor, this.amplifyConfig, this.authModeStrategy, errorHandler, conflictHandler, this.amplifyContext);\n this.datastoreConnectivity =\n this.connectivityMonitor || new datastoreConnectivity_1.default();\n }\n start(params) {\n return new rxjs_1.Observable(observer => {\n logger.log('starting sync engine...');\n let subscriptions = [];\n this.runningProcesses.add(async () => {\n try {\n await this.setupModels(params);\n }\n catch (err) {\n observer.error(err);\n return;\n }\n // this is awaited at the bottom. so, we don't need to register\n // this explicitly with the context. it's already contained.\n const startPromise = new Promise((resolve, reject) => {\n const doneStarting = resolve;\n const failedStarting = reject;\n this.datastoreConnectivity.status().subscribe(async ({ online }) => this.runningProcesses.isOpen &&\n this.runningProcesses.add(async (onTerminate) => {\n // From offline to online\n if (online && !this.online) {\n this.online = online;\n observer.next({\n type: ControlMessage.SYNC_ENGINE_NETWORK_STATUS,\n data: {\n active: this.online,\n },\n });\n this.stopDisruptionListener = this.startDisruptionListener();\n // #region GraphQL Subscriptions\n const [ctlSubsObservable, dataSubsObservable] = this.subscriptionsProcessor.start();\n try {\n await new Promise((_resolve, _reject) => {\n onTerminate.then(_reject);\n const ctlSubsSubscription = ctlSubsObservable.subscribe({\n next: msg => {\n if (msg === subscription_1.CONTROL_MSG.CONNECTED) {\n _resolve();\n }\n },\n error: err => {\n _reject(err);\n const handleDisconnect = this.disconnectionHandler();\n handleDisconnect(err);\n },\n });\n subscriptions.push(ctlSubsSubscription);\n });\n }\n catch (err) {\n observer.error(err);\n failedStarting();\n return;\n }\n logger.log('Realtime ready');\n observer.next({\n type: ControlMessage.SYNC_ENGINE_SUBSCRIPTIONS_ESTABLISHED,\n });\n // #endregion\n // #region Base & Sync queries\n try {\n await new Promise((_resolve, _reject) => {\n const syncQuerySubscription = this.syncQueriesObservable().subscribe({\n next: message => {\n const { type } = message;\n if (type ===\n ControlMessage.SYNC_ENGINE_SYNC_QUERIES_READY) {\n _resolve();\n }\n observer.next(message);\n },\n complete: () => {\n _resolve();\n },\n error: error => {\n _reject(error);\n },\n });\n if (syncQuerySubscription) {\n subscriptions.push(syncQuerySubscription);\n }\n });\n }\n catch (error) {\n observer.error(error);\n failedStarting();\n return;\n }\n // #endregion\n // #region process mutations (outbox)\n subscriptions.push(this.mutationsProcessor\n .start()\n .subscribe(({ modelDefinition, model: item, hasMore }) => this.runningProcesses.add(async () => {\n const modelConstructor = this.userModelClasses[modelDefinition.name];\n const model = this.modelInstanceCreator(modelConstructor, item);\n await this.storage.runExclusive(storage => this.modelMerger.merge(storage, model, modelDefinition));\n observer.next({\n type: ControlMessage.SYNC_ENGINE_OUTBOX_MUTATION_PROCESSED,\n data: {\n model: modelConstructor,\n element: model,\n },\n });\n observer.next({\n type: ControlMessage.SYNC_ENGINE_OUTBOX_STATUS,\n data: {\n isEmpty: !hasMore,\n },\n });\n }, 'mutation processor event')));\n // #endregion\n // #region Merge subscriptions buffer\n subscriptions.push(dataSubsObservable.subscribe(([_transformerMutationType, modelDefinition, item]) => this.runningProcesses.add(async () => {\n const modelConstructor = this.userModelClasses[modelDefinition.name];\n const model = this.modelInstanceCreator(modelConstructor, item);\n await this.storage.runExclusive(storage => this.modelMerger.merge(storage, model, modelDefinition));\n }, 'subscription dataSubsObservable event')));\n // #endregion\n }\n else if (!online) {\n this.online = online;\n observer.next({\n type: ControlMessage.SYNC_ENGINE_NETWORK_STATUS,\n data: {\n active: this.online,\n },\n });\n subscriptions.forEach(sub => {\n sub.unsubscribe();\n });\n subscriptions = [];\n }\n doneStarting();\n }, 'datastore connectivity event'));\n });\n this.storage\n .observe(null, null, ownSymbol)\n .pipe((0, rxjs_1.filter)(({ model }) => {\n const modelDefinition = this.getModelDefinition(model);\n return modelDefinition.syncable === true;\n }))\n .subscribe({\n next: async ({ opType, model, element, condition }) => this.runningProcesses.add(async () => {\n const namespace = this.schema.namespaces[this.namespaceResolver(model)];\n const MutationEventConstructor = this.modelClasses\n .MutationEvent;\n const modelDefinition = this.getModelDefinition(model);\n const graphQLCondition = (0, utils_2.predicateToGraphQLCondition)(condition, modelDefinition);\n const mutationEvent = (0, utils_2.createMutationInstanceFromModelOperation)(namespace.relationships, this.getModelDefinition(model), opType, model, element, graphQLCondition, MutationEventConstructor, this.modelInstanceCreator);\n await this.outbox.enqueue(this.storage, mutationEvent);\n observer.next({\n type: ControlMessage.SYNC_ENGINE_OUTBOX_MUTATION_ENQUEUED,\n data: {\n model,\n element,\n },\n });\n observer.next({\n type: ControlMessage.SYNC_ENGINE_OUTBOX_STATUS,\n data: {\n isEmpty: false,\n },\n });\n await startPromise;\n // Set by the this.datastoreConnectivity.status().subscribe() loop\n if (this.online) {\n this.mutationsProcessor.resume();\n }\n }, 'storage event'),\n });\n observer.next({\n type: ControlMessage.SYNC_ENGINE_STORAGE_SUBSCRIBED,\n });\n const hasMutationsInOutbox = (await this.outbox.peek(this.storage)) === undefined;\n observer.next({\n type: ControlMessage.SYNC_ENGINE_OUTBOX_STATUS,\n data: {\n isEmpty: hasMutationsInOutbox,\n },\n });\n await startPromise;\n observer.next({\n type: ControlMessage.SYNC_ENGINE_READY,\n });\n }, 'sync start');\n });\n }\n async getModelsMetadataWithNextFullSync(currentTimeStamp) {\n const modelLastSync = new Map((await this.runningProcesses.add(() => this.getModelsMetadata(), 'sync/index getModelsMetadataWithNextFullSync')).map(({ namespace, model, lastSync, lastFullSync, fullSyncInterval }) => {\n const nextFullSync = lastFullSync + fullSyncInterval;\n const syncFrom = !lastFullSync || nextFullSync < currentTimeStamp\n ? 0 // perform full sync if expired\n : lastSync; // perform delta sync\n return [\n this.schema.namespaces[namespace].models[model],\n [namespace, syncFrom],\n ];\n }));\n return modelLastSync;\n }\n syncQueriesObservable() {\n if (!this.online) {\n return (0, rxjs_1.of)({}); // TODO(v6): fix this\n }\n return new rxjs_1.Observable(observer => {\n let syncQueriesSubscription;\n this.runningProcesses.isOpen &&\n this.runningProcesses.add(async (onTerminate) => {\n let terminated = false;\n while (!observer.closed && !terminated) {\n const count = new WeakMap();\n const modelLastSync = await this.getModelsMetadataWithNextFullSync(Date.now());\n const paginatingModels = new Set(modelLastSync.keys());\n let lastFullSyncStartedAt;\n let syncInterval;\n let start;\n let syncDuration;\n let lastStartedAt;\n await new Promise((resolve, _reject) => {\n if (!this.runningProcesses.isOpen)\n resolve();\n onTerminate.then(() => {\n resolve();\n });\n syncQueriesSubscription = this.syncQueriesProcessor\n .start(modelLastSync)\n .subscribe({\n next: async ({ namespace, modelDefinition, items, done, startedAt, isFullSync, }) => {\n const modelConstructor = this.userModelClasses[modelDefinition.name];\n if (!count.has(modelConstructor)) {\n count.set(modelConstructor, {\n new: 0,\n updated: 0,\n deleted: 0,\n });\n start = (0, util_1.getNow)();\n lastStartedAt =\n lastStartedAt === undefined\n ? startedAt\n : Math.max(lastStartedAt, startedAt);\n }\n /**\n * If there are mutations in the outbox for a given id, those need to be\n * merged individually. Otherwise, we can merge them in batches.\n */\n await this.storage.runExclusive(async (storage) => {\n const idsInOutbox = await this.outbox.getModelIds(storage);\n const oneByOne = [];\n const page = items.filter(item => {\n const itemId = (0, utils_2.getIdentifierValue)(modelDefinition, item);\n if (!idsInOutbox.has(itemId)) {\n return true;\n }\n oneByOne.push(item);\n return false;\n });\n const opTypeCount = [];\n for (const item of oneByOne) {\n const opType = await this.modelMerger.merge(storage, item, modelDefinition);\n if (opType !== undefined) {\n opTypeCount.push([item, opType]);\n }\n }\n opTypeCount.push(...(await this.modelMerger.mergePage(storage, modelConstructor, page, modelDefinition)));\n const counts = count.get(modelConstructor);\n opTypeCount.forEach(([, opType]) => {\n switch (opType) {\n case types_1.OpType.INSERT:\n counts.new++;\n break;\n case types_1.OpType.UPDATE:\n counts.updated++;\n break;\n case types_1.OpType.DELETE:\n counts.deleted++;\n break;\n default:\n throw new Error(`Invalid opType ${opType}`);\n }\n });\n });\n if (done) {\n const { name: modelName } = modelDefinition;\n // #region update last sync for type\n let modelMetadata = await this.getModelMetadata(namespace, modelName);\n const { lastFullSync, fullSyncInterval } = modelMetadata;\n syncInterval = fullSyncInterval;\n lastFullSyncStartedAt =\n lastFullSyncStartedAt === undefined\n ? lastFullSync\n : Math.max(lastFullSyncStartedAt, isFullSync ? startedAt : lastFullSync);\n modelMetadata = this.modelClasses\n .ModelMetadata.copyOf(modelMetadata, draft => {\n draft.lastSync = startedAt;\n draft.lastFullSync = isFullSync\n ? startedAt\n : modelMetadata.lastFullSync;\n });\n await this.storage.save(modelMetadata, undefined, ownSymbol);\n // #endregion\n const counts = count.get(modelConstructor);\n this.modelSyncedStatus.set(modelConstructor, true);\n observer.next({\n type: ControlMessage.SYNC_ENGINE_MODEL_SYNCED,\n data: {\n model: modelConstructor,\n isFullSync,\n isDeltaSync: !isFullSync,\n counts,\n },\n });\n paginatingModels.delete(modelDefinition);\n if (paginatingModels.size === 0) {\n syncDuration = (0, util_1.getNow)() - start;\n resolve();\n observer.next({\n type: ControlMessage.SYNC_ENGINE_SYNC_QUERIES_READY,\n });\n syncQueriesSubscription.unsubscribe();\n }\n }\n },\n error: error => {\n observer.error(error);\n },\n });\n observer.next({\n type: ControlMessage.SYNC_ENGINE_SYNC_QUERIES_STARTED,\n data: {\n models: Array.from(paginatingModels).map(({ name }) => name),\n },\n });\n });\n // null is cast to 0 resulting in unexpected behavior.\n // undefined in arithmetic operations results in NaN also resulting in unexpected behavior.\n // If lastFullSyncStartedAt is null this is the first sync.\n // Assume lastStartedAt is is also newest full sync.\n let msNextFullSync;\n if (!lastFullSyncStartedAt) {\n msNextFullSync = syncInterval - syncDuration;\n }\n else {\n msNextFullSync =\n lastFullSyncStartedAt +\n syncInterval -\n (lastStartedAt + syncDuration);\n }\n logger.debug(`Next fullSync in ${msNextFullSync / 1000} seconds. (${new Date(Date.now() + msNextFullSync)})`);\n // TODO: create `BackgroundProcessManager.sleep()` ... but, need to put\n // a lot of thought into what that contract looks like to\n // support possible use-cases:\n //\n // 1. non-cancelable\n // 2. cancelable, unsleep on exit()\n // 3. cancelable, throw Error on exit()\n // 4. cancelable, callback first on exit()?\n // 5. ... etc. ? ...\n //\n // TLDR; this is a lot of complexity here for a sleep(),\n // but, it's not clear to me yet how to support an\n // extensible, centralized cancelable `sleep()` elegantly.\n await this.runningProcesses.add(async (onRunningProcessTerminate) => {\n let _sleepTimer;\n let unsleep;\n const sleep = new Promise(resolve => {\n unsleep = resolve;\n _sleepTimer = setTimeout(unsleep, msNextFullSync);\n });\n onRunningProcessTerminate.then(() => {\n terminated = true;\n this.syncQueriesObservableStartSleeping();\n unsleep();\n });\n this.unsleepSyncQueriesObservable = unsleep;\n this.syncQueriesObservableStartSleeping();\n return sleep;\n }, 'syncQueriesObservable sleep');\n this.unsleepSyncQueriesObservable = null;\n this.waitForSleepState = new Promise(resolve => {\n this.syncQueriesObservableStartSleeping = resolve;\n });\n }\n }, 'syncQueriesObservable main');\n });\n }\n disconnectionHandler() {\n return (msg) => {\n // This implementation is tied to AWSAppSyncRealTimeProvider 'Connection closed', 'Timeout disconnect' msg\n if (api_graphql_1.CONTROL_MSG.CONNECTION_CLOSED === msg ||\n api_graphql_1.CONTROL_MSG.TIMEOUT_DISCONNECT === msg) {\n this.datastoreConnectivity.socketDisconnected();\n }\n };\n }\n unsubscribeConnectivity() {\n this.datastoreConnectivity.unsubscribe();\n }\n /**\n * Stops all subscription activities and resolves when all activies report\n * that they're disconnected, done retrying, etc..\n */\n async stop() {\n logger.debug('stopping sync engine');\n /**\n * Gracefully disconnecting subscribers first just prevents *more* work\n * from entering the pipelines.\n */\n this.unsubscribeConnectivity();\n /**\n * Stop listening for websocket connection disruption\n */\n this.stopDisruptionListener && this.stopDisruptionListener();\n /**\n * aggressively shut down any lingering background processes.\n * some of this might be semi-redundant with unsubscribing. however,\n * unsubscribing doesn't allow us to wait for settling.\n * (Whereas `stop()` does.)\n */\n await this.mutationsProcessor.stop();\n await this.subscriptionsProcessor.stop();\n await this.datastoreConnectivity.stop();\n await this.syncQueriesProcessor.stop();\n await this.runningProcesses.close();\n await this.runningProcesses.open();\n logger.debug('sync engine stopped and ready to restart');\n }\n async setupModels(params) {\n const { fullSyncInterval } = params;\n const ModelMetadataConstructor = this.modelClasses\n .ModelMetadata;\n const models = [];\n let savedModel;\n Object.values(this.schema.namespaces).forEach(namespace => {\n Object.values(namespace.models)\n .filter(({ syncable }) => syncable)\n .forEach(model => {\n models.push([namespace.name, model]);\n if (namespace.name === util_1.USER) {\n const modelConstructor = this.userModelClasses[model.name];\n this.modelSyncedStatus.set(modelConstructor, false);\n }\n });\n });\n const promises = models.map(async ([namespace, model]) => {\n const modelMetadata = await this.getModelMetadata(namespace, model.name);\n const syncPredicate = predicates_1.ModelPredicateCreator.getPredicates(this.syncPredicates.get(model), false);\n const lastSyncPredicate = syncPredicate\n ? JSON.stringify(syncPredicate)\n : null;\n if (modelMetadata === undefined) {\n [[savedModel]] = await this.storage.save(this.modelInstanceCreator(ModelMetadataConstructor, {\n model: model.name,\n namespace,\n lastSync: null,\n fullSyncInterval,\n lastFullSync: null,\n lastSyncPredicate,\n }), undefined, ownSymbol);\n }\n else {\n const prevSyncPredicate = modelMetadata.lastSyncPredicate\n ? modelMetadata.lastSyncPredicate\n : null;\n const syncPredicateUpdated = prevSyncPredicate !== lastSyncPredicate;\n [[savedModel]] = await this.storage.save(ModelMetadataConstructor.copyOf(modelMetadata, draft => {\n draft.fullSyncInterval = fullSyncInterval;\n // perform a base sync if the syncPredicate changed in between calls to DataStore.start\n // ensures that the local store contains all the data specified by the syncExpression\n if (syncPredicateUpdated) {\n draft.lastSync = null;\n draft.lastFullSync = null;\n draft.lastSyncPredicate = lastSyncPredicate;\n }\n }));\n }\n return savedModel;\n });\n const result = {};\n for (const modelMetadata of await Promise.all(promises)) {\n const { model: modelName } = modelMetadata;\n result[modelName] = modelMetadata;\n }\n return result;\n }\n async getModelsMetadata() {\n const ModelMetadataCtor = this.modelClasses\n .ModelMetadata;\n const modelsMetadata = await this.storage.query(ModelMetadataCtor);\n return modelsMetadata;\n }\n async getModelMetadata(namespace, model) {\n const ModelMetadataCtor = this.modelClasses\n .ModelMetadata;\n const predicate = predicates_1.ModelPredicateCreator.createFromAST(this.schema.namespaces[util_1.SYNC].models[ModelMetadataCtor.name], { and: [{ namespace: { eq: namespace } }, { model: { eq: model } }] });\n const [modelMetadata] = await this.storage.query(ModelMetadataCtor, predicate, {\n page: 0,\n limit: 1,\n });\n return modelMetadata;\n }\n getModelDefinition(modelConstructor) {\n const namespaceName = this.namespaceResolver(modelConstructor);\n const modelDefinition = this.schema.namespaces[namespaceName].models[modelConstructor.name];\n return modelDefinition;\n }\n static getNamespace() {\n const namespace = {\n name: util_1.SYNC,\n relationships: {},\n enums: {\n OperationType: {\n name: 'OperationType',\n values: ['CREATE', 'UPDATE', 'DELETE'],\n },\n },\n nonModels: {},\n models: {\n MutationEvent: {\n name: 'MutationEvent',\n pluralName: 'MutationEvents',\n syncable: false,\n fields: {\n id: {\n name: 'id',\n type: 'ID',\n isRequired: true,\n isArray: false,\n },\n model: {\n name: 'model',\n type: 'String',\n isRequired: true,\n isArray: false,\n },\n data: {\n name: 'data',\n type: 'String',\n isRequired: true,\n isArray: false,\n },\n modelId: {\n name: 'modelId',\n type: 'String',\n isRequired: true,\n isArray: false,\n },\n operation: {\n name: 'operation',\n type: {\n enum: 'Operationtype',\n },\n isArray: false,\n isRequired: true,\n },\n condition: {\n name: 'condition',\n type: 'String',\n isArray: false,\n isRequired: true,\n },\n },\n },\n ModelMetadata: {\n name: 'ModelMetadata',\n pluralName: 'ModelsMetadata',\n syncable: false,\n fields: {\n id: {\n name: 'id',\n type: 'ID',\n isRequired: true,\n isArray: false,\n },\n namespace: {\n name: 'namespace',\n type: 'String',\n isRequired: true,\n isArray: false,\n },\n model: {\n name: 'model',\n type: 'String',\n isRequired: true,\n isArray: false,\n },\n lastSync: {\n name: 'lastSync',\n type: 'Int',\n isRequired: false,\n isArray: false,\n },\n lastFullSync: {\n name: 'lastFullSync',\n type: 'Int',\n isRequired: false,\n isArray: false,\n },\n fullSyncInterval: {\n name: 'fullSyncInterval',\n type: 'Int',\n isRequired: true,\n isArray: false,\n },\n lastSyncPredicate: {\n name: 'lastSyncPredicate',\n type: 'String',\n isRequired: false,\n isArray: false,\n },\n },\n },\n },\n };\n return namespace;\n }\n /**\n * listen for websocket connection disruption\n *\n * May indicate there was a period of time where messages\n * from AppSync were missed. A sync needs to be triggered to\n * retrieve the missed data.\n */\n startDisruptionListener() {\n return core_1.Hub.listen('api', (data) => {\n if (data.source === 'PubSub' &&\n data.payload.event === api_graphql_1.CONNECTION_STATE_CHANGE) {\n const connectionState = data.payload.data\n .connectionState;\n switch (connectionState) {\n // Do not need to listen for ConnectionDisruptedPendingNetwork\n // Normal network reconnection logic will handle the sync\n case api_graphql_1.ConnectionState.ConnectionDisrupted:\n this.connectionDisrupted = true;\n break;\n case api_graphql_1.ConnectionState.Connected:\n if (this.connectionDisrupted) {\n this.scheduleSync();\n }\n this.connectionDisrupted = false;\n break;\n }\n }\n });\n }\n /*\n * Schedule a sync to start when syncQueriesObservable enters sleep state\n * Start sync immediately if syncQueriesObservable is already in sleep state\n */\n scheduleSync() {\n return (this.runningProcesses.isOpen &&\n this.runningProcesses.add(() => this.waitForSleepState.then(() => {\n // unsleepSyncQueriesObservable will be set if waitForSleepState has resolved\n this.unsleepSyncQueriesObservable();\n })));\n }\n}\nexports.SyncEngine = SyncEngine;\n"],"names":[],"mappings":"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"}
|
package/dist/cjs/sync/merger.js
CHANGED
|
@@ -39,7 +39,7 @@ class ModelMerger {
|
|
|
39
39
|
itemsMap.set(modelId, item);
|
|
40
40
|
}
|
|
41
41
|
const page = [...itemsMap.values()];
|
|
42
|
-
return
|
|
42
|
+
return storage.batchSave(modelConstructor, page, this.ownSymbol);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
exports.ModelMerger = ModelMerger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merger.js","sources":["../../../src/sync/merger.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ModelMerger = void 0;\nconst types_1 = require(\"../types\");\nconst utils_1 = require(\"./utils\");\n// https://github.com/aws-amplify/amplify-js/blob/datastore-docs/packages/datastore/docs/sync-engine.md#merger\nclass ModelMerger {\n constructor(outbox, ownSymbol) {\n this.outbox = outbox;\n this.ownSymbol = ownSymbol;\n }\n /**\n *\n * @param storage Storage adapter that contains the data.\n * @param model The model from an outbox mutation.\n * @returns The type of operation (INSERT/UPDATE/DELETE)\n */\n async merge(storage, model, modelDefinition) {\n let result;\n const mutationsForModel = await this.outbox.getForModel(storage, model, modelDefinition);\n const isDelete = model._deleted;\n if (mutationsForModel.length === 0) {\n if (isDelete) {\n result = types_1.OpType.DELETE;\n await storage.delete(model, undefined, this.ownSymbol);\n }\n else {\n [[, result]] = await storage.save(model, undefined, this.ownSymbol);\n }\n }\n return result;\n }\n async mergePage(storage, modelConstructor, items, modelDefinition) {\n const itemsMap = new Map();\n for (const item of items) {\n // merge items by model id. Latest record for a given id remains.\n const modelId = (0, utils_1.getIdentifierValue)(modelDefinition, item);\n itemsMap.set(modelId, item);\n }\n const page = [...itemsMap.values()];\n return
|
|
1
|
+
{"version":3,"file":"merger.js","sources":["../../../src/sync/merger.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ModelMerger = void 0;\nconst types_1 = require(\"../types\");\nconst utils_1 = require(\"./utils\");\n// https://github.com/aws-amplify/amplify-js/blob/datastore-docs/packages/datastore/docs/sync-engine.md#merger\nclass ModelMerger {\n constructor(outbox, ownSymbol) {\n this.outbox = outbox;\n this.ownSymbol = ownSymbol;\n }\n /**\n *\n * @param storage Storage adapter that contains the data.\n * @param model The model from an outbox mutation.\n * @returns The type of operation (INSERT/UPDATE/DELETE)\n */\n async merge(storage, model, modelDefinition) {\n let result;\n const mutationsForModel = await this.outbox.getForModel(storage, model, modelDefinition);\n const isDelete = model._deleted;\n if (mutationsForModel.length === 0) {\n if (isDelete) {\n result = types_1.OpType.DELETE;\n await storage.delete(model, undefined, this.ownSymbol);\n }\n else {\n [[, result]] = await storage.save(model, undefined, this.ownSymbol);\n }\n }\n return result;\n }\n async mergePage(storage, modelConstructor, items, modelDefinition) {\n const itemsMap = new Map();\n for (const item of items) {\n // merge items by model id. Latest record for a given id remains.\n const modelId = (0, utils_1.getIdentifierValue)(modelDefinition, item);\n itemsMap.set(modelId, item);\n }\n const page = [...itemsMap.values()];\n return storage.batchSave(modelConstructor, page, this.ownSymbol);\n }\n}\nexports.ModelMerger = ModelMerger;\n"],"names":[],"mappings":";;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;AAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACpC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACnC;AACA,MAAM,WAAW,CAAC;AAClB,IAAI,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE;AACnC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE;AACjD,QAAQ,IAAI,MAAM,CAAC;AACnB,QAAQ,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AACjG,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C,YAAY,IAAI,QAAQ,EAAE;AAC1B,gBAAgB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/C,gBAAgB,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACvE,aAAa;AACb,iBAAiB;AACjB,gBAAgB,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACpF,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,MAAM,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE;AACvE,QAAQ,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;AACnC,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAClC;AACA,YAAY,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,kBAAkB,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;AACnF,YAAY,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxC,SAAS;AACT,QAAQ,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5C,QAAQ,OAAO,OAAO,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACzE,KAAK;AACL,CAAC;AACD,OAAO,CAAC,WAAW,GAAG,WAAW;;"}
|
package/dist/cjs/sync/outbox.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.MutationEventOutbox = void 0;
|
|
5
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
5
7
|
const predicates_1 = require("../predicates");
|
|
6
8
|
const types_1 = require("../types");
|
|
7
9
|
const util_1 = require("../util");
|
|
@@ -9,15 +11,15 @@ const utils_1 = require("./utils");
|
|
|
9
11
|
// TODO: Persist deleted ids
|
|
10
12
|
// https://github.com/aws-amplify/amplify-js/blob/datastore-docs/packages/datastore/docs/sync-engine.md#outbox
|
|
11
13
|
class MutationEventOutbox {
|
|
12
|
-
constructor(schema,
|
|
14
|
+
constructor(schema, _MutationEvent, modelInstanceCreator, ownSymbol) {
|
|
13
15
|
this.schema = schema;
|
|
14
|
-
this.
|
|
16
|
+
this._MutationEvent = _MutationEvent;
|
|
15
17
|
this.modelInstanceCreator = modelInstanceCreator;
|
|
16
18
|
this.ownSymbol = ownSymbol;
|
|
17
19
|
}
|
|
18
20
|
async enqueue(storage, mutationEvent) {
|
|
19
21
|
await storage.runExclusive(async (s) => {
|
|
20
|
-
const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models
|
|
22
|
+
const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models.MutationEvent;
|
|
21
23
|
// `id` is the key for the record in the mutationEvent;
|
|
22
24
|
// `modelId` is the key for the actual record that was mutated
|
|
23
25
|
const predicate = predicates_1.ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {
|
|
@@ -27,7 +29,7 @@ class MutationEventOutbox {
|
|
|
27
29
|
],
|
|
28
30
|
});
|
|
29
31
|
// Check if there are any other records with same id
|
|
30
|
-
const [first] = await s.query(this.
|
|
32
|
+
const [first] = await s.query(this._MutationEvent, predicate);
|
|
31
33
|
// No other record with same modelId, so enqueue
|
|
32
34
|
if (first === undefined) {
|
|
33
35
|
await s.save(mutationEvent, undefined, this.ownSymbol);
|
|
@@ -37,14 +39,14 @@ class MutationEventOutbox {
|
|
|
37
39
|
const { operation: incomingMutationType } = mutationEvent;
|
|
38
40
|
if (first.operation === utils_1.TransformerMutationType.CREATE) {
|
|
39
41
|
if (incomingMutationType === utils_1.TransformerMutationType.DELETE) {
|
|
40
|
-
await s.delete(this.
|
|
42
|
+
await s.delete(this._MutationEvent, predicate);
|
|
41
43
|
}
|
|
42
44
|
else {
|
|
43
45
|
// first gets updated with the incoming mutation's data, condition intentionally skipped
|
|
44
46
|
// we need to merge the fields for a create and update mutation to prevent
|
|
45
47
|
// data loss, since update mutations only include changed fields
|
|
46
48
|
const merged = this.mergeUserFields(first, mutationEvent);
|
|
47
|
-
await s.save(this.
|
|
49
|
+
await s.save(this._MutationEvent.copyOf(first, draft => {
|
|
48
50
|
draft.data = merged.data;
|
|
49
51
|
}), undefined, this.ownSymbol);
|
|
50
52
|
}
|
|
@@ -57,7 +59,7 @@ class MutationEventOutbox {
|
|
|
57
59
|
if (Object.keys(incomingCondition).length === 0) {
|
|
58
60
|
merged = this.mergeUserFields(first, mutationEvent);
|
|
59
61
|
// delete all for model
|
|
60
|
-
await s.delete(this.
|
|
62
|
+
await s.delete(this._MutationEvent, predicate);
|
|
61
63
|
}
|
|
62
64
|
merged = merged || mutationEvent;
|
|
63
65
|
// Enqueue new one
|
|
@@ -82,20 +84,20 @@ class MutationEventOutbox {
|
|
|
82
84
|
* @param storage
|
|
83
85
|
*/
|
|
84
86
|
async peek(storage) {
|
|
85
|
-
const head = await storage.queryOne(this.
|
|
87
|
+
const head = await storage.queryOne(this._MutationEvent, types_1.QueryOne.FIRST);
|
|
86
88
|
this.inProgressMutationEventId = head ? head.id : undefined;
|
|
87
89
|
return head;
|
|
88
90
|
}
|
|
89
91
|
async getForModel(storage, model, userModelDefinition) {
|
|
90
92
|
const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models.MutationEvent;
|
|
91
93
|
const modelId = (0, utils_1.getIdentifierValue)(userModelDefinition, model);
|
|
92
|
-
const mutationEvents = await storage.query(this.
|
|
94
|
+
const mutationEvents = await storage.query(this._MutationEvent, predicates_1.ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {
|
|
93
95
|
and: { modelId: { eq: modelId } },
|
|
94
96
|
}));
|
|
95
97
|
return mutationEvents;
|
|
96
98
|
}
|
|
97
99
|
async getModelIds(storage) {
|
|
98
|
-
const mutationEvents = await storage.query(this.
|
|
100
|
+
const mutationEvents = await storage.query(this._MutationEvent);
|
|
99
101
|
const result = new Set();
|
|
100
102
|
mutationEvents.forEach(({ modelId }) => result.add(modelId));
|
|
101
103
|
return result;
|
|
@@ -126,8 +128,8 @@ class MutationEventOutbox {
|
|
|
126
128
|
if (!(0, util_1.directedValueEquality)(outgoingData, incomingData, true)) {
|
|
127
129
|
return;
|
|
128
130
|
}
|
|
129
|
-
const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models
|
|
130
|
-
const userModelDefinition = this.schema.namespaces
|
|
131
|
+
const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models.MutationEvent;
|
|
132
|
+
const userModelDefinition = this.schema.namespaces.user.models[head.model];
|
|
131
133
|
const recordId = (0, utils_1.getIdentifierValue)(userModelDefinition, record);
|
|
132
134
|
const predicate = predicates_1.ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {
|
|
133
135
|
and: [
|
|
@@ -135,19 +137,19 @@ class MutationEventOutbox {
|
|
|
135
137
|
{ id: { ne: this.inProgressMutationEventId } },
|
|
136
138
|
],
|
|
137
139
|
});
|
|
138
|
-
const outdatedMutations = await storage.query(this.
|
|
140
|
+
const outdatedMutations = await storage.query(this._MutationEvent, predicate);
|
|
139
141
|
if (!outdatedMutations.length) {
|
|
140
142
|
return;
|
|
141
143
|
}
|
|
142
144
|
const reconciledMutations = outdatedMutations.map(m => {
|
|
143
145
|
const oldData = JSON.parse(m.data);
|
|
144
146
|
const newData = { ...oldData, _version, _lastChangedAt };
|
|
145
|
-
return this.
|
|
147
|
+
return this._MutationEvent.copyOf(m, draft => {
|
|
146
148
|
draft.data = JSON.stringify(newData);
|
|
147
149
|
});
|
|
148
150
|
});
|
|
149
|
-
await storage.delete(this.
|
|
150
|
-
await Promise.all(reconciledMutations.map(async (m) =>
|
|
151
|
+
await storage.delete(this._MutationEvent, predicate);
|
|
152
|
+
await Promise.all(reconciledMutations.map(async (m) => storage.save(m, undefined, this.ownSymbol)));
|
|
151
153
|
}
|
|
152
154
|
mergeUserFields(previous, current) {
|
|
153
155
|
const { _version, _lastChangedAt, _deleted, ...previousData } = JSON.parse(previous.data);
|
|
@@ -159,7 +161,7 @@ class MutationEventOutbox {
|
|
|
159
161
|
...previousData,
|
|
160
162
|
...currentData,
|
|
161
163
|
});
|
|
162
|
-
return this.modelInstanceCreator(this.
|
|
164
|
+
return this.modelInstanceCreator(this._MutationEvent, {
|
|
163
165
|
...current,
|
|
164
166
|
data,
|
|
165
167
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbox.js","sources":["../../../src/sync/outbox.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MutationEventOutbox = void 0;\nconst predicates_1 = require(\"../predicates\");\nconst types_1 = require(\"../types\");\nconst util_1 = require(\"../util\");\nconst utils_1 = require(\"./utils\");\n// TODO: Persist deleted ids\n// https://github.com/aws-amplify/amplify-js/blob/datastore-docs/packages/datastore/docs/sync-engine.md#outbox\nclass MutationEventOutbox {\n constructor(schema, MutationEvent, modelInstanceCreator, ownSymbol) {\n this.schema = schema;\n this.MutationEvent = MutationEvent;\n this.modelInstanceCreator = modelInstanceCreator;\n this.ownSymbol = ownSymbol;\n }\n async enqueue(storage, mutationEvent) {\n await storage.runExclusive(async (s) => {\n const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models['MutationEvent'];\n // `id` is the key for the record in the mutationEvent;\n // `modelId` is the key for the actual record that was mutated\n const predicate = predicates_1.ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {\n and: [\n { modelId: { eq: mutationEvent.modelId } },\n { id: { ne: this.inProgressMutationEventId } },\n ],\n });\n // Check if there are any other records with same id\n const [first] = await s.query(this.MutationEvent, predicate);\n // No other record with same modelId, so enqueue\n if (first === undefined) {\n await s.save(mutationEvent, undefined, this.ownSymbol);\n return;\n }\n // There was an enqueued mutation for the modelId, so continue\n const { operation: incomingMutationType } = mutationEvent;\n if (first.operation === utils_1.TransformerMutationType.CREATE) {\n if (incomingMutationType === utils_1.TransformerMutationType.DELETE) {\n await s.delete(this.MutationEvent, predicate);\n }\n else {\n // first gets updated with the incoming mutation's data, condition intentionally skipped\n // we need to merge the fields for a create and update mutation to prevent\n // data loss, since update mutations only include changed fields\n const merged = this.mergeUserFields(first, mutationEvent);\n await s.save(this.MutationEvent.copyOf(first, draft => {\n draft.data = merged.data;\n }), undefined, this.ownSymbol);\n }\n }\n else {\n const { condition: incomingConditionJSON } = mutationEvent;\n const incomingCondition = JSON.parse(incomingConditionJSON);\n let merged;\n // If no condition\n if (Object.keys(incomingCondition).length === 0) {\n merged = this.mergeUserFields(first, mutationEvent);\n // delete all for model\n await s.delete(this.MutationEvent, predicate);\n }\n merged = merged || mutationEvent;\n // Enqueue new one\n await s.save(merged, undefined, this.ownSymbol);\n }\n });\n }\n async dequeue(storage, record, recordOp) {\n const head = await this.peek(storage);\n if (record) {\n await this.syncOutboxVersionsOnDequeue(storage, record, head, recordOp);\n }\n if (head) {\n await storage.delete(head);\n }\n this.inProgressMutationEventId = undefined;\n return head;\n }\n /**\n * Doing a peek() implies that the mutation goes \"inProgress\"\n *\n * @param storage\n */\n async peek(storage) {\n const head = await storage.queryOne(this.MutationEvent, types_1.QueryOne.FIRST);\n this.inProgressMutationEventId = head ? head.id : undefined;\n return head;\n }\n async getForModel(storage, model, userModelDefinition) {\n const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models.MutationEvent;\n const modelId = (0, utils_1.getIdentifierValue)(userModelDefinition, model);\n const mutationEvents = await storage.query(this.MutationEvent, predicates_1.ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {\n and: { modelId: { eq: modelId } },\n }));\n return mutationEvents;\n }\n async getModelIds(storage) {\n const mutationEvents = await storage.query(this.MutationEvent);\n const result = new Set();\n mutationEvents.forEach(({ modelId }) => result.add(modelId));\n return result;\n }\n // applies _version from the AppSync mutation response to other items\n // in the mutation queue with the same id\n // see https://github.com/aws-amplify/amplify-js/pull/7354 for more details\n async syncOutboxVersionsOnDequeue(storage, record, head, recordOp) {\n if (head?.operation !== recordOp) {\n return;\n }\n const { _version, _lastChangedAt, _deleted, ..._incomingData } = record;\n const incomingData = this.removeTimestampFields(head.model, _incomingData);\n const data = JSON.parse(head.data);\n if (!data) {\n return;\n }\n const { _version: __version, _lastChangedAt: __lastChangedAt, _deleted: __deleted, ..._outgoingData } = data;\n const outgoingData = this.removeTimestampFields(head.model, _outgoingData);\n // Don't sync the version when the data in the response does not match the data\n // in the request, i.e., when there's a handled conflict\n //\n // NOTE: `incomingData` contains all the fields in the record received from AppSync\n // and `outgoingData` only contains updated fields sent to AppSync\n // If all send data isn't matched in the returned data then the update was rejected\n // by AppSync and we should not update the version on other outbox entries for this\n // object\n if (!(0, util_1.directedValueEquality)(outgoingData, incomingData, true)) {\n return;\n }\n const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models['MutationEvent'];\n const userModelDefinition = this.schema.namespaces['user'].models[head.model];\n const recordId = (0, utils_1.getIdentifierValue)(userModelDefinition, record);\n const predicate = predicates_1.ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {\n and: [\n { modelId: { eq: recordId } },\n { id: { ne: this.inProgressMutationEventId } },\n ],\n });\n const outdatedMutations = await storage.query(this.MutationEvent, predicate);\n if (!outdatedMutations.length) {\n return;\n }\n const reconciledMutations = outdatedMutations.map(m => {\n const oldData = JSON.parse(m.data);\n const newData = { ...oldData, _version, _lastChangedAt };\n return this.MutationEvent.copyOf(m, draft => {\n draft.data = JSON.stringify(newData);\n });\n });\n await storage.delete(this.MutationEvent, predicate);\n await Promise.all(reconciledMutations.map(async (m) => await storage.save(m, undefined, this.ownSymbol)));\n }\n mergeUserFields(previous, current) {\n const { _version, _lastChangedAt, _deleted, ...previousData } = JSON.parse(previous.data);\n const { _version: __version, _lastChangedAt: __lastChangedAt, _deleted: __deleted, ...currentData } = JSON.parse(current.data);\n const data = JSON.stringify({\n _version,\n _lastChangedAt,\n _deleted,\n ...previousData,\n ...currentData,\n });\n return this.modelInstanceCreator(this.MutationEvent, {\n ...current,\n data,\n });\n }\n /*\n if a model is using custom timestamp fields\n the custom field names will be stored in the model attributes\n\n e.g.\n \"attributes\": [\n {\n \"type\": \"model\",\n \"properties\": {\n \"timestamps\": {\n \"createdAt\": \"createdOn\",\n \"updatedAt\": \"updatedOn\"\n }\n }\n }\n ]\n */\n removeTimestampFields(model, record) {\n const CREATED_AT_DEFAULT_KEY = 'createdAt';\n const UPDATED_AT_DEFAULT_KEY = 'updatedAt';\n let createdTimestampKey = CREATED_AT_DEFAULT_KEY;\n let updatedTimestampKey = UPDATED_AT_DEFAULT_KEY;\n const modelAttributes = this.schema.namespaces[util_1.USER].models[model].attributes?.find(attr => attr.type === 'model');\n const timestampFieldsMap = modelAttributes?.properties?.timestamps;\n if (timestampFieldsMap) {\n createdTimestampKey = timestampFieldsMap[CREATED_AT_DEFAULT_KEY];\n updatedTimestampKey = timestampFieldsMap[UPDATED_AT_DEFAULT_KEY];\n }\n delete record[createdTimestampKey];\n delete record[updatedTimestampKey];\n return record;\n }\n}\nexports.MutationEventOutbox = MutationEventOutbox;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"outbox.js","sources":["../../../src/sync/outbox.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MutationEventOutbox = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst predicates_1 = require(\"../predicates\");\nconst types_1 = require(\"../types\");\nconst util_1 = require(\"../util\");\nconst utils_1 = require(\"./utils\");\n// TODO: Persist deleted ids\n// https://github.com/aws-amplify/amplify-js/blob/datastore-docs/packages/datastore/docs/sync-engine.md#outbox\nclass MutationEventOutbox {\n constructor(schema, _MutationEvent, modelInstanceCreator, ownSymbol) {\n this.schema = schema;\n this._MutationEvent = _MutationEvent;\n this.modelInstanceCreator = modelInstanceCreator;\n this.ownSymbol = ownSymbol;\n }\n async enqueue(storage, mutationEvent) {\n await storage.runExclusive(async (s) => {\n const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models.MutationEvent;\n // `id` is the key for the record in the mutationEvent;\n // `modelId` is the key for the actual record that was mutated\n const predicate = predicates_1.ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {\n and: [\n { modelId: { eq: mutationEvent.modelId } },\n { id: { ne: this.inProgressMutationEventId } },\n ],\n });\n // Check if there are any other records with same id\n const [first] = await s.query(this._MutationEvent, predicate);\n // No other record with same modelId, so enqueue\n if (first === undefined) {\n await s.save(mutationEvent, undefined, this.ownSymbol);\n return;\n }\n // There was an enqueued mutation for the modelId, so continue\n const { operation: incomingMutationType } = mutationEvent;\n if (first.operation === utils_1.TransformerMutationType.CREATE) {\n if (incomingMutationType === utils_1.TransformerMutationType.DELETE) {\n await s.delete(this._MutationEvent, predicate);\n }\n else {\n // first gets updated with the incoming mutation's data, condition intentionally skipped\n // we need to merge the fields for a create and update mutation to prevent\n // data loss, since update mutations only include changed fields\n const merged = this.mergeUserFields(first, mutationEvent);\n await s.save(this._MutationEvent.copyOf(first, draft => {\n draft.data = merged.data;\n }), undefined, this.ownSymbol);\n }\n }\n else {\n const { condition: incomingConditionJSON } = mutationEvent;\n const incomingCondition = JSON.parse(incomingConditionJSON);\n let merged;\n // If no condition\n if (Object.keys(incomingCondition).length === 0) {\n merged = this.mergeUserFields(first, mutationEvent);\n // delete all for model\n await s.delete(this._MutationEvent, predicate);\n }\n merged = merged || mutationEvent;\n // Enqueue new one\n await s.save(merged, undefined, this.ownSymbol);\n }\n });\n }\n async dequeue(storage, record, recordOp) {\n const head = await this.peek(storage);\n if (record) {\n await this.syncOutboxVersionsOnDequeue(storage, record, head, recordOp);\n }\n if (head) {\n await storage.delete(head);\n }\n this.inProgressMutationEventId = undefined;\n return head;\n }\n /**\n * Doing a peek() implies that the mutation goes \"inProgress\"\n *\n * @param storage\n */\n async peek(storage) {\n const head = await storage.queryOne(this._MutationEvent, types_1.QueryOne.FIRST);\n this.inProgressMutationEventId = head ? head.id : undefined;\n return head;\n }\n async getForModel(storage, model, userModelDefinition) {\n const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models.MutationEvent;\n const modelId = (0, utils_1.getIdentifierValue)(userModelDefinition, model);\n const mutationEvents = await storage.query(this._MutationEvent, predicates_1.ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {\n and: { modelId: { eq: modelId } },\n }));\n return mutationEvents;\n }\n async getModelIds(storage) {\n const mutationEvents = await storage.query(this._MutationEvent);\n const result = new Set();\n mutationEvents.forEach(({ modelId }) => result.add(modelId));\n return result;\n }\n // applies _version from the AppSync mutation response to other items\n // in the mutation queue with the same id\n // see https://github.com/aws-amplify/amplify-js/pull/7354 for more details\n async syncOutboxVersionsOnDequeue(storage, record, head, recordOp) {\n if (head?.operation !== recordOp) {\n return;\n }\n const { _version, _lastChangedAt, _deleted, ..._incomingData } = record;\n const incomingData = this.removeTimestampFields(head.model, _incomingData);\n const data = JSON.parse(head.data);\n if (!data) {\n return;\n }\n const { _version: __version, _lastChangedAt: __lastChangedAt, _deleted: __deleted, ..._outgoingData } = data;\n const outgoingData = this.removeTimestampFields(head.model, _outgoingData);\n // Don't sync the version when the data in the response does not match the data\n // in the request, i.e., when there's a handled conflict\n //\n // NOTE: `incomingData` contains all the fields in the record received from AppSync\n // and `outgoingData` only contains updated fields sent to AppSync\n // If all send data isn't matched in the returned data then the update was rejected\n // by AppSync and we should not update the version on other outbox entries for this\n // object\n if (!(0, util_1.directedValueEquality)(outgoingData, incomingData, true)) {\n return;\n }\n const mutationEventModelDefinition = this.schema.namespaces[util_1.SYNC].models.MutationEvent;\n const userModelDefinition = this.schema.namespaces.user.models[head.model];\n const recordId = (0, utils_1.getIdentifierValue)(userModelDefinition, record);\n const predicate = predicates_1.ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {\n and: [\n { modelId: { eq: recordId } },\n { id: { ne: this.inProgressMutationEventId } },\n ],\n });\n const outdatedMutations = await storage.query(this._MutationEvent, predicate);\n if (!outdatedMutations.length) {\n return;\n }\n const reconciledMutations = outdatedMutations.map(m => {\n const oldData = JSON.parse(m.data);\n const newData = { ...oldData, _version, _lastChangedAt };\n return this._MutationEvent.copyOf(m, draft => {\n draft.data = JSON.stringify(newData);\n });\n });\n await storage.delete(this._MutationEvent, predicate);\n await Promise.all(reconciledMutations.map(async (m) => storage.save(m, undefined, this.ownSymbol)));\n }\n mergeUserFields(previous, current) {\n const { _version, _lastChangedAt, _deleted, ...previousData } = JSON.parse(previous.data);\n const { _version: __version, _lastChangedAt: __lastChangedAt, _deleted: __deleted, ...currentData } = JSON.parse(current.data);\n const data = JSON.stringify({\n _version,\n _lastChangedAt,\n _deleted,\n ...previousData,\n ...currentData,\n });\n return this.modelInstanceCreator(this._MutationEvent, {\n ...current,\n data,\n });\n }\n /*\n if a model is using custom timestamp fields\n the custom field names will be stored in the model attributes\n\n e.g.\n \"attributes\": [\n {\n \"type\": \"model\",\n \"properties\": {\n \"timestamps\": {\n \"createdAt\": \"createdOn\",\n \"updatedAt\": \"updatedOn\"\n }\n }\n }\n ]\n */\n removeTimestampFields(model, record) {\n const CREATED_AT_DEFAULT_KEY = 'createdAt';\n const UPDATED_AT_DEFAULT_KEY = 'updatedAt';\n let createdTimestampKey = CREATED_AT_DEFAULT_KEY;\n let updatedTimestampKey = UPDATED_AT_DEFAULT_KEY;\n const modelAttributes = this.schema.namespaces[util_1.USER].models[model].attributes?.find(attr => attr.type === 'model');\n const timestampFieldsMap = modelAttributes?.properties?.timestamps;\n if (timestampFieldsMap) {\n createdTimestampKey = timestampFieldsMap[CREATED_AT_DEFAULT_KEY];\n updatedTimestampKey = timestampFieldsMap[UPDATED_AT_DEFAULT_KEY];\n }\n delete record[createdTimestampKey];\n delete record[updatedTimestampKey];\n return record;\n }\n}\nexports.MutationEventOutbox = MutationEventOutbox;\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorMaps.js","sources":["../../../../src/sync/processors/errorMaps.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mapErrorToType = exports.getSyncErrorType = exports.getSubscriptionErrorType = exports.getMutationErrorType = exports.syncErrorMap = exports.subscriptionErrorMap = exports.mutationErrorMap = void 0;\nconst utils_1 = require(\"../utils\");\nconst connectionTimeout = error => /^Connection failed: Connection Timeout/.test(error.message);\nconst serverError = error => (0, utils_1.resolveServiceErrorStatusCode)(error) >= 500;\nexports.mutationErrorMap = {\n BadModel: () => false,\n BadRecord: error => {\n const { message } = error;\n return (/^Cannot return \\w+ for [\\w-_]+ type/.test(message) ||\n /^Variable '.+' has coerced Null value for NonNull type/.test(message)); // newly required field, out of date client\n },\n ConfigError: () => false,\n Transient: error => connectionTimeout(error) || serverError(error),\n Unauthorized: error => error.message === 'Unauthorized' ||\n (0, utils_1.resolveServiceErrorStatusCode)(error) === 401,\n};\nexports.subscriptionErrorMap = {\n BadModel: () => false,\n BadRecord: () => false,\n ConfigError: () => false,\n Transient: observableError => {\n const error = unwrapObservableError(observableError);\n return connectionTimeout(error) || serverError(error);\n },\n Unauthorized: observableError => {\n const error = unwrapObservableError(observableError);\n return /Connection failed.+Unauthorized/.test(error.message);\n },\n};\nexports.syncErrorMap = {\n BadModel: () => false,\n BadRecord: error => /^Cannot return \\w+ for [\\w-_]+ type/.test(error.message),\n ConfigError: () => false,\n Transient: error => connectionTimeout(error) || serverError(error),\n Unauthorized: error => error.errorType === 'Unauthorized',\n};\n/**\n * Get the first error reason of an observable.\n * Allows for error maps to be easily applied to observable errors\n *\n * @param observableError an error from ZenObservable subscribe error callback\n */\nfunction unwrapObservableError(observableError) {\n const { errors: [error], } = ({\n errors: [],\n } = observableError);\n return error;\n}\nfunction getMutationErrorType(error) {\n return mapErrorToType(exports.mutationErrorMap, error);\n}\nexports.getMutationErrorType = getMutationErrorType;\nfunction getSubscriptionErrorType(error) {\n return mapErrorToType(exports.subscriptionErrorMap, error);\n}\nexports.getSubscriptionErrorType = getSubscriptionErrorType;\nfunction getSyncErrorType(error) {\n return mapErrorToType(exports.syncErrorMap, error);\n}\nexports.getSyncErrorType = getSyncErrorType;\n/**\n * Categorizes an error with a broad error type, intended to make\n * customer error handling code simpler.\n * @param errorMap Error names and a list of patterns that indicate them (each pattern as a regex or function)\n * @param error The underying error to categorize.\n */\nfunction mapErrorToType(errorMap, error) {\n const errorTypes = [...Object.keys(errorMap)];\n for (const errorType of errorTypes) {\n const matcher = errorMap[errorType];\n if (matcher?.(error)) {\n return errorType;\n }\n }\n return 'Unknown';\n}\nexports.mapErrorToType = mapErrorToType;\n"],"names":[],"mappings":";;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,GAAG,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;AAC9M,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACpC,MAAM,iBAAiB,GAAG,KAAK,IAAI,wCAAwC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChG,MAAM,WAAW,GAAG,KAAK,IAAI,IAAI,OAAO,CAAC,6BAA6B,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC;AACtF,OAAO,CAAC,gBAAgB,GAAG;AAC3B,IAAI,QAAQ,EAAE,MAAM,KAAK;AACzB,IAAI,SAAS,EAAE,KAAK,IAAI;AACxB,QAAQ,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AAClC,QAAQ,QAAQ,qCAAqC,CAAC,IAAI,CAAC,OAAO,CAAC;AACnE,YAAY,wDAAwD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACpF,KAAK;AACL,IAAI,WAAW,EAAE,MAAM,KAAK;AAC5B,IAAI,SAAS,EAAE,KAAK,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC;AACtE,IAAI,YAAY,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,cAAc;AAC3D,QAAQ,IAAI,OAAO,CAAC,6BAA6B,EAAE,KAAK,CAAC,KAAK,GAAG;AACjE,CAAC,CAAC;AACF,OAAO,CAAC,oBAAoB,GAAG;AAC/B,IAAI,QAAQ,EAAE,MAAM,KAAK;AACzB,IAAI,SAAS,EAAE,MAAM,KAAK;AAC1B,IAAI,WAAW,EAAE,MAAM,KAAK;AAC5B,IAAI,SAAS,EAAE,eAAe,IAAI;AAClC,QAAQ,MAAM,KAAK,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;AAC7D,QAAQ,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9D,KAAK;AACL,IAAI,YAAY,EAAE,eAAe,IAAI;AACrC,QAAQ,MAAM,KAAK,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;AAC7D,QAAQ,OAAO,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACrE,KAAK;AACL,CAAC,CAAC;AACF,OAAO,CAAC,YAAY,GAAG;AACvB,IAAI,QAAQ,EAAE,MAAM,KAAK;AACzB,IAAI,SAAS,EAAE,KAAK,IAAI,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACjF,IAAI,WAAW,EAAE,MAAM,KAAK;AAC5B,IAAI,SAAS,EAAE,KAAK,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC;AACtE,IAAI,YAAY,EAAE,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,cAAc;AAC7D,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qBAAqB,CAAC,eAAe,EAAE;AAChD,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"errorMaps.js","sources":["../../../../src/sync/processors/errorMaps.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mapErrorToType = exports.getSyncErrorType = exports.getSubscriptionErrorType = exports.getMutationErrorType = exports.syncErrorMap = exports.subscriptionErrorMap = exports.mutationErrorMap = void 0;\nconst utils_1 = require(\"../utils\");\nconst connectionTimeout = error => /^Connection failed: Connection Timeout/.test(error.message);\nconst serverError = error => (0, utils_1.resolveServiceErrorStatusCode)(error) >= 500;\nexports.mutationErrorMap = {\n BadModel: () => false,\n BadRecord: error => {\n const { message } = error;\n return (/^Cannot return \\w+ for [\\w-_]+ type/.test(message) ||\n /^Variable '.+' has coerced Null value for NonNull type/.test(message)); // newly required field, out of date client\n },\n ConfigError: () => false,\n Transient: error => connectionTimeout(error) || serverError(error),\n Unauthorized: error => error.message === 'Unauthorized' ||\n (0, utils_1.resolveServiceErrorStatusCode)(error) === 401,\n};\nexports.subscriptionErrorMap = {\n BadModel: () => false,\n BadRecord: () => false,\n ConfigError: () => false,\n Transient: observableError => {\n const error = unwrapObservableError(observableError);\n return connectionTimeout(error) || serverError(error);\n },\n Unauthorized: observableError => {\n const error = unwrapObservableError(observableError);\n return /Connection failed.+Unauthorized/.test(error.message);\n },\n};\nexports.syncErrorMap = {\n BadModel: () => false,\n BadRecord: error => /^Cannot return \\w+ for [\\w-_]+ type/.test(error.message),\n ConfigError: () => false,\n Transient: error => connectionTimeout(error) || serverError(error),\n Unauthorized: error => error.errorType === 'Unauthorized',\n};\n/**\n * Get the first error reason of an observable.\n * Allows for error maps to be easily applied to observable errors\n *\n * @param observableError an error from ZenObservable subscribe error callback\n */\nfunction unwrapObservableError(observableError) {\n const { errors: [error], } = ({\n // eslint-disable-next-line no-empty-pattern\n errors: [],\n } = observableError);\n return error;\n}\nfunction getMutationErrorType(error) {\n return mapErrorToType(exports.mutationErrorMap, error);\n}\nexports.getMutationErrorType = getMutationErrorType;\nfunction getSubscriptionErrorType(error) {\n return mapErrorToType(exports.subscriptionErrorMap, error);\n}\nexports.getSubscriptionErrorType = getSubscriptionErrorType;\nfunction getSyncErrorType(error) {\n return mapErrorToType(exports.syncErrorMap, error);\n}\nexports.getSyncErrorType = getSyncErrorType;\n/**\n * Categorizes an error with a broad error type, intended to make\n * customer error handling code simpler.\n * @param errorMap Error names and a list of patterns that indicate them (each pattern as a regex or function)\n * @param error The underying error to categorize.\n */\nfunction mapErrorToType(errorMap, error) {\n const errorTypes = [...Object.keys(errorMap)];\n for (const errorType of errorTypes) {\n const matcher = errorMap[errorType];\n if (matcher?.(error)) {\n return errorType;\n }\n }\n return 'Unknown';\n}\nexports.mapErrorToType = mapErrorToType;\n"],"names":[],"mappings":"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"}
|