@aws-amplify/data-schema 0.15.0 → 0.16.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 (375) hide show
  1. package/{lib-esm/src → dist/cjs}/Authorization.js +149 -31
  2. package/dist/cjs/Authorization.js.map +1 -0
  3. package/{lib-esm/src → dist/cjs}/ClientSchema.js +3 -1
  4. package/dist/cjs/ClientSchema.js.map +1 -0
  5. package/{lib-esm/src → dist/cjs}/CombineSchema.js +3 -2
  6. package/dist/cjs/CombineSchema.js.map +1 -0
  7. package/{lib-esm/src → dist/cjs}/CustomOperation.js +7 -3
  8. package/dist/cjs/CustomOperation.js.map +1 -0
  9. package/{lib-esm/src → dist/cjs}/CustomType.js +3 -1
  10. package/dist/cjs/CustomType.js.map +1 -0
  11. package/{lib-esm/src → dist/cjs}/EnumType.js +3 -1
  12. package/dist/cjs/EnumType.js.map +1 -0
  13. package/{lib-esm/src → dist/cjs}/Handler.js +3 -1
  14. package/dist/cjs/Handler.js.map +1 -0
  15. package/{lib-esm/src → dist/cjs}/MappedTypes/CustomOperations.js +3 -1
  16. package/dist/cjs/MappedTypes/CustomOperations.js.map +1 -0
  17. package/dist/cjs/MappedTypes/ExtractNonModelTypes.js +4 -0
  18. package/dist/cjs/MappedTypes/ExtractNonModelTypes.js.map +1 -0
  19. package/dist/cjs/MappedTypes/ImplicitFieldInjector.js +4 -0
  20. package/dist/cjs/MappedTypes/ImplicitFieldInjector.js.map +1 -0
  21. package/{lib-esm/src → dist/cjs}/MappedTypes/MapSecondaryIndexes.js +3 -1
  22. package/dist/cjs/MappedTypes/MapSecondaryIndexes.js.map +1 -0
  23. package/{lib-esm/src → dist/cjs}/MappedTypes/ModelMetadata.js +3 -1
  24. package/dist/cjs/MappedTypes/ModelMetadata.js.map +1 -0
  25. package/dist/cjs/MappedTypes/ResolveFieldProperties.js +4 -0
  26. package/dist/cjs/MappedTypes/ResolveFieldProperties.js.map +1 -0
  27. package/{lib-esm/src → dist/cjs}/MappedTypes/ResolveSchema.js +3 -1
  28. package/dist/cjs/MappedTypes/ResolveSchema.js.map +1 -0
  29. package/{lib-esm/src → dist/cjs}/ModelField.js +8 -3
  30. package/dist/cjs/ModelField.js.map +1 -0
  31. package/{lib-esm/src → dist/cjs}/ModelIndex.js +3 -1
  32. package/dist/cjs/ModelIndex.js.map +1 -0
  33. package/{lib-esm/src → dist/cjs}/ModelRelationalField.js +7 -10
  34. package/dist/cjs/ModelRelationalField.js.map +1 -0
  35. package/{lib-esm/src → dist/cjs}/ModelSchema.js +10 -5
  36. package/dist/cjs/ModelSchema.js.map +1 -0
  37. package/{lib-esm/src → dist/cjs}/ModelType.js +8 -3
  38. package/dist/cjs/ModelType.js.map +1 -0
  39. package/{lib-esm/src → dist/cjs}/RefType.js +8 -5
  40. package/dist/cjs/RefType.js.map +1 -0
  41. package/{lib-esm/src → dist/cjs}/SchemaProcessor.js +15 -61
  42. package/dist/cjs/SchemaProcessor.js.map +1 -0
  43. package/{lib-esm/src/index.js → dist/cjs/a.js} +4 -4
  44. package/dist/cjs/a.js.map +1 -0
  45. package/dist/cjs/index.js +8 -0
  46. package/dist/cjs/index.js.map +1 -0
  47. package/{lib-esm/src → dist/cjs}/internals/index.js +3 -1
  48. package/dist/cjs/internals/index.js.map +1 -0
  49. package/dist/cjs/runtime/addSchemaToClient.js +17 -0
  50. package/dist/cjs/runtime/addSchemaToClient.js.map +1 -0
  51. package/dist/cjs/runtime/addSchemaToClientWithInstance.js +22 -0
  52. package/dist/cjs/runtime/addSchemaToClientWithInstance.js.map +1 -0
  53. package/dist/cjs/runtime/bridge-types.js +15 -0
  54. package/dist/cjs/runtime/bridge-types.js.map +1 -0
  55. package/dist/cjs/runtime/client/index.js +17 -0
  56. package/dist/cjs/runtime/client/index.js.map +1 -0
  57. package/dist/cjs/runtime/client/index.v3.js +7 -0
  58. package/dist/cjs/runtime/client/index.v3.js.map +1 -0
  59. package/dist/cjs/runtime/index.js +13 -0
  60. package/dist/cjs/runtime/index.js.map +1 -0
  61. package/dist/cjs/runtime/index.v3.js +13 -0
  62. package/dist/cjs/runtime/index.v3.js.map +1 -0
  63. package/dist/cjs/runtime/internals/APIClient.js +740 -0
  64. package/dist/cjs/runtime/internals/APIClient.js.map +1 -0
  65. package/dist/cjs/runtime/internals/clientUtils.js +29 -0
  66. package/dist/cjs/runtime/internals/clientUtils.js.map +1 -0
  67. package/dist/cjs/runtime/internals/generateCustomOperationsProperty.js +49 -0
  68. package/dist/cjs/runtime/internals/generateCustomOperationsProperty.js.map +1 -0
  69. package/dist/cjs/runtime/internals/index.js +21 -0
  70. package/dist/cjs/runtime/internals/index.js.map +1 -0
  71. package/dist/cjs/runtime/internals/operations/custom.js +356 -0
  72. package/dist/cjs/runtime/internals/operations/custom.js.map +1 -0
  73. package/dist/cjs/runtime/internals/operations/get.js +62 -0
  74. package/dist/cjs/runtime/internals/operations/get.js.map +1 -0
  75. package/dist/cjs/runtime/internals/operations/indexQuery.js +75 -0
  76. package/dist/cjs/runtime/internals/operations/indexQuery.js.map +1 -0
  77. package/dist/cjs/runtime/internals/operations/list.js +74 -0
  78. package/dist/cjs/runtime/internals/operations/list.js.map +1 -0
  79. package/dist/cjs/runtime/internals/operations/observeQuery.js +121 -0
  80. package/dist/cjs/runtime/internals/operations/observeQuery.js.map +1 -0
  81. package/dist/cjs/runtime/internals/operations/subscription.js +31 -0
  82. package/dist/cjs/runtime/internals/operations/subscription.js.map +1 -0
  83. package/dist/cjs/runtime/internals/server/generateModelsProperty.js +53 -0
  84. package/dist/cjs/runtime/internals/server/generateModelsProperty.js.map +1 -0
  85. package/dist/cjs/runtime/internals/server/index.js +8 -0
  86. package/dist/cjs/runtime/internals/server/index.js.map +1 -0
  87. package/dist/cjs/runtime/internals/utils/clientProperties/generateEnumsProperty.js +21 -0
  88. package/dist/cjs/runtime/internals/utils/clientProperties/generateEnumsProperty.js.map +1 -0
  89. package/dist/cjs/runtime/internals/utils/clientProperties/generateModelsProperty.js +45 -0
  90. package/dist/cjs/runtime/internals/utils/clientProperties/generateModelsProperty.js.map +1 -0
  91. package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.js +11 -0
  92. package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.js.map +1 -0
  93. package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.js +11 -0
  94. package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.js.map +1 -0
  95. package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js +15 -0
  96. package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js.map +1 -0
  97. package/dist/cjs/runtime/utils/findIndexByFields.js +25 -0
  98. package/dist/cjs/runtime/utils/findIndexByFields.js.map +1 -0
  99. package/dist/cjs/runtime/utils/index.js +11 -0
  100. package/dist/cjs/runtime/utils/index.js.map +1 -0
  101. package/dist/cjs/runtime/utils/resolveOwnerFields.js +48 -0
  102. package/dist/cjs/runtime/utils/resolveOwnerFields.js.map +1 -0
  103. package/dist/cjs/runtime/utils/resolvePKFields.js +17 -0
  104. package/dist/cjs/runtime/utils/resolvePKFields.js.map +1 -0
  105. package/{lib-esm/src → dist/cjs}/util/Brand.js +3 -1
  106. package/dist/cjs/util/Brand.js.map +1 -0
  107. package/{lib-esm/src → dist/cjs}/util/IndexLimit.js +3 -1
  108. package/dist/cjs/util/IndexLimit.js.map +1 -0
  109. package/{lib-esm/src → dist/cjs}/util/SpreadTuple.js +3 -1
  110. package/dist/cjs/util/SpreadTuple.js.map +1 -0
  111. package/{lib-esm/src → dist/cjs}/util/index.js +3 -1
  112. package/dist/cjs/util/index.js.map +1 -0
  113. package/{lib-esm/src → dist/esm}/Authorization.d.ts +105 -31
  114. package/dist/esm/Authorization.mjs +446 -0
  115. package/dist/esm/Authorization.mjs.map +1 -0
  116. package/{lib-esm/src → dist/esm}/ClientSchema.d.ts +1 -2
  117. package/dist/esm/ClientSchema.mjs +2 -0
  118. package/dist/esm/ClientSchema.mjs.map +1 -0
  119. package/{lib-esm/src → dist/esm}/CombineSchema.d.ts +0 -1
  120. package/dist/esm/CombineSchema.mjs +39 -0
  121. package/dist/esm/CombineSchema.mjs.map +1 -0
  122. package/{lib-esm/src → dist/esm}/CustomOperation.d.ts +2 -3
  123. package/dist/esm/CustomOperation.mjs +67 -0
  124. package/dist/esm/CustomOperation.mjs.map +1 -0
  125. package/{lib-esm/src → dist/esm}/CustomType.d.ts +0 -1
  126. package/dist/esm/CustomType.mjs +13 -0
  127. package/dist/esm/CustomType.mjs.map +1 -0
  128. package/{lib-esm/src → dist/esm}/EnumType.d.ts +0 -1
  129. package/dist/esm/EnumType.mjs +16 -0
  130. package/dist/esm/EnumType.mjs.map +1 -0
  131. package/{lib-esm/src → dist/esm}/Handler.d.ts +0 -1
  132. package/dist/esm/Handler.mjs +48 -0
  133. package/dist/esm/Handler.mjs.map +1 -0
  134. package/{lib-esm/src → dist/esm}/MappedTypes/CustomOperations.d.ts +0 -1
  135. package/dist/esm/MappedTypes/CustomOperations.mjs +2 -0
  136. package/dist/esm/MappedTypes/CustomOperations.mjs.map +1 -0
  137. package/{lib-esm/src → dist/esm}/MappedTypes/ExtractNonModelTypes.d.ts +0 -1
  138. package/dist/esm/MappedTypes/ExtractNonModelTypes.mjs +2 -0
  139. package/dist/esm/MappedTypes/ExtractNonModelTypes.mjs.map +1 -0
  140. package/{lib-esm/src → dist/esm}/MappedTypes/ImplicitFieldInjector.d.ts +0 -1
  141. package/dist/esm/MappedTypes/ImplicitFieldInjector.mjs +2 -0
  142. package/dist/esm/MappedTypes/ImplicitFieldInjector.mjs.map +1 -0
  143. package/{lib-esm/src → dist/esm}/MappedTypes/MapSecondaryIndexes.d.ts +0 -1
  144. package/dist/esm/MappedTypes/MapSecondaryIndexes.mjs +2 -0
  145. package/dist/esm/MappedTypes/MapSecondaryIndexes.mjs.map +1 -0
  146. package/{lib-esm/src → dist/esm}/MappedTypes/ModelMetadata.d.ts +0 -1
  147. package/dist/esm/MappedTypes/ModelMetadata.mjs +2 -0
  148. package/dist/esm/MappedTypes/ModelMetadata.mjs.map +1 -0
  149. package/{lib-esm/src → dist/esm}/MappedTypes/ResolveFieldProperties.d.ts +0 -1
  150. package/dist/esm/MappedTypes/ResolveFieldProperties.mjs +2 -0
  151. package/dist/esm/MappedTypes/ResolveFieldProperties.mjs.map +1 -0
  152. package/{lib-esm/src → dist/esm}/MappedTypes/ResolveSchema.d.ts +0 -1
  153. package/dist/esm/MappedTypes/ResolveSchema.mjs +2 -0
  154. package/dist/esm/MappedTypes/ResolveSchema.mjs.map +1 -0
  155. package/{lib-esm/src → dist/esm}/ModelField.d.ts +2 -3
  156. package/dist/esm/ModelField.mjs +199 -0
  157. package/dist/esm/ModelField.mjs.map +1 -0
  158. package/{lib-esm/src → dist/esm}/ModelIndex.d.ts +0 -1
  159. package/dist/esm/ModelIndex.mjs +33 -0
  160. package/dist/esm/ModelIndex.mjs.map +1 -0
  161. package/{lib-esm/src → dist/esm}/ModelRelationalField.d.ts +3 -4
  162. package/dist/esm/ModelRelationalField.mjs +88 -0
  163. package/dist/esm/ModelRelationalField.mjs.map +1 -0
  164. package/{lib-esm/src → dist/esm}/ModelSchema.d.ts +3 -4
  165. package/dist/esm/ModelSchema.mjs +163 -0
  166. package/dist/esm/ModelSchema.mjs.map +1 -0
  167. package/{lib-esm/src → dist/esm}/ModelType.d.ts +2 -3
  168. package/dist/esm/ModelType.mjs +66 -0
  169. package/dist/esm/ModelType.mjs.map +1 -0
  170. package/{lib-esm/src → dist/esm}/RefType.d.ts +2 -3
  171. package/dist/esm/RefType.mjs +48 -0
  172. package/dist/esm/RefType.mjs.map +1 -0
  173. package/{lib-esm/src → dist/esm}/SchemaProcessor.d.ts +0 -1
  174. package/dist/esm/SchemaProcessor.mjs +926 -0
  175. package/dist/esm/SchemaProcessor.mjs.map +1 -0
  176. package/{lib-esm/src/index.d.ts → dist/esm/a.d.ts} +1 -3
  177. package/dist/esm/a.mjs +11 -0
  178. package/dist/esm/a.mjs.map +1 -0
  179. package/dist/esm/index.d.ts +4 -0
  180. package/dist/esm/index.mjs +3 -0
  181. package/dist/esm/index.mjs.map +1 -0
  182. package/dist/esm/internals/index.d.ts +2 -0
  183. package/dist/esm/internals/index.mjs +2 -0
  184. package/dist/esm/internals/index.mjs.map +1 -0
  185. package/dist/esm/runtime/addSchemaToClient.d.ts +3 -0
  186. package/dist/esm/runtime/addSchemaToClient.mjs +17 -0
  187. package/dist/esm/runtime/addSchemaToClient.mjs.map +1 -0
  188. package/dist/esm/runtime/addSchemaToClientWithInstance.d.ts +3 -0
  189. package/dist/esm/runtime/addSchemaToClientWithInstance.mjs +22 -0
  190. package/dist/esm/runtime/addSchemaToClientWithInstance.mjs.map +1 -0
  191. package/dist/esm/runtime/bridge-types.d.ts +281 -0
  192. package/dist/esm/runtime/bridge-types.mjs +13 -0
  193. package/dist/esm/runtime/bridge-types.mjs.map +1 -0
  194. package/dist/esm/runtime/client/index.d.ts +571 -0
  195. package/dist/esm/runtime/client/index.mjs +2 -0
  196. package/dist/esm/runtime/client/index.mjs.map +1 -0
  197. package/dist/esm/runtime/client/index.v3.d.ts +15 -0
  198. package/dist/esm/runtime/client/index.v3.mjs +2 -0
  199. package/dist/esm/runtime/client/index.v3.mjs.map +1 -0
  200. package/dist/esm/runtime/index.d.ts +4 -0
  201. package/dist/esm/runtime/index.mjs +4 -0
  202. package/dist/esm/runtime/index.mjs.map +1 -0
  203. package/dist/esm/runtime/index.v3.d.ts +4 -0
  204. package/dist/esm/runtime/index.v3.mjs +4 -0
  205. package/dist/esm/runtime/index.v3.mjs.map +1 -0
  206. package/dist/esm/runtime/internals/APIClient.d.ts +125 -0
  207. package/dist/esm/runtime/internals/APIClient.mjs +728 -0
  208. package/dist/esm/runtime/internals/APIClient.mjs.map +1 -0
  209. package/dist/esm/runtime/internals/clientUtils.d.ts +6 -0
  210. package/dist/esm/runtime/internals/clientUtils.mjs +26 -0
  211. package/dist/esm/runtime/internals/clientUtils.mjs.map +1 -0
  212. package/dist/esm/runtime/internals/generateCustomOperationsProperty.d.ts +8 -0
  213. package/dist/esm/runtime/internals/generateCustomOperationsProperty.mjs +44 -0
  214. package/dist/esm/runtime/internals/generateCustomOperationsProperty.mjs.map +1 -0
  215. package/dist/esm/runtime/internals/index.d.ts +6 -0
  216. package/dist/esm/runtime/internals/index.mjs +7 -0
  217. package/dist/esm/runtime/internals/index.mjs.map +1 -0
  218. package/dist/esm/runtime/internals/operations/custom.d.ts +61 -0
  219. package/dist/esm/runtime/internals/operations/custom.mjs +354 -0
  220. package/dist/esm/runtime/internals/operations/custom.mjs.map +1 -0
  221. package/dist/esm/runtime/internals/operations/get.d.ts +3 -0
  222. package/dist/esm/runtime/internals/operations/get.mjs +60 -0
  223. package/dist/esm/runtime/internals/operations/get.mjs.map +1 -0
  224. package/dist/esm/runtime/internals/operations/indexQuery.d.ts +7 -0
  225. package/dist/esm/runtime/internals/operations/indexQuery.mjs +73 -0
  226. package/dist/esm/runtime/internals/operations/indexQuery.mjs.map +1 -0
  227. package/dist/esm/runtime/internals/operations/list.d.ts +2 -0
  228. package/dist/esm/runtime/internals/operations/list.mjs +72 -0
  229. package/dist/esm/runtime/internals/operations/list.mjs.map +1 -0
  230. package/dist/esm/runtime/internals/operations/observeQuery.d.ts +3 -0
  231. package/dist/esm/runtime/internals/operations/observeQuery.mjs +120 -0
  232. package/dist/esm/runtime/internals/operations/observeQuery.mjs.map +1 -0
  233. package/dist/esm/runtime/internals/operations/subscription.d.ts +3 -0
  234. package/dist/esm/runtime/internals/operations/subscription.mjs +29 -0
  235. package/dist/esm/runtime/internals/operations/subscription.mjs.map +1 -0
  236. package/dist/esm/runtime/internals/server/generateModelsProperty.d.ts +3 -0
  237. package/dist/esm/runtime/internals/server/generateModelsProperty.mjs +51 -0
  238. package/dist/esm/runtime/internals/server/generateModelsProperty.mjs.map +1 -0
  239. package/dist/esm/runtime/internals/server/index.d.ts +1 -0
  240. package/dist/esm/runtime/internals/server/index.mjs +2 -0
  241. package/dist/esm/runtime/internals/server/index.mjs.map +1 -0
  242. package/dist/esm/runtime/internals/utils/clientProperties/generateEnumsProperty.d.ts +3 -0
  243. package/dist/esm/runtime/internals/utils/clientProperties/generateEnumsProperty.mjs +18 -0
  244. package/dist/esm/runtime/internals/utils/clientProperties/generateEnumsProperty.mjs.map +1 -0
  245. package/dist/esm/runtime/internals/utils/clientProperties/generateModelsProperty.d.ts +3 -0
  246. package/dist/esm/runtime/internals/utils/clientProperties/generateModelsProperty.mjs +43 -0
  247. package/dist/esm/runtime/internals/utils/clientProperties/generateModelsProperty.mjs.map +1 -0
  248. package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.d.ts +2 -0
  249. package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.mjs +8 -0
  250. package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.mjs.map +1 -0
  251. package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.d.ts +8 -0
  252. package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs +8 -0
  253. package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs.map +1 -0
  254. package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.d.ts +2 -0
  255. package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs +12 -0
  256. package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs.map +1 -0
  257. package/dist/esm/runtime/utils/findIndexByFields.d.ts +9 -0
  258. package/dist/esm/runtime/utils/findIndexByFields.mjs +22 -0
  259. package/dist/esm/runtime/utils/findIndexByFields.mjs.map +1 -0
  260. package/dist/esm/runtime/utils/index.d.ts +2 -0
  261. package/dist/esm/runtime/utils/index.mjs +3 -0
  262. package/dist/esm/runtime/utils/index.mjs.map +1 -0
  263. package/dist/esm/runtime/utils/resolveOwnerFields.d.ts +12 -0
  264. package/dist/esm/runtime/utils/resolveOwnerFields.mjs +45 -0
  265. package/dist/esm/runtime/utils/resolveOwnerFields.mjs.map +1 -0
  266. package/dist/esm/runtime/utils/resolvePKFields.d.ts +13 -0
  267. package/dist/esm/runtime/utils/resolvePKFields.mjs +14 -0
  268. package/dist/esm/runtime/utils/resolvePKFields.mjs.map +1 -0
  269. package/{lib-esm/src → dist/esm}/util/Brand.d.ts +0 -1
  270. package/dist/esm/util/Brand.mjs +30 -0
  271. package/dist/esm/util/Brand.mjs.map +1 -0
  272. package/{lib-esm/src → dist/esm}/util/IndexLimit.d.ts +0 -1
  273. package/dist/esm/util/IndexLimit.mjs +2 -0
  274. package/dist/esm/util/IndexLimit.mjs.map +1 -0
  275. package/{lib-esm/src → dist/esm}/util/SpreadTuple.d.ts +0 -1
  276. package/dist/esm/util/SpreadTuple.mjs +2 -0
  277. package/dist/esm/util/SpreadTuple.mjs.map +1 -0
  278. package/{lib-esm/src → dist/esm}/util/index.d.ts +0 -1
  279. package/dist/esm/util/index.mjs +2 -0
  280. package/dist/esm/util/index.mjs.map +1 -0
  281. package/dist/meta/cjs.tsbuildinfo +1 -0
  282. package/internals/package.json +7 -5
  283. package/package.json +31 -14
  284. package/runtime/package.json +8 -0
  285. package/src/Authorization.ts +684 -0
  286. package/src/ClientSchema.ts +118 -0
  287. package/src/CombineSchema.ts +58 -0
  288. package/src/CustomOperation.ts +286 -0
  289. package/src/CustomType.ts +67 -0
  290. package/src/EnumType.ts +36 -0
  291. package/src/Handler.ts +127 -0
  292. package/src/MappedTypes/CustomOperations.ts +256 -0
  293. package/src/MappedTypes/ExtractNonModelTypes.ts +154 -0
  294. package/src/MappedTypes/ImplicitFieldInjector.ts +69 -0
  295. package/src/MappedTypes/MapSecondaryIndexes.ts +100 -0
  296. package/src/MappedTypes/ModelMetadata.ts +87 -0
  297. package/src/MappedTypes/ResolveFieldProperties.ts +254 -0
  298. package/src/MappedTypes/ResolveSchema.ts +148 -0
  299. package/src/ModelField.ts +304 -0
  300. package/src/ModelIndex.ts +91 -0
  301. package/src/ModelRelationalField.ts +263 -0
  302. package/src/ModelSchema.ts +437 -0
  303. package/src/ModelType.ts +345 -0
  304. package/src/RefType.ts +139 -0
  305. package/src/SchemaProcessor.ts +1516 -0
  306. package/src/a.ts +58 -0
  307. package/src/index.ts +6 -0
  308. package/src/internals/index.ts +2 -0
  309. package/src/runtime/addSchemaToClient.ts +45 -0
  310. package/src/runtime/addSchemaToClientWithInstance.ts +46 -0
  311. package/src/runtime/bridge-types.ts +382 -0
  312. package/src/runtime/client/index.ts +923 -0
  313. package/src/runtime/client/index.v3.ts +52 -0
  314. package/src/runtime/index.ts +7 -0
  315. package/src/runtime/index.v3.ts +7 -0
  316. package/src/runtime/internals/APIClient.ts +1082 -0
  317. package/src/runtime/internals/clientUtils.ts +37 -0
  318. package/src/runtime/internals/generateCustomOperationsProperty.ts +116 -0
  319. package/src/runtime/internals/index.ts +12 -0
  320. package/src/runtime/internals/operations/custom.ts +497 -0
  321. package/src/runtime/internals/operations/get.ts +150 -0
  322. package/src/runtime/internals/operations/indexQuery.ts +178 -0
  323. package/src/runtime/internals/operations/list.ts +143 -0
  324. package/src/runtime/internals/operations/observeQuery.ts +146 -0
  325. package/src/runtime/internals/operations/subscription.ts +78 -0
  326. package/src/runtime/internals/server/generateModelsProperty.ts +94 -0
  327. package/src/runtime/internals/server/index.ts +4 -0
  328. package/src/runtime/internals/utils/clientProperties/generateEnumsProperty.ts +34 -0
  329. package/src/runtime/internals/utils/clientProperties/generateModelsProperty.ts +88 -0
  330. package/src/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.ts +10 -0
  331. package/src/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.ts +13 -0
  332. package/src/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.ts +15 -0
  333. package/src/runtime/utils/findIndexByFields.ts +31 -0
  334. package/src/runtime/utils/index.ts +5 -0
  335. package/src/runtime/utils/resolveOwnerFields.ts +77 -0
  336. package/src/runtime/utils/resolvePKFields.ts +23 -0
  337. package/src/util/Brand.ts +45 -0
  338. package/src/util/IndexLimit.ts +12 -0
  339. package/src/util/SpreadTuple.ts +10 -0
  340. package/src/util/index.ts +3 -0
  341. package/lib-esm/index.d.ts +0 -5
  342. package/lib-esm/index.d.ts.map +0 -1
  343. package/lib-esm/index.js +0 -28
  344. package/lib-esm/src/Authorization.d.ts.map +0 -1
  345. package/lib-esm/src/ClientSchema.d.ts.map +0 -1
  346. package/lib-esm/src/CombineSchema.d.ts.map +0 -1
  347. package/lib-esm/src/CustomOperation.d.ts.map +0 -1
  348. package/lib-esm/src/CustomType.d.ts.map +0 -1
  349. package/lib-esm/src/EnumType.d.ts.map +0 -1
  350. package/lib-esm/src/Handler.d.ts.map +0 -1
  351. package/lib-esm/src/MappedTypes/CustomOperations.d.ts.map +0 -1
  352. package/lib-esm/src/MappedTypes/ExtractNonModelTypes.d.ts.map +0 -1
  353. package/lib-esm/src/MappedTypes/ExtractNonModelTypes.js +0 -2
  354. package/lib-esm/src/MappedTypes/ImplicitFieldInjector.d.ts.map +0 -1
  355. package/lib-esm/src/MappedTypes/ImplicitFieldInjector.js +0 -2
  356. package/lib-esm/src/MappedTypes/MapSecondaryIndexes.d.ts.map +0 -1
  357. package/lib-esm/src/MappedTypes/ModelMetadata.d.ts.map +0 -1
  358. package/lib-esm/src/MappedTypes/ResolveFieldProperties.d.ts.map +0 -1
  359. package/lib-esm/src/MappedTypes/ResolveFieldProperties.js +0 -2
  360. package/lib-esm/src/MappedTypes/ResolveSchema.d.ts.map +0 -1
  361. package/lib-esm/src/ModelField.d.ts.map +0 -1
  362. package/lib-esm/src/ModelIndex.d.ts.map +0 -1
  363. package/lib-esm/src/ModelRelationalField.d.ts.map +0 -1
  364. package/lib-esm/src/ModelSchema.d.ts.map +0 -1
  365. package/lib-esm/src/ModelType.d.ts.map +0 -1
  366. package/lib-esm/src/RefType.d.ts.map +0 -1
  367. package/lib-esm/src/SchemaProcessor.d.ts.map +0 -1
  368. package/lib-esm/src/index.d.ts.map +0 -1
  369. package/lib-esm/src/internals/index.d.ts +0 -2
  370. package/lib-esm/src/internals/index.d.ts.map +0 -1
  371. package/lib-esm/src/util/Brand.d.ts.map +0 -1
  372. package/lib-esm/src/util/IndexLimit.d.ts.map +0 -1
  373. package/lib-esm/src/util/SpreadTuple.d.ts.map +0 -1
  374. package/lib-esm/src/util/index.d.ts.map +0 -1
  375. package/lib-esm/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,37 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import type {
5
+ ModelAttribute,
6
+ SchemaModel,
7
+ SecondaryIndexAttribute,
8
+ } from '../bridge-types';
9
+
10
+ const attributeIsSecondaryIndex = (
11
+ attr: ModelAttribute,
12
+ ): attr is SecondaryIndexAttribute => {
13
+ return (
14
+ attr.type === 'key' &&
15
+ // presence of `name` property distinguishes GSI from primary index
16
+ attr.properties?.name &&
17
+ attr.properties?.queryField &&
18
+ attr.properties?.fields.length > 0
19
+ );
20
+ };
21
+
22
+ export const getSecondaryIndexesFromSchemaModel = (model: SchemaModel) => {
23
+ const idxs = model.attributes
24
+ ?.filter(attributeIsSecondaryIndex)
25
+ .map((attr: SecondaryIndexAttribute) => {
26
+ const queryField: string = attr.properties.queryField;
27
+ const [pk, ...sk] = attr.properties.fields;
28
+
29
+ return {
30
+ queryField,
31
+ pk,
32
+ sk,
33
+ };
34
+ });
35
+
36
+ return idxs || [];
37
+ };
@@ -0,0 +1,116 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { CustomMutations, CustomQueries, CustomSubscriptions } from '../client';
4
+ import {
5
+ BaseClient,
6
+ ClientInternalsGetter,
7
+ GraphQLProviderConfig,
8
+ ModelIntrospectionSchema,
9
+ } from '../bridge-types';
10
+
11
+ import { customOpFactory } from './operations/custom';
12
+
13
+ type OpTypes = 'queries' | 'mutations' | 'subscriptions';
14
+
15
+ type CustomOpsProperty<
16
+ T extends Record<any, any>,
17
+ OpType extends OpTypes,
18
+ > = OpType extends 'queries'
19
+ ? CustomQueries<T>
20
+ : OpType extends 'mutations'
21
+ ? CustomMutations<T>
22
+ : OpType extends 'subscriptions'
23
+ ? CustomSubscriptions<T>
24
+ : never;
25
+
26
+ const operationTypeMap = {
27
+ queries: 'query',
28
+ mutations: 'mutation',
29
+ subscriptions: 'subscription',
30
+ } as const;
31
+
32
+ export function generateCustomOperationsProperty<
33
+ T extends Record<any, any>,
34
+ OpType extends OpTypes,
35
+ >(
36
+ client: BaseClient,
37
+ config: GraphQLProviderConfig['GraphQL'],
38
+ operationsType: OpType,
39
+ getInternals: ClientInternalsGetter,
40
+ ): OpType extends 'queries' ? CustomQueries<T> : CustomMutations<T> {
41
+ // some bundlers end up with `Amplify.configure` being called *after* generate client.
42
+ // if that occurs, we need to *not error* while we wait. handling for late configuration
43
+ // occurs in `generateClient()`. we do not need to subscribe to Hub events here.
44
+ if (!config) {
45
+ return {} as CustomOpsProperty<T, OpType>;
46
+ }
47
+
48
+ const modelIntrospection: ModelIntrospectionSchema | undefined =
49
+ config.modelIntrospection;
50
+
51
+ // model intro schema might be absent if there's not actually a configured GraphQL API
52
+ if (!modelIntrospection) {
53
+ return {} as CustomOpsProperty<T, OpType>;
54
+ }
55
+
56
+ // custom operations will be absent from model intro schema if no custom ops
57
+ // are present on the source schema.
58
+ const operations = modelIntrospection[operationsType];
59
+ if (!operations) {
60
+ return {} as CustomOpsProperty<T, OpType>;
61
+ }
62
+
63
+ const ops = {} as CustomOpsProperty<T, OpType>;
64
+ const useContext = getInternals(client).amplify === null;
65
+ for (const operation of Object.values(operations)) {
66
+ (ops as any)[operation.name] = customOpFactory(
67
+ client,
68
+ modelIntrospection,
69
+ operationTypeMap[operationsType],
70
+ operation,
71
+ useContext,
72
+ getInternals,
73
+ );
74
+ }
75
+
76
+ return ops;
77
+ }
78
+
79
+ export function generateCustomMutationsProperty<T extends Record<any, any>>(
80
+ client: BaseClient,
81
+ config: GraphQLProviderConfig['GraphQL'],
82
+ getInternals: ClientInternalsGetter,
83
+ ) {
84
+ return generateCustomOperationsProperty<T, 'mutations'>(
85
+ client,
86
+ config,
87
+ 'mutations',
88
+ getInternals,
89
+ );
90
+ }
91
+
92
+ export function generateCustomQueriesProperty<T extends Record<any, any>>(
93
+ client: BaseClient,
94
+ config: GraphQLProviderConfig['GraphQL'],
95
+ getInternals: ClientInternalsGetter,
96
+ ) {
97
+ return generateCustomOperationsProperty<T, 'queries'>(
98
+ client,
99
+ config,
100
+ 'queries',
101
+ getInternals,
102
+ );
103
+ }
104
+
105
+ export function generateCustomSubscriptionsProperty<T extends Record<any, any>>(
106
+ client: BaseClient,
107
+ config: GraphQLProviderConfig['GraphQL'],
108
+ getInternals: ClientInternalsGetter,
109
+ ) {
110
+ return generateCustomOperationsProperty<T, 'subscriptions'>(
111
+ client,
112
+ config,
113
+ 'subscriptions',
114
+ getInternals,
115
+ );
116
+ }
@@ -0,0 +1,12 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ export {
4
+ generateCustomMutationsProperty,
5
+ generateCustomQueriesProperty,
6
+ generateCustomSubscriptionsProperty,
7
+ } from './generateCustomOperationsProperty';
8
+ export { generateEnumsProperty } from './utils/clientProperties/generateEnumsProperty';
9
+ export { generateModelsProperty } from './utils/clientProperties/generateModelsProperty';
10
+ export { isGraphQLResponseWithErrors } from './utils/runtimeTypeGuards/isGraphQLResponseWithErrors';
11
+ export { isApiGraphQLConfig } from './utils/runtimeTypeGuards/isApiGraphQLProviderConfig';
12
+ export { isConfigureEventWithResourceConfig } from './utils/runtimeTypeGuards/isConfigureEventWithResourceConfig';
@@ -0,0 +1,497 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import {
4
+ AuthModeParams,
5
+ AmplifyServer,
6
+ BaseClient,
7
+ BaseBrowserClient,
8
+ BaseSSRClient,
9
+ ClientInternalsGetter,
10
+ CustomOperation,
11
+ GraphQLResult,
12
+ GraphqlSubscriptionResult,
13
+ ListArgs,
14
+ QueryArgs,
15
+ ModelIntrospectionSchema,
16
+ } from '../../bridge-types';
17
+
18
+ import { map } from 'rxjs';
19
+
20
+ import {
21
+ authModeParams,
22
+ getDefaultSelectionSetForNonModelWithIR,
23
+ flattenItems,
24
+ generateSelectionSet,
25
+ getCustomHeaders,
26
+ initializeModel,
27
+ selectionSetIRToString,
28
+ } from '../APIClient';
29
+
30
+ type CustomOperationOptions = AuthModeParams & ListArgs;
31
+
32
+ // these are the 4 possible sets of arguments custom operations methods can receive
33
+ type OpArgs =
34
+ // SSR Request Client w Args defined
35
+ | [AmplifyServer.ContextSpec, QueryArgs, CustomOperationOptions]
36
+ // SSR Request Client without Args defined
37
+ | [AmplifyServer.ContextSpec, CustomOperationOptions]
38
+ // Client or SSR Cookies Client w Args defined
39
+ | [QueryArgs, CustomOperationOptions]
40
+ // Client or SSR Cookies Client without Args defined
41
+ | [CustomOperationOptions];
42
+
43
+ /**
44
+ * Type guard for checking whether a Custom Operation argument is a contextSpec object
45
+ */
46
+ const argIsContextSpec = (
47
+ arg: OpArgs[number],
48
+ ): arg is AmplifyServer.ContextSpec => {
49
+ return typeof (arg as AmplifyServer.ContextSpec)?.token?.value === 'symbol';
50
+ };
51
+
52
+ /**
53
+ * Builds an operation function, embedded with all client and context data, that
54
+ * can be attached to a client as a custom query or mutation.
55
+ *
56
+ * If we have this source schema:
57
+ *
58
+ * ```typescript
59
+ * a.schema({
60
+ * echo: a.query()
61
+ * .arguments({input: a.string().required()})
62
+ * .returns(a.string())
63
+ * })
64
+ * ```
65
+ *
66
+ * Our model intro schema will contain an entry like this:
67
+ *
68
+ * ```ts
69
+ * {
70
+ * queries: {
71
+ * echo: {
72
+ * name: "echo",
73
+ * isArray: false,
74
+ * type: 'String',
75
+ * isRequired: false,
76
+ * arguments: {
77
+ * input: {
78
+ * name: 'input',
79
+ * isArray: false,
80
+ * type: String,
81
+ * isRequired: true
82
+ * }
83
+ * }
84
+ * }
85
+ * }
86
+ * }
87
+ * ```
88
+ *
89
+ * The `echo` object is used to build the `echo' method that goes here:
90
+ *
91
+ * ```typescript
92
+ * const client = generateClent()
93
+ * const { data } = await client.queries.echo({input: 'a string'});
94
+ * // ^
95
+ * // |
96
+ * // +-- This one right here.
97
+ * //
98
+ * ```
99
+ *
100
+ *
101
+ * @param client The client to run graphql queries through.
102
+ * @param modelIntrospection The model introspection schema the op comes from.
103
+ * @param operationType The broad category of graphql operation.
104
+ * @param operation The operation definition from the introspection schema.
105
+ * @param useContext Whether the function needs to accept an SSR context.
106
+ * @returns The operation function to attach to query, mutations, etc.
107
+ */
108
+ export function customOpFactory(
109
+ client: BaseClient,
110
+ modelIntrospection: ModelIntrospectionSchema,
111
+ operationType: 'query' | 'mutation' | 'subscription',
112
+ operation: CustomOperation,
113
+ useContext: boolean,
114
+ getInternals: ClientInternalsGetter,
115
+ ) {
116
+ // .arguments() are defined for the custom operation in the schema builder
117
+ // and are present in the model introspection schema
118
+ const argsDefined = operation.arguments !== undefined;
119
+
120
+ const op = (...args: OpArgs) => {
121
+ // options is always the last argument
122
+ const options = args[args.length - 1] as CustomOperationOptions;
123
+
124
+ let contextSpec: AmplifyServer.ContextSpec | undefined;
125
+ let arg: QueryArgs | undefined;
126
+
127
+ if (useContext) {
128
+ if (argIsContextSpec(args[0])) {
129
+ contextSpec = args[0];
130
+ } else {
131
+ throw new Error(
132
+ `Invalid first argument passed to ${operation.name}. Expected contextSpec`,
133
+ );
134
+ }
135
+ }
136
+
137
+ if (argsDefined) {
138
+ if (useContext) {
139
+ arg = args[1] as QueryArgs;
140
+ } else {
141
+ arg = args[0] as QueryArgs;
142
+ }
143
+ }
144
+
145
+ if (operationType === 'subscription') {
146
+ return _opSubscription(
147
+ // subscriptions are only enabled on the clientside
148
+ client as BaseBrowserClient,
149
+ modelIntrospection,
150
+ operation,
151
+ getInternals,
152
+ arg,
153
+ options,
154
+ );
155
+ }
156
+
157
+ return _op(
158
+ client,
159
+ modelIntrospection,
160
+ operationType,
161
+ operation,
162
+ getInternals,
163
+ arg,
164
+ options,
165
+ contextSpec,
166
+ );
167
+ };
168
+
169
+ return op;
170
+ }
171
+
172
+ /**
173
+ * Runtime test and type guard to check whether `o[field]` is a `String`.
174
+ *
175
+ * ```typescript
176
+ * if (hasStringField(o, 'prop')) {
177
+ * const s = o.prop;
178
+ * // ^? const s: string
179
+ * }
180
+ * ```
181
+ *
182
+ * @param o Object to inspect
183
+ * @param field Field to look for
184
+ * @returns Boolean: `true` if the `o[field]` is a `string`
185
+ */
186
+ function hasStringField<Field extends string>(
187
+ o: any,
188
+ field: Field,
189
+ ): o is Record<Field, string> {
190
+ return typeof o[field] === 'string';
191
+ }
192
+
193
+ /**
194
+ * Generates "outer" arguments string for a custom operation. For example,
195
+ * in this operation:
196
+ *
197
+ * ```graphql
198
+ * query MyQuery(InputString: String!) {
199
+ * echoString(InputString: $InputString)
200
+ * }
201
+ * ```
202
+ *
203
+ * This function returns the top/outer level arguments as a string:
204
+ *
205
+ * ```json
206
+ * "InputString: String!"
207
+ * ```
208
+ *
209
+ * @param operation Operation object from model introspection schema.
210
+ * @returns "outer" arguments string
211
+ */
212
+ function outerArguments(operation: CustomOperation): string {
213
+ if (operation.arguments === undefined) {
214
+ return '';
215
+ }
216
+ const args = Object.entries(operation.arguments)
217
+ .map(([k, v]) => {
218
+ const baseType = v.type + (v.isRequired ? '!' : '');
219
+ const finalType = v.isArray
220
+ ? `[${baseType}]${v.isArrayNullable ? '' : '!'}`
221
+ : baseType;
222
+
223
+ return `$${k}: ${finalType}`;
224
+ })
225
+ .join(', ');
226
+
227
+ return args.length > 0 ? `(${args})` : '';
228
+ }
229
+
230
+ /**
231
+ * Generates "inner" arguments string for a custom operation. For example,
232
+ * in this operation:
233
+ *
234
+ * ```graphql
235
+ * query MyQuery(InputString: String!) {
236
+ * echoString(InputString: $InputString)
237
+ * }
238
+ * ```
239
+ *
240
+ * This function returns the inner arguments as a string:
241
+ *
242
+ * ```json
243
+ * "InputString: $InputString"
244
+ * ```
245
+ *
246
+ * @param operation Operation object from model introspection schema.
247
+ * @returns "outer" arguments string
248
+ */
249
+ function innerArguments(operation: CustomOperation): string {
250
+ if (operation.arguments === undefined) {
251
+ return '';
252
+ }
253
+ const args = Object.keys(operation.arguments)
254
+ .map((k) => `${k}: $${k}`)
255
+ .join(', ');
256
+
257
+ return args.length > 0 ? `(${args})` : '';
258
+ }
259
+
260
+ /**
261
+ * Generates the selection set string for a custom operation. This is slightly
262
+ * different than the selection set generation for models. If the custom op returns
263
+ * a primitive or enum types, it doen't require a selection set at all.
264
+ *
265
+ * E.g., the graphql might look like this:
266
+ *
267
+ * ```graphql
268
+ * query MyQuery {
269
+ * echoString(inputString: "whatever")
270
+ * }
271
+ * # ^
272
+ * # |
273
+ * # +-- no selection set
274
+ * ```
275
+ *
276
+ * Non-primitive return type selection set generation will be similar to other
277
+ * model operations.
278
+ *
279
+ * @param modelIntrospection The full code-generated introspection schema.
280
+ * @param operation The operation object from the schema.
281
+ * @returns The selection set as a string.
282
+ */
283
+ function operationSelectionSet(
284
+ modelIntrospection: ModelIntrospectionSchema,
285
+ operation: CustomOperation,
286
+ ): string {
287
+ if (
288
+ hasStringField(operation, 'type') ||
289
+ hasStringField(operation.type, 'enum')
290
+ ) {
291
+ return '';
292
+ } else if (hasStringField(operation.type, 'nonModel')) {
293
+ const nonModel = modelIntrospection.nonModels[operation.type.nonModel];
294
+
295
+ return `{${selectionSetIRToString(
296
+ getDefaultSelectionSetForNonModelWithIR(nonModel, modelIntrospection),
297
+ )}}`;
298
+ } else if (hasStringField(operation.type, 'model')) {
299
+ return `{${generateSelectionSet(modelIntrospection, operation.type.model)}}`;
300
+ } else {
301
+ return '';
302
+ }
303
+ }
304
+
305
+ /**
306
+ * Maps an arguments objec to graphql variables, removing superfluous args and
307
+ * screaming loudly when required args are missing.
308
+ *
309
+ * @param operation The operation to construct graphql request variables for.
310
+ * @param args The arguments to map variables from.
311
+ * @returns The graphql variables object.
312
+ */
313
+ function operationVariables(
314
+ operation: CustomOperation,
315
+ args: QueryArgs = {},
316
+ ): Record<string, unknown> {
317
+ const variables = {} as Record<string, unknown>;
318
+ if (operation.arguments === undefined) {
319
+ return variables;
320
+ }
321
+ for (const argDef of Object.values(operation.arguments)) {
322
+ if (typeof args[argDef.name] !== 'undefined') {
323
+ variables[argDef.name] = args[argDef.name];
324
+ } else if (argDef.isRequired) {
325
+ // At this point, the variable is both required and missing: We don't need
326
+ // to continue. The operation is expected to fail.
327
+ throw new Error(`${operation.name} requires arguments '${argDef.name}'`);
328
+ }
329
+ }
330
+
331
+ return variables;
332
+ }
333
+
334
+ /**
335
+ * Executes an operation from the given model intro schema against a client, returning
336
+ * a fully instantiated model when relevant.
337
+ *
338
+ * @param client The client to operate `graphql()` calls through.
339
+ * @param modelIntrospection The model intro schema to construct requests from.
340
+ * @param operationType The high level graphql operation type.
341
+ * @param operation The specific operation name, args, return type details.
342
+ * @param args The arguments to provide to the operation as variables.
343
+ * @param options Request options like headers, etc.
344
+ * @param context SSR context if relevant.
345
+ * @returns Result from the graphql request, model-instantiated when relevant.
346
+ */
347
+ async function _op(
348
+ client: BaseClient,
349
+ modelIntrospection: ModelIntrospectionSchema,
350
+ operationType: 'query' | 'mutation',
351
+ operation: CustomOperation,
352
+ getInternals: ClientInternalsGetter,
353
+ args?: QueryArgs,
354
+ options?: AuthModeParams & ListArgs,
355
+ context?: AmplifyServer.ContextSpec,
356
+ ) {
357
+ const { name: operationName } = operation;
358
+ const auth = authModeParams(client, getInternals, options);
359
+ const headers = getCustomHeaders(client, getInternals, options?.headers);
360
+ const outerArgsString = outerArguments(operation);
361
+ const innerArgsString = innerArguments(operation);
362
+ const selectionSet = operationSelectionSet(modelIntrospection, operation);
363
+
364
+ const returnTypeModelName = hasStringField(operation.type, 'model')
365
+ ? operation.type.model
366
+ : undefined;
367
+
368
+ const query = `
369
+ ${operationType.toLocaleLowerCase()}${outerArgsString} {
370
+ ${operationName}${innerArgsString} ${selectionSet}
371
+ }
372
+ `;
373
+
374
+ const variables = operationVariables(operation, args);
375
+
376
+ try {
377
+ const { data, extensions } = context
378
+ ? ((await (client as BaseSSRClient).graphql(
379
+ context,
380
+ {
381
+ ...auth,
382
+ query,
383
+ variables,
384
+ },
385
+ headers,
386
+ )) as GraphQLResult)
387
+ : ((await (client as BaseBrowserClient).graphql(
388
+ {
389
+ ...auth,
390
+ query,
391
+ variables,
392
+ },
393
+ headers,
394
+ )) as GraphQLResult);
395
+
396
+ // flatten response
397
+ if (data) {
398
+ const [key] = Object.keys(data);
399
+ const flattenedResult = flattenItems(data)[key];
400
+
401
+ // TODO: custom selection set. current selection set is default selection set only
402
+ // custom selection set requires data-schema-type + runtime updates above.
403
+ const [initialized] = returnTypeModelName
404
+ ? initializeModel(
405
+ client,
406
+ returnTypeModelName,
407
+ [flattenedResult],
408
+ modelIntrospection,
409
+ auth.authMode,
410
+ auth.authToken,
411
+ !!context,
412
+ )
413
+ : [flattenedResult];
414
+
415
+ return { data: initialized, extensions };
416
+ } else {
417
+ return { data: null, extensions };
418
+ }
419
+ } catch (error: any) {
420
+ if (error.errors) {
421
+ // graphql errors pass through
422
+ return error as any;
423
+ } else {
424
+ // non-graphql errors re re-thrown
425
+ throw error;
426
+ }
427
+ }
428
+ }
429
+
430
+ /**
431
+ * Executes an operation from the given model intro schema against a client, returning
432
+ * a fully instantiated model when relevant.
433
+ *
434
+ * @param client The client to operate `graphql()` calls through.
435
+ * @param modelIntrospection The model intro schema to construct requests from.
436
+ * @param operation The specific operation name, args, return type details.
437
+ * @param args The arguments to provide to the operation as variables.
438
+ * @param options Request options like headers, etc.
439
+ * @returns Result from the graphql request, model-instantiated when relevant.
440
+ */
441
+ function _opSubscription(
442
+ client: BaseBrowserClient,
443
+ modelIntrospection: ModelIntrospectionSchema,
444
+ operation: CustomOperation,
445
+ getInternals: ClientInternalsGetter,
446
+ args?: QueryArgs,
447
+ options?: AuthModeParams & ListArgs,
448
+ ) {
449
+ const operationType = 'subscription';
450
+ const { name: operationName } = operation;
451
+ const auth = authModeParams(client, getInternals, options);
452
+ const headers = getCustomHeaders(client, getInternals, options?.headers);
453
+ const outerArgsString = outerArguments(operation);
454
+ const innerArgsString = innerArguments(operation);
455
+ const selectionSet = operationSelectionSet(modelIntrospection, operation);
456
+
457
+ const returnTypeModelName = hasStringField(operation.type, 'model')
458
+ ? operation.type.model
459
+ : undefined;
460
+
461
+ const query = `
462
+ ${operationType.toLocaleLowerCase()}${outerArgsString} {
463
+ ${operationName}${innerArgsString} ${selectionSet}
464
+ }
465
+ `;
466
+
467
+ const variables = operationVariables(operation, args);
468
+
469
+ const observable = client.graphql(
470
+ {
471
+ ...auth,
472
+ query,
473
+ variables,
474
+ },
475
+ headers,
476
+ ) as GraphqlSubscriptionResult;
477
+
478
+ return observable.pipe(
479
+ map((value) => {
480
+ const [key] = Object.keys(value.data);
481
+ const data = (value.data as any)[key];
482
+
483
+ const [initialized] = returnTypeModelName
484
+ ? initializeModel(
485
+ client,
486
+ returnTypeModelName,
487
+ [data],
488
+ modelIntrospection,
489
+ auth.authMode,
490
+ auth.authToken,
491
+ )
492
+ : [data];
493
+
494
+ return initialized;
495
+ }),
496
+ );
497
+ }