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