@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.
Files changed (149) hide show
  1. package/dist/cjs/authModeStrategies/multiAuthStrategy.js +1 -1
  2. package/dist/cjs/authModeStrategies/multiAuthStrategy.js.map +1 -1
  3. package/dist/cjs/datastore/datastore.js +46 -41
  4. package/dist/cjs/datastore/datastore.js.map +1 -1
  5. package/dist/cjs/index.js +3 -1
  6. package/dist/cjs/index.js.map +1 -1
  7. package/dist/cjs/predicates/index.js +1 -0
  8. package/dist/cjs/predicates/index.js.map +1 -1
  9. package/dist/cjs/predicates/next.js +13 -12
  10. package/dist/cjs/predicates/next.js.map +1 -1
  11. package/dist/cjs/predicates/sort.js +2 -2
  12. package/dist/cjs/predicates/sort.js.map +1 -1
  13. package/dist/cjs/storage/adapter/AsyncStorageAdapter.js +21 -18
  14. package/dist/cjs/storage/adapter/AsyncStorageAdapter.js.map +1 -1
  15. package/dist/cjs/storage/adapter/AsyncStorageDatabase.js +10 -9
  16. package/dist/cjs/storage/adapter/AsyncStorageDatabase.js.map +1 -1
  17. package/dist/cjs/storage/adapter/InMemoryStore.js +4 -1
  18. package/dist/cjs/storage/adapter/InMemoryStore.js.map +1 -1
  19. package/dist/cjs/storage/adapter/IndexedDBAdapter.js +21 -23
  20. package/dist/cjs/storage/adapter/IndexedDBAdapter.js.map +1 -1
  21. package/dist/cjs/storage/adapter/StorageAdapterBase.js +7 -7
  22. package/dist/cjs/storage/adapter/StorageAdapterBase.js.map +1 -1
  23. package/dist/cjs/storage/adapter/getDefaultAdapter/index.js +4 -1
  24. package/dist/cjs/storage/adapter/getDefaultAdapter/index.js.map +1 -1
  25. package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js +1 -0
  26. package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js.map +1 -1
  27. package/dist/cjs/storage/relationship.js +1 -0
  28. package/dist/cjs/storage/relationship.js.map +1 -1
  29. package/dist/cjs/storage/storage.js +14 -14
  30. package/dist/cjs/storage/storage.js.map +1 -1
  31. package/dist/cjs/sync/datastoreConnectivity.js +0 -3
  32. package/dist/cjs/sync/datastoreConnectivity.js.map +1 -1
  33. package/dist/cjs/sync/index.js +47 -43
  34. package/dist/cjs/sync/index.js.map +1 -1
  35. package/dist/cjs/sync/merger.js +1 -1
  36. package/dist/cjs/sync/merger.js.map +1 -1
  37. package/dist/cjs/sync/outbox.js +19 -17
  38. package/dist/cjs/sync/outbox.js.map +1 -1
  39. package/dist/cjs/sync/processors/errorMaps.js.map +1 -1
  40. package/dist/cjs/sync/processors/mutation.js +31 -28
  41. package/dist/cjs/sync/processors/mutation.js.map +1 -1
  42. package/dist/cjs/sync/processors/subscription.js +21 -12
  43. package/dist/cjs/sync/processors/subscription.js.map +1 -1
  44. package/dist/cjs/sync/processors/sync.js +25 -21
  45. package/dist/cjs/sync/processors/sync.js.map +1 -1
  46. package/dist/cjs/sync/utils.js +20 -21
  47. package/dist/cjs/sync/utils.js.map +1 -1
  48. package/dist/cjs/types.js +1 -0
  49. package/dist/cjs/types.js.map +1 -1
  50. package/dist/cjs/util.js +46 -25
  51. package/dist/cjs/util.js.map +1 -1
  52. package/dist/esm/authModeStrategies/multiAuthStrategy.d.ts +1 -1
  53. package/dist/esm/authModeStrategies/multiAuthStrategy.mjs +1 -1
  54. package/dist/esm/authModeStrategies/multiAuthStrategy.mjs.map +1 -1
  55. package/dist/esm/datastore/datastore.d.ts +4 -6
  56. package/dist/esm/datastore/datastore.mjs +42 -34
  57. package/dist/esm/datastore/datastore.mjs.map +1 -1
  58. package/dist/esm/index.d.ts +1 -1
  59. package/dist/esm/index.mjs +2 -2
  60. package/dist/esm/index.mjs.map +1 -1
  61. package/dist/esm/predicates/index.mjs +1 -0
  62. package/dist/esm/predicates/index.mjs.map +1 -1
  63. package/dist/esm/predicates/next.d.ts +7 -7
  64. package/dist/esm/predicates/next.mjs +13 -12
  65. package/dist/esm/predicates/next.mjs.map +1 -1
  66. package/dist/esm/predicates/sort.d.ts +1 -1
  67. package/dist/esm/predicates/sort.mjs +2 -2
  68. package/dist/esm/predicates/sort.mjs.map +1 -1
  69. package/dist/esm/storage/adapter/AsyncStorageAdapter.d.ts +1 -1
  70. package/dist/esm/storage/adapter/AsyncStorageAdapter.mjs +21 -18
  71. package/dist/esm/storage/adapter/AsyncStorageAdapter.mjs.map +1 -1
  72. package/dist/esm/storage/adapter/AsyncStorageDatabase.mjs +10 -9
  73. package/dist/esm/storage/adapter/AsyncStorageDatabase.mjs.map +1 -1
  74. package/dist/esm/storage/adapter/InMemoryStore.mjs +4 -1
  75. package/dist/esm/storage/adapter/InMemoryStore.mjs.map +1 -1
  76. package/dist/esm/storage/adapter/IndexedDBAdapter.mjs +21 -23
  77. package/dist/esm/storage/adapter/IndexedDBAdapter.mjs.map +1 -1
  78. package/dist/esm/storage/adapter/StorageAdapterBase.d.ts +2 -2
  79. package/dist/esm/storage/adapter/StorageAdapterBase.mjs +7 -7
  80. package/dist/esm/storage/adapter/StorageAdapterBase.mjs.map +1 -1
  81. package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs +3 -1
  82. package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs.map +1 -1
  83. package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs +1 -0
  84. package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs.map +1 -1
  85. package/dist/esm/storage/adapter/index.d.ts +1 -1
  86. package/dist/esm/storage/relationship.mjs +1 -0
  87. package/dist/esm/storage/relationship.mjs.map +1 -1
  88. package/dist/esm/storage/storage.d.ts +11 -11
  89. package/dist/esm/storage/storage.mjs +10 -10
  90. package/dist/esm/storage/storage.mjs.map +1 -1
  91. package/dist/esm/sync/datastoreConnectivity.d.ts +2 -2
  92. package/dist/esm/sync/datastoreConnectivity.mjs +0 -3
  93. package/dist/esm/sync/datastoreConnectivity.mjs.map +1 -1
  94. package/dist/esm/sync/index.d.ts +3 -3
  95. package/dist/esm/sync/index.mjs +47 -43
  96. package/dist/esm/sync/index.mjs.map +1 -1
  97. package/dist/esm/sync/merger.d.ts +1 -1
  98. package/dist/esm/sync/merger.mjs +1 -1
  99. package/dist/esm/sync/merger.mjs.map +1 -1
  100. package/dist/esm/sync/outbox.d.ts +4 -4
  101. package/dist/esm/sync/outbox.mjs +19 -17
  102. package/dist/esm/sync/outbox.mjs.map +1 -1
  103. package/dist/esm/sync/processors/errorMaps.mjs.map +1 -1
  104. package/dist/esm/sync/processors/mutation.d.ts +5 -5
  105. package/dist/esm/sync/processors/mutation.mjs +31 -28
  106. package/dist/esm/sync/processors/mutation.mjs.map +1 -1
  107. package/dist/esm/sync/processors/subscription.d.ts +1 -1
  108. package/dist/esm/sync/processors/subscription.mjs +21 -12
  109. package/dist/esm/sync/processors/subscription.mjs.map +1 -1
  110. package/dist/esm/sync/processors/sync.d.ts +3 -3
  111. package/dist/esm/sync/processors/sync.mjs +13 -9
  112. package/dist/esm/sync/processors/sync.mjs.map +1 -1
  113. package/dist/esm/sync/utils.d.ts +11 -13
  114. package/dist/esm/sync/utils.mjs +20 -21
  115. package/dist/esm/sync/utils.mjs.map +1 -1
  116. package/dist/esm/types.d.ts +121 -131
  117. package/dist/esm/types.mjs +3 -2
  118. package/dist/esm/types.mjs.map +1 -1
  119. package/dist/esm/util.d.ts +5 -5
  120. package/dist/esm/util.mjs +46 -25
  121. package/dist/esm/util.mjs.map +1 -1
  122. package/package.json +74 -73
  123. package/src/authModeStrategies/multiAuthStrategy.ts +8 -4
  124. package/src/datastore/datastore.ts +145 -123
  125. package/src/index.ts +10 -8
  126. package/src/predicates/index.ts +10 -2
  127. package/src/predicates/next.ts +39 -28
  128. package/src/predicates/sort.ts +23 -26
  129. package/src/storage/adapter/AsyncStorageAdapter.ts +43 -25
  130. package/src/storage/adapter/AsyncStorageDatabase.ts +18 -10
  131. package/src/storage/adapter/InMemoryStore.ts +5 -1
  132. package/src/storage/adapter/IndexedDBAdapter.ts +50 -37
  133. package/src/storage/adapter/StorageAdapterBase.ts +24 -18
  134. package/src/storage/adapter/getDefaultAdapter/index.native.ts +1 -0
  135. package/src/storage/adapter/getDefaultAdapter/index.ts +4 -1
  136. package/src/storage/adapter/index.ts +2 -2
  137. package/src/storage/relationship.ts +5 -1
  138. package/src/storage/storage.ts +38 -30
  139. package/src/sync/datastoreConnectivity.ts +4 -6
  140. package/src/sync/index.ts +228 -230
  141. package/src/sync/merger.ts +4 -3
  142. package/src/sync/outbox.ts +26 -24
  143. package/src/sync/processors/errorMaps.ts +5 -0
  144. package/src/sync/processors/mutation.ts +80 -72
  145. package/src/sync/processors/subscription.ts +69 -53
  146. package/src/sync/processors/sync.ts +49 -37
  147. package/src/sync/utils.ts +60 -41
  148. package/src/types.ts +165 -165
  149. package/src/util.ts +89 -53
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/sync/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { BackgroundProcessManager } from '@aws-amplify/core/internals/utils';\nimport { Hub, ConsoleLogger } from '@aws-amplify/core';\nimport { filter, Observable, of } from 'rxjs';\nimport { ModelPredicateCreator } from '../predicates';\nimport { OpType, } from '../types';\nimport { getNow, SYNC, USER } from '../util';\nimport DataStoreConnectivity from './datastoreConnectivity';\nimport { ModelMerger } from './merger';\nimport { MutationEventOutbox } from './outbox';\nimport { MutationProcessor } from './processors/mutation';\nimport { CONTROL_MSG, SubscriptionProcessor } from './processors/subscription';\nimport { SyncProcessor } from './processors/sync';\nimport { createMutationInstanceFromModelOperation, getIdentifierValue, predicateToGraphQLCondition, } from './utils';\nimport { CONTROL_MSG as PUBSUB_CONTROL_MSG, ConnectionState, CONNECTION_STATE_CHANGE as PUBSUB_CONNECTION_STATE_CHANGE, } from '@aws-amplify/api-graphql';\nconst logger = new ConsoleLogger('DataStore');\nconst ownSymbol = Symbol('sync');\nexport var 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 || (ControlMessage = {}));\nexport class 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 BackgroundProcessManager();\n this.waitForSleepState = new Promise(resolve => {\n this.syncQueriesObservableStartSleeping = resolve;\n });\n const MutationEvent = this.modelClasses['MutationEvent'];\n this.outbox = new MutationEventOutbox(this.schema, MutationEvent, modelInstanceCreator, ownSymbol);\n this.modelMerger = new ModelMerger(this.outbox, ownSymbol);\n this.syncQueriesProcessor = new SyncProcessor(this.schema, this.syncPredicates, this.amplifyConfig, this.authModeStrategy, errorHandler, this.amplifyContext);\n this.subscriptionsProcessor = new SubscriptionProcessor(this.schema, this.syncPredicates, this.amplifyConfig, this.authModeStrategy, errorHandler, this.amplifyContext);\n this.mutationsProcessor = new 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();\n }\n start(params) {\n return new 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 === 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(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 = predicateToGraphQLCondition(condition, modelDefinition);\n const mutationEvent = 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 of({}); // TODO(v6): fix this\n }\n return new 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 = 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 = 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 OpType.INSERT:\n counts.new++;\n break;\n case OpType.UPDATE:\n counts.updated++;\n break;\n case 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 = 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 (PUBSUB_CONTROL_MSG.CONNECTION_CLOSED === msg ||\n PUBSUB_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 === 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 = 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 = ModelPredicateCreator.createFromAST(this.schema.namespaces[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: 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 Hub.listen('api', (data) => {\n if (data.source === 'PubSub' &&\n data.payload.event === PUBSUB_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 ConnectionState.ConnectionDisrupted:\n this.connectionDisrupted = true;\n break;\n case 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}\n"],"names":["PUBSUB_CONTROL_MSG","PUBSUB_CONNECTION_STATE_CHANGE"],"mappings":";;;;;;;;;;;;;;;AAAA;AACA;AAeA,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;AAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACvB,IAAC,eAAe;AAC1B,CAAC,UAAU,cAAc,EAAE;AAC3B,IAAI,cAAc,CAAC,gCAAgC,CAAC,GAAG,mBAAmB,CAAC;AAC3E,IAAI,cAAc,CAAC,uCAAuC,CAAC,GAAG,0BAA0B,CAAC;AACzF,IAAI,cAAc,CAAC,kCAAkC,CAAC,GAAG,oBAAoB,CAAC;AAC9E,IAAI,cAAc,CAAC,gCAAgC,CAAC,GAAG,kBAAkB,CAAC;AAC1E,IAAI,cAAc,CAAC,0BAA0B,CAAC,GAAG,aAAa,CAAC;AAC/D,IAAI,cAAc,CAAC,sCAAsC,CAAC,GAAG,wBAAwB,CAAC;AACtF,IAAI,cAAc,CAAC,uCAAuC,CAAC,GAAG,yBAAyB,CAAC;AACxF,IAAI,cAAc,CAAC,2BAA2B,CAAC,GAAG,cAAc,CAAC;AACjE,IAAI,cAAc,CAAC,4BAA4B,CAAC,GAAG,eAAe,CAAC;AACnE,IAAI,cAAc,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC;AAClD,CAAC,EAAE,cAAc,KAAK,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC;AACrC,MAAM,UAAU,CAAC;AACxB,IAAI,oBAAoB,CAAC,gBAAgB,EAAE;AAC3C,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,GAAG,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,mBAAmB,EAAE;AACpO,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AACnD,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACzC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACjD,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,QAAQ,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AACzD,QAAQ,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AAC7C,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AAC3C,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACjD,QAAQ,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AAC7C,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AAC5B,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,EAAE,CAAC;AAC/C,QAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACzC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,wBAAwB,EAAE,CAAC;AAC/D,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,CAAC,OAAO,IAAI;AACxD,YAAY,IAAI,CAAC,kCAAkC,GAAG,OAAO,CAAC;AAC9D,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC;AAC3G,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACtK,QAAQ,IAAI,CAAC,sBAAsB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAChL,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAChQ,QAAQ,IAAI,CAAC,qBAAqB;AAClC,YAAY,IAAI,CAAC,mBAAmB,IAAI,IAAI,qBAAqB,EAAE,CAAC;AACpE,KAAK;AACL,IAAI,KAAK,CAAC,MAAM,EAAE;AAClB,QAAQ,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAI;AAC1C,YAAY,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAClD,YAAY,IAAI,aAAa,GAAG,EAAE,CAAC;AACnC,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY;AAClD,gBAAgB,IAAI;AACpB,oBAAoB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACnD,iBAAiB;AACjB,gBAAgB,OAAO,GAAG,EAAE;AAC5B,oBAAoB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxC,oBAAoB,OAAO;AAC3B,iBAAiB;AACjB;AACA;AACA,gBAAgB,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,CAAC,YAAY,EAAE,cAAc,KAAK;AACnF,oBAAoB,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM;AACpH,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,WAAW,KAAK;AACzE;AACA,4BAA4B,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACxD,gCAAgC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrD,gCAAgC,QAAQ,CAAC,IAAI,CAAC;AAC9C,oCAAoC,IAAI,EAAE,cAAc,CAAC,0BAA0B;AACnF,oCAAoC,IAAI,EAAE;AAC1C,wCAAwC,MAAM,EAAE,IAAI,CAAC,MAAM;AAC3D,qCAAqC;AACrC,iCAAiC,CAAC,CAAC;AACnC,gCAAgC,IAAI,iBAAiB,CAAC;AACtD,gCAAgC,IAAI,kBAAkB,CAAC;AACvD,gCAAgC,IAAI,CAAC,sBAAsB;AAC3D,oCAAoC,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACnE;AACA,gCAAgC,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;AACvE,oCAAoC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;AACxE,gCAAgC,IAAI;AACpC,oCAAoC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC3E,wCAAwC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjE,wCAAwC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAChG,4CAA4C,IAAI,EAAE,GAAG,IAAI;AACzD,gDAAgD,IAAI,GAAG,KAAK,WAAW,CAAC,SAAS,EAAE;AACnF,oDAAoD,OAAO,EAAE,CAAC;AAC9D,iDAAiD;AACjD,6CAA6C;AAC7C,4CAA4C,KAAK,EAAE,GAAG,IAAI;AAC1D,gDAAgD,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5D,gDAAgD,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACrG,gDAAgD,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACtE,6CAA6C;AAC7C,yCAAyC,CAAC,CAAC;AAC3C,wCAAwC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAChF,qCAAqC,CAAC,CAAC;AACvC,iCAAiC;AACjC,gCAAgC,OAAO,GAAG,EAAE;AAC5C,oCAAoC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxD,oCAAoC,cAAc,EAAE,CAAC;AACrD,oCAAoC,OAAO;AAC3C,iCAAiC;AACjC,gCAAgC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC7D,gCAAgC,QAAQ,CAAC,IAAI,CAAC;AAC9C,oCAAoC,IAAI,EAAE,cAAc,CAAC,qCAAqC;AAC9F,iCAAiC,CAAC,CAAC;AACnC;AACA;AACA,gCAAgC,IAAI;AACpC,oCAAoC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC3E,wCAAwC,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,SAAS,CAAC;AAC7G,4CAA4C,IAAI,EAAE,OAAO,IAAI;AAC7D,gDAAgD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AACzE,gDAAgD,IAAI,IAAI;AACxD,oDAAoD,cAAc,CAAC,8BAA8B,EAAE;AACnG,oDAAoD,OAAO,EAAE,CAAC;AAC9D,iDAAiD;AACjD,gDAAgD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvE,6CAA6C;AAC7C,4CAA4C,QAAQ,EAAE,MAAM;AAC5D,gDAAgD,OAAO,EAAE,CAAC;AAC1D,6CAA6C;AAC7C,4CAA4C,KAAK,EAAE,KAAK,IAAI;AAC5D,gDAAgD,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,6CAA6C;AAC7C,yCAAyC,CAAC,CAAC;AAC3C,wCAAwC,IAAI,qBAAqB,EAAE;AACnE,4CAA4C,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACtF,yCAAyC;AACzC,qCAAqC,CAAC,CAAC;AACvC,iCAAiC;AACjC,gCAAgC,OAAO,KAAK,EAAE;AAC9C,oCAAoC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1D,oCAAoC,cAAc,EAAE,CAAC;AACrD,oCAAoC,OAAO;AAC3C,iCAAiC;AACjC;AACA;AACA,gCAAgC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB;AAC1E,qCAAqC,KAAK,EAAE;AAC5C,qCAAqC,SAAS,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY;AACpI,oCAAoC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACzG,oCAAoC,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACpG,oCAAoC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;AACxI,oCAAoC,QAAQ,CAAC,IAAI,CAAC;AAClD,wCAAwC,IAAI,EAAE,cAAc,CAAC,qCAAqC;AAClG,wCAAwC,IAAI,EAAE;AAC9C,4CAA4C,KAAK,EAAE,gBAAgB;AACnE,4CAA4C,OAAO,EAAE,KAAK;AAC1D,yCAAyC;AACzC,qCAAqC,CAAC,CAAC;AACvC,oCAAoC,QAAQ,CAAC,IAAI,CAAC;AAClD,wCAAwC,IAAI,EAAE,cAAc,CAAC,yBAAyB;AACtF,wCAAwC,IAAI,EAAE;AAC9C,4CAA4C,OAAO,EAAE,CAAC,OAAO;AAC7D,yCAAyC;AACzC,qCAAqC,CAAC,CAAC;AACvC,iCAAiC,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC;AACjE;AACA;AACA,gCAAgC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY;AAC7K,oCAAoC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACzG,oCAAoC,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACpG,oCAAoC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;AACxI,iCAAiC,EAAE,uCAAuC,CAAC,CAAC,CAAC,CAAC;AAC9E;AACA,6BAA6B;AAC7B,iCAAiC,IAAI,CAAC,MAAM,EAAE;AAC9C,gCAAgC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrD,gCAAgC,QAAQ,CAAC,IAAI,CAAC;AAC9C,oCAAoC,IAAI,EAAE,cAAc,CAAC,0BAA0B;AACnF,oCAAoC,IAAI,EAAE;AAC1C,wCAAwC,MAAM,EAAE,IAAI,CAAC,MAAM;AAC3D,qCAAqC;AACrC,iCAAiC,CAAC,CAAC;AACnC,gCAAgC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AAChF,gCAAgC,aAAa,GAAG,EAAE,CAAC;AACnD,6BAA6B;AAC7B,4BAA4B,YAAY,EAAE,CAAC;AAC3C,yBAAyB,EAAE,8BAA8B,CAAC,CAAC,CAAC;AAC5D,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,IAAI,CAAC,OAAO;AAC5B,qBAAqB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;AACnD,qBAAqB,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK;AAChD,oBAAoB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC3E,oBAAoB,OAAO,eAAe,CAAC,QAAQ,KAAK,IAAI,CAAC;AAC7D,iBAAiB,CAAC,CAAC;AACnB,qBAAqB,SAAS,CAAC;AAC/B,oBAAoB,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY;AACjH,wBAAwB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AAChG,wBAAwB,MAAM,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AAC5F,wBAAwB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC/E,wBAAwB,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AACzG,wBAAwB,MAAM,aAAa,GAAG,wCAAwC,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC/O,wBAAwB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC/E,wBAAwB,QAAQ,CAAC,IAAI,CAAC;AACtC,4BAA4B,IAAI,EAAE,cAAc,CAAC,oCAAoC;AACrF,4BAA4B,IAAI,EAAE;AAClC,gCAAgC,KAAK;AACrC,gCAAgC,OAAO;AACvC,6BAA6B;AAC7B,yBAAyB,CAAC,CAAC;AAC3B,wBAAwB,QAAQ,CAAC,IAAI,CAAC;AACtC,4BAA4B,IAAI,EAAE,cAAc,CAAC,yBAAyB;AAC1E,4BAA4B,IAAI,EAAE;AAClC,gCAAgC,OAAO,EAAE,KAAK;AAC9C,6BAA6B;AAC7B,yBAAyB,CAAC,CAAC;AAC3B,wBAAwB,MAAM,YAAY,CAAC;AAC3C;AACA,wBAAwB,IAAI,IAAI,CAAC,MAAM,EAAE;AACzC,4BAA4B,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;AAC7D,yBAAyB;AACzB,qBAAqB,EAAE,eAAe,CAAC;AACvC,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,QAAQ,CAAC,IAAI,CAAC;AAC9B,oBAAoB,IAAI,EAAE,cAAc,CAAC,8BAA8B;AACvE,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,MAAM,oBAAoB,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,SAAS,CAAC;AAClG,gBAAgB,QAAQ,CAAC,IAAI,CAAC;AAC9B,oBAAoB,IAAI,EAAE,cAAc,CAAC,yBAAyB;AAClE,oBAAoB,IAAI,EAAE;AAC1B,wBAAwB,OAAO,EAAE,oBAAoB;AACrD,qBAAqB;AACrB,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,MAAM,YAAY,CAAC;AACnC,gBAAgB,QAAQ,CAAC,IAAI,CAAC;AAC9B,oBAAoB,IAAI,EAAE,cAAc,CAAC,iBAAiB;AAC1D,iBAAiB,CAAC,CAAC;AACnB,aAAa,EAAE,YAAY,CAAC,CAAC;AAC7B,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,iCAAiC,CAAC,gBAAgB,EAAE;AAC9D,QAAQ,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,EAAE,8CAA8C,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,GAAG,KAAK;AACpP,YAAY,MAAM,YAAY,GAAG,YAAY,GAAG,gBAAgB,CAAC;AACjE,YAAY,MAAM,QAAQ,GAAG,CAAC,YAAY,IAAI,YAAY,GAAG,gBAAgB;AAC7E,kBAAkB,CAAC;AACnB,kBAAkB,QAAQ,CAAC;AAC3B,YAAY,OAAO;AACnB,gBAAgB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/D,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC;AACrC,aAAa,CAAC;AACd,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,OAAO,aAAa,CAAC;AAC7B,KAAK;AACL,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,SAAS;AACT,QAAQ,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAI;AAC1C,YAAY,IAAI,uBAAuB,CAAC;AACxC,YAAY,IAAI,CAAC,gBAAgB,CAAC,MAAM;AACxC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,WAAW,KAAK;AACjE,oBAAoB,IAAI,UAAU,GAAG,KAAK,CAAC;AAC3C,oBAAoB,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE;AAC5D,wBAAwB,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;AACpD,wBAAwB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG,wBAAwB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/E,wBAAwB,IAAI,qBAAqB,CAAC;AAClD,wBAAwB,IAAI,YAAY,CAAC;AACzC,wBAAwB,IAAI,KAAK,CAAC;AAClC,wBAAwB,IAAI,YAAY,CAAC;AACzC,wBAAwB,IAAI,aAAa,CAAC;AAC1C,wBAAwB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC/D,4BAA4B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM;AAC7D,gCAAgC,OAAO,EAAE,CAAC;AAC1C,4BAA4B,WAAW,CAAC,IAAI,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;AAC9D,4BAA4B,uBAAuB,GAAG,IAAI,CAAC,oBAAoB;AAC/E,iCAAiC,KAAK,CAAC,aAAa,CAAC;AACrD,iCAAiC,SAAS,CAAC;AAC3C,gCAAgC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,GAAG,KAAK;AACrH,oCAAoC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACzG,oCAAoC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AACtE,wCAAwC,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE;AACpE,4CAA4C,GAAG,EAAE,CAAC;AAClD,4CAA4C,OAAO,EAAE,CAAC;AACtD,4CAA4C,OAAO,EAAE,CAAC;AACtD,yCAAyC,CAAC,CAAC;AAC3C,wCAAwC,KAAK,GAAG,MAAM,EAAE,CAAC;AACzD,wCAAwC,aAAa;AACrD,4CAA4C,aAAa,KAAK,SAAS;AACvE,kDAAkD,SAAS;AAC3D,kDAAkD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AACrF,qCAAqC;AACrC;AACA;AACA;AACA;AACA,oCAAoC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,OAAO,KAAK;AACvF,wCAAwC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACnG,wCAAwC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC5D,wCAAwC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI;AAC1E,4CAA4C,MAAM,MAAM,GAAG,kBAAkB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACrG,4CAA4C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC1E,gDAAgD,OAAO,IAAI,CAAC;AAC5D,6CAA6C;AAC7C,4CAA4C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,4CAA4C,OAAO,KAAK,CAAC;AACzD,yCAAyC,CAAC,CAAC;AAC3C,wCAAwC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC/D,wCAAwC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AACrE,4CAA4C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;AACxH,4CAA4C,IAAI,MAAM,KAAK,SAAS,EAAE;AACtE,gDAAgD,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACjF,6CAA6C;AAC7C,yCAAyC;AACzC,wCAAwC,WAAW,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;AAClJ,wCAAwC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACnF,wCAAwC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK;AAC5E,4CAA4C,QAAQ,MAAM;AAC1D,gDAAgD,KAAK,MAAM,CAAC,MAAM;AAClE,oDAAoD,MAAM,CAAC,GAAG,EAAE,CAAC;AACjE,oDAAoD,MAAM;AAC1D,gDAAgD,KAAK,MAAM,CAAC,MAAM;AAClE,oDAAoD,MAAM,CAAC,OAAO,EAAE,CAAC;AACrE,oDAAoD,MAAM;AAC1D,gDAAgD,KAAK,MAAM,CAAC,MAAM;AAClE,oDAAoD,MAAM,CAAC,OAAO,EAAE,CAAC;AACrE,oDAAoD,MAAM;AAC1D,gDAAgD;AAChD,oDAAoD,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAChG,6CAA6C;AAC7C,yCAAyC,CAAC,CAAC;AAC3C,qCAAqC,CAAC,CAAC;AACvC,oCAAoC,IAAI,IAAI,EAAE;AAC9C,wCAAwC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC;AACpF;AACA,wCAAwC,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC9G,wCAAwC,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAAC;AACjG,wCAAwC,YAAY,GAAG,gBAAgB,CAAC;AACxE,wCAAwC,qBAAqB;AAC7D,4CAA4C,qBAAqB,KAAK,SAAS;AAC/E,kDAAkD,YAAY;AAC9D,kDAAkD,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;AACzH,wCAAwC,aAAa,GAAG,IAAI,CAAC,YAAY;AACzE,6CAA6C,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,IAAI;AAC1F,4CAA4C,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;AACvE,4CAA4C,KAAK,CAAC,YAAY,GAAG,UAAU;AAC3E,kDAAkD,SAAS;AAC3D,kDAAkD,aAAa,CAAC,YAAY,CAAC;AAC7E,yCAAyC,CAAC,CAAC;AAC3C,wCAAwC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACrG;AACA,wCAAwC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACnF,wCAAwC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAC3F,wCAAwC,QAAQ,CAAC,IAAI,CAAC;AACtD,4CAA4C,IAAI,EAAE,cAAc,CAAC,wBAAwB;AACzF,4CAA4C,IAAI,EAAE;AAClD,gDAAgD,KAAK,EAAE,gBAAgB;AACvE,gDAAgD,UAAU;AAC1D,gDAAgD,WAAW,EAAE,CAAC,UAAU;AACxE,gDAAgD,MAAM;AACtD,6CAA6C;AAC7C,yCAAyC,CAAC,CAAC;AAC3C,wCAAwC,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACjF,wCAAwC,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE;AACzE,4CAA4C,YAAY,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;AAC5E,4CAA4C,OAAO,EAAE,CAAC;AACtD,4CAA4C,QAAQ,CAAC,IAAI,CAAC;AAC1D,gDAAgD,IAAI,EAAE,cAAc,CAAC,8BAA8B;AACnG,6CAA6C,CAAC,CAAC;AAC/C,4CAA4C,uBAAuB,CAAC,WAAW,EAAE,CAAC;AAClF,yCAAyC;AACzC,qCAAqC;AACrC,iCAAiC;AACjC,gCAAgC,KAAK,EAAE,KAAK,IAAI;AAChD,oCAAoC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1D,iCAAiC;AACjC,6BAA6B,CAAC,CAAC;AAC/B,4BAA4B,QAAQ,CAAC,IAAI,CAAC;AAC1C,gCAAgC,IAAI,EAAE,cAAc,CAAC,gCAAgC;AACrF,gCAAgC,IAAI,EAAE;AACtC,oCAAoC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAChG,iCAAiC;AACjC,6BAA6B,CAAC,CAAC;AAC/B,yBAAyB,CAAC,CAAC;AAC3B;AACA;AACA;AACA;AACA,wBAAwB,IAAI,cAAc,CAAC;AAC3C,wBAAwB,IAAI,CAAC,qBAAqB,EAAE;AACpD,4BAA4B,cAAc,GAAG,YAAY,GAAG,YAAY,CAAC;AACzE,yBAAyB;AACzB,6BAA6B;AAC7B,4BAA4B,cAAc;AAC1C,gCAAgC,qBAAqB;AACrD,oCAAoC,YAAY;AAChD,qCAAqC,aAAa,GAAG,YAAY,CAAC,CAAC;AACnE,yBAAyB;AACzB,wBAAwB,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,WAAW,KAAK;AAE/E,4BAA4B,IAAI,OAAO,CAAC;AACxC,4BAA4B,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,QAAQ,IAAI;AAClE,gCAAgC,OAAO,GAAG,QAAQ,CAAC;AACnD,gCAA6C,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AACjF,6BAA6B,CAAC,CAAC;AAC/B,4BAA4B,WAAW,CAAC,IAAI,CAAC,MAAM;AACnD,gCAAgC,UAAU,GAAG,IAAI,CAAC;AAClD,gCAAgC,IAAI,CAAC,kCAAkC,EAAE,CAAC;AAC1E,gCAAgC,OAAO,EAAE,CAAC;AAC1C,6BAA6B,CAAC,CAAC;AAC/B,4BAA4B,IAAI,CAAC,4BAA4B,GAAG,OAAO,CAAC;AACxE,4BAA4B,IAAI,CAAC,kCAAkC,EAAE,CAAC;AACtE,4BAA4B,OAAO,KAAK,CAAC;AACzC,yBAAyB,EAAE,6BAA6B,CAAC,CAAC;AAC1D,wBAAwB,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;AACjE,wBAAwB,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,CAAC,OAAO,IAAI;AACxE,4BAA4B,IAAI,CAAC,kCAAkC,GAAG,OAAO,CAAC;AAC9E,yBAAyB,CAAC,CAAC;AAC3B,qBAAqB;AACrB,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;AACjD,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,OAAO,CAAC,GAAG,KAAK;AACxB;AACA,YAAY,IAAIA,aAAkB,CAAC,iBAAiB,KAAK,GAAG;AAC5D,gBAAgBA,aAAkB,CAAC,kBAAkB,KAAK,GAAG,EAAE;AAC/D,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;AAChE,aAAa;AACb,SAAS,CAAC;AACV,KAAK;AACL,IAAI,uBAAuB,GAAG;AAC9B,QAAQ,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;AACjD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,QAAQ,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACvC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAC7C,QAAQ,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;AACjD,QAAQ,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;AAChD,QAAQ,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;AAC/C,QAAQ,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC5C,QAAQ,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAC3C,QAAQ,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;AACjE,KAAK;AACL,IAAI,MAAM,WAAW,CAAC,MAAM,EAAE;AAC9B,QAAQ,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;AAC5C,QAAQ,MAAM,wBAAwB,GAAG,IAAI,CAAC,YAAY;AAC1D,aAAa,aAAa,CAAC;AAC3B,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,UAAU,CAAC;AACvB,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI;AACnE,YAAY,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;AAC3C,iBAAiB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,CAAC;AACnD,iBAAiB,OAAO,CAAC,KAAK,IAAI;AAClC,gBAAgB,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACrD,gBAAgB,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE;AAC7C,oBAAoB,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/E,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AACxE,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK;AAClE,YAAY,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACrF,YAAY,MAAM,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7G,YAAY,MAAM,iBAAiB,GAAG,aAAa;AACnD,kBAAkB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AAC/C,kBAAkB,IAAI,CAAC;AACvB,YAAY,IAAI,aAAa,KAAK,SAAS,EAAE;AAC7C,gBAAgB,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,EAAE;AAC7G,oBAAoB,KAAK,EAAE,KAAK,CAAC,IAAI;AACrC,oBAAoB,SAAS;AAC7B,oBAAoB,QAAQ,EAAE,IAAI;AAClC,oBAAoB,gBAAgB;AACpC,oBAAoB,YAAY,EAAE,IAAI;AACtC,oBAAoB,iBAAiB;AACrC,iBAAiB,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC1C,aAAa;AACb,iBAAiB;AACjB,gBAAgB,MAAM,iBAAiB,GAAG,aAAa,CAAC,iBAAiB;AACzE,sBAAsB,aAAa,CAAC,iBAAiB;AACrD,sBAAsB,IAAI,CAAC;AAC3B,gBAAgB,MAAM,oBAAoB,GAAG,iBAAiB,KAAK,iBAAiB,CAAC;AACrF,gBAAgB,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,IAAI;AACjH,oBAAoB,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAC9D;AACA;AACA,oBAAoB,IAAI,oBAAoB,EAAE;AAC9C,wBAAwB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC9C,wBAAwB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAClD,wBAAwB,KAAK,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AACpE,qBAAqB;AACrB,iBAAiB,CAAC,CAAC,CAAC;AACpB,aAAa;AACb,YAAY,OAAO,UAAU,CAAC;AAC9B,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;AAC1B,QAAQ,KAAK,MAAM,aAAa,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACjE,YAAY,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;AACvD,YAAY,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC;AAC9C,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG;AAC9B,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY;AAC/C,aAAa,aAAa,CAAC;AAC3B,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACvE,QAAQ,OAAO,cAAc,CAAC;AAC9B,KAAK;AACL,IAAI,MAAM,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE;AAC7C,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY;AAC/C,aAAa,aAAa,CAAC;AAC3B,QAAQ,MAAM,SAAS,GAAG,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9L,QAAQ,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE;AACnF,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,KAAK,EAAE,CAAC;AACpB,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,aAAa,CAAC;AAC7B,KAAK;AACL,IAAI,kBAAkB,CAAC,gBAAgB,EAAE;AACzC,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AACvE,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACpG,QAAQ,OAAO,eAAe,CAAC;AAC/B,KAAK;AACL,IAAI,OAAO,YAAY,GAAG;AAC1B,QAAQ,MAAM,SAAS,GAAG;AAC1B,YAAY,IAAI,EAAE,IAAI;AACtB,YAAY,aAAa,EAAE,EAAE;AAC7B,YAAY,KAAK,EAAE;AACnB,gBAAgB,aAAa,EAAE;AAC/B,oBAAoB,IAAI,EAAE,eAAe;AACzC,oBAAoB,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC1D,iBAAiB;AACjB,aAAa;AACb,YAAY,SAAS,EAAE,EAAE;AACzB,YAAY,MAAM,EAAE;AACpB,gBAAgB,aAAa,EAAE;AAC/B,oBAAoB,IAAI,EAAE,eAAe;AACzC,oBAAoB,UAAU,EAAE,gBAAgB;AAChD,oBAAoB,QAAQ,EAAE,KAAK;AACnC,oBAAoB,MAAM,EAAE;AAC5B,wBAAwB,EAAE,EAAE;AAC5B,4BAA4B,IAAI,EAAE,IAAI;AACtC,4BAA4B,IAAI,EAAE,IAAI;AACtC,4BAA4B,UAAU,EAAE,IAAI;AAC5C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,wBAAwB,KAAK,EAAE;AAC/B,4BAA4B,IAAI,EAAE,OAAO;AACzC,4BAA4B,IAAI,EAAE,QAAQ;AAC1C,4BAA4B,UAAU,EAAE,IAAI;AAC5C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,wBAAwB,IAAI,EAAE;AAC9B,4BAA4B,IAAI,EAAE,MAAM;AACxC,4BAA4B,IAAI,EAAE,QAAQ;AAC1C,4BAA4B,UAAU,EAAE,IAAI;AAC5C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,wBAAwB,OAAO,EAAE;AACjC,4BAA4B,IAAI,EAAE,SAAS;AAC3C,4BAA4B,IAAI,EAAE,QAAQ;AAC1C,4BAA4B,UAAU,EAAE,IAAI;AAC5C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,wBAAwB,SAAS,EAAE;AACnC,4BAA4B,IAAI,EAAE,WAAW;AAC7C,4BAA4B,IAAI,EAAE;AAClC,gCAAgC,IAAI,EAAE,eAAe;AACrD,6BAA6B;AAC7B,4BAA4B,OAAO,EAAE,KAAK;AAC1C,4BAA4B,UAAU,EAAE,IAAI;AAC5C,yBAAyB;AACzB,wBAAwB,SAAS,EAAE;AACnC,4BAA4B,IAAI,EAAE,WAAW;AAC7C,4BAA4B,IAAI,EAAE,QAAQ;AAC1C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,4BAA4B,UAAU,EAAE,IAAI;AAC5C,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;AACjB,gBAAgB,aAAa,EAAE;AAC/B,oBAAoB,IAAI,EAAE,eAAe;AACzC,oBAAoB,UAAU,EAAE,gBAAgB;AAChD,oBAAoB,QAAQ,EAAE,KAAK;AACnC,oBAAoB,MAAM,EAAE;AAC5B,wBAAwB,EAAE,EAAE;AAC5B,4BAA4B,IAAI,EAAE,IAAI;AACtC,4BAA4B,IAAI,EAAE,IAAI;AACtC,4BAA4B,UAAU,EAAE,IAAI;AAC5C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,wBAAwB,SAAS,EAAE;AACnC,4BAA4B,IAAI,EAAE,WAAW;AAC7C,4BAA4B,IAAI,EAAE,QAAQ;AAC1C,4BAA4B,UAAU,EAAE,IAAI;AAC5C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,wBAAwB,KAAK,EAAE;AAC/B,4BAA4B,IAAI,EAAE,OAAO;AACzC,4BAA4B,IAAI,EAAE,QAAQ;AAC1C,4BAA4B,UAAU,EAAE,IAAI;AAC5C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,wBAAwB,QAAQ,EAAE;AAClC,4BAA4B,IAAI,EAAE,UAAU;AAC5C,4BAA4B,IAAI,EAAE,KAAK;AACvC,4BAA4B,UAAU,EAAE,KAAK;AAC7C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,wBAAwB,YAAY,EAAE;AACtC,4BAA4B,IAAI,EAAE,cAAc;AAChD,4BAA4B,IAAI,EAAE,KAAK;AACvC,4BAA4B,UAAU,EAAE,KAAK;AAC7C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,wBAAwB,gBAAgB,EAAE;AAC1C,4BAA4B,IAAI,EAAE,kBAAkB;AACpD,4BAA4B,IAAI,EAAE,KAAK;AACvC,4BAA4B,UAAU,EAAE,IAAI;AAC5C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,wBAAwB,iBAAiB,EAAE;AAC3C,4BAA4B,IAAI,EAAE,mBAAmB;AACrD,4BAA4B,IAAI,EAAE,QAAQ;AAC1C,4BAA4B,UAAU,EAAE,KAAK;AAC7C,4BAA4B,OAAO,EAAE,KAAK;AAC1C,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,SAAS,CAAC;AACV,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,GAAG;AAC9B,QAAQ,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK;AAC3C,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;AACxC,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,KAAKC,uBAA8B,EAAE;AACvE,gBAAgB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;AACzD,qBAAqB,eAAe,CAAC;AACrC,gBAAgB,QAAQ,eAAe;AACvC;AACA;AACA,oBAAoB,KAAK,eAAe,CAAC,mBAAmB;AAC5D,wBAAwB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACxD,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,eAAe,CAAC,SAAS;AAClD,wBAAwB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACtD,4BAA4B,IAAI,CAAC,YAAY,EAAE,CAAC;AAChD,yBAAyB;AACzB,wBAAwB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACzD,wBAAwB,MAAM;AAC9B,iBAAiB;AACjB,aAAa;AACb,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,QAAQ,IAAI,CAAC,gBAAgB,CAAC,MAAM;AAC5C,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM;AAC9E;AACA,gBAAgB,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACpD,aAAa,CAAC,CAAC,EAAE;AACjB,KAAK;AACL;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/sync/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { BackgroundProcessManager } from '@aws-amplify/core/internals/utils';\nimport { ConsoleLogger, Hub } from '@aws-amplify/core';\nimport { Observable, filter, of } from 'rxjs';\nimport { ConnectionState, CONNECTION_STATE_CHANGE as PUBSUB_CONNECTION_STATE_CHANGE, CONTROL_MSG as PUBSUB_CONTROL_MSG, } from '@aws-amplify/api-graphql';\nimport { ModelPredicateCreator } from '../predicates';\nimport { OpType, } from '../types';\nimport { SYNC, USER, getNow } from '../util';\nimport DataStoreConnectivity from './datastoreConnectivity';\nimport { ModelMerger } from './merger';\nimport { MutationEventOutbox } from './outbox';\nimport { MutationProcessor } from './processors/mutation';\nimport { CONTROL_MSG, SubscriptionProcessor } from './processors/subscription';\nimport { SyncProcessor } from './processors/sync';\nimport { createMutationInstanceFromModelOperation, getIdentifierValue, predicateToGraphQLCondition, } from './utils';\nconst logger = new ConsoleLogger('DataStore');\nconst ownSymbol = Symbol('sync');\nexport var 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 || (ControlMessage = {}));\nexport class 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 BackgroundProcessManager();\n this.waitForSleepState = new Promise(resolve => {\n this.syncQueriesObservableStartSleeping = resolve;\n });\n const MutationEventCtor = this.modelClasses\n .MutationEvent;\n this.outbox = new MutationEventOutbox(this.schema, MutationEventCtor, modelInstanceCreator, ownSymbol);\n this.modelMerger = new ModelMerger(this.outbox, ownSymbol);\n this.syncQueriesProcessor = new SyncProcessor(this.schema, this.syncPredicates, this.amplifyConfig, this.authModeStrategy, errorHandler, this.amplifyContext);\n this.subscriptionsProcessor = new SubscriptionProcessor(this.schema, this.syncPredicates, this.amplifyConfig, this.authModeStrategy, errorHandler, this.amplifyContext);\n this.mutationsProcessor = new 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();\n }\n start(params) {\n return new 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 === 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(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 = predicateToGraphQLCondition(condition, modelDefinition);\n const mutationEvent = 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 of({}); // TODO(v6): fix this\n }\n return new 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 = 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 = 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 OpType.INSERT:\n counts.new++;\n break;\n case OpType.UPDATE:\n counts.updated++;\n break;\n case 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 = 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 (PUBSUB_CONTROL_MSG.CONNECTION_CLOSED === msg ||\n PUBSUB_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 === 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 = 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 = ModelPredicateCreator.createFromAST(this.schema.namespaces[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: 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 Hub.listen('api', (data) => {\n if (data.source === 'PubSub' &&\n data.payload.event === PUBSUB_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 ConnectionState.ConnectionDisrupted:\n this.connectionDisrupted = true;\n break;\n case 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}\n"],"names":["PUBSUB_CONTROL_MSG","PUBSUB_CONNECTION_STATE_CHANGE"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { MutationEventOutbox } from './outbox';
4
4
  declare class ModelMerger {
5
5
  private readonly outbox;
6
6
  private readonly ownSymbol;
7
- constructor(outbox: MutationEventOutbox, ownSymbol: Symbol);
7
+ constructor(outbox: MutationEventOutbox, ownSymbol: symbol);
8
8
  /**
9
9
  *
10
10
  * @param storage Storage adapter that contains the data.
@@ -36,7 +36,7 @@ class ModelMerger {
36
36
  itemsMap.set(modelId, item);
37
37
  }
38
38
  const page = [...itemsMap.values()];
39
- return await storage.batchSave(modelConstructor, page, this.ownSymbol);
39
+ return storage.batchSave(modelConstructor, page, this.ownSymbol);
40
40
  }
41
41
  }
42
42
 
@@ -1 +1 @@
1
- {"version":3,"file":"merger.mjs","sources":["../../../src/sync/merger.ts"],"sourcesContent":["import { OpType, } from '../types';\nimport { getIdentifierValue } from './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 = 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 = getIdentifierValue(modelDefinition, item);\n itemsMap.set(modelId, item);\n }\n const page = [...itemsMap.values()];\n return await storage.batchSave(modelConstructor, page, this.ownSymbol);\n }\n}\nexport { ModelMerger };\n"],"names":[],"mappings":";;;AAEA;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,MAAM,CAAC,MAAM,CAAC;AACvC,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,kBAAkB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACtE,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,MAAM,OAAO,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/E,KAAK;AACL;;;;"}
1
+ {"version":3,"file":"merger.mjs","sources":["../../../src/sync/merger.ts"],"sourcesContent":["import { OpType, } from '../types';\nimport { getIdentifierValue } from './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 = 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 = getIdentifierValue(modelDefinition, item);\n itemsMap.set(modelId, item);\n }\n const page = [...itemsMap.values()];\n return storage.batchSave(modelConstructor, page, this.ownSymbol);\n }\n}\nexport { ModelMerger };\n"],"names":[],"mappings":";;;AAEA;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,MAAM,CAAC,MAAM,CAAC;AACvC,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,kBAAkB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACtE,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;;;;"}
@@ -1,15 +1,15 @@
1
- import { MutationEvent } from './index';
2
- import { ExclusiveStorage as Storage, StorageFacade, Storage as StorageClass } from '../storage/storage';
1
+ import { ExclusiveStorage as Storage, Storage as StorageClass, StorageFacade } from '../storage/storage';
3
2
  import { ModelInstanceCreator } from '../datastore/datastore';
4
3
  import { InternalSchema, PersistentModel, PersistentModelConstructor, SchemaModel } from '../types';
5
4
  import { TransformerMutationType } from './utils';
5
+ import { MutationEvent } from './index';
6
6
  declare class MutationEventOutbox {
7
7
  private readonly schema;
8
- private readonly MutationEvent;
8
+ private readonly _MutationEvent;
9
9
  private readonly modelInstanceCreator;
10
10
  private readonly ownSymbol;
11
11
  private inProgressMutationEventId;
12
- constructor(schema: InternalSchema, MutationEvent: PersistentModelConstructor<MutationEvent>, modelInstanceCreator: ModelInstanceCreator, ownSymbol: Symbol);
12
+ constructor(schema: InternalSchema, _MutationEvent: PersistentModelConstructor<MutationEvent>, modelInstanceCreator: ModelInstanceCreator, ownSymbol: symbol);
13
13
  enqueue(storage: Storage, mutationEvent: MutationEvent): Promise<void>;
14
14
  dequeue(storage: StorageClass, record?: PersistentModel, recordOp?: TransformerMutationType): Promise<MutationEvent>;
15
15
  /**
@@ -3,18 +3,20 @@ import { QueryOne } from '../types.mjs';
3
3
  import { SYNC, directedValueEquality, USER } from '../util.mjs';
4
4
  import { TransformerMutationType, getIdentifierValue } from './utils.mjs';
5
5
 
6
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
+ // SPDX-License-Identifier: Apache-2.0
6
8
  // TODO: Persist deleted ids
7
9
  // https://github.com/aws-amplify/amplify-js/blob/datastore-docs/packages/datastore/docs/sync-engine.md#outbox
8
10
  class MutationEventOutbox {
9
- constructor(schema, MutationEvent, modelInstanceCreator, ownSymbol) {
11
+ constructor(schema, _MutationEvent, modelInstanceCreator, ownSymbol) {
10
12
  this.schema = schema;
11
- this.MutationEvent = MutationEvent;
13
+ this._MutationEvent = _MutationEvent;
12
14
  this.modelInstanceCreator = modelInstanceCreator;
13
15
  this.ownSymbol = ownSymbol;
14
16
  }
15
17
  async enqueue(storage, mutationEvent) {
16
18
  await storage.runExclusive(async (s) => {
17
- const mutationEventModelDefinition = this.schema.namespaces[SYNC].models['MutationEvent'];
19
+ const mutationEventModelDefinition = this.schema.namespaces[SYNC].models.MutationEvent;
18
20
  // `id` is the key for the record in the mutationEvent;
19
21
  // `modelId` is the key for the actual record that was mutated
20
22
  const predicate = ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {
@@ -24,7 +26,7 @@ class MutationEventOutbox {
24
26
  ],
25
27
  });
26
28
  // Check if there are any other records with same id
27
- const [first] = await s.query(this.MutationEvent, predicate);
29
+ const [first] = await s.query(this._MutationEvent, predicate);
28
30
  // No other record with same modelId, so enqueue
29
31
  if (first === undefined) {
30
32
  await s.save(mutationEvent, undefined, this.ownSymbol);
@@ -34,14 +36,14 @@ class MutationEventOutbox {
34
36
  const { operation: incomingMutationType } = mutationEvent;
35
37
  if (first.operation === TransformerMutationType.CREATE) {
36
38
  if (incomingMutationType === TransformerMutationType.DELETE) {
37
- await s.delete(this.MutationEvent, predicate);
39
+ await s.delete(this._MutationEvent, predicate);
38
40
  }
39
41
  else {
40
42
  // first gets updated with the incoming mutation's data, condition intentionally skipped
41
43
  // we need to merge the fields for a create and update mutation to prevent
42
44
  // data loss, since update mutations only include changed fields
43
45
  const merged = this.mergeUserFields(first, mutationEvent);
44
- await s.save(this.MutationEvent.copyOf(first, draft => {
46
+ await s.save(this._MutationEvent.copyOf(first, draft => {
45
47
  draft.data = merged.data;
46
48
  }), undefined, this.ownSymbol);
47
49
  }
@@ -54,7 +56,7 @@ class MutationEventOutbox {
54
56
  if (Object.keys(incomingCondition).length === 0) {
55
57
  merged = this.mergeUserFields(first, mutationEvent);
56
58
  // delete all for model
57
- await s.delete(this.MutationEvent, predicate);
59
+ await s.delete(this._MutationEvent, predicate);
58
60
  }
59
61
  merged = merged || mutationEvent;
60
62
  // Enqueue new one
@@ -79,20 +81,20 @@ class MutationEventOutbox {
79
81
  * @param storage
80
82
  */
81
83
  async peek(storage) {
82
- const head = await storage.queryOne(this.MutationEvent, QueryOne.FIRST);
84
+ const head = await storage.queryOne(this._MutationEvent, QueryOne.FIRST);
83
85
  this.inProgressMutationEventId = head ? head.id : undefined;
84
86
  return head;
85
87
  }
86
88
  async getForModel(storage, model, userModelDefinition) {
87
89
  const mutationEventModelDefinition = this.schema.namespaces[SYNC].models.MutationEvent;
88
90
  const modelId = getIdentifierValue(userModelDefinition, model);
89
- const mutationEvents = await storage.query(this.MutationEvent, ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {
91
+ const mutationEvents = await storage.query(this._MutationEvent, ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {
90
92
  and: { modelId: { eq: modelId } },
91
93
  }));
92
94
  return mutationEvents;
93
95
  }
94
96
  async getModelIds(storage) {
95
- const mutationEvents = await storage.query(this.MutationEvent);
97
+ const mutationEvents = await storage.query(this._MutationEvent);
96
98
  const result = new Set();
97
99
  mutationEvents.forEach(({ modelId }) => result.add(modelId));
98
100
  return result;
@@ -123,8 +125,8 @@ class MutationEventOutbox {
123
125
  if (!directedValueEquality(outgoingData, incomingData, true)) {
124
126
  return;
125
127
  }
126
- const mutationEventModelDefinition = this.schema.namespaces[SYNC].models['MutationEvent'];
127
- const userModelDefinition = this.schema.namespaces['user'].models[head.model];
128
+ const mutationEventModelDefinition = this.schema.namespaces[SYNC].models.MutationEvent;
129
+ const userModelDefinition = this.schema.namespaces.user.models[head.model];
128
130
  const recordId = getIdentifierValue(userModelDefinition, record);
129
131
  const predicate = ModelPredicateCreator.createFromAST(mutationEventModelDefinition, {
130
132
  and: [
@@ -132,19 +134,19 @@ class MutationEventOutbox {
132
134
  { id: { ne: this.inProgressMutationEventId } },
133
135
  ],
134
136
  });
135
- const outdatedMutations = await storage.query(this.MutationEvent, predicate);
137
+ const outdatedMutations = await storage.query(this._MutationEvent, predicate);
136
138
  if (!outdatedMutations.length) {
137
139
  return;
138
140
  }
139
141
  const reconciledMutations = outdatedMutations.map(m => {
140
142
  const oldData = JSON.parse(m.data);
141
143
  const newData = { ...oldData, _version, _lastChangedAt };
142
- return this.MutationEvent.copyOf(m, draft => {
144
+ return this._MutationEvent.copyOf(m, draft => {
143
145
  draft.data = JSON.stringify(newData);
144
146
  });
145
147
  });
146
- await storage.delete(this.MutationEvent, predicate);
147
- await Promise.all(reconciledMutations.map(async (m) => await storage.save(m, undefined, this.ownSymbol)));
148
+ await storage.delete(this._MutationEvent, predicate);
149
+ await Promise.all(reconciledMutations.map(async (m) => storage.save(m, undefined, this.ownSymbol)));
148
150
  }
149
151
  mergeUserFields(previous, current) {
150
152
  const { _version, _lastChangedAt, _deleted, ...previousData } = JSON.parse(previous.data);
@@ -156,7 +158,7 @@ class MutationEventOutbox {
156
158
  ...previousData,
157
159
  ...currentData,
158
160
  });
159
- return this.modelInstanceCreator(this.MutationEvent, {
161
+ return this.modelInstanceCreator(this._MutationEvent, {
160
162
  ...current,
161
163
  data,
162
164
  });
@@ -1 +1 @@
1
- {"version":3,"file":"outbox.mjs","sources":["../../../src/sync/outbox.ts"],"sourcesContent":["import { ModelPredicateCreator } from '../predicates';\nimport { QueryOne, } from '../types';\nimport { USER, SYNC, directedValueEquality } from '../util';\nimport { getIdentifierValue, TransformerMutationType } from './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[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 = 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 === TransformerMutationType.CREATE) {\n if (incomingMutationType === 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, 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[SYNC].models.MutationEvent;\n const modelId = getIdentifierValue(userModelDefinition, model);\n const mutationEvents = await storage.query(this.MutationEvent, 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 (!directedValueEquality(outgoingData, incomingData, true)) {\n return;\n }\n const mutationEventModelDefinition = this.schema.namespaces[SYNC].models['MutationEvent'];\n const userModelDefinition = this.schema.namespaces['user'].models[head.model];\n const recordId = getIdentifierValue(userModelDefinition, record);\n const predicate = 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[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}\nexport { MutationEventOutbox };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"outbox.mjs","sources":["../../../src/sync/outbox.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { ModelPredicateCreator } from '../predicates';\nimport { QueryOne, } from '../types';\nimport { SYNC, USER, directedValueEquality } from '../util';\nimport { TransformerMutationType, getIdentifierValue } from './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[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 = 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 === TransformerMutationType.CREATE) {\n if (incomingMutationType === 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, 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[SYNC].models.MutationEvent;\n const modelId = getIdentifierValue(userModelDefinition, model);\n const mutationEvents = await storage.query(this._MutationEvent, 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 (!directedValueEquality(outgoingData, incomingData, true)) {\n return;\n }\n const mutationEventModelDefinition = this.schema.namespaces[SYNC].models.MutationEvent;\n const userModelDefinition = this.schema.namespaces.user.models[head.model];\n const recordId = getIdentifierValue(userModelDefinition, record);\n const predicate = 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[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}\nexport { MutationEventOutbox };\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errorMaps.mjs","sources":["../../../../src/sync/processors/errorMaps.ts"],"sourcesContent":["import { resolveServiceErrorStatusCode } from '../utils';\nconst connectionTimeout = error => /^Connection failed: Connection Timeout/.test(error.message);\nconst serverError = error => resolveServiceErrorStatusCode(error) >= 500;\nexport const 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 resolveServiceErrorStatusCode(error) === 401,\n};\nexport const 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};\nexport const 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}\nexport function getMutationErrorType(error) {\n return mapErrorToType(mutationErrorMap, error);\n}\nexport function getSubscriptionErrorType(error) {\n return mapErrorToType(subscriptionErrorMap, error);\n}\nexport function getSyncErrorType(error) {\n return mapErrorToType(syncErrorMap, error);\n}\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 */\nexport function 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}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errorMaps.mjs","sources":["../../../../src/sync/processors/errorMaps.ts"],"sourcesContent":["import { resolveServiceErrorStatusCode } from '../utils';\nconst connectionTimeout = error => /^Connection failed: Connection Timeout/.test(error.message);\nconst serverError = error => resolveServiceErrorStatusCode(error) >= 500;\nexport const 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 resolveServiceErrorStatusCode(error) === 401,\n};\nexport const 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};\nexport const 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}\nexport function getMutationErrorType(error) {\n return mapErrorToType(mutationErrorMap, error);\n}\nexport function getSubscriptionErrorType(error) {\n return mapErrorToType(subscriptionErrorMap, error);\n}\nexport function getSyncErrorType(error) {\n return mapErrorToType(syncErrorMap, error);\n}\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 */\nexport function 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}\n"],"names":[],"mappings":"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"}