@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,256 @@
1
+ import type { GenericModelSchema } from '../ModelSchema';
2
+ import type { NonModelTypesShape } from './ExtractNonModelTypes';
3
+ import type {
4
+ CustomOperation,
5
+ CustomOperationParamShape,
6
+ } from '../CustomOperation';
7
+ import type { ModelField } from '../ModelField';
8
+ import type { RefType, RefTypeParamShape } from '../RefType';
9
+ import type {
10
+ ResolveCustomTypeFieldsRequirements,
11
+ ResolveRefsOfCustomType,
12
+ ResolveRefValueArrayTraits,
13
+ } from './ResolveFieldProperties';
14
+ import type { AppSyncResolverHandler } from 'aws-lambda';
15
+ import type { CustomType } from '../CustomType';
16
+ import type { FieldTypesOfCustomType } from './ResolveSchema';
17
+
18
+ /**
19
+ * Creates meta types for custom operations from a schema.
20
+ */
21
+ export type ResolveCustomOperations<
22
+ Schema extends GenericModelSchema<any>,
23
+ FullyResolvedSchema extends Record<string, unknown>,
24
+ NonModelTypes extends NonModelTypesShape,
25
+ CustomOperations extends Record<
26
+ string,
27
+ CustomOperationParamShape
28
+ > = CustomOpShapes<Schema>,
29
+ > = {
30
+ customOperations: {
31
+ [OpName in keyof CustomOperations]: {
32
+ arguments: CustomOpArguments<CustomOperations[OpName]>;
33
+ returnType: CustomOpReturnType<
34
+ CustomOperations[OpName],
35
+ FullyResolvedSchema,
36
+ NonModelTypes,
37
+ CustomOperations
38
+ >;
39
+ functionRef: CustomOperations[OpName]['functionRef'];
40
+ typeName: CustomOperations[OpName]['typeName'];
41
+ authorization: CustomOperations[OpName]['authorization'];
42
+ };
43
+ };
44
+ };
45
+
46
+ /**
47
+ * Filtered, mapped list of custom operations shapes from a schema.
48
+ */
49
+ export type CustomOpShapes<Schema extends GenericModelSchema<any>> = {
50
+ [K in keyof Schema['data']['types'] as Schema['data']['types'][K] extends CustomOperation<
51
+ any,
52
+ any
53
+ >
54
+ ? K
55
+ : never]: Schema['data']['types'][K] extends CustomOperation<
56
+ infer Shape,
57
+ any
58
+ >
59
+ ? Shape
60
+ : never;
61
+ };
62
+
63
+ /**
64
+ * Digs out custom operation arguments, mapped to the intended graphql types.
65
+ */
66
+ export type CustomOpArguments<Shape extends CustomOperationParamShape> =
67
+ Shape['arguments'] extends null
68
+ ? never
69
+ : {
70
+ [FieldName in keyof Shape['arguments']]: Shape['arguments'][FieldName] extends ModelField<
71
+ infer R,
72
+ any,
73
+ any
74
+ >
75
+ ? R
76
+ : never;
77
+ };
78
+
79
+ /**
80
+ * Computes the return type from the `returnType` of a custom operation shape.
81
+ *
82
+ * This entails dereferencing refs and inferring graphql types from field-type defs.
83
+ */
84
+ export type CustomOpReturnType<
85
+ Shape extends CustomOperationParamShape,
86
+ FullyResolvedSchema extends Record<string, unknown>,
87
+ NonModelTypes extends NonModelTypesShape,
88
+ CustomOperations extends Record<string, CustomOperationParamShape>,
89
+ > =
90
+ Shape['returnType'] extends RefType<infer RefShape, any, any>
91
+ ? RefShape['link'] extends keyof CustomOperations
92
+ ? // The case that a custom subscription's return type is set from its resource
93
+ CustomOpReturnType<
94
+ CustomOperations[RefShape['link']],
95
+ FullyResolvedSchema,
96
+ NonModelTypes,
97
+ CustomOperations
98
+ >
99
+ : ResolveRef<
100
+ RefShape,
101
+ FullyResolvedSchema,
102
+ NonModelTypes,
103
+ CustomOperations
104
+ >
105
+ : Shape['returnType'] extends ModelField<infer R, any, any>
106
+ ? R
107
+ : Shape['returnType'] extends CustomType<infer R>
108
+ ?
109
+ | ResolveCustomTypeFieldsRequirements<
110
+ FieldTypesOfCustomType<{
111
+ thisCustomType: R['fields'];
112
+ }>['thisCustomType']
113
+ > // The inline `.customType()` with a custom operation doesn't have
114
+ // `.required()` modifier, hence it's nullable
115
+ | null
116
+ : never;
117
+
118
+ /**
119
+ * `a.ref()` resolution specific to custom operations, for which `a.ref()`
120
+ * can refer to a model, custom type, or enum.
121
+ *
122
+ * This utility is a duplication of ResolveRef (src/MappedTypes/ResolveFieldProperties.ts)
123
+ * with the addition that allows .ref() a model with custom operations.
124
+ */
125
+ export type ResolveRef<
126
+ Shape extends RefTypeParamShape,
127
+ FullyResolvedSchema extends Record<string, unknown>,
128
+ NonModelTypes extends NonModelTypesShape,
129
+ CustomOperations extends Record<string, CustomOperationParamShape>,
130
+ Link = Shape['link'],
131
+ RefValue = Link extends keyof FullyResolvedSchema
132
+ ? FullyResolvedSchema[Link]
133
+ : Link extends keyof NonModelTypes['enums']
134
+ ? NonModelTypes['enums'][Link]
135
+ : Link extends keyof NonModelTypes['customTypes']
136
+ ? ResolveRefsOfCustomType<
137
+ NonModelTypes,
138
+ NonModelTypes['customTypes'][Link]
139
+ >
140
+ : Link extends keyof CustomOperations
141
+ ? // e.g. .subscription().for(a.ref('aCustomMutation'))
142
+ CustomOpReturnType<
143
+ CustomOperations[Link],
144
+ FullyResolvedSchema,
145
+ NonModelTypes,
146
+ CustomOperations
147
+ >
148
+ : never,
149
+ Value = Shape['valueRequired'] extends true ? RefValue : RefValue | null,
150
+ > = ResolveRefValueArrayTraits<Shape, Value>;
151
+
152
+ //
153
+ // To support exposing custom handler types.
154
+ //
155
+
156
+ /**
157
+ * The kind of shape we need to map to custom handler (e.g., lambda) function
158
+ * signatures.
159
+ */
160
+ type CustomOperationsMap = Record<string, CustomOperationMinimalDef>;
161
+
162
+ /**
163
+ * The minimal amount of structure needed to extract types for a custom handler.
164
+ */
165
+ type CustomOperationMinimalDef = {
166
+ arguments: any;
167
+ returnType: any;
168
+ };
169
+
170
+ /**
171
+ * Derives the signature and types for a lambda handler for a particular
172
+ * custom Query or Mutation from a Schema.
173
+ */
174
+ type IndividualCustomHandlerTypes<Op extends CustomOperationMinimalDef> = {
175
+ /**
176
+ * Handler type for lambda function implementations. E.g.,
177
+ *
178
+ * ```typescript
179
+ * import type { Schema } from './resource';
180
+ *
181
+ * export const handler: Schema['echo']['functionHandler'] = async (event, context) => {
182
+ * // event and context will be fully typed inside here.
183
+ * }
184
+ * ```
185
+ */
186
+ functionHandler: AppSyncResolverHandler<
187
+ Op['arguments'],
188
+ LambdaReturnType<Op['returnType']>
189
+ >;
190
+
191
+ /**
192
+ * The `context.arguments` type for lambda function implementations.
193
+ *
194
+ * ```typescript
195
+ * import type { Schema } from './resource';
196
+ *
197
+ * export const handler: Schema['echo']['functionHandler'] = async (event, context) => {
198
+ * // Provides this type, if needed:
199
+ * const args: Schema['echo']['functionHandlerArguments'] = event.arguments;
200
+ * }
201
+ * ```
202
+ */
203
+ functionHandlerArguments: Op['arguments'];
204
+
205
+ /**
206
+ * The return type expected by a lambda function handler.
207
+ *
208
+ * ```typescript
209
+ * import type { Schema } from './resource';
210
+ *
211
+ * export const handler: Schema['echo']['functionHandler'] = async (event, context) => {
212
+ * // Result type enforced here:
213
+ * const result: Schema['echo']['functionHandlerResult'] = buildResult(...);
214
+ *
215
+ * // `Result` type matches expected function return type here:
216
+ * return result;
217
+ * }
218
+ * ```
219
+ */
220
+ functionHandlerResult: LambdaReturnType<Op['returnType']>;
221
+ };
222
+
223
+ /**
224
+ * Derives the function signatures for a lambda handlers for all the provided
225
+ * custom queries and mutations.
226
+ */
227
+ export type CustomOperationHandlerTypes<
228
+ CustomOperations extends CustomOperationsMap,
229
+ > = {
230
+ [K in keyof CustomOperations]: IndividualCustomHandlerTypes<
231
+ CustomOperations[K]
232
+ >;
233
+ };
234
+
235
+ /**
236
+ * Returns a return type with lazy loaders removed.
237
+ *
238
+ * (Custom handlers should not return lazy loaded fields -- they're *lazy loaded*.)
239
+ */
240
+ type LambdaReturnType<T> = T extends Record<string, any>
241
+ ? {
242
+ // Return type can include `null | undefined`, which we can't meaningfully
243
+ // map over.
244
+ [K in keyof Exclude<T, null | undefined> as Exclude<
245
+ T,
246
+ null | undefined
247
+ >[K] extends (...args: any) => any
248
+ ? never
249
+ : K]: Exclude<T, null | undefined>[K];
250
+ }
251
+ :
252
+ | T
253
+ // If the original return type allowed null | undefined, mix them back into
254
+ // the final return type
255
+ | (null extends T ? null : never)
256
+ | (undefined extends T ? undefined : never);
@@ -0,0 +1,154 @@
1
+ import type { UnionToIntersection } from '@aws-amplify/data-schema-types';
2
+ import type { CustomType, CustomTypeParamShape } from '../CustomType';
3
+ import type { EnumType, EnumTypeParamShape } from '../EnumType';
4
+ import type {
5
+ SchemaTypes,
6
+ ModelAndCustomTypes,
7
+ FieldTypesOfCustomType,
8
+ } from './ResolveSchema';
9
+ import type { ModelType, ModelTypeParamShape } from '../ModelType';
10
+
11
+ export type NonModelTypesShape = {
12
+ enums: Record<string, EnumType<any>>;
13
+ customTypes: Record<string, any>;
14
+ };
15
+
16
+ export type ExtractNonModelTypes<Schema> = ResolveNonModelFields<
17
+ ResolveNonModelTypes<Schema, ExtractImplicitNonModelTypes<Schema>>
18
+ >;
19
+
20
+ /**
21
+ * Extract all implicit non-model types a `FieldName: Field` map recursively,
22
+ * and store them in a flat map. The keys are serialized property path.
23
+ *
24
+ * For example, with the following schema structure:
25
+ * ```
26
+ * ExtractAndFlattenImplicitNonModelTypesFromFields<
27
+ * 'Post',
28
+ * {
29
+ * content: string,
30
+ * status: enum(['reviewing'], ['published']),
31
+ * meta: customType({
32
+ * tag: enum(['internal', 'external']),
33
+ * views: number
34
+ * }),
35
+ * tag: ref('SomeExplicitEnum'),
36
+ * }
37
+ * >
38
+ * ```
39
+ * It generates the result as:
40
+ * ```
41
+ * {
42
+ * PostStatus: enum(['reviewing'], ['published']),
43
+ * PostMeta: customType({
44
+ * tag: enum(['internal', 'external']),
45
+ * views: number
46
+ * }),
47
+ * PostMetaTag: enum(['internal', 'external']),
48
+ * }
49
+ * ```
50
+ */
51
+ export type ExtractAndFlattenImplicitNonModelTypesFromFields<
52
+ ParentTypeName extends string,
53
+ Fields,
54
+ > = {
55
+ // loop through the fields - omit the field that's not a non-model type
56
+ [FieldProp in keyof Fields as Fields[FieldProp] extends
57
+ | EnumType<EnumTypeParamShape>
58
+ | CustomType<CustomTypeParamShape>
59
+ ? FieldProp
60
+ : never]: (
61
+ x: NonNullable<Fields[FieldProp]> extends infer FieldType
62
+ ? // if the filed is a enum extract it as is
63
+ FieldType extends EnumType<EnumTypeParamShape>
64
+ ? {
65
+ [Key in `${ParentTypeName}${Capitalize<
66
+ FieldProp & string
67
+ >}`]: Fields[FieldProp];
68
+ }
69
+ : // if the field is a CustomType
70
+ FieldType extends CustomType<
71
+ infer CustomTypeShape extends CustomTypeParamShape
72
+ >
73
+ ? // recursively extract to the Nested CustomType, and return the
74
+ // merge of the current CustomType and the extracted (if any)
75
+ ExtractAndFlattenImplicitNonModelTypesFromFields<
76
+ `${ParentTypeName}${Capitalize<FieldProp & string>}`,
77
+ CustomTypeShape['fields']
78
+ > & {
79
+ [Key in `${ParentTypeName}${Capitalize<
80
+ FieldProp & string
81
+ >}`]: Fields[FieldProp];
82
+ }
83
+ : never
84
+ : never,
85
+ ) => void;
86
+ } extends Record<string, infer Func>
87
+ ? Func extends (x: infer P) => void
88
+ ? P // extract the union of all types of the `x` param used above
89
+ : Record<never, never> // return an empty mapped object (nothing got extracted)
90
+ : Record<never, never>; // return an empty mapped object (nothing got extracted)
91
+
92
+ /**
93
+ * Pulls out implicit, i.e. field-level non-model types from `ModelType` and
94
+ * `CustomType` which may contain deeply nested implicit (inline) non-model
95
+ * types.
96
+ */
97
+ export type ExtractImplicitNonModelTypes<
98
+ Schema,
99
+ Targets = ModelAndCustomTypes<SchemaTypes<Schema>>,
100
+ > = UnionToIntersection<
101
+ {
102
+ [Model in keyof Targets]: Targets[Model] extends CustomType<
103
+ // if the target is a CustomType
104
+ infer R extends CustomTypeParamShape
105
+ >
106
+ ? // extract nested non-model types from it, and include itself
107
+ ExtractAndFlattenImplicitNonModelTypesFromFields<
108
+ Capitalize<Model & string>,
109
+ R['fields']
110
+ > & { [key in Model]: Targets[Model] }
111
+ : // if the target is a ModelType
112
+ Targets[Model] extends ModelType<
113
+ infer R extends ModelTypeParamShape,
114
+ any
115
+ >
116
+ ? // extract nested non-model types from it
117
+ ExtractAndFlattenImplicitNonModelTypesFromFields<
118
+ Capitalize<Model & string>,
119
+ R['fields']
120
+ >
121
+ : // otherwise, do nothing
122
+ Targets[Model];
123
+ }[keyof Targets]
124
+ >;
125
+
126
+ type ResolveNonModelTypes<
127
+ Schema,
128
+ Extracted,
129
+ ResolvedSchema = SchemaTypes<Schema> & Extracted,
130
+ > = {
131
+ enums: {
132
+ [Model in keyof ResolvedSchema as ResolvedSchema[Model] extends EnumType<EnumTypeParamShape>
133
+ ? Model
134
+ : never]: ResolvedSchema[Model] extends EnumType<
135
+ infer R extends EnumTypeParamShape
136
+ >
137
+ ? R['values'][number]
138
+ : never;
139
+ };
140
+ customTypes: {
141
+ [Model in keyof ResolvedSchema as ResolvedSchema[Model] extends CustomType<CustomTypeParamShape>
142
+ ? Model
143
+ : never]: ResolvedSchema[Model] extends CustomType<
144
+ infer R extends CustomTypeParamShape
145
+ >
146
+ ? R['fields']
147
+ : never;
148
+ };
149
+ };
150
+
151
+ type ResolveNonModelFields<T extends NonModelTypesShape> = {
152
+ enums: T['enums'];
153
+ customTypes: FieldTypesOfCustomType<T['customTypes']>;
154
+ };
@@ -0,0 +1,69 @@
1
+ type DefaultIdentifierFields = {
2
+ // implicit `id` is readonly because it's managed by the resolver; explicit `id` is writable
3
+ readonly id: string;
4
+ };
5
+
6
+ type DefaultTimestampFields = {
7
+ readonly createdAt: string;
8
+ readonly updatedAt: string;
9
+ };
10
+
11
+ type InitialImplicitFields<Identifier> = Identifier extends 'id'
12
+ ? DefaultIdentifierFields & DefaultTimestampFields
13
+ : DefaultTimestampFields;
14
+
15
+ /**
16
+ * @returns true if a string union `ExplicitFieldNames` contains a given string `FieldName`
17
+ */
18
+ type FieldExists<
19
+ ExplicitFieldNames extends string,
20
+ FieldName extends string,
21
+ > = Extract<ExplicitFieldNames, FieldName> extends never ? false : true;
22
+
23
+ /**
24
+ * @returns union of explicitly defined field names for a model
25
+ */
26
+ type GetModelFieldNames<FlatModel> = FlatModel extends Record<infer R, any>
27
+ ? R
28
+ : never;
29
+
30
+ /**
31
+ * Generate Record type containing all implicit fields for a given model
32
+ */
33
+ type ImplicitFields<
34
+ FlatModel,
35
+ Identifier,
36
+ ModelFieldNames = GetModelFieldNames<FlatModel>,
37
+ > = {
38
+ [ImplicitField in keyof InitialImplicitFields<Identifier> as FieldExists<
39
+ ModelFieldNames & string,
40
+ ImplicitField & string
41
+ > extends true
42
+ ? never
43
+ : ImplicitField]: InitialImplicitFields<Identifier>[ImplicitField];
44
+ };
45
+
46
+ /**
47
+ * @returns intersection of explicit and implicit model fields
48
+ */
49
+ type InjectDefaultFieldsForModel<FlatModel, ModelIdentifier> = FlatModel &
50
+ ImplicitFields<
51
+ FlatModel,
52
+ 'identifier' extends keyof ModelIdentifier
53
+ ? ModelIdentifier['identifier']
54
+ : never
55
+ >;
56
+
57
+ /**
58
+ * Mapped type that injects default implicit fields for a model
59
+ * 1. Add "id" field to models with neither an explicit field named "id" nor a custom identifier (`.identifier(['some-field'])`)
60
+ * 2. Add default timestamp fields ("createdAt", "updatedAt") unless they're already explicitly defined
61
+ *
62
+ * @typeParam FlattenedSchema - resolved schema type (TODO: add detail/example/link to type)
63
+ */
64
+ export type InjectImplicitModelFields<FlattenedSchema, IdentifierMeta> = {
65
+ [ModelName in keyof FlattenedSchema]: InjectDefaultFieldsForModel<
66
+ FlattenedSchema[ModelName],
67
+ ModelName extends keyof IdentifierMeta ? IdentifierMeta[ModelName] : object
68
+ >;
69
+ };
@@ -0,0 +1,100 @@
1
+ import { IsEmptyStringOrNever } from '@aws-amplify/data-schema-types';
2
+ import { ModelIndexType } from '../ModelIndex';
3
+
4
+ type ModelIndexTypeShape = ModelIndexType<any, any, any, any, any>;
5
+
6
+ /**
7
+ * Maps array of ModelIndexType to SecondaryIndexIrShape (defined in in data-schema-types)
8
+ * */
9
+ export type SecondaryIndexToIR<
10
+ Idxs extends ReadonlyArray<ModelIndexTypeShape>,
11
+ ResolvedFields,
12
+ Result extends readonly any[] = readonly [],
13
+ > = Idxs extends readonly [
14
+ infer First extends ModelIndexTypeShape,
15
+ ...infer Rest extends ReadonlyArray<ModelIndexTypeShape>,
16
+ ]
17
+ ? SecondaryIndexToIR<
18
+ Rest,
19
+ ResolvedFields,
20
+ [...Result, SingleIndexIrFromType<First, ResolvedFields>]
21
+ >
22
+ : Result;
23
+
24
+ /**
25
+ * @typeParam Idx - accepts a single ModelIndexType
26
+ * @typeParam ResolvedFields - resolved model fields
27
+ *
28
+ * @returns an IR with the following shape:
29
+ * {
30
+ * queryField: string;
31
+ * pk: { [fieldName: string]: string | number }
32
+ * sk: { [fieldName: string]: string | number } | never
33
+ * }
34
+ *
35
+ * @remarks - the IR type alias is defined as SecondaryIndexIrShape in data-schema-types
36
+ */
37
+ type SingleIndexIrFromType<
38
+ Idx extends ModelIndexTypeShape,
39
+ ResolvedFields,
40
+ > = Idx extends ModelIndexType<
41
+ any,
42
+ infer PK extends string,
43
+ infer SK,
44
+ infer QueryField extends string | never,
45
+ any
46
+ >
47
+ ? {
48
+ queryField: IsEmptyStringOrNever<QueryField> extends true
49
+ ? `listBy${QueryFieldLabelFromTuple<SK, Capitalize<PK>>}`
50
+ : QueryField;
51
+ pk: PK extends keyof ResolvedFields
52
+ ? {
53
+ [Key in PK]: Exclude<ResolvedFields[PK], null>;
54
+ }
55
+ : never;
56
+ // distribute ResolvedFields over SK
57
+ sk: unknown extends SK
58
+ ? never
59
+ : ResolvedSortKeyFields<SK, ResolvedFields>;
60
+ }
61
+ : never;
62
+
63
+ /**
64
+ * @typeParam SK - tuple of SortKey field names, e.g. ['viewCount', 'createdAt']
65
+ * @typeParam StrStart - initial string value; expects capitalized Partition Key field name
66
+ *
67
+ * @returns Query field name: concatenated PascalCase string with an `And` separator
68
+ * @example
69
+ * QueryFieldLabelFromTuple<['viewCount', 'createdAt'], 'Title'> => 'TitleAndViewCountAndCreatedAt'
70
+ */
71
+ type QueryFieldLabelFromTuple<
72
+ SK,
73
+ StrStart extends string = '',
74
+ > = SK extends readonly [infer A extends string, ...infer B extends string[]]
75
+ ? QueryFieldLabelFromTuple<B, `${StrStart}And${Capitalize<A>}`>
76
+ : StrStart;
77
+
78
+ /**
79
+ * @typeParam SK - tuple of SortKey field names, e.g. ['viewCount', 'createdAt']
80
+ * @typeParam ResolvedFields - resolved model fields
81
+ *
82
+ * @returns object type where the key is the sort key field name and the value is the resolved model field type
83
+ * @example
84
+ * {
85
+ * viewCount: number;
86
+ * createdAt: string;
87
+ * }
88
+ */
89
+ type ResolvedSortKeyFields<SK, ResolvedFields> = SK extends readonly [
90
+ infer A extends string,
91
+ ...infer B extends string[],
92
+ ]
93
+ ? A extends keyof ResolvedFields
94
+ ? {
95
+ [Key in A]: Exclude<ResolvedFields[A], null>;
96
+ } & (B extends readonly never[]
97
+ ? unknown // returning `unknown` for empty arrays because it gets absorbed in an intersection, e.g. `{a: 1} & unknown` => `{a: 1}`
98
+ : ResolvedSortKeyFields<B, ResolvedFields>)
99
+ : never
100
+ : never;
@@ -0,0 +1,87 @@
1
+ import {
2
+ type UnionToIntersection,
3
+ type ExcludeEmpty,
4
+ } from '@aws-amplify/data-schema-types';
5
+ import { __modelMeta__ } from '../runtime/client';
6
+ import type { ModelType } from '../ModelType';
7
+ import type { ModelRelationalFieldParamShape } from '../ModelRelationalField';
8
+
9
+ export type ModelIdentifier<T> = {
10
+ [Property in keyof T]: T[Property] extends ModelType<infer R, any>
11
+ ? // reduce back to union
12
+ R['identifier'] extends any[]
13
+ ? { identifier: R['identifier'][number] }
14
+ : never
15
+ : never;
16
+ };
17
+
18
+ export type ModelSecondaryIndexes<T> = {
19
+ [Property in keyof T]: T[Property] extends ModelType<infer R, any>
20
+ ? // reduce back to union
21
+ R['secondaryIndexes'] extends any[]
22
+ ? { secondaryIndexes: R['secondaryIndexes'] }
23
+ : never
24
+ : never;
25
+ };
26
+
27
+ export type RelationalMetadata<
28
+ ResolvedSchema,
29
+ ResolvedFields extends Record<string, unknown>,
30
+ IdentifierMeta extends Record<string, any>,
31
+ > = UnionToIntersection<
32
+ ExcludeEmpty<
33
+ {
34
+ [ModelName in keyof ResolvedSchema]: {
35
+ [Field in keyof ResolvedSchema[ModelName] as ResolvedSchema[ModelName][Field] extends ModelRelationalFieldParamShape
36
+ ? ResolvedSchema[ModelName][Field]['relationshipType'] extends
37
+ | 'hasOne'
38
+ | 'belongsTo'
39
+ ? // For hasOne we're adding metadata to the model itself
40
+ // E.g. if Post hasOne Author, we need to add a postAuthorId field to the Post model
41
+ ModelName
42
+ : never
43
+ : never]: ResolvedSchema[ModelName][Field] extends ModelRelationalFieldParamShape
44
+ ? ResolvedSchema[ModelName][Field] extends ModelRelationalFieldParamShape
45
+ ? ResolvedSchema[ModelName][Field]['relationshipType'] extends 'hasMany'
46
+ ? {
47
+ relationalInputFields: Partial<
48
+ Record<
49
+ // For M:N and 1:M we add a parent model field to the child
50
+ `${Uncapitalize<ModelName & string>}`,
51
+ NormalizeInputFields<
52
+ ResolvedFields[ModelName & string],
53
+ ExtractModelIdentifier<ModelName, IdentifierMeta>
54
+ >
55
+ >
56
+ >;
57
+ }
58
+ : {
59
+ relationalInputFields: Partial<
60
+ Record<
61
+ // For 1:1 and Belongs To we add a child model field to the parent
62
+ Field,
63
+ NormalizeInputFields<
64
+ ResolvedFields[ResolvedSchema[ModelName][Field]['relatedModel']],
65
+ ExtractModelIdentifier<
66
+ `${Capitalize<Field & string>}`,
67
+ IdentifierMeta
68
+ >
69
+ >
70
+ >
71
+ >;
72
+ }
73
+ : never
74
+ : never;
75
+ };
76
+ }[keyof ResolvedSchema]
77
+ >
78
+ >;
79
+
80
+ type ExtractModelIdentifier<ModelName, IdentifierMeta> =
81
+ ModelName extends keyof IdentifierMeta ? IdentifierMeta[ModelName] : never;
82
+
83
+ type NormalizeInputFields<
84
+ ModelFields,
85
+ IdentifierMeta extends Record<string, any>,
86
+ > = Partial<Omit<ModelFields, IdentifierMeta['identifier']>> &
87
+ Required<Pick<ModelFields, IdentifierMeta['identifier']>>;