@aws-amplify/datastore 5.0.1-unstable.cfbde4c.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/{lib → dist/cjs}/authModeStrategies/defaultAuthStrategy.js +3 -1
  2. package/dist/cjs/authModeStrategies/defaultAuthStrategy.js.map +1 -0
  3. package/{lib → dist/cjs}/authModeStrategies/index.js +3 -1
  4. package/dist/cjs/authModeStrategies/index.js.map +1 -0
  5. package/{lib → dist/cjs}/authModeStrategies/multiAuthStrategy.js +3 -3
  6. package/dist/cjs/authModeStrategies/multiAuthStrategy.js.map +1 -0
  7. package/{lib → dist/cjs}/datastore/datastore.js +5 -3
  8. package/dist/cjs/datastore/datastore.js.map +1 -0
  9. package/{lib → dist/cjs}/index.js +5 -16
  10. package/dist/cjs/index.js.map +1 -0
  11. package/{lib → dist/cjs}/predicates/index.js +3 -1
  12. package/dist/cjs/predicates/index.js.map +1 -0
  13. package/{lib → dist/cjs}/predicates/next.js +3 -1
  14. package/dist/cjs/predicates/next.js.map +1 -0
  15. package/{lib → dist/cjs}/predicates/sort.js +4 -3
  16. package/dist/cjs/predicates/sort.js.map +1 -0
  17. package/{lib → dist/cjs}/storage/adapter/AsyncStorageAdapter.js +5 -5
  18. package/dist/cjs/storage/adapter/AsyncStorageAdapter.js.map +1 -0
  19. package/{lib → dist/cjs}/storage/adapter/AsyncStorageDatabase.js +3 -1
  20. package/dist/cjs/storage/adapter/AsyncStorageDatabase.js.map +1 -0
  21. package/{lib → dist/cjs}/storage/adapter/InMemoryStore.js +3 -1
  22. package/dist/cjs/storage/adapter/InMemoryStore.js.map +1 -0
  23. package/{lib → dist/cjs}/storage/adapter/InMemoryStore.native.js +5 -5
  24. package/dist/cjs/storage/adapter/InMemoryStore.native.js.map +1 -0
  25. package/{lib → dist/cjs}/storage/adapter/IndexedDBAdapter.js +5 -25
  26. package/dist/cjs/storage/adapter/IndexedDBAdapter.js.map +1 -0
  27. package/{lib → dist/cjs}/storage/adapter/StorageAdapterBase.js +3 -1
  28. package/dist/cjs/storage/adapter/StorageAdapterBase.js.map +1 -0
  29. package/{lib → dist/cjs}/storage/adapter/getDefaultAdapter/index.js +6 -6
  30. package/dist/cjs/storage/adapter/getDefaultAdapter/index.js.map +1 -0
  31. package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js +10 -0
  32. package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js.map +1 -0
  33. package/{lib → dist/cjs}/storage/adapter/index.js +3 -1
  34. package/dist/cjs/storage/adapter/index.js.map +1 -0
  35. package/{lib → dist/cjs}/storage/relationship.js +3 -1
  36. package/dist/cjs/storage/relationship.js.map +1 -0
  37. package/{lib → dist/cjs}/storage/storage.js +5 -5
  38. package/dist/cjs/storage/storage.js.map +1 -0
  39. package/{lib → dist/cjs}/sync/datastoreConnectivity.js +4 -2
  40. package/dist/cjs/sync/datastoreConnectivity.js.map +1 -0
  41. package/{lib → dist/cjs}/sync/datastoreReachability/index.js +3 -1
  42. package/dist/cjs/sync/datastoreReachability/index.js.map +1 -0
  43. package/{lib → dist/cjs}/sync/datastoreReachability/index.native.js +3 -1
  44. package/dist/cjs/sync/datastoreReachability/index.native.js.map +1 -0
  45. package/{lib → dist/cjs}/sync/index.js +6 -7
  46. package/dist/cjs/sync/index.js.map +1 -0
  47. package/{lib → dist/cjs}/sync/merger.js +3 -1
  48. package/dist/cjs/sync/merger.js.map +1 -0
  49. package/{lib → dist/cjs}/sync/outbox.js +3 -1
  50. package/dist/cjs/sync/outbox.js.map +1 -0
  51. package/{lib → dist/cjs}/sync/processors/errorMaps.js +4 -4
  52. package/dist/cjs/sync/processors/errorMaps.js.map +1 -0
  53. package/{lib → dist/cjs}/sync/processors/mutation.js +3 -1
  54. package/dist/cjs/sync/processors/mutation.js.map +1 -0
  55. package/{lib → dist/cjs}/sync/processors/subscription.js +4 -4
  56. package/dist/cjs/sync/processors/subscription.js.map +1 -0
  57. package/{lib → dist/cjs}/sync/processors/sync.js +3 -1
  58. package/dist/cjs/sync/processors/sync.js.map +1 -0
  59. package/{lib → dist/cjs}/sync/utils.js +3 -1
  60. package/dist/cjs/sync/utils.js.map +1 -0
  61. package/{lib → dist/cjs}/types.js +12 -21
  62. package/dist/cjs/types.js.map +1 -0
  63. package/{lib → dist/cjs}/util.js +3 -1
  64. package/dist/cjs/util.js.map +1 -0
  65. package/{lib-esm/authModeStrategies/defaultAuthStrategy.js → dist/esm/authModeStrategies/defaultAuthStrategy.mjs} +4 -1
  66. package/dist/esm/authModeStrategies/defaultAuthStrategy.mjs.map +1 -0
  67. package/dist/esm/authModeStrategies/index.mjs +3 -0
  68. package/dist/esm/authModeStrategies/index.mjs.map +1 -0
  69. package/{lib-esm/authModeStrategies/multiAuthStrategy.js → dist/esm/authModeStrategies/multiAuthStrategy.mjs} +7 -5
  70. package/dist/esm/authModeStrategies/multiAuthStrategy.mjs.map +1 -0
  71. package/{lib-esm/datastore/datastore.js → dist/esm/datastore/datastore.mjs} +30 -26
  72. package/dist/esm/datastore/datastore.mjs.map +1 -0
  73. package/dist/esm/index.mjs +19 -0
  74. package/dist/esm/index.mjs.map +1 -0
  75. package/{lib-esm/predicates/index.js → dist/esm/predicates/index.mjs} +10 -7
  76. package/dist/esm/predicates/index.mjs.map +1 -0
  77. package/{lib-esm/predicates/next.js → dist/esm/predicates/next.mjs} +15 -11
  78. package/dist/esm/predicates/next.mjs.map +1 -0
  79. package/{lib-esm/predicates/sort.js → dist/esm/predicates/sort.mjs} +3 -2
  80. package/dist/esm/predicates/sort.mjs.map +1 -0
  81. package/{lib-esm/storage/adapter/AsyncStorageAdapter.js → dist/esm/storage/adapter/AsyncStorageAdapter.mjs} +10 -6
  82. package/dist/esm/storage/adapter/AsyncStorageAdapter.mjs.map +1 -0
  83. package/{lib-esm/storage/adapter/AsyncStorageDatabase.js → dist/esm/storage/adapter/AsyncStorageDatabase.mjs} +7 -4
  84. package/dist/esm/storage/adapter/AsyncStorageDatabase.mjs.map +1 -0
  85. package/{lib-esm/storage/adapter/InMemoryStore.js → dist/esm/storage/adapter/InMemoryStore.mjs} +5 -2
  86. package/dist/esm/storage/adapter/InMemoryStore.mjs.map +1 -0
  87. package/{lib-esm/storage/adapter/InMemoryStore.native.js → dist/esm/storage/adapter/InMemoryStore.native.mjs} +6 -2
  88. package/dist/esm/storage/adapter/InMemoryStore.native.mjs.map +1 -0
  89. package/{lib-esm/storage/adapter/IndexedDBAdapter.js → dist/esm/storage/adapter/IndexedDBAdapter.mjs} +10 -6
  90. package/dist/esm/storage/adapter/IndexedDBAdapter.mjs.map +1 -0
  91. package/{lib-esm/storage/adapter/StorageAdapterBase.js → dist/esm/storage/adapter/StorageAdapterBase.mjs} +9 -5
  92. package/dist/esm/storage/adapter/StorageAdapterBase.mjs.map +1 -0
  93. package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs +13 -0
  94. package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs.map +1 -0
  95. package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs +8 -0
  96. package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs.map +1 -0
  97. package/dist/esm/storage/adapter/index.mjs +2 -0
  98. package/dist/esm/storage/adapter/index.mjs.map +1 -0
  99. package/{lib-esm/storage/relationship.js → dist/esm/storage/relationship.mjs} +6 -2
  100. package/dist/esm/storage/relationship.mjs.map +1 -0
  101. package/{lib-esm/storage/storage.js → dist/esm/storage/storage.mjs} +11 -8
  102. package/dist/esm/storage/storage.mjs.map +1 -0
  103. package/{lib-esm/sync/datastoreConnectivity.js → dist/esm/sync/datastoreConnectivity.mjs} +9 -5
  104. package/dist/esm/sync/datastoreConnectivity.mjs.map +1 -0
  105. package/dist/esm/sync/datastoreReachability/index.d.ts +1 -0
  106. package/{lib-esm/sync/datastoreReachability/index.js → dist/esm/sync/datastoreReachability/index.mjs} +6 -2
  107. package/dist/esm/sync/datastoreReachability/index.mjs.map +1 -0
  108. package/dist/esm/sync/datastoreReachability/index.native.d.ts +1 -0
  109. package/{lib-esm/sync/datastoreReachability/index.native.js → dist/esm/sync/datastoreReachability/index.native.mjs} +7 -3
  110. package/dist/esm/sync/datastoreReachability/index.native.mjs.map +1 -0
  111. package/{lib-esm/sync/index.js → dist/esm/sync/index.mjs} +24 -21
  112. package/dist/esm/sync/index.mjs.map +1 -0
  113. package/{lib-esm/sync/merger.js → dist/esm/sync/merger.mjs} +5 -2
  114. package/dist/esm/sync/merger.mjs.map +1 -0
  115. package/{lib-esm/sync/outbox.js → dist/esm/sync/outbox.mjs} +7 -4
  116. package/dist/esm/sync/outbox.mjs.map +1 -0
  117. package/{lib-esm/sync/processors/errorMaps.js → dist/esm/sync/processors/errorMaps.mjs} +13 -11
  118. package/dist/esm/sync/processors/errorMaps.mjs.map +1 -0
  119. package/{lib → dist/esm}/sync/processors/mutation.d.ts +1 -1
  120. package/{lib-esm/sync/processors/mutation.js → dist/esm/sync/processors/mutation.mjs} +10 -7
  121. package/dist/esm/sync/processors/mutation.mjs.map +1 -0
  122. package/{lib-esm/sync/processors/subscription.js → dist/esm/sync/processors/subscription.mjs} +18 -17
  123. package/dist/esm/sync/processors/subscription.mjs.map +1 -0
  124. package/{lib-esm/sync/processors/sync.js → dist/esm/sync/processors/sync.mjs} +8 -5
  125. package/dist/esm/sync/processors/sync.mjs.map +1 -0
  126. package/{lib-esm/sync/utils.js → dist/esm/sync/utils.mjs} +30 -26
  127. package/dist/esm/sync/utils.mjs.map +1 -0
  128. package/{lib-esm/types.js → dist/esm/types.mjs} +34 -30
  129. package/dist/esm/types.mjs.map +1 -0
  130. package/{lib-esm/util.js → dist/esm/util.mjs} +61 -57
  131. package/dist/esm/util.mjs.map +1 -0
  132. package/package.json +133 -137
  133. package/lib/authModeStrategies/defaultAuthStrategy.d.ts +0 -2
  134. package/lib/authModeStrategies/index.d.ts +0 -2
  135. package/lib/authModeStrategies/multiAuthStrategy.d.ts +0 -13
  136. package/lib/datastore/datastore.d.ts +0 -231
  137. package/lib/index.d.ts +0 -16
  138. package/lib/predicates/index.d.ts +0 -100
  139. package/lib/predicates/next.d.ts +0 -317
  140. package/lib/predicates/sort.d.ts +0 -8
  141. package/lib/ssr/index.d.ts +0 -3
  142. package/lib/ssr/index.js +0 -18
  143. package/lib/storage/adapter/AsyncStorageAdapter.d.ts +0 -40
  144. package/lib/storage/adapter/AsyncStorageDatabase.d.ts +0 -39
  145. package/lib/storage/adapter/InMemoryStore.d.ts +0 -11
  146. package/lib/storage/adapter/InMemoryStore.native.d.ts +0 -1
  147. package/lib/storage/adapter/IndexedDBAdapter.d.ts +0 -70
  148. package/lib/storage/adapter/StorageAdapterBase.d.ts +0 -134
  149. package/lib/storage/adapter/getDefaultAdapter/index.d.ts +0 -3
  150. package/lib/storage/adapter/getDefaultAdapter/index.native.d.ts +0 -3
  151. package/lib/storage/adapter/getDefaultAdapter/index.native.js +0 -10
  152. package/lib/storage/adapter/index.d.ts +0 -9
  153. package/lib/storage/relationship.d.ts +0 -149
  154. package/lib/storage/storage.d.ts +0 -50
  155. package/lib/sync/datastoreConnectivity.d.ts +0 -16
  156. package/lib/sync/datastoreReachability/index.d.ts +0 -1
  157. package/lib/sync/datastoreReachability/index.native.d.ts +0 -1
  158. package/lib/sync/index.d.ts +0 -103
  159. package/lib/sync/merger.d.ts +0 -17
  160. package/lib/sync/outbox.d.ts +0 -27
  161. package/lib/sync/processors/errorMaps.d.ts +0 -17
  162. package/lib/sync/processors/subscription.d.ts +0 -42
  163. package/lib/sync/processors/sync.d.ts +0 -28
  164. package/lib/sync/utils.d.ts +0 -107
  165. package/lib/tsconfig.tsbuildinfo +0 -1
  166. package/lib/types.d.ts +0 -641
  167. package/lib/util.d.ts +0 -196
  168. package/lib-esm/authModeStrategies/index.js +0 -4
  169. package/lib-esm/index.js +0 -14
  170. package/lib-esm/ssr/index.d.ts +0 -3
  171. package/lib-esm/ssr/index.js +0 -13
  172. package/lib-esm/storage/adapter/getDefaultAdapter/index.js +0 -10
  173. package/lib-esm/storage/adapter/getDefaultAdapter/index.native.js +0 -5
  174. package/lib-esm/storage/adapter/index.js +0 -1
  175. package/lib-esm/sync/datastoreReachability/index.d.ts +0 -1
  176. package/lib-esm/sync/datastoreReachability/index.native.d.ts +0 -1
  177. package/lib-esm/sync/processors/mutation.d.ts +0 -67
  178. package/lib-esm/tsconfig.tsbuildinfo +0 -1
  179. package/src/ssr/index.ts +0 -27
  180. package/ssr/package.json +0 -8
  181. /package/{lib-esm → dist/esm}/authModeStrategies/defaultAuthStrategy.d.ts +0 -0
  182. /package/{lib-esm → dist/esm}/authModeStrategies/index.d.ts +0 -0
  183. /package/{lib-esm → dist/esm}/authModeStrategies/multiAuthStrategy.d.ts +0 -0
  184. /package/{lib-esm → dist/esm}/datastore/datastore.d.ts +0 -0
  185. /package/{lib-esm → dist/esm}/index.d.ts +0 -0
  186. /package/{lib-esm → dist/esm}/predicates/index.d.ts +0 -0
  187. /package/{lib-esm → dist/esm}/predicates/next.d.ts +0 -0
  188. /package/{lib-esm → dist/esm}/predicates/sort.d.ts +0 -0
  189. /package/{lib-esm → dist/esm}/storage/adapter/AsyncStorageAdapter.d.ts +0 -0
  190. /package/{lib-esm → dist/esm}/storage/adapter/AsyncStorageDatabase.d.ts +0 -0
  191. /package/{lib-esm → dist/esm}/storage/adapter/InMemoryStore.d.ts +0 -0
  192. /package/{lib-esm → dist/esm}/storage/adapter/InMemoryStore.native.d.ts +0 -0
  193. /package/{lib-esm → dist/esm}/storage/adapter/IndexedDBAdapter.d.ts +0 -0
  194. /package/{lib-esm → dist/esm}/storage/adapter/StorageAdapterBase.d.ts +0 -0
  195. /package/{lib-esm → dist/esm}/storage/adapter/getDefaultAdapter/index.d.ts +0 -0
  196. /package/{lib-esm → dist/esm}/storage/adapter/getDefaultAdapter/index.native.d.ts +0 -0
  197. /package/{lib-esm → dist/esm}/storage/adapter/index.d.ts +0 -0
  198. /package/{lib-esm → dist/esm}/storage/relationship.d.ts +0 -0
  199. /package/{lib-esm → dist/esm}/storage/storage.d.ts +0 -0
  200. /package/{lib-esm → dist/esm}/sync/datastoreConnectivity.d.ts +0 -0
  201. /package/{lib-esm → dist/esm}/sync/index.d.ts +0 -0
  202. /package/{lib-esm → dist/esm}/sync/merger.d.ts +0 -0
  203. /package/{lib-esm → dist/esm}/sync/outbox.d.ts +0 -0
  204. /package/{lib-esm → dist/esm}/sync/processors/errorMaps.d.ts +0 -0
  205. /package/{lib-esm → dist/esm}/sync/processors/subscription.d.ts +0 -0
  206. /package/{lib-esm → dist/esm}/sync/processors/sync.d.ts +0 -0
  207. /package/{lib-esm → dist/esm}/sync/utils.d.ts +0 -0
  208. /package/{lib-esm → dist/esm}/types.d.ts +0 -0
  209. /package/{lib-esm → dist/esm}/util.d.ts +0 -0
@@ -1,6 +1,7 @@
1
+ import { isFieldAssociation } from '../types.mjs';
2
+
1
3
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
4
  // SPDX-License-Identifier: Apache-2.0
3
- import { isFieldAssociation } from '../types';
4
5
  /**
5
6
  * Defines a relationship from a LOCAL model.field to a REMOTE model.field and helps
6
7
  * navigate the relationship, providing a simplified peek at the relationship details
@@ -9,7 +10,7 @@ import { isFieldAssociation } from '../types';
9
10
  * Because I mean, relationships are tough.
10
11
  *
11
12
  */
12
- export class ModelRelationship {
13
+ class ModelRelationship {
13
14
  /**
14
15
  * @param modelDefinition The "local" model.
15
16
  * @param field The "local" model field.
@@ -264,3 +265,6 @@ export class ModelRelationship {
264
265
  return query;
265
266
  }
266
267
  }
268
+
269
+ export { ModelRelationship };
270
+ //# sourceMappingURL=relationship.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship.mjs","sources":["../../../src/storage/relationship.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { isFieldAssociation } from '../types';\n/**\n * Defines a relationship from a LOCAL model.field to a REMOTE model.field and helps\n * navigate the relationship, providing a simplified peek at the relationship details\n * pertinent to setting FK's and constructing join conditions.\n *\n * Because I mean, relationships are tough.\n *\n */\nexport class ModelRelationship {\n /**\n * @param modelDefinition The \"local\" model.\n * @param field The \"local\" model field.\n */\n constructor(model, field) {\n if (!isFieldAssociation(model.schema, field)) {\n throw new Error(`${model.schema.name}.${field} is not a relationship.`);\n }\n this.localModel = model;\n this._field = field;\n }\n /**\n * Returns a ModelRelationship for the the given model and field if the pair\n * indicates a relationship to another model. Else, returns `null`.\n *\n * @param model The model the relationship field exists in.\n * @param field The field that may relates the local model to the remote model.\n */\n static from(model, field) {\n if (isFieldAssociation(model.schema, field)) {\n return new this(model, field);\n }\n else {\n return null;\n }\n }\n /**\n * Enumerates all valid `ModelRelationship`'s on the given model.\n *\n * @param model The model definition to enumerate relationships of.\n */\n static allFrom(model) {\n const relationships = [];\n for (const field of Object.keys(model.schema.fields)) {\n const relationship = ModelRelationship.from(model, field);\n relationship && relationships.push(relationship);\n }\n return relationships;\n }\n get localDefinition() {\n return this.localModel.schema;\n }\n /**\n * The virtual/computed field on the local model that should contain\n * the related model.\n */\n get field() {\n return this._field;\n }\n /**\n * The constructor that can be used to query DataStore or create instance for\n * the local model.\n */\n get localConstructor() {\n return this.localModel.builder;\n }\n /**\n * The name/type of the relationship the local model has with the remote model\n * via the defined local model field.\n */\n get type() {\n return this.localAssocation.connectionType;\n }\n /**\n * Raw details about the local FK as-is from the local model's field definition in\n * the schema. This field requires interpretation.\n *\n * @see localJoinFields\n * @see localAssociatedWith\n */\n get localAssocation() {\n return this.localDefinition.fields[this.field].association;\n }\n /**\n * The field names on the local model that can be used to query or queried to match\n * with instances of the remote model.\n *\n * Fields are returned in-order to match the order of `this.remoteKeyFields`.\n */\n get localJoinFields() {\n /**\n * This is relatively straightforward, actually.\n *\n * If we have explicitly stated targetNames, codegen is telling us authoritatively\n * to use those fields for this relationship. The local model \"points to\" fields\n * in the remote one.\n *\n * In other cases, the remote model points to this one's\n */\n if (this.localAssocation.targetName) {\n // This case is theoretically unnecessary going forward.\n return [this.localAssocation.targetName];\n }\n else if (this.localAssocation.targetNames) {\n return this.localAssocation.targetNames;\n }\n else {\n return this.localPKFields;\n }\n }\n /**\n * The field names on the local model that uniquely identify it.\n *\n * These fields may or may not be relevant to the join fields.\n */\n get localPKFields() {\n return this.localModel.pkField;\n }\n get remoteDefinition() {\n return this.remoteModelType.modelConstructor?.schema;\n }\n get remoteModelType() {\n return this.localDefinition.fields[this.field].type;\n }\n /**\n * Constructor that can be used to query DataStore or create instances for\n * the remote model.\n */\n get remoteModelConstructor() {\n return this.remoteModelType.modelConstructor.builder;\n }\n /**\n * The field names on the remote model that uniquely identify it.\n *\n * These fields may or may not be relevant to the join fields.\n */\n get remotePKFields() {\n return this.remoteModelType.modelConstructor?.pkField || ['id'];\n }\n /**\n * The `associatedWith` fields from the local perspective.\n *\n * When present, these fields indicate which fields on the remote model to use\n * when looking for a remote association and/or determining the final remote\n * key fields.\n */\n get localAssociatedWith() {\n if (this.localAssocation.connectionType === 'HAS_MANY' ||\n this.localAssocation.connectionType === 'HAS_ONE') {\n // This de-arraying is theoretically unnecessary going forward.\n return Array.isArray(this.localAssocation.associatedWith)\n ? this.localAssocation.associatedWith\n : [this.localAssocation.associatedWith];\n }\n else {\n return undefined;\n }\n }\n /**\n * The `remote` model's associated field's `assocation` metadata, if\n * present.\n *\n * This is used when determining if the remote model's associated field\n * specifies which FK fields to use. If this value is `undefined`, the\n * name of the remote field (`this.localAssociatedWith`) *is* the remote\n * key field.\n */\n get explicitRemoteAssociation() {\n if (this.localAssociatedWith) {\n if (this.localAssociatedWith.length === 1) {\n return this.remoteDefinition.fields[this.localAssociatedWith[0]]\n ?.association;\n }\n else {\n return undefined;\n }\n }\n }\n /**\n * The field names on the remote model that can used to query or queried to match\n * with instances of the local model.\n *\n * Fields are returned in-order to match the order of `this.localKeyFields`.\n */\n get remoteJoinFields() {\n /**\n * If the local relationship explicitly names \"associated with\" fields, we\n * need to see if this points direction to a reciprocating assocation. If it\n * does, the remote assocation indicates what fields to use.\n */\n if (this.explicitRemoteAssociation?.targetName) {\n // This case is theoretically unnecessary going forward.\n return [this.explicitRemoteAssociation.targetName];\n }\n else if (this.explicitRemoteAssociation?.targetNames) {\n return this.explicitRemoteAssociation?.targetNames;\n }\n else if (this.localAssociatedWith) {\n return this.localAssociatedWith;\n }\n else {\n return this.remotePKFields;\n }\n }\n /**\n * Whether this relationship everything necessary to get, set, and query from\n * the perspective of the local model provided at instantiation.\n */\n get isComplete() {\n return this.localJoinFields.length > 0 && this.remoteJoinFields.length > 0;\n }\n /**\n * Creates an FK mapper object with respect to the given related instance.\n *\n * E.g., if the local FK fields are `[parentId, parentName]` and point to\n * `[customId, name]` on the remote model, `createLocalFKObject(remote)`\n * will return:\n *\n * ```\n * {\n * \tparentId: remote.customId,\n * \tparentName: remote.name\n * }\n * ```\n *\n * @param remote The remote related instance.\n */\n createLocalFKObject(remote) {\n const fk = {};\n for (let i = 0; i < this.localJoinFields.length; i++) {\n fk[this.localJoinFields[i]] = remote[this.remoteJoinFields[i]];\n }\n return fk;\n }\n /**\n * Creates an query mapper object to help fetch the remote instance(s) or\n * `null` if any of the necessary local fields are `null` or `undefined`.\n *\n * E.g., if the local FK fields are `[parentId, parentName]` and point to\n * `[customId, name]` on the remote model, `createLocalFKObject(remote)`\n * will return:\n *\n * ```\n * {\n * \tcustomId: local.parentId\n * \tname: local.parentName\n * }\n * ```\n *\n * If the local fields are not populated, returns\n *\n * @param local The local instance.\n */\n createRemoteQueryObject(local) {\n const query = {};\n for (let i = 0; i < this.remoteJoinFields.length; i++) {\n const localValue = local[this.localJoinFields[i]];\n if (localValue === null || localValue === undefined)\n return null;\n query[this.remoteJoinFields[i]] = local[this.localJoinFields[i]];\n }\n return query;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,13 +1,14 @@
1
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- // SPDX-License-Identifier: Apache-2.0
3
- import { filter, map, Subject } from 'rxjs';
4
- import { ModelPredicateCreator } from '../predicates';
5
- import { OpType, QueryOne, isTargetNameAssociation, } from '../types';
6
- import { isModelConstructor, STORAGE, validatePredicate, valuesEqual, } from '../util';
7
- import { getIdentifierValue } from '../sync/utils';
8
- import getDefaultAdapter from './adapter/getDefaultAdapter';
1
+ import { Subject, filter, map } from 'rxjs';
2
+ import { ModelPredicateCreator } from '../predicates/index.mjs';
3
+ import { QueryOne, OpType, isTargetNameAssociation } from '../types.mjs';
4
+ import { isModelConstructor, validatePredicate, valuesEqual, STORAGE } from '../util.mjs';
5
+ import { getIdentifierValue } from '../sync/utils.mjs';
6
+ import getDefaultAdapter from './adapter/getDefaultAdapter/index.mjs';
9
7
  import { Mutex } from '@aws-amplify/core/internals/utils';
10
8
  import { ConsoleLogger } from '@aws-amplify/core';
9
+
10
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
11
+ // SPDX-License-Identifier: Apache-2.0
11
12
  const logger = new ConsoleLogger('DataStore');
12
13
  class StorageClass {
13
14
  constructor(schema, namespaceResolver, getModelConstructorByModelName, modelInstanceCreator, adapter, sessionId) {
@@ -328,4 +329,6 @@ class ExclusiveStorage {
328
329
  return this.storage.init();
329
330
  }
330
331
  }
332
+
331
333
  export { ExclusiveStorage };
334
+ //# sourceMappingURL=storage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.mjs","sources":["../../../src/storage/storage.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { filter, map, Subject } from 'rxjs';\nimport { ModelPredicateCreator } from '../predicates';\nimport { OpType, QueryOne, isTargetNameAssociation, } from '../types';\nimport { isModelConstructor, STORAGE, validatePredicate, valuesEqual, } from '../util';\nimport { getIdentifierValue } from '../sync/utils';\nimport getDefaultAdapter from './adapter/getDefaultAdapter';\nimport { Mutex } from '@aws-amplify/core/internals/utils';\nimport { ConsoleLogger } from '@aws-amplify/core';\nconst logger = new ConsoleLogger('DataStore');\nclass StorageClass {\n constructor(schema, namespaceResolver, getModelConstructorByModelName, modelInstanceCreator, adapter, sessionId) {\n this.schema = schema;\n this.namespaceResolver = namespaceResolver;\n this.getModelConstructorByModelName = getModelConstructorByModelName;\n this.modelInstanceCreator = modelInstanceCreator;\n this.adapter = adapter;\n this.sessionId = sessionId;\n this.adapter = this.adapter || getDefaultAdapter();\n this.pushStream = new Subject();\n }\n static getNamespace() {\n const namespace = {\n name: STORAGE,\n relationships: {},\n enums: {},\n models: {},\n nonModels: {},\n };\n return namespace;\n }\n async init() {\n if (this.initialized !== undefined) {\n await this.initialized;\n return;\n }\n logger.debug('Starting Storage');\n let resolve;\n let reject;\n this.initialized = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n this.adapter.setUp(this.schema, this.namespaceResolver, this.modelInstanceCreator, this.getModelConstructorByModelName, this.sessionId).then(resolve, reject);\n await this.initialized;\n }\n async save(model, condition, mutator, patchesTuple) {\n await this.init();\n if (!this.adapter) {\n throw new Error('Storage adapter is missing');\n }\n const result = await this.adapter.save(model, condition);\n result.forEach(r => {\n const [savedElement, opType] = r;\n // truthy when save is called by the Merger\n const syncResponse = !!mutator;\n let updateMutationInput;\n // don't attempt to calc mutation input when storage.save\n // is called by Merger, i.e., when processing an AppSync response\n if ((opType === OpType.UPDATE || opType === OpType.INSERT) &&\n !syncResponse) {\n //\n // TODO: LOOK!!!\n // the `model` used here is in effect regardless of what model\n // comes back from adapter.save().\n // Prior to fix, SQLite adapter had been returning two models\n // of different types, resulting in invalid outbox entries.\n //\n // the bug is essentially fixed in SQLite adapter.\n // leaving as-is, because it's currently unclear whether anything\n // depends on this remaining as-is.\n //\n updateMutationInput = this.getChangedFieldsInput(model, savedElement, patchesTuple);\n // // an update without changed user fields\n // => don't create mutationEvent\n if (updateMutationInput === null) {\n return result;\n }\n }\n const element = updateMutationInput || savedElement;\n const modelConstructor = Object.getPrototypeOf(savedElement)\n .constructor;\n this.pushStream.next({\n model: modelConstructor,\n opType,\n element,\n mutator,\n condition: (condition &&\n ModelPredicateCreator.getPredicates(condition, false)) ||\n null,\n savedElement,\n });\n });\n return result;\n }\n async delete(modelOrModelConstructor, condition, mutator) {\n await this.init();\n if (!this.adapter) {\n throw new Error('Storage adapter is missing');\n }\n let models;\n let deleted;\n [models, deleted] = await this.adapter.delete(modelOrModelConstructor, condition);\n const modelConstructor = isModelConstructor(modelOrModelConstructor)\n ? modelOrModelConstructor\n : Object.getPrototypeOf(modelOrModelConstructor || {})\n .constructor;\n const namespaceName = this.namespaceResolver(modelConstructor);\n const modelDefinition = this.schema.namespaces[namespaceName].models[modelConstructor.name];\n const modelIds = new Set(models.map(model => {\n const modelId = getIdentifierValue(modelDefinition, model);\n return modelId;\n }));\n if (!isModelConstructor(modelOrModelConstructor) &&\n !Array.isArray(deleted)) {\n deleted = [deleted];\n }\n deleted.forEach(model => {\n const modelConstructor = Object.getPrototypeOf(model)\n .constructor;\n let theCondition;\n if (!isModelConstructor(modelOrModelConstructor)) {\n const modelId = getIdentifierValue(modelDefinition, model);\n theCondition = modelIds.has(modelId)\n ? ModelPredicateCreator.getPredicates(condition, false)\n : undefined;\n }\n this.pushStream.next({\n model: modelConstructor,\n opType: OpType.DELETE,\n element: model,\n mutator,\n condition: theCondition || null,\n });\n });\n return [models, deleted];\n }\n async query(modelConstructor, predicate, pagination) {\n await this.init();\n if (!this.adapter) {\n throw new Error('Storage adapter is missing');\n }\n return await this.adapter.query(modelConstructor, predicate, pagination);\n }\n async queryOne(modelConstructor, firstOrLast = QueryOne.FIRST) {\n await this.init();\n if (!this.adapter) {\n throw new Error('Storage adapter is missing');\n }\n return await this.adapter.queryOne(modelConstructor, firstOrLast);\n }\n observe(modelConstructor, predicate, skipOwn) {\n const listenToAll = !modelConstructor;\n const { predicates, type } = (predicate && ModelPredicateCreator.getPredicates(predicate, false)) ||\n {};\n let result = this.pushStream\n .pipe(filter(({ mutator }) => {\n return !skipOwn || mutator !== skipOwn;\n }))\n .pipe(map(({ mutator: _mutator, ...message }) => message));\n if (!listenToAll) {\n result = result.pipe(filter(({ model, element }) => {\n if (modelConstructor !== model) {\n return false;\n }\n if (!!predicates && !!type) {\n return validatePredicate(element, type, predicates);\n }\n return true;\n }));\n }\n return result;\n }\n async clear(completeObservable = true) {\n this.initialized = undefined;\n if (!this.adapter) {\n throw new Error('Storage adapter is missing');\n }\n await this.adapter.clear();\n if (completeObservable) {\n this.pushStream.complete();\n }\n }\n async batchSave(modelConstructor, items, mutator) {\n await this.init();\n if (!this.adapter) {\n throw new Error('Storage adapter is missing');\n }\n const result = await this.adapter.batchSave(modelConstructor, items);\n result.forEach(([element, opType]) => {\n this.pushStream.next({\n model: modelConstructor,\n opType,\n element,\n mutator,\n condition: null,\n });\n });\n return result;\n }\n // returns null if no user fields were changed (determined by value comparison)\n getChangedFieldsInput(model, originalElement, patchesTuple) {\n const containsPatches = patchesTuple && patchesTuple.length;\n if (!containsPatches) {\n return null;\n }\n const [patches, source] = patchesTuple;\n const updatedElement = {};\n // extract array of updated fields from patches\n const updatedFields = (patches.map(patch => patch.path && patch.path[0]));\n // check model def for association and replace with targetName if exists\n const modelConstructor = Object.getPrototypeOf(model)\n .constructor;\n const namespace = this.namespaceResolver(modelConstructor);\n const { fields } = this.schema.namespaces[namespace].models[modelConstructor.name];\n const { primaryKey, compositeKeys = [] } = this.schema.namespaces[namespace].keys?.[modelConstructor.name] || {};\n // set original values for these fields\n updatedFields.forEach((field) => {\n const targetNames = isTargetNameAssociation(fields[field]?.association);\n if (Array.isArray(targetNames)) {\n // if field refers to a belongsTo relation, use the target field instead\n for (const targetName of targetNames) {\n // check field values by value. Ignore unchanged fields\n if (!valuesEqual(source[targetName], originalElement[targetName])) {\n // if the field was updated to 'undefined', replace with 'null' for compatibility with JSON and GraphQL\n updatedElement[targetName] =\n originalElement[targetName] === undefined\n ? null\n : originalElement[targetName];\n for (const fieldSet of compositeKeys) {\n // include all of the fields that comprise the composite key\n if (fieldSet.has(targetName)) {\n for (const compositeField of fieldSet) {\n updatedElement[compositeField] =\n originalElement[compositeField];\n }\n }\n }\n }\n }\n }\n else {\n // Backwards compatibility pre-CPK\n // if field refers to a belongsTo relation, use the target field instead\n const key = targetNames || field;\n // check field values by value. Ignore unchanged fields\n if (!valuesEqual(source[key], originalElement[key])) {\n // if the field was updated to 'undefined', replace with 'null' for compatibility with JSON and GraphQL\n updatedElement[key] =\n originalElement[key] === undefined ? null : originalElement[key];\n for (const fieldSet of compositeKeys) {\n // include all of the fields that comprise the composite key\n if (fieldSet.has(key)) {\n for (const compositeField of fieldSet) {\n updatedElement[compositeField] =\n originalElement[compositeField];\n }\n }\n }\n }\n }\n });\n // Exit early when there are no changes introduced in the update mutation\n if (Object.keys(updatedElement).length === 0) {\n return null;\n }\n // include field(s) from custom PK if one is specified for the model\n if (primaryKey && primaryKey.length) {\n for (const pkField of primaryKey) {\n updatedElement[pkField] = originalElement[pkField];\n }\n }\n const { id, _version, _lastChangedAt, _deleted } = originalElement;\n // For update mutations we only want to send fields with changes\n // and the required internal fields\n return {\n ...updatedElement,\n id,\n _version,\n _lastChangedAt,\n _deleted,\n };\n }\n}\nclass ExclusiveStorage {\n constructor(schema, namespaceResolver, getModelConstructorByModelName, modelInstanceCreator, adapter, sessionId) {\n this.mutex = new Mutex();\n this.storage = new StorageClass(schema, namespaceResolver, getModelConstructorByModelName, modelInstanceCreator, adapter, sessionId);\n }\n runExclusive(fn) {\n return this.mutex.runExclusive(fn.bind(this, this.storage));\n }\n async save(model, condition, mutator, patchesTuple) {\n return this.runExclusive(storage => storage.save(model, condition, mutator, patchesTuple));\n }\n async delete(modelOrModelConstructor, condition, mutator) {\n return this.runExclusive(storage => {\n if (isModelConstructor(modelOrModelConstructor)) {\n const modelConstructor = modelOrModelConstructor;\n return storage.delete(modelConstructor, condition, mutator);\n }\n else {\n const model = modelOrModelConstructor;\n return storage.delete(model, condition, mutator);\n }\n });\n }\n async query(modelConstructor, predicate, pagination) {\n return this.runExclusive(storage => storage.query(modelConstructor, predicate, pagination));\n }\n async queryOne(modelConstructor, firstOrLast = QueryOne.FIRST) {\n return this.runExclusive(storage => storage.queryOne(modelConstructor, firstOrLast));\n }\n static getNamespace() {\n return StorageClass.getNamespace();\n }\n observe(modelConstructor, predicate, skipOwn) {\n return this.storage.observe(modelConstructor, predicate, skipOwn);\n }\n async clear() {\n await this.runExclusive(storage => storage.clear());\n }\n batchSave(modelConstructor, items) {\n return this.storage.batchSave(modelConstructor, items);\n }\n async init() {\n return this.storage.init();\n }\n}\nexport { ExclusiveStorage };\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- // SPDX-License-Identifier: Apache-2.0
3
1
  import { Observable } from 'rxjs';
4
- import { ReachabilityMonitor } from './datastoreReachability';
2
+ import { ReachabilityMonitor } from './datastoreReachability/index.mjs';
5
3
  import { ConsoleLogger } from '@aws-amplify/core';
6
- const logger = new ConsoleLogger('DataStore');
4
+
5
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6
+ // SPDX-License-Identifier: Apache-2.0
7
+ new ConsoleLogger('DataStore');
7
8
  const RECONNECTING_IN = 5000; // 5s this may be configurable in the future
8
- export default class DataStoreConnectivity {
9
+ class DataStoreConnectivity {
9
10
  constructor() {
10
11
  this.connectionStatus = {
11
12
  online: false,
@@ -50,3 +51,6 @@ export default class DataStoreConnectivity {
50
51
  }
51
52
  }
52
53
  }
54
+
55
+ export { DataStoreConnectivity as default };
56
+ //# sourceMappingURL=datastoreConnectivity.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datastoreConnectivity.mjs","sources":["../../../src/sync/datastoreConnectivity.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Observable } from 'rxjs';\nimport { ReachabilityMonitor } from './datastoreReachability';\nimport { ConsoleLogger } from '@aws-amplify/core';\nconst logger = new ConsoleLogger('DataStore');\nconst RECONNECTING_IN = 5000; // 5s this may be configurable in the future\nexport default class DataStoreConnectivity {\n constructor() {\n this.connectionStatus = {\n online: false,\n };\n }\n status() {\n if (this.observer) {\n throw new Error('Subscriber already exists');\n }\n return new Observable(observer => {\n this.observer = observer;\n // Will be used to forward socket connection changes, enhancing Reachability\n this.subscription = ReachabilityMonitor.subscribe(({ online }) => {\n this.connectionStatus.online = online;\n const observerResult = { ...this.connectionStatus }; // copyOf status\n observer.next(observerResult);\n });\n return () => {\n clearTimeout(this.timeout);\n this.unsubscribe();\n };\n });\n }\n unsubscribe() {\n if (this.subscription) {\n clearTimeout(this.timeout);\n this.subscription.unsubscribe();\n }\n }\n // for consistency with other background processors.\n async stop() {\n this.unsubscribe();\n return;\n }\n socketDisconnected() {\n if (this.observer && typeof this.observer.next === 'function') {\n this.observer.next({ online: false }); // Notify network issue from the socket\n this.timeout = setTimeout(() => {\n const observerResult = { ...this.connectionStatus }; // copyOf status\n this.observer.next(observerResult);\n }, RECONNECTING_IN); // giving time for socket cleanup and network status stabilization\n }\n }\n}\n"],"names":[],"mappings":";;;;AAAA;AACA;AAIe,IAAI,aAAa,CAAC,WAAW,EAAE;AAC9C,MAAM,eAAe,GAAG,IAAI,CAAC;AACd,MAAM,qBAAqB,CAAC;AAC3C,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,gBAAgB,GAAG;AAChC,YAAY,MAAM,EAAE,KAAK;AACzB,SAAS,CAAC;AACV,KAAK;AACL,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AACzD,SAAS;AACT,QAAQ,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAI;AAC1C,YAAY,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACrC;AACA,YAAY,IAAI,CAAC,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK;AAC9E,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC;AACtD,gBAAgB,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACpE,gBAAgB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC9C,aAAa,CAAC,CAAC;AACf,YAAY,OAAO,MAAM;AACzB,gBAAgB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,gBAAgB,IAAI,CAAC,WAAW,EAAE,CAAC;AACnC,aAAa,CAAC;AACd,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,YAAY,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AAC5C,SAAS;AACT,KAAK;AACL;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3B,QAAQ,OAAO;AACf,KAAK;AACL,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;AACvE,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAClD,YAAY,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM;AAC5C,gBAAgB,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACpE,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACnD,aAAa,EAAE,eAAe,CAAC,CAAC;AAChC,SAAS;AACT,KAAK;AACL;;;;"}
@@ -0,0 +1 @@
1
+ export declare const ReachabilityMonitor: import("rxjs").Observable<import("@aws-amplify/core/dist/esm/Reachability/types").NetworkStatus>;
@@ -1,4 +1,8 @@
1
+ import { Reachability } from '@aws-amplify/core/internals/utils';
2
+
1
3
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
4
  // SPDX-License-Identifier: Apache-2.0
3
- import { Reachability } from '@aws-amplify/core/internals/utils';
4
- export const ReachabilityMonitor = new Reachability().networkMonitor();
5
+ const ReachabilityMonitor = new Reachability().networkMonitor();
6
+
7
+ export { ReachabilityMonitor };
8
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/sync/datastoreReachability/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Reachability } from '@aws-amplify/core/internals/utils';\nexport const ReachabilityMonitor = new Reachability().networkMonitor();\n"],"names":[],"mappings":";;AAAA;AACA;AAEY,MAAC,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC,cAAc;;;;"}
@@ -0,0 +1 @@
1
+ export declare const ReachabilityMonitor: import("rxjs").Observable<import("@aws-amplify/core/dist/esm/Reachability/types").NetworkStatus>;
@@ -1,5 +1,9 @@
1
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- // SPDX-License-Identifier: Apache-2.0
3
1
  import { Reachability } from '@aws-amplify/core/internals/utils';
4
2
  import { loadNetInfo } from '@aws-amplify/react-native';
5
- export const ReachabilityMonitor = new Reachability().networkMonitor(loadNetInfo());
3
+
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ const ReachabilityMonitor = new Reachability().networkMonitor(loadNetInfo());
7
+
8
+ export { ReachabilityMonitor };
9
+ //# sourceMappingURL=index.native.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.native.mjs","sources":["../../../../src/sync/datastoreReachability/index.native.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Reachability } from '@aws-amplify/core/internals/utils';\nimport { loadNetInfo } from '@aws-amplify/react-native';\nexport const ReachabilityMonitor = new Reachability().networkMonitor(loadNetInfo());\n"],"names":[],"mappings":";;;AAAA;AACA;AAGY,MAAC,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE;;;;"}
@@ -1,22 +1,23 @@
1
+ import { BackgroundProcessManager } from '@aws-amplify/core/internals/utils';
2
+ import { ConsoleLogger, Hub } from '@aws-amplify/core';
3
+ import { Observable, filter, of } from 'rxjs';
4
+ import { ModelPredicateCreator } from '../predicates/index.mjs';
5
+ import { OpType } from '../types.mjs';
6
+ import { getNow, USER, SYNC } from '../util.mjs';
7
+ import DataStoreConnectivity from './datastoreConnectivity.mjs';
8
+ import { ModelMerger } from './merger.mjs';
9
+ import { MutationEventOutbox } from './outbox.mjs';
10
+ import { MutationProcessor } from './processors/mutation.mjs';
11
+ import { SubscriptionProcessor, CONTROL_MSG } from './processors/subscription.mjs';
12
+ import { SyncProcessor } from './processors/sync.mjs';
13
+ import { predicateToGraphQLCondition, createMutationInstanceFromModelOperation, getIdentifierValue } from './utils.mjs';
14
+ import { CONTROL_MSG as CONTROL_MSG$1, CONNECTION_STATE_CHANGE, ConnectionState } from '@aws-amplify/api-graphql';
15
+
1
16
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
17
  // SPDX-License-Identifier: Apache-2.0
3
- import { BackgroundProcessManager } from '@aws-amplify/core/internals/utils';
4
- import { Hub, ConsoleLogger } from '@aws-amplify/core';
5
- import { filter, Observable, of } from 'rxjs';
6
- import { ModelPredicateCreator } from '../predicates';
7
- import { OpType, } from '../types';
8
- import { getNow, SYNC, USER } from '../util';
9
- import DataStoreConnectivity from './datastoreConnectivity';
10
- import { ModelMerger } from './merger';
11
- import { MutationEventOutbox } from './outbox';
12
- import { MutationProcessor } from './processors/mutation';
13
- import { CONTROL_MSG, SubscriptionProcessor } from './processors/subscription';
14
- import { SyncProcessor } from './processors/sync';
15
- import { createMutationInstanceFromModelOperation, getIdentifierValue, predicateToGraphQLCondition, } from './utils';
16
- import { CONTROL_MSG as PUBSUB_CONTROL_MSG, ConnectionState, CONNECTION_STATE_CHANGE as PUBSUB_CONNECTION_STATE_CHANGE, } from '@aws-amplify/api-graphql';
17
18
  const logger = new ConsoleLogger('DataStore');
18
19
  const ownSymbol = Symbol('sync');
19
- export var ControlMessage;
20
+ var ControlMessage;
20
21
  (function (ControlMessage) {
21
22
  ControlMessage["SYNC_ENGINE_STORAGE_SUBSCRIBED"] = "storageSubscribed";
22
23
  ControlMessage["SYNC_ENGINE_SUBSCRIPTIONS_ESTABLISHED"] = "subscriptionsEstablished";
@@ -29,7 +30,7 @@ export var ControlMessage;
29
30
  ControlMessage["SYNC_ENGINE_NETWORK_STATUS"] = "networkStatus";
30
31
  ControlMessage["SYNC_ENGINE_READY"] = "ready";
31
32
  })(ControlMessage || (ControlMessage = {}));
32
- export class SyncEngine {
33
+ class SyncEngine {
33
34
  getModelSyncedStatus(modelConstructor) {
34
35
  return this.modelSyncedStatus.get(modelConstructor);
35
36
  }
@@ -420,11 +421,10 @@ export class SyncEngine {
420
421
  // but, it's not clear to me yet how to support an
421
422
  // extensible, centralized cancelable `sleep()` elegantly.
422
423
  await this.runningProcesses.add(async (onTerminate) => {
423
- let sleepTimer;
424
424
  let unsleep;
425
425
  const sleep = new Promise(_unsleep => {
426
426
  unsleep = _unsleep;
427
- sleepTimer = setTimeout(unsleep, msNextFullSync);
427
+ setTimeout(unsleep, msNextFullSync);
428
428
  });
429
429
  onTerminate.then(() => {
430
430
  terminated = true;
@@ -446,8 +446,8 @@ export class SyncEngine {
446
446
  disconnectionHandler() {
447
447
  return (msg) => {
448
448
  // This implementation is tied to AWSAppSyncRealTimeProvider 'Connection closed', 'Timeout disconnect' msg
449
- if (PUBSUB_CONTROL_MSG.CONNECTION_CLOSED === msg ||
450
- PUBSUB_CONTROL_MSG.TIMEOUT_DISCONNECT === msg) {
449
+ if (CONTROL_MSG$1.CONNECTION_CLOSED === msg ||
450
+ CONTROL_MSG$1.TIMEOUT_DISCONNECT === msg) {
451
451
  this.datastoreConnectivity.socketDisconnected();
452
452
  }
453
453
  };
@@ -683,7 +683,7 @@ export class SyncEngine {
683
683
  startDisruptionListener() {
684
684
  return Hub.listen('api', (data) => {
685
685
  if (data.source === 'PubSub' &&
686
- data.payload.event === PUBSUB_CONNECTION_STATE_CHANGE) {
686
+ data.payload.event === CONNECTION_STATE_CHANGE) {
687
687
  const connectionState = data.payload.data
688
688
  .connectionState;
689
689
  switch (connectionState) {
@@ -714,3 +714,6 @@ export class SyncEngine {
714
714
  })));
715
715
  }
716
716
  }
717
+
718
+ export { ControlMessage, SyncEngine };
719
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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":"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"}
@@ -1,5 +1,6 @@
1
- import { OpType, } from '../types';
2
- import { getIdentifierValue } from './utils';
1
+ import { OpType } from '../types.mjs';
2
+ import { getIdentifierValue } from './utils.mjs';
3
+
3
4
  // https://github.com/aws-amplify/amplify-js/blob/datastore-docs/packages/datastore/docs/sync-engine.md#merger
4
5
  class ModelMerger {
5
6
  constructor(outbox, ownSymbol) {
@@ -38,4 +39,6 @@ class ModelMerger {
38
39
  return await storage.batchSave(modelConstructor, page, this.ownSymbol);
39
40
  }
40
41
  }
42
+
41
43
  export { ModelMerger };
44
+ //# sourceMappingURL=merger.mjs.map
@@ -0,0 +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,7 +1,8 @@
1
- import { ModelPredicateCreator } from '../predicates';
2
- import { QueryOne, } from '../types';
3
- import { USER, SYNC, valuesEqual } from '../util';
4
- import { getIdentifierValue, TransformerMutationType } from './utils';
1
+ import { ModelPredicateCreator } from '../predicates/index.mjs';
2
+ import { QueryOne } from '../types.mjs';
3
+ import { SYNC, valuesEqual, USER } from '../util.mjs';
4
+ import { TransformerMutationType, getIdentifierValue } from './utils.mjs';
5
+
5
6
  // TODO: Persist deleted ids
6
7
  // https://github.com/aws-amplify/amplify-js/blob/datastore-docs/packages/datastore/docs/sync-engine.md#outbox
7
8
  class MutationEventOutbox {
@@ -189,4 +190,6 @@ class MutationEventOutbox {
189
190
  return record;
190
191
  }
191
192
  }
193
+
192
194
  export { MutationEventOutbox };
195
+ //# sourceMappingURL=outbox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbox.mjs","sources":["../../../src/sync/outbox.ts"],"sourcesContent":["import { ModelPredicateCreator } from '../predicates';\nimport { QueryOne, } from '../types';\nimport { USER, SYNC, valuesEqual } 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 await storage.delete(head);\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, and `outgoingData`\n // only contains updated fields, resulting in an error when doing a comparison\n // of two equal mutations. Fix this, or mitigate otherwise.\n if (!valuesEqual(incomingData, outgoingData, 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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"}