@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,740 @@
1
+ 'use strict';
2
+
3
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.getCustomHeaders = exports.authModeParams = exports.normalizeMutationInput = exports.buildGraphQLVariables = exports.generateGraphQLDocument = exports.generateSelectionSet = exports.selectionSetIRToString = exports.customSelectionSetToIR = exports.getDefaultSelectionSetForNonModelWithIR = exports.graphQLOperationsInfo = exports.initializeModel = exports.flattenItems = void 0;
6
+ const resolveOwnerFields_1 = require("../utils/resolveOwnerFields");
7
+ const connectionType = {
8
+ HAS_ONE: 'HAS_ONE',
9
+ HAS_MANY: 'HAS_MANY',
10
+ BELONGS_TO: 'BELONGS_TO',
11
+ };
12
+ /**
13
+ *
14
+ * @param GraphQL response object
15
+ * @returns response object with `items` properties flattened
16
+ */
17
+ const flattenItems = (obj) => {
18
+ const res = {};
19
+ Object.entries(obj).forEach(([prop, value]) => {
20
+ if (typeof value === 'object' && !Array.isArray(value) && value !== null) {
21
+ if (value.items !== undefined) {
22
+ res[prop] = value.items.map((item) => (0, exports.flattenItems)(item));
23
+ return;
24
+ }
25
+ res[prop] = (0, exports.flattenItems)(value);
26
+ return;
27
+ }
28
+ res[prop] = value;
29
+ });
30
+ return res;
31
+ };
32
+ exports.flattenItems = flattenItems;
33
+ // TODO: this should accept single result to support CRUD methods; create helper for array/list
34
+ function initializeModel(client, modelName, result, modelIntrospection, authMode, authToken, context = false) {
35
+ const introModel = modelIntrospection.models[modelName];
36
+ const introModelFields = introModel.fields;
37
+ const modelFields = Object.entries(introModelFields)
38
+ .filter(([_, field]) => field?.type?.model !== undefined)
39
+ .map(([fieldName]) => fieldName);
40
+ return result.map((record) => {
41
+ const initializedRelationalFields = {};
42
+ for (const fieldName of modelFields) {
43
+ const modelField = introModelFields[fieldName];
44
+ const modelFieldType = modelField?.type;
45
+ const relatedModelName = modelFieldType.model;
46
+ const relatedModel = modelIntrospection.models[relatedModelName];
47
+ const relatedModelPKFieldName = relatedModel.primaryKeyInfo.primaryKeyFieldName;
48
+ const relatedModelSKFieldNames = relatedModel.primaryKeyInfo.sortKeyFieldNames;
49
+ const relationType = modelField.association?.connectionType;
50
+ let connectionFields = [];
51
+ if (modelField.association &&
52
+ 'associatedWith' in modelField.association) {
53
+ connectionFields = modelField.association.associatedWith;
54
+ }
55
+ const targetNames = [];
56
+ if (modelField.association && 'targetNames' in modelField.association) {
57
+ targetNames.push(...modelField.association.targetNames);
58
+ }
59
+ switch (relationType) {
60
+ case connectionType.HAS_ONE:
61
+ case connectionType.BELONGS_TO: {
62
+ const sortKeyValues = relatedModelSKFieldNames.reduce(
63
+ // TODO(Eslint): is this implementation correct?
64
+ // eslint-disable-next-line array-callback-return
65
+ (acc, curVal) => {
66
+ if (record[curVal]) {
67
+ return (acc[curVal] = record[curVal]);
68
+ }
69
+ }, {});
70
+ if (context) {
71
+ initializedRelationalFields[fieldName] = (contextSpec, options) => {
72
+ if (record[targetNames[0]]) {
73
+ return client.models[relatedModelName].get(contextSpec, {
74
+ [relatedModelPKFieldName]: record[targetNames[0]],
75
+ ...sortKeyValues,
76
+ }, {
77
+ authMode: options?.authMode || authMode,
78
+ authToken: options?.authToken || authToken,
79
+ });
80
+ }
81
+ return undefined;
82
+ };
83
+ }
84
+ else {
85
+ initializedRelationalFields[fieldName] = (options) => {
86
+ if (record[targetNames[0]]) {
87
+ return client.models[relatedModelName].get({
88
+ [relatedModelPKFieldName]: record[targetNames[0]],
89
+ ...sortKeyValues,
90
+ }, {
91
+ authMode: options?.authMode || authMode,
92
+ authToken: options?.authToken || authToken,
93
+ });
94
+ }
95
+ return undefined;
96
+ };
97
+ }
98
+ break;
99
+ }
100
+ case connectionType.HAS_MANY: {
101
+ const parentPk = introModel.primaryKeyInfo.primaryKeyFieldName;
102
+ const parentSK = introModel.primaryKeyInfo.sortKeyFieldNames;
103
+ // M:N check - TODO: refactor
104
+ const relatedModelField = relatedModel.fields[connectionFields[0]];
105
+ const relatedModelFieldType = relatedModelField.type;
106
+ if (relatedModelFieldType.model) {
107
+ let relatedTargetNames = [];
108
+ if (relatedModelField.association &&
109
+ 'targetNames' in relatedModelField.association) {
110
+ relatedTargetNames = relatedModelField.association?.targetNames;
111
+ }
112
+ const hasManyFilter = relatedTargetNames.map((field, idx) => {
113
+ if (idx === 0) {
114
+ return { [field]: { eq: record[parentPk] } };
115
+ }
116
+ return { [field]: { eq: record[parentSK[idx - 1]] } };
117
+ });
118
+ if (context) {
119
+ initializedRelationalFields[fieldName] = (contextSpec, options) => {
120
+ if (record[parentPk]) {
121
+ return client.models[relatedModelName].list(contextSpec, {
122
+ filter: { and: hasManyFilter },
123
+ limit: options?.limit,
124
+ nextToken: options?.nextToken,
125
+ authMode: options?.authMode || authMode,
126
+ authToken: options?.authToken || authToken,
127
+ });
128
+ }
129
+ return [];
130
+ };
131
+ }
132
+ else {
133
+ initializedRelationalFields[fieldName] = (options) => {
134
+ if (record[parentPk]) {
135
+ return client.models[relatedModelName].list({
136
+ filter: { and: hasManyFilter },
137
+ limit: options?.limit,
138
+ nextToken: options?.nextToken,
139
+ authMode: options?.authMode || authMode,
140
+ authToken: options?.authToken || authToken,
141
+ });
142
+ }
143
+ return [];
144
+ };
145
+ }
146
+ break;
147
+ }
148
+ const hasManyFilter = connectionFields.map((field, idx) => {
149
+ if (idx === 0) {
150
+ return { [field]: { eq: record[parentPk] } };
151
+ }
152
+ return { [field]: { eq: record[parentSK[idx - 1]] } };
153
+ });
154
+ if (context) {
155
+ initializedRelationalFields[fieldName] = (contextSpec, options) => {
156
+ if (record[parentPk]) {
157
+ return client.models[relatedModelName].list(contextSpec, {
158
+ filter: { and: hasManyFilter },
159
+ limit: options?.limit,
160
+ nextToken: options?.nextToken,
161
+ authMode: options?.authMode || authMode,
162
+ authToken: options?.authToken || authToken,
163
+ });
164
+ }
165
+ return [];
166
+ };
167
+ }
168
+ else {
169
+ initializedRelationalFields[fieldName] = (options) => {
170
+ if (record[parentPk]) {
171
+ return client.models[relatedModelName].list({
172
+ filter: { and: hasManyFilter },
173
+ limit: options?.limit,
174
+ nextToken: options?.nextToken,
175
+ authMode: options?.authMode || authMode,
176
+ authToken: options?.authToken || authToken,
177
+ });
178
+ }
179
+ return [];
180
+ };
181
+ }
182
+ break;
183
+ }
184
+ }
185
+ }
186
+ return { ...record, ...initializedRelationalFields };
187
+ });
188
+ }
189
+ exports.initializeModel = initializeModel;
190
+ exports.graphQLOperationsInfo = {
191
+ CREATE: { operationPrefix: 'create', usePlural: false },
192
+ READ: { operationPrefix: 'get', usePlural: false },
193
+ UPDATE: { operationPrefix: 'update', usePlural: false },
194
+ DELETE: { operationPrefix: 'delete', usePlural: false },
195
+ LIST: { operationPrefix: 'list', usePlural: true },
196
+ INDEX_QUERY: { operationPrefix: '', usePlural: false },
197
+ ONCREATE: { operationPrefix: 'onCreate', usePlural: false },
198
+ ONUPDATE: { operationPrefix: 'onUpdate', usePlural: false },
199
+ ONDELETE: { operationPrefix: 'onDelete', usePlural: false },
200
+ OBSERVE_QUERY: { operationPrefix: 'observeQuery', usePlural: false },
201
+ };
202
+ const SELECTION_SET_WILDCARD = '*';
203
+ const getDefaultSelectionSetForNonModelWithIR = (nonModelDefinition, modelIntrospection) => {
204
+ const { fields } = nonModelDefinition;
205
+ const mappedFields = Object.values(fields)
206
+ .map(({ type, name }) => {
207
+ if (typeof type.enum === 'string') {
208
+ return [name, FIELD_IR];
209
+ }
210
+ if (typeof type.nonModel === 'string') {
211
+ return [
212
+ name,
213
+ (0, exports.getDefaultSelectionSetForNonModelWithIR)(modelIntrospection.nonModels[type.nonModel], modelIntrospection),
214
+ ];
215
+ }
216
+ if (typeof type === 'string') {
217
+ return [name, FIELD_IR];
218
+ }
219
+ return undefined;
220
+ })
221
+ .filter((pair) => pair !== undefined);
222
+ return Object.fromEntries(mappedFields);
223
+ };
224
+ exports.getDefaultSelectionSetForNonModelWithIR = getDefaultSelectionSetForNonModelWithIR;
225
+ const getDefaultSelectionSetForModelWithIR = (modelDefinition, modelIntrospection) => {
226
+ const { fields } = modelDefinition;
227
+ const mappedFields = Object.values(fields)
228
+ .map(({ type, name }) => {
229
+ if (typeof type.enum === 'string' ||
230
+ typeof type === 'string') {
231
+ return [name, FIELD_IR];
232
+ }
233
+ if (typeof type.nonModel === 'string') {
234
+ return [
235
+ name,
236
+ (0, exports.getDefaultSelectionSetForNonModelWithIR)(modelIntrospection.nonModels[type.nonModel], modelIntrospection),
237
+ ];
238
+ }
239
+ return undefined;
240
+ })
241
+ .filter((pair) => pair !== undefined);
242
+ const ownerFields = (0, resolveOwnerFields_1.resolveOwnerFields)(modelDefinition).map((field) => [
243
+ field,
244
+ FIELD_IR,
245
+ ]);
246
+ return Object.fromEntries(mappedFields.concat(ownerFields));
247
+ };
248
+ function defaultSelectionSetForModel(modelDefinition) {
249
+ // fields that are explicitly part of the graphql schema; not
250
+ // inferred from owner auth rules.
251
+ const { fields } = modelDefinition;
252
+ const explicitFields = Object.values(fields)
253
+ // Default selection set omits model fields
254
+ .map(({ type, name }) => {
255
+ if (typeof type === 'string')
256
+ return name;
257
+ if (typeof type === 'object') {
258
+ if (typeof type?.enum === 'string') {
259
+ return name;
260
+ }
261
+ else if (typeof type?.nonModel === 'string') {
262
+ return `${name}.${SELECTION_SET_WILDCARD}`;
263
+ }
264
+ }
265
+ return undefined;
266
+ })
267
+ .filter(Boolean);
268
+ // fields used for owner auth rules that may or may not also
269
+ // be explicit on the model.
270
+ const ownerFields = (0, resolveOwnerFields_1.resolveOwnerFields)(modelDefinition);
271
+ return Array.from(new Set(explicitFields.concat(ownerFields)));
272
+ }
273
+ const FIELD_IR = '';
274
+ /**
275
+ * Generates nested Custom Selection Set IR from path
276
+ *
277
+ * @param modelDefinitions
278
+ * @param modelName
279
+ * @param selectionSet - array of object paths
280
+ * @example
281
+ * ### Given
282
+ * `selectionSet = ['id', 'comments.post.id']`
283
+ * ### Returns
284
+ * ```ts
285
+ * {
286
+ * id: '',
287
+ * comments: {
288
+ * items: { post: { id: '' } }
289
+ * }
290
+ * }
291
+ * ```
292
+ */
293
+ function customSelectionSetToIR(modelIntrospection, modelName, selectionSet) {
294
+ const dotNotationToObject = (path, modelOrNonModelName) => {
295
+ const [fieldName, ...rest] = path.split('.');
296
+ const nested = rest[0];
297
+ const modelOrNonModelDefinition = modelIntrospection.models[modelOrNonModelName] ??
298
+ modelIntrospection.nonModels[modelOrNonModelName];
299
+ const modelOrNonModelFields = modelOrNonModelDefinition?.fields;
300
+ const relatedModel = modelOrNonModelFields?.[fieldName]?.type?.model;
301
+ const relatedModelDefinition = modelIntrospection.models[relatedModel];
302
+ const relatedNonModel = modelOrNonModelFields?.[fieldName]?.type?.nonModel;
303
+ const relatedNonModelDefinition = modelIntrospection.nonModels[relatedNonModel];
304
+ const isModelOrNonModelOrFieldType = relatedModelDefinition
305
+ ? 'model'
306
+ : relatedNonModelDefinition
307
+ ? 'nonModel'
308
+ : 'field';
309
+ if (isModelOrNonModelOrFieldType === 'nonModel') {
310
+ let result = {};
311
+ if (!nested) {
312
+ throw Error(`${fieldName} must declare a wildcard (*) or a field of custom type ${relatedNonModel}`);
313
+ }
314
+ if (nested === SELECTION_SET_WILDCARD) {
315
+ result = {
316
+ [fieldName]: (0, exports.getDefaultSelectionSetForNonModelWithIR)(relatedNonModelDefinition, modelIntrospection),
317
+ };
318
+ }
319
+ else {
320
+ result = {
321
+ [fieldName]: dotNotationToObject(rest.join('.'), relatedNonModel),
322
+ };
323
+ }
324
+ return result;
325
+ }
326
+ else if (isModelOrNonModelOrFieldType === 'model') {
327
+ let result = {};
328
+ if (!nested) {
329
+ throw Error(`${fieldName} must declare a wildcard (*) or a field of model ${relatedModel}`);
330
+ }
331
+ if (nested === SELECTION_SET_WILDCARD) {
332
+ const nestedRelatedModelDefinition = modelIntrospection.models[relatedModel];
333
+ result = {
334
+ [fieldName]: getDefaultSelectionSetForModelWithIR(nestedRelatedModelDefinition, modelIntrospection),
335
+ };
336
+ }
337
+ else {
338
+ result = {
339
+ [fieldName]: dotNotationToObject(rest.join('.'), relatedModel),
340
+ };
341
+ }
342
+ if (modelOrNonModelFields[fieldName]?.isArray) {
343
+ result = {
344
+ [fieldName]: {
345
+ items: result[fieldName],
346
+ },
347
+ };
348
+ }
349
+ return result;
350
+ }
351
+ else {
352
+ const modelField = modelOrNonModelFields?.[fieldName];
353
+ const nonModelDefinition = modelIntrospection.nonModels[modelOrNonModelName];
354
+ const nonModelField = nonModelDefinition?.fields?.[fieldName];
355
+ if (!nonModelDefinition) {
356
+ const isOwnerField = (0, resolveOwnerFields_1.resolveOwnerFields)(modelOrNonModelDefinition).includes(fieldName);
357
+ if (!modelField && !isOwnerField) {
358
+ throw Error(`${fieldName} is not a field of model ${modelOrNonModelName}`);
359
+ }
360
+ }
361
+ else {
362
+ if (!nonModelField) {
363
+ throw Error(`${fieldName} is not a field of custom type ${modelOrNonModelName}`);
364
+ }
365
+ }
366
+ return { [fieldName]: FIELD_IR };
367
+ }
368
+ };
369
+ return selectionSet.reduce((resultObj, path) => deepMergeSelectionSetObjects(dotNotationToObject(path, modelName), resultObj), {});
370
+ }
371
+ exports.customSelectionSetToIR = customSelectionSetToIR;
372
+ /**
373
+ * Stringifies selection set IR
374
+ * * @example
375
+ * ### Given
376
+ * ```ts
377
+ * {
378
+ * id: '',
379
+ * comments: {
380
+ * items: { post: { id: '' } }
381
+ * }
382
+ * }
383
+ * ```
384
+ * ### Returns
385
+ * `'id comments { items { post { id } } }'`
386
+ */
387
+ function selectionSetIRToString(obj) {
388
+ const res = [];
389
+ Object.entries(obj).forEach(([fieldName, value]) => {
390
+ if (value === FIELD_IR) {
391
+ res.push(fieldName);
392
+ }
393
+ else if (typeof value === 'object' && value !== null) {
394
+ if (value?.items) {
395
+ res.push(fieldName, '{', 'items', '{', selectionSetIRToString(value.items), '}', '}');
396
+ }
397
+ else {
398
+ res.push(fieldName, '{', selectionSetIRToString(value), '}');
399
+ }
400
+ }
401
+ });
402
+ return res.join(' ');
403
+ }
404
+ exports.selectionSetIRToString = selectionSetIRToString;
405
+ /**
406
+ * Recursively merges selection set objects from `source` onto `target`.
407
+ *
408
+ * `target` will be updated. `source` will be left alone.
409
+ *
410
+ * @param source The object to merge into target.
411
+ * @param target The object to be mutated.
412
+ */
413
+ function deepMergeSelectionSetObjects(source, target) {
414
+ const isObject = (obj) => obj && typeof obj === 'object';
415
+ for (const key in source) {
416
+ // This verification avoids 'Prototype Pollution' issue
417
+ if (!Object.prototype.hasOwnProperty.call(source, key))
418
+ continue;
419
+ if (Object.prototype.hasOwnProperty.call(target, key) &&
420
+ isObject(target[key])) {
421
+ deepMergeSelectionSetObjects(source[key], target[key]);
422
+ }
423
+ else {
424
+ target[key] = source[key];
425
+ }
426
+ }
427
+ return target;
428
+ }
429
+ function generateSelectionSet(modelIntrospection, modelName, selectionSet) {
430
+ const modelDefinition = modelIntrospection.models[modelName];
431
+ const selSetIr = customSelectionSetToIR(modelIntrospection, modelName, selectionSet ?? defaultSelectionSetForModel(modelDefinition));
432
+ const selSetString = selectionSetIRToString(selSetIr);
433
+ return selSetString;
434
+ }
435
+ exports.generateSelectionSet = generateSelectionSet;
436
+ function generateGraphQLDocument(modelIntrospection, modelName, modelOperation, listArgs, indexMeta) {
437
+ const modelDefinition = modelIntrospection.models[modelName];
438
+ const { name, pluralName, fields, primaryKeyInfo: { isCustomPrimaryKey, primaryKeyFieldName, sortKeyFieldNames, }, } = modelDefinition;
439
+ const { operationPrefix, usePlural } = exports.graphQLOperationsInfo[modelOperation];
440
+ const { selectionSet } = listArgs || {};
441
+ let graphQLFieldName;
442
+ let indexQueryArgs;
443
+ if (operationPrefix) {
444
+ graphQLFieldName = `${operationPrefix}${usePlural ? pluralName : name}`;
445
+ }
446
+ else if (indexMeta) {
447
+ const { queryField, pk, sk = [] } = indexMeta;
448
+ graphQLFieldName = queryField;
449
+ const skQueryArgs = sk.reduce((acc, fieldName) => {
450
+ const fieldType = fields[fieldName].type;
451
+ acc[fieldName] = `Model${fieldType}KeyConditionInput`;
452
+ return acc;
453
+ }, {});
454
+ indexQueryArgs = {
455
+ [pk]: `${fields[pk].type}!`,
456
+ ...skQueryArgs,
457
+ };
458
+ }
459
+ else {
460
+ throw new Error('Error generating GraphQL Document - invalid operation name');
461
+ }
462
+ let graphQLOperationType;
463
+ let graphQLSelectionSet;
464
+ let graphQLArguments;
465
+ const selectionSetFields = generateSelectionSet(modelIntrospection, modelName, selectionSet);
466
+ // default PK args for get and list operations
467
+ // modified below for CPK
468
+ const getPkArgs = {
469
+ [primaryKeyFieldName]: `${fields[primaryKeyFieldName].type}!`,
470
+ };
471
+ const listPkArgs = {};
472
+ const generateSkArgs = (op) => {
473
+ return sortKeyFieldNames.reduce((acc, fieldName) => {
474
+ const fieldType = fields[fieldName].type;
475
+ if (op === 'get') {
476
+ acc[fieldName] = `${fieldType}!`;
477
+ }
478
+ else if (op === 'list') {
479
+ acc[fieldName] = `Model${fieldType}KeyConditionInput`;
480
+ }
481
+ return acc;
482
+ }, {});
483
+ };
484
+ if (isCustomPrimaryKey) {
485
+ Object.assign(getPkArgs, generateSkArgs('get'));
486
+ Object.assign(listPkArgs, {
487
+ // PK is only included in list query field args in the generated GQL
488
+ // when explicitly specifying PK with .identifier(['fieldName']) or @primaryKey in the schema definition
489
+ [primaryKeyFieldName]: `${fields[primaryKeyFieldName].type}`, // PK is always a nullable arg for list (no `!` after the type)
490
+ sortDirection: 'ModelSortDirection',
491
+ }, generateSkArgs('list'));
492
+ }
493
+ switch (modelOperation) {
494
+ case 'CREATE':
495
+ case 'UPDATE':
496
+ case 'DELETE':
497
+ graphQLArguments ??
498
+ (graphQLArguments = {
499
+ input: `${operationPrefix.charAt(0).toLocaleUpperCase() +
500
+ operationPrefix.slice(1)}${name}Input!`,
501
+ });
502
+ graphQLOperationType ?? (graphQLOperationType = 'mutation');
503
+ // TODO(Eslint): this this case clause correct without the break statement?
504
+ // eslint-disable-next-line no-fallthrough
505
+ case 'READ':
506
+ graphQLArguments ?? (graphQLArguments = getPkArgs);
507
+ graphQLSelectionSet ?? (graphQLSelectionSet = selectionSetFields);
508
+ // TODO(Eslint): this this case clause correct without the break statement?
509
+ // eslint-disable-next-line no-fallthrough
510
+ case 'LIST':
511
+ graphQLArguments ??
512
+ (graphQLArguments = {
513
+ ...listPkArgs,
514
+ // eslint doesn't like the ts-ignore, because it thinks it's unnecessary.
515
+ // But TS doesn't like the `filter: ...` because it think it will always be
516
+ // overwritten. (it won't be.) so, we need to ignore the TS error and then
517
+ // ignore the eslint error on the ts-ignore.
518
+ // eslint-disable-next-line
519
+ // @ts-ignore
520
+ filter: `Model${name}FilterInput`,
521
+ limit: 'Int',
522
+ nextToken: 'String',
523
+ });
524
+ graphQLOperationType ?? (graphQLOperationType = 'query');
525
+ graphQLSelectionSet ??
526
+ (graphQLSelectionSet = `items { ${selectionSetFields} } nextToken __typename`);
527
+ // TODO(Eslint): this this case clause correct without the break statement?
528
+ // eslint-disable-next-line no-fallthrough
529
+ case 'INDEX_QUERY':
530
+ graphQLArguments ??
531
+ (graphQLArguments = {
532
+ ...indexQueryArgs,
533
+ filter: `Model${name}FilterInput`,
534
+ sortDirection: 'ModelSortDirection',
535
+ limit: 'Int',
536
+ nextToken: 'String',
537
+ });
538
+ graphQLOperationType ?? (graphQLOperationType = 'query');
539
+ graphQLSelectionSet ??
540
+ (graphQLSelectionSet = `items { ${selectionSetFields} } nextToken __typename`);
541
+ // TODO(Eslint): this this case clause correct without the break statement?
542
+ // eslint-disable-next-line no-fallthrough
543
+ case 'ONCREATE':
544
+ case 'ONUPDATE':
545
+ case 'ONDELETE':
546
+ graphQLArguments ??
547
+ (graphQLArguments = {
548
+ filter: `ModelSubscription${name}FilterInput`,
549
+ });
550
+ graphQLOperationType ?? (graphQLOperationType = 'subscription');
551
+ graphQLSelectionSet ?? (graphQLSelectionSet = selectionSetFields);
552
+ break;
553
+ case 'OBSERVE_QUERY':
554
+ default:
555
+ throw new Error('Internal error: Attempted to generate graphql document for observeQuery. Please report this error.');
556
+ }
557
+ const graphQLDocument = `${graphQLOperationType}${graphQLArguments
558
+ ? `(${Object.entries(graphQLArguments).map(([fieldName, type]) => `$${fieldName}: ${type}`)})`
559
+ : ''} { ${graphQLFieldName}${graphQLArguments
560
+ ? `(${Object.keys(graphQLArguments).map((fieldName) => `${fieldName}: $${fieldName}`)})`
561
+ : ''} { ${graphQLSelectionSet} } }`;
562
+ return graphQLDocument;
563
+ }
564
+ exports.generateGraphQLDocument = generateGraphQLDocument;
565
+ function buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospection, indexMeta) {
566
+ const { fields, primaryKeyInfo: { isCustomPrimaryKey, primaryKeyFieldName, sortKeyFieldNames, }, } = modelDefinition;
567
+ let variables = {};
568
+ // TODO: process input
569
+ switch (operation) {
570
+ case 'CREATE':
571
+ variables = {
572
+ input: arg
573
+ ? normalizeMutationInput(arg, modelDefinition, modelIntrospection)
574
+ : {},
575
+ };
576
+ break;
577
+ case 'UPDATE':
578
+ // readonly fields are not updated
579
+ variables = {
580
+ input: arg
581
+ ? Object.fromEntries(Object.entries(normalizeMutationInput(arg, modelDefinition, modelIntrospection)).filter(([fieldName]) => {
582
+ const { isReadOnly } = fields[fieldName];
583
+ return !isReadOnly;
584
+ }))
585
+ : {},
586
+ };
587
+ break;
588
+ case 'READ':
589
+ case 'DELETE':
590
+ // only identifiers are sent
591
+ if (arg) {
592
+ variables = isCustomPrimaryKey
593
+ ? [primaryKeyFieldName, ...sortKeyFieldNames].reduce((acc, fieldName) => {
594
+ acc[fieldName] = arg[fieldName];
595
+ return acc;
596
+ }, {})
597
+ : { [primaryKeyFieldName]: arg[primaryKeyFieldName] };
598
+ }
599
+ if (operation === 'DELETE') {
600
+ variables = { input: variables };
601
+ }
602
+ break;
603
+ case 'LIST':
604
+ if (arg?.filter) {
605
+ variables.filter = arg.filter;
606
+ }
607
+ if (arg?.sortDirection) {
608
+ variables.sortDirection = arg.sortDirection;
609
+ variables[primaryKeyFieldName] = arg[primaryKeyFieldName];
610
+ }
611
+ if (arg?.nextToken) {
612
+ variables.nextToken = arg.nextToken;
613
+ }
614
+ if (arg?.limit) {
615
+ variables.limit = arg.limit;
616
+ }
617
+ break;
618
+ case 'INDEX_QUERY': {
619
+ const { pk, sk = [] } = indexMeta;
620
+ variables[pk] = arg[pk];
621
+ for (const skField of sk) {
622
+ variables[skField] = arg[skField];
623
+ }
624
+ if (arg?.filter) {
625
+ variables.filter = arg.filter;
626
+ }
627
+ if (arg?.sortDirection) {
628
+ variables.sortDirection = arg.sortDirection;
629
+ }
630
+ if (arg?.nextToken) {
631
+ variables.nextToken = arg.nextToken;
632
+ }
633
+ if (arg?.limit) {
634
+ variables.limit = arg.limit;
635
+ }
636
+ break;
637
+ }
638
+ case 'ONCREATE':
639
+ case 'ONUPDATE':
640
+ case 'ONDELETE':
641
+ if (arg?.filter) {
642
+ variables = { filter: arg.filter };
643
+ }
644
+ break;
645
+ case 'OBSERVE_QUERY':
646
+ throw new Error('Internal error: Attempted to build variables for observeQuery. Please report this error.');
647
+ default: {
648
+ const exhaustiveCheck = operation;
649
+ throw new Error(`Unhandled operation case: ${exhaustiveCheck}`);
650
+ }
651
+ }
652
+ return variables;
653
+ }
654
+ exports.buildGraphQLVariables = buildGraphQLVariables;
655
+ /**
656
+ * Iterates over mutation input values and resolves any model inputs to their corresponding join fields/values
657
+ *
658
+ * @example
659
+ * ### Usage
660
+ * ```ts
661
+ * const result = normalizeMutationInput({ post: post }, model, modelDefinition);
662
+ * ```
663
+ * ### Result
664
+ * ```ts
665
+ * { postId: "abc123" }
666
+ * ```
667
+ *
668
+ */
669
+ function normalizeMutationInput(mutationInput, model, modelIntrospection) {
670
+ const { fields } = model;
671
+ const normalized = {};
672
+ Object.entries(mutationInput).forEach(([inputFieldName, inputValue]) => {
673
+ const fieldType = fields[inputFieldName]?.type;
674
+ const relatedModelName = fieldType?.model;
675
+ if (relatedModelName) {
676
+ const association = fields[inputFieldName]?.association;
677
+ const relatedModelDef = modelIntrospection.models[relatedModelName];
678
+ const relatedModelPkInfo = relatedModelDef.primaryKeyInfo;
679
+ if (association?.connectionType === connectionType.HAS_ONE) {
680
+ const associationHasOne = association;
681
+ associationHasOne.targetNames.forEach((targetName, idx) => {
682
+ const associatedFieldName = associationHasOne.associatedWith[idx];
683
+ normalized[targetName] = inputValue[associatedFieldName];
684
+ });
685
+ }
686
+ if (association?.connectionType === connectionType.BELONGS_TO) {
687
+ const associationBelongsTo = association;
688
+ associationBelongsTo.targetNames.forEach((targetName, idx) => {
689
+ if (idx === 0) {
690
+ const associatedFieldName = relatedModelPkInfo.primaryKeyFieldName;
691
+ normalized[targetName] = inputValue[associatedFieldName];
692
+ }
693
+ else {
694
+ const associatedFieldName = relatedModelPkInfo.sortKeyFieldNames[idx - 1];
695
+ normalized[targetName] = inputValue[associatedFieldName];
696
+ }
697
+ });
698
+ }
699
+ }
700
+ else {
701
+ normalized[inputFieldName] = inputValue;
702
+ }
703
+ });
704
+ return normalized;
705
+ }
706
+ exports.normalizeMutationInput = normalizeMutationInput;
707
+ /**
708
+ * Produces a parameter object that can contains auth mode/token overrides
709
+ * only if present in either `options` (first) or configured on the `client`
710
+ * as a fallback.
711
+ *
712
+ * @param client Configured client from `generateClient`
713
+ * @param options Args/Options object from call site.
714
+ * @returns
715
+ */
716
+ function authModeParams(client, getInternals, options = {}) {
717
+ const internals = getInternals(client);
718
+ return {
719
+ authMode: options.authMode || internals.authMode,
720
+ authToken: options.authToken || internals.authToken,
721
+ };
722
+ }
723
+ exports.authModeParams = authModeParams;
724
+ /**
725
+ * Retrieves custom headers from either the client or request options.
726
+ * @param client V6Client | V6ClientSSRRequest | V6ClientSSRCookies - for extracting client headers
727
+ * @param requestHeaders {@link CustomHeaders} - request headers
728
+ * @returns custom headers as {@link CustomHeaders}
729
+ */
730
+ function getCustomHeaders(client, getInternals, requestHeaders) {
731
+ let headers = getInternals(client).headers || {};
732
+ // Individual request headers will take precedence over client headers.
733
+ // We intentionally do *not* merge client and request headers.
734
+ if (requestHeaders) {
735
+ headers = requestHeaders;
736
+ }
737
+ return headers;
738
+ }
739
+ exports.getCustomHeaders = getCustomHeaders;
740
+ //# sourceMappingURL=APIClient.js.map