@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.
- package/{lib-esm/src → dist/cjs}/Authorization.js +149 -31
- package/dist/cjs/Authorization.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/ClientSchema.js +3 -1
- package/dist/cjs/ClientSchema.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/CombineSchema.js +3 -2
- package/dist/cjs/CombineSchema.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/CustomOperation.js +7 -3
- package/dist/cjs/CustomOperation.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/CustomType.js +3 -1
- package/dist/cjs/CustomType.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/EnumType.js +3 -1
- package/dist/cjs/EnumType.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/Handler.js +3 -1
- package/dist/cjs/Handler.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/MappedTypes/CustomOperations.js +3 -1
- package/dist/cjs/MappedTypes/CustomOperations.js.map +1 -0
- package/dist/cjs/MappedTypes/ExtractNonModelTypes.js +4 -0
- package/dist/cjs/MappedTypes/ExtractNonModelTypes.js.map +1 -0
- package/dist/cjs/MappedTypes/ImplicitFieldInjector.js +4 -0
- package/dist/cjs/MappedTypes/ImplicitFieldInjector.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/MappedTypes/MapSecondaryIndexes.js +3 -1
- package/dist/cjs/MappedTypes/MapSecondaryIndexes.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/MappedTypes/ModelMetadata.js +3 -1
- package/dist/cjs/MappedTypes/ModelMetadata.js.map +1 -0
- package/dist/cjs/MappedTypes/ResolveFieldProperties.js +4 -0
- package/dist/cjs/MappedTypes/ResolveFieldProperties.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/MappedTypes/ResolveSchema.js +3 -1
- package/dist/cjs/MappedTypes/ResolveSchema.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/ModelField.js +8 -3
- package/dist/cjs/ModelField.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/ModelIndex.js +3 -1
- package/dist/cjs/ModelIndex.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/ModelRelationalField.js +7 -10
- package/dist/cjs/ModelRelationalField.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/ModelSchema.js +10 -5
- package/dist/cjs/ModelSchema.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/ModelType.js +8 -3
- package/dist/cjs/ModelType.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/RefType.js +8 -5
- package/dist/cjs/RefType.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/SchemaProcessor.js +15 -61
- package/dist/cjs/SchemaProcessor.js.map +1 -0
- package/{lib-esm/src/index.js → dist/cjs/a.js} +4 -4
- package/dist/cjs/a.js.map +1 -0
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/index.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/internals/index.js +3 -1
- package/dist/cjs/internals/index.js.map +1 -0
- package/dist/cjs/runtime/addSchemaToClient.js +17 -0
- package/dist/cjs/runtime/addSchemaToClient.js.map +1 -0
- package/dist/cjs/runtime/addSchemaToClientWithInstance.js +22 -0
- package/dist/cjs/runtime/addSchemaToClientWithInstance.js.map +1 -0
- package/dist/cjs/runtime/bridge-types.js +15 -0
- package/dist/cjs/runtime/bridge-types.js.map +1 -0
- package/dist/cjs/runtime/client/index.js +17 -0
- package/dist/cjs/runtime/client/index.js.map +1 -0
- package/dist/cjs/runtime/client/index.v3.js +7 -0
- package/dist/cjs/runtime/client/index.v3.js.map +1 -0
- package/dist/cjs/runtime/index.js +13 -0
- package/dist/cjs/runtime/index.js.map +1 -0
- package/dist/cjs/runtime/index.v3.js +13 -0
- package/dist/cjs/runtime/index.v3.js.map +1 -0
- package/dist/cjs/runtime/internals/APIClient.js +740 -0
- package/dist/cjs/runtime/internals/APIClient.js.map +1 -0
- package/dist/cjs/runtime/internals/clientUtils.js +29 -0
- package/dist/cjs/runtime/internals/clientUtils.js.map +1 -0
- package/dist/cjs/runtime/internals/generateCustomOperationsProperty.js +49 -0
- package/dist/cjs/runtime/internals/generateCustomOperationsProperty.js.map +1 -0
- package/dist/cjs/runtime/internals/index.js +21 -0
- package/dist/cjs/runtime/internals/index.js.map +1 -0
- package/dist/cjs/runtime/internals/operations/custom.js +356 -0
- package/dist/cjs/runtime/internals/operations/custom.js.map +1 -0
- package/dist/cjs/runtime/internals/operations/get.js +62 -0
- package/dist/cjs/runtime/internals/operations/get.js.map +1 -0
- package/dist/cjs/runtime/internals/operations/indexQuery.js +75 -0
- package/dist/cjs/runtime/internals/operations/indexQuery.js.map +1 -0
- package/dist/cjs/runtime/internals/operations/list.js +74 -0
- package/dist/cjs/runtime/internals/operations/list.js.map +1 -0
- package/dist/cjs/runtime/internals/operations/observeQuery.js +121 -0
- package/dist/cjs/runtime/internals/operations/observeQuery.js.map +1 -0
- package/dist/cjs/runtime/internals/operations/subscription.js +31 -0
- package/dist/cjs/runtime/internals/operations/subscription.js.map +1 -0
- package/dist/cjs/runtime/internals/server/generateModelsProperty.js +53 -0
- package/dist/cjs/runtime/internals/server/generateModelsProperty.js.map +1 -0
- package/dist/cjs/runtime/internals/server/index.js +8 -0
- package/dist/cjs/runtime/internals/server/index.js.map +1 -0
- package/dist/cjs/runtime/internals/utils/clientProperties/generateEnumsProperty.js +21 -0
- package/dist/cjs/runtime/internals/utils/clientProperties/generateEnumsProperty.js.map +1 -0
- package/dist/cjs/runtime/internals/utils/clientProperties/generateModelsProperty.js +45 -0
- package/dist/cjs/runtime/internals/utils/clientProperties/generateModelsProperty.js.map +1 -0
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.js +11 -0
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.js.map +1 -0
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.js +11 -0
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.js.map +1 -0
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js +15 -0
- package/dist/cjs/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js.map +1 -0
- package/dist/cjs/runtime/utils/findIndexByFields.js +25 -0
- package/dist/cjs/runtime/utils/findIndexByFields.js.map +1 -0
- package/dist/cjs/runtime/utils/index.js +11 -0
- package/dist/cjs/runtime/utils/index.js.map +1 -0
- package/dist/cjs/runtime/utils/resolveOwnerFields.js +48 -0
- package/dist/cjs/runtime/utils/resolveOwnerFields.js.map +1 -0
- package/dist/cjs/runtime/utils/resolvePKFields.js +17 -0
- package/dist/cjs/runtime/utils/resolvePKFields.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/util/Brand.js +3 -1
- package/dist/cjs/util/Brand.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/util/IndexLimit.js +3 -1
- package/dist/cjs/util/IndexLimit.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/util/SpreadTuple.js +3 -1
- package/dist/cjs/util/SpreadTuple.js.map +1 -0
- package/{lib-esm/src → dist/cjs}/util/index.js +3 -1
- package/dist/cjs/util/index.js.map +1 -0
- package/{lib-esm/src → dist/esm}/Authorization.d.ts +105 -31
- package/dist/esm/Authorization.mjs +446 -0
- package/dist/esm/Authorization.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/ClientSchema.d.ts +1 -2
- package/dist/esm/ClientSchema.mjs +2 -0
- package/dist/esm/ClientSchema.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/CombineSchema.d.ts +0 -1
- package/dist/esm/CombineSchema.mjs +39 -0
- package/dist/esm/CombineSchema.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/CustomOperation.d.ts +2 -3
- package/dist/esm/CustomOperation.mjs +67 -0
- package/dist/esm/CustomOperation.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/CustomType.d.ts +0 -1
- package/dist/esm/CustomType.mjs +13 -0
- package/dist/esm/CustomType.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/EnumType.d.ts +0 -1
- package/dist/esm/EnumType.mjs +16 -0
- package/dist/esm/EnumType.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/Handler.d.ts +0 -1
- package/dist/esm/Handler.mjs +48 -0
- package/dist/esm/Handler.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/MappedTypes/CustomOperations.d.ts +0 -1
- package/dist/esm/MappedTypes/CustomOperations.mjs +2 -0
- package/dist/esm/MappedTypes/CustomOperations.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/MappedTypes/ExtractNonModelTypes.d.ts +0 -1
- package/dist/esm/MappedTypes/ExtractNonModelTypes.mjs +2 -0
- package/dist/esm/MappedTypes/ExtractNonModelTypes.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/MappedTypes/ImplicitFieldInjector.d.ts +0 -1
- package/dist/esm/MappedTypes/ImplicitFieldInjector.mjs +2 -0
- package/dist/esm/MappedTypes/ImplicitFieldInjector.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/MappedTypes/MapSecondaryIndexes.d.ts +0 -1
- package/dist/esm/MappedTypes/MapSecondaryIndexes.mjs +2 -0
- package/dist/esm/MappedTypes/MapSecondaryIndexes.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/MappedTypes/ModelMetadata.d.ts +0 -1
- package/dist/esm/MappedTypes/ModelMetadata.mjs +2 -0
- package/dist/esm/MappedTypes/ModelMetadata.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/MappedTypes/ResolveFieldProperties.d.ts +0 -1
- package/dist/esm/MappedTypes/ResolveFieldProperties.mjs +2 -0
- package/dist/esm/MappedTypes/ResolveFieldProperties.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/MappedTypes/ResolveSchema.d.ts +0 -1
- package/dist/esm/MappedTypes/ResolveSchema.mjs +2 -0
- package/dist/esm/MappedTypes/ResolveSchema.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/ModelField.d.ts +2 -3
- package/dist/esm/ModelField.mjs +199 -0
- package/dist/esm/ModelField.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/ModelIndex.d.ts +0 -1
- package/dist/esm/ModelIndex.mjs +33 -0
- package/dist/esm/ModelIndex.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/ModelRelationalField.d.ts +3 -4
- package/dist/esm/ModelRelationalField.mjs +88 -0
- package/dist/esm/ModelRelationalField.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/ModelSchema.d.ts +3 -4
- package/dist/esm/ModelSchema.mjs +163 -0
- package/dist/esm/ModelSchema.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/ModelType.d.ts +2 -3
- package/dist/esm/ModelType.mjs +66 -0
- package/dist/esm/ModelType.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/RefType.d.ts +2 -3
- package/dist/esm/RefType.mjs +48 -0
- package/dist/esm/RefType.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/SchemaProcessor.d.ts +0 -1
- package/dist/esm/SchemaProcessor.mjs +926 -0
- package/dist/esm/SchemaProcessor.mjs.map +1 -0
- package/{lib-esm/src/index.d.ts → dist/esm/a.d.ts} +1 -3
- package/dist/esm/a.mjs +11 -0
- package/dist/esm/a.mjs.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.mjs +3 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/internals/index.d.ts +2 -0
- package/dist/esm/internals/index.mjs +2 -0
- package/dist/esm/internals/index.mjs.map +1 -0
- package/dist/esm/runtime/addSchemaToClient.d.ts +3 -0
- package/dist/esm/runtime/addSchemaToClient.mjs +17 -0
- package/dist/esm/runtime/addSchemaToClient.mjs.map +1 -0
- package/dist/esm/runtime/addSchemaToClientWithInstance.d.ts +3 -0
- package/dist/esm/runtime/addSchemaToClientWithInstance.mjs +22 -0
- package/dist/esm/runtime/addSchemaToClientWithInstance.mjs.map +1 -0
- package/dist/esm/runtime/bridge-types.d.ts +281 -0
- package/dist/esm/runtime/bridge-types.mjs +13 -0
- package/dist/esm/runtime/bridge-types.mjs.map +1 -0
- package/dist/esm/runtime/client/index.d.ts +571 -0
- package/dist/esm/runtime/client/index.mjs +2 -0
- package/dist/esm/runtime/client/index.mjs.map +1 -0
- package/dist/esm/runtime/client/index.v3.d.ts +15 -0
- package/dist/esm/runtime/client/index.v3.mjs +2 -0
- package/dist/esm/runtime/client/index.v3.mjs.map +1 -0
- package/dist/esm/runtime/index.d.ts +4 -0
- package/dist/esm/runtime/index.mjs +4 -0
- package/dist/esm/runtime/index.mjs.map +1 -0
- package/dist/esm/runtime/index.v3.d.ts +4 -0
- package/dist/esm/runtime/index.v3.mjs +4 -0
- package/dist/esm/runtime/index.v3.mjs.map +1 -0
- package/dist/esm/runtime/internals/APIClient.d.ts +125 -0
- package/dist/esm/runtime/internals/APIClient.mjs +728 -0
- package/dist/esm/runtime/internals/APIClient.mjs.map +1 -0
- package/dist/esm/runtime/internals/clientUtils.d.ts +6 -0
- package/dist/esm/runtime/internals/clientUtils.mjs +26 -0
- package/dist/esm/runtime/internals/clientUtils.mjs.map +1 -0
- package/dist/esm/runtime/internals/generateCustomOperationsProperty.d.ts +8 -0
- package/dist/esm/runtime/internals/generateCustomOperationsProperty.mjs +44 -0
- package/dist/esm/runtime/internals/generateCustomOperationsProperty.mjs.map +1 -0
- package/dist/esm/runtime/internals/index.d.ts +6 -0
- package/dist/esm/runtime/internals/index.mjs +7 -0
- package/dist/esm/runtime/internals/index.mjs.map +1 -0
- package/dist/esm/runtime/internals/operations/custom.d.ts +61 -0
- package/dist/esm/runtime/internals/operations/custom.mjs +354 -0
- package/dist/esm/runtime/internals/operations/custom.mjs.map +1 -0
- package/dist/esm/runtime/internals/operations/get.d.ts +3 -0
- package/dist/esm/runtime/internals/operations/get.mjs +60 -0
- package/dist/esm/runtime/internals/operations/get.mjs.map +1 -0
- package/dist/esm/runtime/internals/operations/indexQuery.d.ts +7 -0
- package/dist/esm/runtime/internals/operations/indexQuery.mjs +73 -0
- package/dist/esm/runtime/internals/operations/indexQuery.mjs.map +1 -0
- package/dist/esm/runtime/internals/operations/list.d.ts +2 -0
- package/dist/esm/runtime/internals/operations/list.mjs +72 -0
- package/dist/esm/runtime/internals/operations/list.mjs.map +1 -0
- package/dist/esm/runtime/internals/operations/observeQuery.d.ts +3 -0
- package/dist/esm/runtime/internals/operations/observeQuery.mjs +120 -0
- package/dist/esm/runtime/internals/operations/observeQuery.mjs.map +1 -0
- package/dist/esm/runtime/internals/operations/subscription.d.ts +3 -0
- package/dist/esm/runtime/internals/operations/subscription.mjs +29 -0
- package/dist/esm/runtime/internals/operations/subscription.mjs.map +1 -0
- package/dist/esm/runtime/internals/server/generateModelsProperty.d.ts +3 -0
- package/dist/esm/runtime/internals/server/generateModelsProperty.mjs +51 -0
- package/dist/esm/runtime/internals/server/generateModelsProperty.mjs.map +1 -0
- package/dist/esm/runtime/internals/server/index.d.ts +1 -0
- package/dist/esm/runtime/internals/server/index.mjs +2 -0
- package/dist/esm/runtime/internals/server/index.mjs.map +1 -0
- package/dist/esm/runtime/internals/utils/clientProperties/generateEnumsProperty.d.ts +3 -0
- package/dist/esm/runtime/internals/utils/clientProperties/generateEnumsProperty.mjs +18 -0
- package/dist/esm/runtime/internals/utils/clientProperties/generateEnumsProperty.mjs.map +1 -0
- package/dist/esm/runtime/internals/utils/clientProperties/generateModelsProperty.d.ts +3 -0
- package/dist/esm/runtime/internals/utils/clientProperties/generateModelsProperty.mjs +43 -0
- package/dist/esm/runtime/internals/utils/clientProperties/generateModelsProperty.mjs.map +1 -0
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.d.ts +2 -0
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.mjs +8 -0
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.mjs.map +1 -0
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.d.ts +8 -0
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs +8 -0
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs.map +1 -0
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.d.ts +2 -0
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs +12 -0
- package/dist/esm/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs.map +1 -0
- package/dist/esm/runtime/utils/findIndexByFields.d.ts +9 -0
- package/dist/esm/runtime/utils/findIndexByFields.mjs +22 -0
- package/dist/esm/runtime/utils/findIndexByFields.mjs.map +1 -0
- package/dist/esm/runtime/utils/index.d.ts +2 -0
- package/dist/esm/runtime/utils/index.mjs +3 -0
- package/dist/esm/runtime/utils/index.mjs.map +1 -0
- package/dist/esm/runtime/utils/resolveOwnerFields.d.ts +12 -0
- package/dist/esm/runtime/utils/resolveOwnerFields.mjs +45 -0
- package/dist/esm/runtime/utils/resolveOwnerFields.mjs.map +1 -0
- package/dist/esm/runtime/utils/resolvePKFields.d.ts +13 -0
- package/dist/esm/runtime/utils/resolvePKFields.mjs +14 -0
- package/dist/esm/runtime/utils/resolvePKFields.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/util/Brand.d.ts +0 -1
- package/dist/esm/util/Brand.mjs +30 -0
- package/dist/esm/util/Brand.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/util/IndexLimit.d.ts +0 -1
- package/dist/esm/util/IndexLimit.mjs +2 -0
- package/dist/esm/util/IndexLimit.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/util/SpreadTuple.d.ts +0 -1
- package/dist/esm/util/SpreadTuple.mjs +2 -0
- package/dist/esm/util/SpreadTuple.mjs.map +1 -0
- package/{lib-esm/src → dist/esm}/util/index.d.ts +0 -1
- package/dist/esm/util/index.mjs +2 -0
- package/dist/esm/util/index.mjs.map +1 -0
- package/dist/meta/cjs.tsbuildinfo +1 -0
- package/internals/package.json +7 -5
- package/package.json +31 -14
- package/runtime/package.json +8 -0
- package/src/Authorization.ts +684 -0
- package/src/ClientSchema.ts +118 -0
- package/src/CombineSchema.ts +58 -0
- package/src/CustomOperation.ts +286 -0
- package/src/CustomType.ts +67 -0
- package/src/EnumType.ts +36 -0
- package/src/Handler.ts +127 -0
- package/src/MappedTypes/CustomOperations.ts +256 -0
- package/src/MappedTypes/ExtractNonModelTypes.ts +154 -0
- package/src/MappedTypes/ImplicitFieldInjector.ts +69 -0
- package/src/MappedTypes/MapSecondaryIndexes.ts +100 -0
- package/src/MappedTypes/ModelMetadata.ts +87 -0
- package/src/MappedTypes/ResolveFieldProperties.ts +254 -0
- package/src/MappedTypes/ResolveSchema.ts +148 -0
- package/src/ModelField.ts +304 -0
- package/src/ModelIndex.ts +91 -0
- package/src/ModelRelationalField.ts +263 -0
- package/src/ModelSchema.ts +437 -0
- package/src/ModelType.ts +345 -0
- package/src/RefType.ts +139 -0
- package/src/SchemaProcessor.ts +1516 -0
- package/src/a.ts +58 -0
- package/src/index.ts +6 -0
- package/src/internals/index.ts +2 -0
- package/src/runtime/addSchemaToClient.ts +45 -0
- package/src/runtime/addSchemaToClientWithInstance.ts +46 -0
- package/src/runtime/bridge-types.ts +382 -0
- package/src/runtime/client/index.ts +923 -0
- package/src/runtime/client/index.v3.ts +52 -0
- package/src/runtime/index.ts +7 -0
- package/src/runtime/index.v3.ts +7 -0
- package/src/runtime/internals/APIClient.ts +1082 -0
- package/src/runtime/internals/clientUtils.ts +37 -0
- package/src/runtime/internals/generateCustomOperationsProperty.ts +116 -0
- package/src/runtime/internals/index.ts +12 -0
- package/src/runtime/internals/operations/custom.ts +497 -0
- package/src/runtime/internals/operations/get.ts +150 -0
- package/src/runtime/internals/operations/indexQuery.ts +178 -0
- package/src/runtime/internals/operations/list.ts +143 -0
- package/src/runtime/internals/operations/observeQuery.ts +146 -0
- package/src/runtime/internals/operations/subscription.ts +78 -0
- package/src/runtime/internals/server/generateModelsProperty.ts +94 -0
- package/src/runtime/internals/server/index.ts +4 -0
- package/src/runtime/internals/utils/clientProperties/generateEnumsProperty.ts +34 -0
- package/src/runtime/internals/utils/clientProperties/generateModelsProperty.ts +88 -0
- package/src/runtime/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.ts +10 -0
- package/src/runtime/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.ts +13 -0
- package/src/runtime/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.ts +15 -0
- package/src/runtime/utils/findIndexByFields.ts +31 -0
- package/src/runtime/utils/index.ts +5 -0
- package/src/runtime/utils/resolveOwnerFields.ts +77 -0
- package/src/runtime/utils/resolvePKFields.ts +23 -0
- package/src/util/Brand.ts +45 -0
- package/src/util/IndexLimit.ts +12 -0
- package/src/util/SpreadTuple.ts +10 -0
- package/src/util/index.ts +3 -0
- package/lib-esm/index.d.ts +0 -5
- package/lib-esm/index.d.ts.map +0 -1
- package/lib-esm/index.js +0 -28
- package/lib-esm/src/Authorization.d.ts.map +0 -1
- package/lib-esm/src/ClientSchema.d.ts.map +0 -1
- package/lib-esm/src/CombineSchema.d.ts.map +0 -1
- package/lib-esm/src/CustomOperation.d.ts.map +0 -1
- package/lib-esm/src/CustomType.d.ts.map +0 -1
- package/lib-esm/src/EnumType.d.ts.map +0 -1
- package/lib-esm/src/Handler.d.ts.map +0 -1
- package/lib-esm/src/MappedTypes/CustomOperations.d.ts.map +0 -1
- package/lib-esm/src/MappedTypes/ExtractNonModelTypes.d.ts.map +0 -1
- package/lib-esm/src/MappedTypes/ExtractNonModelTypes.js +0 -2
- package/lib-esm/src/MappedTypes/ImplicitFieldInjector.d.ts.map +0 -1
- package/lib-esm/src/MappedTypes/ImplicitFieldInjector.js +0 -2
- package/lib-esm/src/MappedTypes/MapSecondaryIndexes.d.ts.map +0 -1
- package/lib-esm/src/MappedTypes/ModelMetadata.d.ts.map +0 -1
- package/lib-esm/src/MappedTypes/ResolveFieldProperties.d.ts.map +0 -1
- package/lib-esm/src/MappedTypes/ResolveFieldProperties.js +0 -2
- package/lib-esm/src/MappedTypes/ResolveSchema.d.ts.map +0 -1
- package/lib-esm/src/ModelField.d.ts.map +0 -1
- package/lib-esm/src/ModelIndex.d.ts.map +0 -1
- package/lib-esm/src/ModelRelationalField.d.ts.map +0 -1
- package/lib-esm/src/ModelSchema.d.ts.map +0 -1
- package/lib-esm/src/ModelType.d.ts.map +0 -1
- package/lib-esm/src/RefType.d.ts.map +0 -1
- package/lib-esm/src/SchemaProcessor.d.ts.map +0 -1
- package/lib-esm/src/index.d.ts.map +0 -1
- package/lib-esm/src/internals/index.d.ts +0 -2
- package/lib-esm/src/internals/index.d.ts.map +0 -1
- package/lib-esm/src/util/Brand.d.ts.map +0 -1
- package/lib-esm/src/util/IndexLimit.d.ts.map +0 -1
- package/lib-esm/src/util/SpreadTuple.d.ts.map +0 -1
- package/lib-esm/src/util/index.d.ts.map +0 -1
- 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']>>;
|