@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,150 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import {
|
|
4
|
+
AmplifyServer,
|
|
5
|
+
AuthModeParams,
|
|
6
|
+
BaseClient,
|
|
7
|
+
BaseBrowserClient,
|
|
8
|
+
BaseSSRClient,
|
|
9
|
+
ClientInternalsGetter,
|
|
10
|
+
GraphQLOptions,
|
|
11
|
+
GraphQLResult,
|
|
12
|
+
ListArgs,
|
|
13
|
+
ModelIntrospectionSchema,
|
|
14
|
+
SchemaModel,
|
|
15
|
+
QueryArgs,
|
|
16
|
+
} from '../../bridge-types';
|
|
17
|
+
|
|
18
|
+
import {
|
|
19
|
+
ModelOperation,
|
|
20
|
+
authModeParams,
|
|
21
|
+
buildGraphQLVariables,
|
|
22
|
+
flattenItems,
|
|
23
|
+
generateGraphQLDocument,
|
|
24
|
+
getCustomHeaders,
|
|
25
|
+
initializeModel,
|
|
26
|
+
} from '../APIClient';
|
|
27
|
+
|
|
28
|
+
export function getFactory(
|
|
29
|
+
client: BaseClient,
|
|
30
|
+
modelIntrospection: ModelIntrospectionSchema,
|
|
31
|
+
model: SchemaModel,
|
|
32
|
+
operation: ModelOperation,
|
|
33
|
+
getInternals: ClientInternalsGetter,
|
|
34
|
+
useContext = false,
|
|
35
|
+
) {
|
|
36
|
+
const getWithContext = async (
|
|
37
|
+
contextSpec: AmplifyServer.ContextSpec & GraphQLOptions,
|
|
38
|
+
arg?: any,
|
|
39
|
+
options?: any,
|
|
40
|
+
) => {
|
|
41
|
+
return _get(
|
|
42
|
+
client,
|
|
43
|
+
modelIntrospection,
|
|
44
|
+
model,
|
|
45
|
+
arg,
|
|
46
|
+
options,
|
|
47
|
+
operation,
|
|
48
|
+
getInternals,
|
|
49
|
+
contextSpec,
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const get = async (arg?: any, options?: any) => {
|
|
54
|
+
return _get(
|
|
55
|
+
client,
|
|
56
|
+
modelIntrospection,
|
|
57
|
+
model,
|
|
58
|
+
arg,
|
|
59
|
+
options,
|
|
60
|
+
operation,
|
|
61
|
+
getInternals,
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
return useContext ? getWithContext : get;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function _get(
|
|
69
|
+
client: BaseClient,
|
|
70
|
+
modelIntrospection: ModelIntrospectionSchema,
|
|
71
|
+
model: SchemaModel,
|
|
72
|
+
arg: QueryArgs,
|
|
73
|
+
options: AuthModeParams & ListArgs,
|
|
74
|
+
operation: ModelOperation,
|
|
75
|
+
getInternals: ClientInternalsGetter,
|
|
76
|
+
context?: AmplifyServer.ContextSpec,
|
|
77
|
+
) {
|
|
78
|
+
const { name } = model;
|
|
79
|
+
|
|
80
|
+
const query = generateGraphQLDocument(
|
|
81
|
+
modelIntrospection,
|
|
82
|
+
name,
|
|
83
|
+
operation,
|
|
84
|
+
options,
|
|
85
|
+
);
|
|
86
|
+
const variables = buildGraphQLVariables(
|
|
87
|
+
model,
|
|
88
|
+
operation,
|
|
89
|
+
arg,
|
|
90
|
+
modelIntrospection,
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
const auth = authModeParams(client, getInternals, options);
|
|
95
|
+
|
|
96
|
+
const headers = getCustomHeaders(client, getInternals, options?.headers);
|
|
97
|
+
|
|
98
|
+
const { data, extensions } = context
|
|
99
|
+
? ((await (client as BaseSSRClient).graphql(
|
|
100
|
+
context,
|
|
101
|
+
{
|
|
102
|
+
...auth,
|
|
103
|
+
query,
|
|
104
|
+
variables,
|
|
105
|
+
},
|
|
106
|
+
headers,
|
|
107
|
+
)) as GraphQLResult)
|
|
108
|
+
: ((await (client as BaseBrowserClient).graphql(
|
|
109
|
+
{
|
|
110
|
+
...auth,
|
|
111
|
+
query,
|
|
112
|
+
variables,
|
|
113
|
+
},
|
|
114
|
+
headers,
|
|
115
|
+
)) as GraphQLResult);
|
|
116
|
+
|
|
117
|
+
// flatten response
|
|
118
|
+
if (data) {
|
|
119
|
+
const [key] = Object.keys(data);
|
|
120
|
+
const flattenedResult = flattenItems(data)[key];
|
|
121
|
+
|
|
122
|
+
if (options?.selectionSet) {
|
|
123
|
+
return { data: flattenedResult, extensions };
|
|
124
|
+
} else {
|
|
125
|
+
// TODO: refactor to avoid destructuring here
|
|
126
|
+
const [initialized] = initializeModel(
|
|
127
|
+
client,
|
|
128
|
+
name,
|
|
129
|
+
[flattenedResult],
|
|
130
|
+
modelIntrospection,
|
|
131
|
+
auth.authMode,
|
|
132
|
+
auth.authToken,
|
|
133
|
+
!!context,
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
return { data: initialized, extensions };
|
|
137
|
+
}
|
|
138
|
+
} else {
|
|
139
|
+
return { data: null, extensions };
|
|
140
|
+
}
|
|
141
|
+
} catch (error: any) {
|
|
142
|
+
if (error.errors) {
|
|
143
|
+
// graphql errors pass through
|
|
144
|
+
return error as any;
|
|
145
|
+
} else {
|
|
146
|
+
// non-graphql errors re re-thrown
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import {
|
|
4
|
+
AmplifyServer,
|
|
5
|
+
AuthModeParams,
|
|
6
|
+
BaseClient,
|
|
7
|
+
ClientInternalsGetter,
|
|
8
|
+
GraphQLResult,
|
|
9
|
+
ListArgs,
|
|
10
|
+
ModelIntrospectionSchema,
|
|
11
|
+
SchemaModel,
|
|
12
|
+
QueryArgs,
|
|
13
|
+
} from '../../bridge-types';
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
authModeParams,
|
|
17
|
+
buildGraphQLVariables,
|
|
18
|
+
flattenItems,
|
|
19
|
+
generateGraphQLDocument,
|
|
20
|
+
getCustomHeaders,
|
|
21
|
+
initializeModel,
|
|
22
|
+
} from '../APIClient';
|
|
23
|
+
|
|
24
|
+
export interface IndexMeta {
|
|
25
|
+
queryField: string;
|
|
26
|
+
pk: string;
|
|
27
|
+
sk?: string[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function indexQueryFactory(
|
|
31
|
+
client: BaseClient,
|
|
32
|
+
modelIntrospection: ModelIntrospectionSchema,
|
|
33
|
+
model: SchemaModel,
|
|
34
|
+
indexMeta: IndexMeta,
|
|
35
|
+
getInternals: ClientInternalsGetter,
|
|
36
|
+
context = false,
|
|
37
|
+
) {
|
|
38
|
+
const indexQueryWithContext = async (
|
|
39
|
+
contextSpec: AmplifyServer.ContextSpec,
|
|
40
|
+
args: QueryArgs,
|
|
41
|
+
options?: ListArgs,
|
|
42
|
+
) => {
|
|
43
|
+
return _indexQuery(
|
|
44
|
+
client,
|
|
45
|
+
modelIntrospection,
|
|
46
|
+
model,
|
|
47
|
+
indexMeta,
|
|
48
|
+
getInternals,
|
|
49
|
+
{
|
|
50
|
+
...args,
|
|
51
|
+
...options,
|
|
52
|
+
},
|
|
53
|
+
contextSpec,
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const indexQuery = async (args: QueryArgs, options?: ListArgs) => {
|
|
58
|
+
return _indexQuery(
|
|
59
|
+
client,
|
|
60
|
+
modelIntrospection,
|
|
61
|
+
model,
|
|
62
|
+
indexMeta,
|
|
63
|
+
getInternals,
|
|
64
|
+
{
|
|
65
|
+
...args,
|
|
66
|
+
...options,
|
|
67
|
+
},
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
return context ? indexQueryWithContext : indexQuery;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function processGraphQlResponse(
|
|
75
|
+
result: GraphQLResult,
|
|
76
|
+
selectionSet: undefined | string[],
|
|
77
|
+
modelInitializer: (flattenedResult: any[]) => any[],
|
|
78
|
+
) {
|
|
79
|
+
const { data, extensions } = result;
|
|
80
|
+
|
|
81
|
+
const [key] = Object.keys(data);
|
|
82
|
+
|
|
83
|
+
if (data[key].items) {
|
|
84
|
+
const flattenedResult = flattenItems(data)[key];
|
|
85
|
+
|
|
86
|
+
return {
|
|
87
|
+
data: selectionSet ? flattenedResult : modelInitializer(flattenedResult),
|
|
88
|
+
nextToken: data[key].nextToken,
|
|
89
|
+
extensions,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
data: data[key],
|
|
95
|
+
nextToken: data[key].nextToken,
|
|
96
|
+
extensions,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function handleGraphQlError(error: any) {
|
|
101
|
+
if (error.errors) {
|
|
102
|
+
// graphql errors pass through
|
|
103
|
+
return error as any;
|
|
104
|
+
} else {
|
|
105
|
+
// non-graphql errors re re-thrown
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async function _indexQuery(
|
|
111
|
+
client: BaseClient,
|
|
112
|
+
modelIntrospection: ModelIntrospectionSchema,
|
|
113
|
+
model: SchemaModel,
|
|
114
|
+
indexMeta: IndexMeta,
|
|
115
|
+
getInternals: ClientInternalsGetter,
|
|
116
|
+
args?: ListArgs & AuthModeParams,
|
|
117
|
+
contextSpec?: AmplifyServer.ContextSpec,
|
|
118
|
+
) {
|
|
119
|
+
const { name } = model;
|
|
120
|
+
|
|
121
|
+
const query = generateGraphQLDocument(
|
|
122
|
+
modelIntrospection,
|
|
123
|
+
name,
|
|
124
|
+
'INDEX_QUERY',
|
|
125
|
+
args,
|
|
126
|
+
indexMeta,
|
|
127
|
+
);
|
|
128
|
+
const variables = buildGraphQLVariables(
|
|
129
|
+
model,
|
|
130
|
+
'INDEX_QUERY',
|
|
131
|
+
args,
|
|
132
|
+
modelIntrospection,
|
|
133
|
+
indexMeta,
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
const auth = authModeParams(client, getInternals, args);
|
|
137
|
+
|
|
138
|
+
const modelInitializer = (flattenedResult: any[]) =>
|
|
139
|
+
initializeModel(
|
|
140
|
+
client,
|
|
141
|
+
name,
|
|
142
|
+
flattenedResult,
|
|
143
|
+
modelIntrospection,
|
|
144
|
+
auth.authMode,
|
|
145
|
+
auth.authToken,
|
|
146
|
+
!!contextSpec,
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
const headers = getCustomHeaders(client, getInternals, args?.headers);
|
|
151
|
+
|
|
152
|
+
const graphQlParams = {
|
|
153
|
+
...auth,
|
|
154
|
+
query,
|
|
155
|
+
variables,
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
const requestArgs: [any, any] = [graphQlParams, headers];
|
|
159
|
+
|
|
160
|
+
if (contextSpec !== undefined) {
|
|
161
|
+
requestArgs.unshift(contextSpec);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const response = (await (client as BaseClient).graphql(
|
|
165
|
+
...requestArgs,
|
|
166
|
+
)) as GraphQLResult;
|
|
167
|
+
|
|
168
|
+
if (response.data !== undefined) {
|
|
169
|
+
return processGraphQlResponse(
|
|
170
|
+
response,
|
|
171
|
+
args?.selectionSet,
|
|
172
|
+
modelInitializer,
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
} catch (error: any) {
|
|
176
|
+
return handleGraphQlError(error);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import {
|
|
4
|
+
AmplifyServer,
|
|
5
|
+
AuthModeParams,
|
|
6
|
+
BaseClient,
|
|
7
|
+
BaseBrowserClient,
|
|
8
|
+
BaseSSRClient,
|
|
9
|
+
ClientInternalsGetter,
|
|
10
|
+
GraphQLResult,
|
|
11
|
+
ListArgs,
|
|
12
|
+
ModelIntrospectionSchema,
|
|
13
|
+
SchemaModel,
|
|
14
|
+
} from '../../bridge-types';
|
|
15
|
+
|
|
16
|
+
import {
|
|
17
|
+
authModeParams,
|
|
18
|
+
buildGraphQLVariables,
|
|
19
|
+
flattenItems,
|
|
20
|
+
generateGraphQLDocument,
|
|
21
|
+
getCustomHeaders,
|
|
22
|
+
initializeModel,
|
|
23
|
+
} from '../APIClient';
|
|
24
|
+
|
|
25
|
+
export function listFactory(
|
|
26
|
+
client: BaseClient,
|
|
27
|
+
modelIntrospection: ModelIntrospectionSchema,
|
|
28
|
+
model: SchemaModel,
|
|
29
|
+
getInternals: ClientInternalsGetter,
|
|
30
|
+
context = false,
|
|
31
|
+
) {
|
|
32
|
+
const listWithContext = async (
|
|
33
|
+
contextSpec: AmplifyServer.ContextSpec,
|
|
34
|
+
args?: ListArgs,
|
|
35
|
+
) => {
|
|
36
|
+
return _list(
|
|
37
|
+
client,
|
|
38
|
+
modelIntrospection,
|
|
39
|
+
model,
|
|
40
|
+
getInternals,
|
|
41
|
+
args,
|
|
42
|
+
contextSpec,
|
|
43
|
+
);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const list = async (args?: Record<string, any>) => {
|
|
47
|
+
return _list(client, modelIntrospection, model, getInternals, args);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
return context ? listWithContext : list;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async function _list(
|
|
54
|
+
client: BaseClient,
|
|
55
|
+
modelIntrospection: ModelIntrospectionSchema,
|
|
56
|
+
model: SchemaModel,
|
|
57
|
+
getInternals: ClientInternalsGetter,
|
|
58
|
+
args?: ListArgs & AuthModeParams,
|
|
59
|
+
contextSpec?: AmplifyServer.ContextSpec,
|
|
60
|
+
) {
|
|
61
|
+
const { name } = model;
|
|
62
|
+
|
|
63
|
+
const query = generateGraphQLDocument(modelIntrospection, name, 'LIST', args);
|
|
64
|
+
const variables = buildGraphQLVariables(
|
|
65
|
+
model,
|
|
66
|
+
'LIST',
|
|
67
|
+
args,
|
|
68
|
+
modelIntrospection,
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
const auth = authModeParams(client, getInternals, args);
|
|
73
|
+
|
|
74
|
+
const headers = getCustomHeaders(client, getInternals, args?.headers);
|
|
75
|
+
|
|
76
|
+
const { data, extensions } = contextSpec
|
|
77
|
+
? ((await (client as BaseSSRClient).graphql(
|
|
78
|
+
contextSpec,
|
|
79
|
+
{
|
|
80
|
+
...auth,
|
|
81
|
+
query,
|
|
82
|
+
variables,
|
|
83
|
+
},
|
|
84
|
+
headers,
|
|
85
|
+
)) as GraphQLResult)
|
|
86
|
+
: ((await (client as BaseBrowserClient).graphql(
|
|
87
|
+
{
|
|
88
|
+
...auth,
|
|
89
|
+
query,
|
|
90
|
+
variables,
|
|
91
|
+
},
|
|
92
|
+
headers,
|
|
93
|
+
)) as GraphQLResult);
|
|
94
|
+
|
|
95
|
+
// flatten response
|
|
96
|
+
if (data !== undefined) {
|
|
97
|
+
const [key] = Object.keys(data);
|
|
98
|
+
|
|
99
|
+
if (data[key].items) {
|
|
100
|
+
const flattenedResult = flattenItems(data)[key];
|
|
101
|
+
|
|
102
|
+
// don't init if custom selection set
|
|
103
|
+
if (args?.selectionSet) {
|
|
104
|
+
return {
|
|
105
|
+
data: flattenedResult,
|
|
106
|
+
nextToken: data[key].nextToken,
|
|
107
|
+
extensions,
|
|
108
|
+
};
|
|
109
|
+
} else {
|
|
110
|
+
const initialized = initializeModel(
|
|
111
|
+
client,
|
|
112
|
+
name,
|
|
113
|
+
flattenedResult,
|
|
114
|
+
modelIntrospection,
|
|
115
|
+
auth.authMode,
|
|
116
|
+
auth.authToken,
|
|
117
|
+
!!contextSpec,
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
return {
|
|
121
|
+
data: initialized,
|
|
122
|
+
nextToken: data[key].nextToken,
|
|
123
|
+
extensions,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return {
|
|
129
|
+
data: data[key],
|
|
130
|
+
nextToken: data[key].nextToken,
|
|
131
|
+
extensions,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
} catch (error: any) {
|
|
135
|
+
if (error.errors) {
|
|
136
|
+
// graphql errors pass through
|
|
137
|
+
return error as any;
|
|
138
|
+
} else {
|
|
139
|
+
// non-graphql errors re re-thrown
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { SchemaModel } from '../../bridge-types';
|
|
5
|
+
|
|
6
|
+
import { findIndexByFields, resolvePKFields } from '../../utils';
|
|
7
|
+
|
|
8
|
+
export function observeQueryFactory(models: any, model: SchemaModel) {
|
|
9
|
+
const { name } = model;
|
|
10
|
+
|
|
11
|
+
const observeQuery = (arg?: any) =>
|
|
12
|
+
new Observable((subscriber) => {
|
|
13
|
+
// what we'll be sending to our subscribers
|
|
14
|
+
const items: object[] = [];
|
|
15
|
+
|
|
16
|
+
// To enqueue subscription messages while we collect our initial
|
|
17
|
+
// result set.
|
|
18
|
+
const messageQueue = [] as {
|
|
19
|
+
type: 'create' | 'update' | 'delete';
|
|
20
|
+
item: object;
|
|
21
|
+
}[];
|
|
22
|
+
|
|
23
|
+
// operation to take when message(s) arrive.
|
|
24
|
+
// this operation will be swapped out once initial "sync" is complete
|
|
25
|
+
// to immediately ingest messsages.
|
|
26
|
+
let receiveMessages = (...messages: typeof messageQueue) => {
|
|
27
|
+
return messageQueue.push(...messages);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// start subscriptions
|
|
31
|
+
const onCreateSub = models[name].onCreate(arg).subscribe({
|
|
32
|
+
next(item: object) {
|
|
33
|
+
receiveMessages({ item, type: 'create' });
|
|
34
|
+
},
|
|
35
|
+
error(error: any) {
|
|
36
|
+
subscriber.error({ type: 'onCreate', error });
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
const onUpdateSub = models[name].onUpdate(arg).subscribe({
|
|
40
|
+
next(item: object) {
|
|
41
|
+
receiveMessages({ item, type: 'update' });
|
|
42
|
+
},
|
|
43
|
+
error(error: any) {
|
|
44
|
+
subscriber.error({ type: 'onUpdate', error });
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
const onDeleteSub = models[name].onDelete(arg).subscribe({
|
|
48
|
+
next(item: object) {
|
|
49
|
+
receiveMessages({ item, type: 'delete' });
|
|
50
|
+
},
|
|
51
|
+
error(error: any) {
|
|
52
|
+
subscriber.error({ type: 'onDelete', error });
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// consumes a list of messages and sends a snapshot
|
|
57
|
+
function ingestMessages(messages: typeof messageQueue) {
|
|
58
|
+
for (const message of messages) {
|
|
59
|
+
const idx = findIndexByFields(message.item, items, pkFields as any);
|
|
60
|
+
switch (message.type) {
|
|
61
|
+
case 'create':
|
|
62
|
+
if (idx < 0) items.push(message.item);
|
|
63
|
+
break;
|
|
64
|
+
case 'update':
|
|
65
|
+
if (idx >= 0) items[idx] = message.item;
|
|
66
|
+
break;
|
|
67
|
+
case 'delete':
|
|
68
|
+
if (idx >= 0) items.splice(idx, 1);
|
|
69
|
+
break;
|
|
70
|
+
default:
|
|
71
|
+
console.error('Unrecognized message in observeQuery.', message);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
subscriber.next({
|
|
75
|
+
items,
|
|
76
|
+
isSynced: true,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const pkFields = resolvePKFields(model);
|
|
81
|
+
|
|
82
|
+
// initial results
|
|
83
|
+
(async () => {
|
|
84
|
+
let firstPage = true;
|
|
85
|
+
let nextToken: string | null = null;
|
|
86
|
+
while (!subscriber.closed && (firstPage || nextToken)) {
|
|
87
|
+
firstPage = false;
|
|
88
|
+
|
|
89
|
+
const {
|
|
90
|
+
data: page,
|
|
91
|
+
errors,
|
|
92
|
+
nextToken: _nextToken,
|
|
93
|
+
}: {
|
|
94
|
+
data: any;
|
|
95
|
+
errors: any;
|
|
96
|
+
nextToken: string | null;
|
|
97
|
+
} = await models[name].list({ ...arg, nextToken });
|
|
98
|
+
nextToken = _nextToken;
|
|
99
|
+
|
|
100
|
+
items.push(...page);
|
|
101
|
+
|
|
102
|
+
// if there are no more pages and no items we already know about
|
|
103
|
+
// that need to be merged in from sub, we're "synced"
|
|
104
|
+
const isSynced =
|
|
105
|
+
messageQueue.length === 0 &&
|
|
106
|
+
(nextToken === null || nextToken === undefined);
|
|
107
|
+
|
|
108
|
+
subscriber.next({
|
|
109
|
+
items,
|
|
110
|
+
isSynced,
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
if (Array.isArray(errors)) {
|
|
114
|
+
for (const error of errors) {
|
|
115
|
+
subscriber.error(error);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// play through the queue
|
|
121
|
+
if (messageQueue.length > 0) {
|
|
122
|
+
ingestMessages(messageQueue);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// switch the queue to write directly to the items collection
|
|
126
|
+
receiveMessages = (...messages: typeof messageQueue) => {
|
|
127
|
+
ingestMessages(messages);
|
|
128
|
+
|
|
129
|
+
return items.length;
|
|
130
|
+
};
|
|
131
|
+
})();
|
|
132
|
+
|
|
133
|
+
// when subscriber unsubscribes, tear down internal subs
|
|
134
|
+
return () => {
|
|
135
|
+
// 1. tear down internal subs
|
|
136
|
+
onCreateSub.unsubscribe();
|
|
137
|
+
onUpdateSub.unsubscribe();
|
|
138
|
+
onDeleteSub.unsubscribe();
|
|
139
|
+
|
|
140
|
+
// 2. there is no need to explicitly stop paging. instead, we
|
|
141
|
+
// just check `subscriber.closed` above before fetching each page.
|
|
142
|
+
};
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
return observeQuery;
|
|
146
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { map } from 'rxjs';
|
|
5
|
+
import {
|
|
6
|
+
BaseBrowserClient,
|
|
7
|
+
ClientInternalsGetter,
|
|
8
|
+
GraphqlSubscriptionResult,
|
|
9
|
+
ModelIntrospectionSchema,
|
|
10
|
+
SchemaModel,
|
|
11
|
+
} from '../../bridge-types';
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
ModelOperation,
|
|
15
|
+
authModeParams,
|
|
16
|
+
buildGraphQLVariables,
|
|
17
|
+
generateGraphQLDocument,
|
|
18
|
+
getCustomHeaders,
|
|
19
|
+
initializeModel,
|
|
20
|
+
} from '../APIClient';
|
|
21
|
+
|
|
22
|
+
export function subscriptionFactory(
|
|
23
|
+
client: BaseBrowserClient,
|
|
24
|
+
modelIntrospection: ModelIntrospectionSchema,
|
|
25
|
+
model: SchemaModel,
|
|
26
|
+
operation: ModelOperation,
|
|
27
|
+
getInternals: ClientInternalsGetter,
|
|
28
|
+
) {
|
|
29
|
+
const { name } = model as any;
|
|
30
|
+
|
|
31
|
+
const subscription = (args?: Record<string, any>) => {
|
|
32
|
+
const query = generateGraphQLDocument(
|
|
33
|
+
modelIntrospection,
|
|
34
|
+
name,
|
|
35
|
+
operation,
|
|
36
|
+
args,
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const variables = buildGraphQLVariables(
|
|
40
|
+
model,
|
|
41
|
+
operation,
|
|
42
|
+
args,
|
|
43
|
+
modelIntrospection,
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const auth = authModeParams(client, getInternals, args);
|
|
47
|
+
|
|
48
|
+
const headers = getCustomHeaders(client, getInternals, args?.headers);
|
|
49
|
+
|
|
50
|
+
const observable = client.graphql(
|
|
51
|
+
{
|
|
52
|
+
...auth,
|
|
53
|
+
query,
|
|
54
|
+
variables,
|
|
55
|
+
},
|
|
56
|
+
headers,
|
|
57
|
+
) as GraphqlSubscriptionResult;
|
|
58
|
+
|
|
59
|
+
return observable.pipe(
|
|
60
|
+
map((value) => {
|
|
61
|
+
const [key] = Object.keys(value.data);
|
|
62
|
+
const data = (value.data as any)[key];
|
|
63
|
+
const [initialized] = initializeModel(
|
|
64
|
+
client,
|
|
65
|
+
name,
|
|
66
|
+
[data],
|
|
67
|
+
modelIntrospection,
|
|
68
|
+
auth.authMode,
|
|
69
|
+
auth.authToken,
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
return initialized;
|
|
73
|
+
}),
|
|
74
|
+
);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
return subscription;
|
|
78
|
+
}
|