@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,254 @@
1
+ import type {
2
+ UnionToIntersection,
3
+ LazyLoader,
4
+ } from '@aws-amplify/data-schema-types';
5
+ import type { Authorization, ImpliedAuthFields } from '../Authorization';
6
+ import type { ModelField } from '../ModelField';
7
+ import type { ModelType, ModelTypeParamShape } from '../ModelType';
8
+ import type { GenericModelSchema } from '../ModelSchema';
9
+ import type {
10
+ ModelRelationalField,
11
+ ModelRelationalFieldParamShape,
12
+ } from '../ModelRelationalField';
13
+
14
+ import type { ResolveSchema, SchemaTypes } from './ResolveSchema';
15
+ import type { InjectImplicitModelFields } from './ImplicitFieldInjector';
16
+ import type { ModelIdentifier } from './ModelMetadata';
17
+ import type { RefType, RefTypeParamShape } from '../RefType';
18
+
19
+ import type { NonModelTypesShape } from './ExtractNonModelTypes';
20
+
21
+ import type { CustomType, CustomTypeParamShape } from '../CustomType';
22
+ import type { EnumType, EnumTypeParamShape } from '../EnumType';
23
+ import type {
24
+ CustomOperation,
25
+ CustomOperationParamShape,
26
+ } from '../CustomOperation';
27
+
28
+ export type ResolveFieldProperties<
29
+ Schema extends GenericModelSchema<any>,
30
+ NonModelTypes extends NonModelTypesShape,
31
+ ResolvedSchema = ResolveSchema<Schema>,
32
+ IdentifierMeta extends Record<
33
+ string,
34
+ { identifier: string }
35
+ > = ModelIdentifier<SchemaTypes<Schema>>,
36
+ FieldsWithInjectedImplicitFields = InjectImplicitModelFields<
37
+ ResolvedSchema,
38
+ IdentifierMeta
39
+ >,
40
+ FieldsWithRelationships = ResolveModelsRelationalAndRefFields<
41
+ FieldsWithInjectedImplicitFields,
42
+ NonModelTypes
43
+ >,
44
+ > = Intersection<
45
+ FilterFieldTypes<
46
+ MarkModelsNonNullableFieldsRequired<FieldsWithRelationships>
47
+ >,
48
+ FilterFieldTypes<MarkModelsNullableFieldsOptional<FieldsWithRelationships>>,
49
+ FilterFieldTypes<ModelImpliedAuthFields<Schema>>
50
+ >;
51
+
52
+ export type ResolveStaticFieldProperties<
53
+ Schema extends GenericModelSchema<any>,
54
+ NonModelTypes extends NonModelTypesShape,
55
+ ImplicitModelsSchema,
56
+ ResolvedSchema = ResolveSchema<Schema>,
57
+ FieldsWithInjectedImplicitFields = InjectImplicitModelFields<
58
+ ResolvedSchema & ImplicitModelsSchema,
59
+ object
60
+ >,
61
+ FieldsWithRelationships = ResolveModelsRelationalAndRefFields<
62
+ FieldsWithInjectedImplicitFields,
63
+ NonModelTypes
64
+ >,
65
+ > = Intersection<
66
+ FilterFieldTypes<
67
+ MarkModelsNonNullableFieldsRequired<FieldsWithRelationships>
68
+ >,
69
+ FilterFieldTypes<MarkModelsNullableFieldsOptional<FieldsWithRelationships>>
70
+ >;
71
+
72
+ type GetRelationshipRef<
73
+ T,
74
+ RM extends keyof T,
75
+ TypeArg extends ModelRelationalFieldParamShape,
76
+ Flat extends boolean,
77
+ ResolvedModel = ResolveRelationalFieldsForModel<T, RM, Flat>,
78
+ Model = TypeArg['valueRequired'] extends true
79
+ ? ResolvedModel
80
+ : ResolvedModel | null | undefined,
81
+ > = LazyLoader<Model, TypeArg['array']>;
82
+
83
+ type ResolveRelationalFieldsForModel<
84
+ Schema,
85
+ ModelName extends keyof Schema,
86
+ Flat extends boolean,
87
+ > = {
88
+ [FieldName in keyof Schema[ModelName]]: Schema[ModelName][FieldName] extends ModelRelationalFieldParamShape
89
+ ? Schema[ModelName][FieldName]['relatedModel'] extends keyof Schema
90
+ ? GetRelationshipRef<
91
+ Schema,
92
+ Schema[ModelName][FieldName]['relatedModel'],
93
+ Schema[ModelName][FieldName],
94
+ Flat
95
+ >
96
+ : never
97
+ : Schema[ModelName][FieldName];
98
+ };
99
+
100
+ // Ref can point to a customType, enum, or custom operation
101
+ export type ResolveRef<
102
+ NonModelTypes extends NonModelTypesShape,
103
+ Ref extends RefTypeParamShape,
104
+ Link extends string = Ref['link'],
105
+ RefValue = Link extends keyof NonModelTypes['enums']
106
+ ? NonModelTypes['enums'][Link]
107
+ : Link extends keyof NonModelTypes['customTypes']
108
+ ? ResolveRefsOfCustomType<
109
+ NonModelTypes,
110
+ NonModelTypes['customTypes'][Link]
111
+ >
112
+ : never,
113
+ Value = Ref['valueRequired'] extends true ? RefValue : RefValue | null,
114
+ > = ResolveRefValueArrayTraits<Ref, Value>;
115
+
116
+ /**
117
+ * Converts the resolved RefType Value type into Array<> according to the
118
+ * `array` and `arrayRequired` properties of the RefType
119
+ */
120
+ export type ResolveRefValueArrayTraits<
121
+ Ref extends RefTypeParamShape,
122
+ Value,
123
+ > = Ref['array'] extends false
124
+ ? Value
125
+ : Ref['arrayRequired'] extends true
126
+ ? Array<Value>
127
+ : Array<Value> | null;
128
+
129
+ export type ResolveRefsOfCustomType<
130
+ NonModelTypes extends NonModelTypesShape,
131
+ T,
132
+ > = {
133
+ [Prop in keyof T]: T[Prop] extends RefType<
134
+ infer R extends RefTypeParamShape,
135
+ any,
136
+ any
137
+ > | null
138
+ ? ResolveRef<NonModelTypes, R>
139
+ : T[Prop];
140
+ } extends infer Resolved
141
+ ? ResolveCustomTypeFieldsRequirements<Resolved>
142
+ : never;
143
+
144
+ export type ResolveCustomTypeFieldsRequirements<Resolved> = Intersection<
145
+ ExtractNullableFieldsToOptionalFields<Resolved>,
146
+ ExtractNonNullableFieldsToRequiredFields<Resolved>
147
+ >;
148
+
149
+ type ResolveModelsRelationalAndRefFields<
150
+ Schema,
151
+ NonModelTypes extends NonModelTypesShape,
152
+ Flat extends boolean = false,
153
+ > = {
154
+ [ModelProp in keyof Schema]: {
155
+ [FieldProp in keyof Schema[ModelProp]]: Schema[ModelProp][FieldProp] extends RefType<
156
+ infer R extends RefTypeParamShape,
157
+ any,
158
+ any
159
+ > | null
160
+ ? ResolveRef<NonModelTypes, R>
161
+ : Schema[ModelProp][FieldProp] extends ModelRelationalFieldParamShape
162
+ ? Schema[ModelProp][FieldProp]['relatedModel'] extends keyof Schema
163
+ ? GetRelationshipRef<
164
+ Schema,
165
+ Schema[ModelProp][FieldProp]['relatedModel'],
166
+ Schema[ModelProp][FieldProp],
167
+ Flat
168
+ >
169
+ : never // if the field value extends ModelRelationalFieldShape "relatedModel" should always point to a Model (keyof Schema)
170
+ : Schema[ModelProp][FieldProp];
171
+ };
172
+ };
173
+
174
+ type FilterFieldTypes<Schema> = {
175
+ [ModelProp in keyof Schema]: {
176
+ [FieldProp in keyof Schema[ModelProp] as Schema[ModelProp][FieldProp] extends undefined
177
+ ? never
178
+ : FieldProp]: Schema[ModelProp][FieldProp];
179
+ };
180
+ };
181
+
182
+ type ExtractNullableFieldsToOptionalFields<Fields> = Partial<{
183
+ [FieldProp in keyof Fields as null extends Fields[FieldProp]
184
+ ? FieldProp
185
+ : never]: null extends Fields[FieldProp] ? Fields[FieldProp] : never;
186
+ }>;
187
+
188
+ type MarkModelsNullableFieldsOptional<Schema> = {
189
+ [ModelProp in keyof Schema]: ExtractNullableFieldsToOptionalFields<
190
+ Schema[ModelProp]
191
+ >;
192
+ };
193
+
194
+ type ExtractNonNullableFieldsToRequiredFields<Fields> = {
195
+ [FieldProp in keyof Fields as null extends Fields[FieldProp]
196
+ ? never
197
+ : FieldProp]: null extends Fields[FieldProp] ? never : Fields[FieldProp];
198
+ };
199
+
200
+ type MarkModelsNonNullableFieldsRequired<Schema> = {
201
+ [ModelProp in keyof Schema]: ExtractNonNullableFieldsToRequiredFields<
202
+ Schema[ModelProp]
203
+ >;
204
+ };
205
+
206
+ type Intersection<
207
+ A = Record<never, never>,
208
+ B = Record<never, never>,
209
+ C = Record<never, never>,
210
+ D = Record<never, never>,
211
+ > = A & B & C & D extends infer U ? { [P in keyof U]: U[P] } : never;
212
+
213
+ // TODO: this should probably happen in InjectImplicitModelFields instead. Keeping here for now to reduce refactor
214
+ // blast radius
215
+ export type ModelImpliedAuthFields<Schema extends GenericModelSchema<any>> = {
216
+ [ModelKey in keyof Schema['data']['types'] as Schema['data']['types'][ModelKey] extends EnumType<EnumTypeParamShape>
217
+ ? never
218
+ : Schema['data']['types'][ModelKey] extends CustomType<CustomTypeParamShape>
219
+ ? never
220
+ : Schema['data']['types'][ModelKey] extends CustomOperation<
221
+ CustomOperationParamShape,
222
+ any
223
+ >
224
+ ? never
225
+ : ModelKey]: Schema['data']['types'][ModelKey] extends ModelType<
226
+ infer Model,
227
+ any
228
+ >
229
+ ? AllAuthFieldsForModel<Schema, Model>
230
+ : object;
231
+ };
232
+
233
+ type AllAuthFieldsForModel<
234
+ Schema extends GenericModelSchema<any>,
235
+ Model extends Schema['data']['types'][keyof Schema['data']['types']],
236
+ > = (Model['authorization'][number] extends never
237
+ ? Schema['data']['authorization'][number] extends never
238
+ ? object
239
+ : ImpliedAuthFields<Schema['data']['authorization'][number]>
240
+ : ImpliedAuthFields<Model['authorization'][number]>) &
241
+ ImpliedAuthFieldsFromFields<Model>;
242
+
243
+ type ImpliedAuthFieldsFromFields<T> = UnionToIntersection<
244
+ T extends ModelTypeParamShape
245
+ ? T['fields'][keyof T['fields']] extends
246
+ | ModelField<any, any, infer Auth>
247
+ | ModelRelationalField<any, any, any, infer Auth>
248
+ | RefType<any, any, infer Auth>
249
+ ? Auth extends Authorization<any, any, any>
250
+ ? ImpliedAuthFields<Auth>
251
+ : object
252
+ : object
253
+ : object
254
+ >;
@@ -0,0 +1,148 @@
1
+ import type { ModelType } from '../ModelType';
2
+ import type { GenericModelSchema } from '../ModelSchema';
3
+ import type {
4
+ ModelRelationalField,
5
+ ModelRelationshipTypes,
6
+ RelationTypeFunctionOmitMapping,
7
+ } from '../ModelRelationalField';
8
+ import type { ModelField } from '../ModelField';
9
+ import type { CustomType, CustomTypeParamShape } from '../CustomType';
10
+ import type { EnumType, EnumTypeParamShape } from '../EnumType';
11
+ import type { RefType, RefTypeParamShape } from '../RefType';
12
+ import type {
13
+ CustomOperation,
14
+ CustomOperationParamShape,
15
+ } from '../CustomOperation';
16
+
17
+ export type ResolveSchema<Schema> = FieldTypes<ModelTypes<SchemaTypes<Schema>>>;
18
+
19
+ // TODO: find better name
20
+ export type SchemaTypes<T> = T extends GenericModelSchema<any>
21
+ ? T['data']['types']
22
+ : never;
23
+
24
+ /**
25
+ * Resolves model types
26
+ *
27
+ * Removes CustomTypes and Enums from resolved schema.
28
+ * They are extracted separately in ExtractNonModelTypes.ts and
29
+ * added to ModelMeta in ClientSchema.ts
30
+ */
31
+ export type ModelTypes<Schema> = {
32
+ [Model in keyof Schema as Schema[Model] extends
33
+ | EnumType<EnumTypeParamShape>
34
+ | CustomType<CustomTypeParamShape>
35
+ | CustomOperation<CustomOperationParamShape, any>
36
+ ? never
37
+ : Model]: Schema[Model] extends ModelType<infer R, any>
38
+ ? R['fields']
39
+ : never;
40
+ };
41
+
42
+ /**
43
+ * Gets the collection of all ModelTypes and CustomTypes which are explicitly
44
+ * defined in the schema.
45
+ */
46
+ export type ModelAndCustomTypes<Schema> = {
47
+ [Model in keyof Schema as Schema[Model] extends
48
+ | EnumType<EnumTypeParamShape>
49
+ | CustomOperation<CustomOperationParamShape, any>
50
+ ? never
51
+ : Model]: Schema[Model] extends ModelType<any, any>
52
+ ? Schema[Model]
53
+ : Schema[Model] extends CustomType<CustomTypeParamShape>
54
+ ? Schema[Model]
55
+ : never;
56
+ };
57
+
58
+ /**
59
+ * Resolves field types
60
+ *
61
+ * Non-model types are replaced with Refs. Refs remain and are resolved in ResolveFieldProperties.ts
62
+ */
63
+ export type FieldTypes<T> = {
64
+ [ModelProp in keyof T]: {
65
+ [FieldProp in keyof T[ModelProp]]: T[ModelProp][FieldProp] extends ModelField<
66
+ // Match the most common field type to improve resolving performance
67
+ infer R,
68
+ any,
69
+ any
70
+ >
71
+ ? R
72
+ : T[ModelProp][FieldProp] extends RefType<
73
+ infer R extends RefTypeParamShape,
74
+ any,
75
+ any
76
+ >
77
+ ? // leave Ref as-is. We'll resolve it to the linked entity downstream in ResolveFieldProperties
78
+ R['valueRequired'] extends true
79
+ ? T[ModelProp][FieldProp]
80
+ : T[ModelProp][FieldProp] | null
81
+ : // replace non-model types with Ref
82
+ T[ModelProp][FieldProp] extends
83
+ | EnumType<EnumTypeParamShape>
84
+ | CustomType<CustomTypeParamShape>
85
+ ? RefType<{
86
+ link: `${Capitalize<ModelProp & string>}${Capitalize<
87
+ FieldProp & string
88
+ >}`;
89
+ type: 'ref';
90
+ valueRequired: false;
91
+ array: false;
92
+ arrayRequired: false;
93
+ authorization: [];
94
+ }> | null
95
+ : // resolve relational and model fields to the their first type arg
96
+ T[ModelProp][FieldProp] extends ModelRelationalField<
97
+ infer R,
98
+ string,
99
+ RelationTypeFunctionOmitMapping<ModelRelationshipTypes>,
100
+ any
101
+ >
102
+ ? R
103
+ : never;
104
+ };
105
+ };
106
+
107
+ /**
108
+ * Resolves field types for a CustomType.
109
+ *
110
+ * This utility type is needed in addition to the `FieldTypes` utility type as
111
+ * without checking `ModelRelationalField` can improve ~5% on resolving performance.
112
+ *
113
+ * Non-model types are replaced with Refs. Refs remain and are resolved in ResolveFieldProperties.ts
114
+ */
115
+ export type FieldTypesOfCustomType<T> = {
116
+ [CustomTypeName in keyof T]: {
117
+ [FieldProp in keyof T[CustomTypeName]]: T[CustomTypeName][FieldProp] extends ModelField<
118
+ infer R,
119
+ any,
120
+ any
121
+ >
122
+ ? R
123
+ : T[CustomTypeName][FieldProp] extends RefType<
124
+ infer R extends RefTypeParamShape,
125
+ any,
126
+ any
127
+ >
128
+ ? // leave Ref as-is. We'll resolve it to the linked entity downstream in ResolveFieldProperties
129
+ R['valueRequired'] extends true
130
+ ? T[CustomTypeName][FieldProp]
131
+ : T[CustomTypeName][FieldProp] | null
132
+ : // replace non-model types with Ref
133
+ T[CustomTypeName][FieldProp] extends
134
+ | EnumType<EnumTypeParamShape>
135
+ | CustomType<CustomTypeParamShape>
136
+ ? RefType<{
137
+ link: `${Capitalize<CustomTypeName & string>}${Capitalize<
138
+ FieldProp & string
139
+ >}`;
140
+ type: 'ref';
141
+ valueRequired: false;
142
+ array: false;
143
+ arrayRequired: false;
144
+ authorization: [];
145
+ }> | null
146
+ : never;
147
+ };
148
+ };
@@ -0,0 +1,304 @@
1
+ import { Brand, brand } from './util';
2
+ import { AllowModifier, Authorization, allow } from './Authorization';
3
+
4
+ /**
5
+ * Used to "attach" auth types to ModelField without exposing them on the builder.
6
+ */
7
+ export const __auth = Symbol('__auth');
8
+
9
+ const brandName = 'modelField';
10
+
11
+ export enum ModelFieldType {
12
+ Id = 'ID',
13
+ String = 'String',
14
+ Integer = 'Int',
15
+ Float = 'Float',
16
+ Boolean = 'Boolean',
17
+ Date = 'AWSDate',
18
+ Time = 'AWSTime',
19
+ DateTime = 'AWSDateTime',
20
+ Timestamp = 'AWSTimestamp',
21
+ Email = 'AWSEmail',
22
+ JSON = 'AWSJSON',
23
+ Phone = 'AWSPhone',
24
+ Url = 'AWSURL',
25
+ IPAddress = 'AWSIPAddress',
26
+ }
27
+
28
+ export enum ModelFieldDataType {
29
+ String = 'string',
30
+ Number = 'number',
31
+ Boolean = 'boolean',
32
+ Date = 'Date',
33
+ JSON = 'any',
34
+ }
35
+
36
+ type FieldMeta = {
37
+ lastInvokedMethod: null | keyof ModelField<ModelFieldTypeParamOuter>;
38
+ };
39
+
40
+ type FieldData = {
41
+ fieldType: ModelFieldType;
42
+ required: boolean;
43
+ array: boolean;
44
+ arrayRequired: boolean;
45
+ default: undefined | ModelFieldTypeParamOuter;
46
+ authorization: Authorization<any, any, any>[];
47
+ };
48
+
49
+ type ModelFieldTypeParamInner = string | number | boolean | Date | Json | null;
50
+
51
+ // A precise, recursive Json type blows the type calculation stack without installing
52
+ // explicit `Json extends T ? short-circuit : ...` type checks all over the place.
53
+ // We may take that on later. But, this is a good-enough approximation for now.
54
+ export type Json = null | string | number | boolean | object | any[];
55
+
56
+ export type ModelFieldTypeParamOuter =
57
+ | ModelFieldTypeParamInner
58
+ | Array<ModelFieldTypeParamInner>
59
+ | null;
60
+
61
+ /**
62
+ * Field type arg mutators
63
+ */
64
+ export type Nullable<T> = T | null;
65
+ export type Required<T> = Exclude<T, null>;
66
+ export type ArrayField<T> = [T] extends [ModelFieldTypeParamInner]
67
+ ? Array<T> | null // optional by default
68
+ : never;
69
+
70
+ /**
71
+ * Public API for the chainable builder methods exposed by Model Field.
72
+ * The type is narrowing e.g., after calling .array() it will be omitted from intellisense suggestions
73
+ *
74
+ * @typeParam T - holds the JS data type of the field
75
+ * @typeParam K - union of strings representing already-invoked method names. Used to improve Intellisense
76
+ */
77
+ export type ModelField<
78
+ T extends ModelFieldTypeParamOuter,
79
+ // rename K
80
+ K extends keyof ModelField<T> = never,
81
+ Auth = undefined,
82
+ > = Omit<
83
+ {
84
+ /**
85
+ * Marks a field as required.
86
+ */
87
+ required(): ModelField<Required<T>, K | 'required'>;
88
+ // Exclude `optional` after calling array, because both the value and the array itself can be optional
89
+ /**
90
+ * Converts a field type definition to an array of the field type.
91
+ */
92
+ array(): ModelField<ArrayField<T>, Exclude<K, 'required'> | 'array'>;
93
+ // TODO: should be T, but .array breaks this constraint. Fix later
94
+ /**
95
+ * Sets a default value for the scalar type.
96
+ * @param value the default value
97
+ */
98
+ default(value: ModelFieldTypeParamOuter): ModelField<T, K | 'default'>;
99
+ /**
100
+ * Configures field-level authorization rules. Pass in an array of authorizations `(a.allow.____)` to mix and match
101
+ * multiple authorization rules for this field.
102
+ */
103
+ authorization<AuthRuleType extends Authorization<any, any, any>>(
104
+ callback: (allow: Omit<AllowModifier, 'resource'>) => AuthRuleType | AuthRuleType[],
105
+ ): ModelField<T, K | 'authorization', AuthRuleType>;
106
+ },
107
+ K
108
+ > & {
109
+ // This is a lie. This property is never set at runtime. It's just used to smuggle auth types through.
110
+ [__auth]?: Auth;
111
+ } & Brand<typeof brandName>;
112
+
113
+ /**
114
+ * Internal representation of Model Field that exposes the `data` property.
115
+ * Used at buildtime.
116
+ */
117
+ export type InternalField = ModelField<ModelFieldTypeParamOuter, never> & {
118
+ data: FieldData;
119
+ };
120
+
121
+ /**
122
+ * Model Field Implementation
123
+ *
124
+ * @typeParam T - holds the JS data type of the field; invoking the public methods changes this type accordingly
125
+ * @example
126
+ * string() => T = string | null
127
+ * string().array() => T = Array<string | null> | null
128
+ * string().array().required() => T = Array<string | null>
129
+ * string().required().array().required() => T = Array<string>
130
+ *
131
+ * @param fieldType - stores the GraphQL data type of the field
132
+ */
133
+ function _field<T extends ModelFieldTypeParamOuter>(fieldType: ModelFieldType) {
134
+ const _meta: FieldMeta = {
135
+ lastInvokedMethod: null,
136
+ };
137
+
138
+ const data: FieldData = {
139
+ fieldType,
140
+ required: false,
141
+ array: false,
142
+ arrayRequired: false,
143
+ default: undefined,
144
+ authorization: [],
145
+ };
146
+
147
+ const builder = {
148
+ required() {
149
+ if (_meta.lastInvokedMethod === 'array') {
150
+ data.arrayRequired = true;
151
+ } else {
152
+ data.required = true;
153
+ }
154
+
155
+ _meta.lastInvokedMethod = 'required';
156
+
157
+ return this;
158
+ },
159
+ array(): ModelField<ArrayField<T>> {
160
+ data.array = true;
161
+ _meta.lastInvokedMethod = 'array';
162
+
163
+ return this;
164
+ },
165
+ default(val) {
166
+ data.default = val;
167
+ _meta.lastInvokedMethod = 'default';
168
+
169
+ return this;
170
+ },
171
+ authorization(callback) {
172
+ const { resource: _, ...rest } = allow;
173
+ const rules = callback(rest);
174
+ data.authorization = Array.isArray(rules) ? rules : [rules];
175
+ _meta.lastInvokedMethod = 'authorization';
176
+
177
+ return this;
178
+ },
179
+ ...brand(brandName),
180
+ } as ModelField<T>;
181
+
182
+ // this double cast gives us a Subtyping Constraint i.e., hides `data` from the public API,
183
+ // but makes it available internally when needed
184
+ return { ...builder, data } as InternalField as ModelField<T>;
185
+ }
186
+
187
+ /**
188
+ * A unique identifier scalar type. This scalar is serialized like a String but isn't meant to be human-readable.
189
+ * If not specified on create operations, a ULID will be auto-generated service-side.
190
+ * @returns ID field definition
191
+ */
192
+ export function id(): ModelField<Nullable<string>> {
193
+ return _field(ModelFieldType.Id);
194
+ }
195
+
196
+ /**
197
+ * A string scalar type that is represented server-side as a UTF-8 character sequence.
198
+ * @returns string field definition
199
+ */
200
+ export function string(): ModelField<Nullable<string>> {
201
+ return _field(ModelFieldType.String);
202
+ }
203
+
204
+ /**
205
+ * An integer scalar type with a supported value range between -(2^31) and 2^31-1.
206
+ * @returns integer field definition
207
+ */
208
+ export function integer(): ModelField<Nullable<number>> {
209
+ return _field(ModelFieldType.Integer);
210
+ }
211
+
212
+ /**
213
+ * A float scalar type following represented server-side as an IEEE 754 floating point value.
214
+ * @returns float field definition
215
+ */
216
+ export function float(): ModelField<Nullable<number>> {
217
+ return _field(ModelFieldType.Float);
218
+ }
219
+
220
+ /**
221
+ * A boolean scalar type that can be either true or false.
222
+ * @returns boolean field definition
223
+ */
224
+ export function boolean(): ModelField<Nullable<boolean>> {
225
+ return _field(ModelFieldType.Boolean);
226
+ }
227
+
228
+ /**
229
+ * A date scalar type that is represented server-side as an extended ISO 8601 date string in the format `YYYY-MM-DD`.
230
+ * @returns date field definition
231
+ */
232
+ export function date(): ModelField<Nullable<string>> {
233
+ return _field(ModelFieldType.Date);
234
+ }
235
+
236
+ /**
237
+ * A time scalar type that is represented server-side as an extended ISO 8601 time string in the format `hh:mm:ss.sss`.
238
+ * @returns time field definition
239
+ */
240
+ export function time(): ModelField<Nullable<string>> {
241
+ return _field(ModelFieldType.Time);
242
+ }
243
+
244
+ /**
245
+ * A date time scalar type that is represented server-side as an extended ISO 8601 date and time string in the format `YYYY-MM-DDThh:mm:ss.sssZ`.
246
+ * @returns datetime field definition
247
+ */
248
+ export function datetime(): ModelField<Nullable<string>> {
249
+ return _field(ModelFieldType.DateTime);
250
+ }
251
+
252
+ /**
253
+ * A timestamp scalar type that is represented by an integer value of the number of seconds before or after `1970-01-01-T00:00Z`.
254
+ * @returns timestamp field definition
255
+ */
256
+ export function timestamp(): ModelField<Nullable<number>> {
257
+ return _field(ModelFieldType.Timestamp);
258
+ }
259
+
260
+ /**
261
+ * An email scalar type that is represented server-side in the format `local-part@domain-part` as defined by RFC 822.
262
+ * @returns email field definition
263
+ */
264
+ export function email(): ModelField<Nullable<string>> {
265
+ return _field(ModelFieldType.Email);
266
+ }
267
+
268
+ /**
269
+ * A JSON scalar type that is automatically parsed and loaded server-side as maps, lists, or scalar values
270
+ * rather than as the literal input strings.
271
+ * @returns JSON field definition
272
+ */
273
+ export function json(): ModelField<Nullable<Json>> {
274
+ return _field(ModelFieldType.JSON);
275
+ }
276
+
277
+ /**
278
+ * A phone number scalar type thas is stored as a string server-side. Phone numbers can contain either spaces
279
+ * or hyphens to separate digit groups. Phone numbers without a country code are assumed to be US/North American numbers adhering
280
+ * to the North American Numbering Plan.
281
+ * @returns phone number field definition
282
+ */
283
+ export function phone(): ModelField<Nullable<string>> {
284
+ return _field(ModelFieldType.Phone);
285
+ }
286
+
287
+ /**
288
+ * A URL scalar type as defined by RFC 1738. For example, https://www.amazon.com/dp/B000NZW3KC/ or mailto:example@example.com.
289
+ * URLs must contain a schema (http, mailto) and can't contain two forward slashes (//) in the path part.
290
+ * @returns URL field definition
291
+ */
292
+ export function url(): ModelField<Nullable<string>> {
293
+ return _field(ModelFieldType.Url);
294
+ }
295
+
296
+ /**
297
+ * A valid IPv4 or IPv6 address scalar type. IPv4 addresses are expected in quad-dotted notation (123.12.34.56). IPv6 addresses
298
+ * are expected in non-bracketed, colon-separated format (1a2b:3c4b:🔢4567). You can include an optional CIDR suffix (123.45.67.89/16)
299
+ * to indicate subnet mask.
300
+ * @returns IP address field definition
301
+ */
302
+ export function ipAddress(): ModelField<Nullable<string>> {
303
+ return _field(ModelFieldType.IPAddress);
304
+ }