@aws-amplify/graphql-api-construct 1.4.2 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- package/.jsii +367 -278
- package/API.md +14 -3
- package/CHANGELOG.md +18 -0
- package/README.md +210 -20
- package/lib/amplify-dynamodb-table-wrapper.js +1 -1
- package/lib/amplify-graphql-api.d.ts +0 -7
- package/lib/amplify-graphql-api.js +18 -65
- package/lib/amplify-graphql-definition.d.ts +4 -15
- package/lib/amplify-graphql-definition.js +33 -30
- package/lib/index.d.ts +2 -1
- package/lib/index.js +16 -1
- package/lib/internal/data-source-config.d.ts +22 -9
- package/lib/internal/data-source-config.js +150 -39
- package/lib/internal/model-type-name.d.ts +3 -3
- package/lib/internal/model-type-name.js +7 -7
- package/lib/model-datasource-strategy-types.d.ts +122 -0
- package/lib/model-datasource-strategy-types.js +10 -0
- package/lib/sql-model-datasource-strategy.d.ts +1 -1
- package/lib/sql-model-datasource-strategy.js +4 -4
- package/lib/types.d.ts +12 -119
- package/lib/types.js +1 -1
- package/node_modules/@aws-amplify/graphql-auth-transformer/CHANGELOG.md +10 -0
- package/node_modules/@aws-amplify/graphql-auth-transformer/lib/graphql-auth-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-auth-transformer/lib/graphql-auth-transformer.js +6 -10
- package/node_modules/@aws-amplify/graphql-auth-transformer/lib/graphql-auth-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-auth-transformer/lib/utils/validations.js +1 -1
- package/node_modules/@aws-amplify/graphql-auth-transformer/package.json +16 -12
- package/node_modules/@aws-amplify/graphql-default-value-transformer/CHANGELOG.md +10 -0
- package/node_modules/@aws-amplify/graphql-default-value-transformer/lib/graphql-default-value-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-default-value-transformer/lib/graphql-default-value-transformer.js +2 -7
- package/node_modules/@aws-amplify/graphql-default-value-transformer/lib/graphql-default-value-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-default-value-transformer/package.json +13 -9
- package/node_modules/@aws-amplify/graphql-function-transformer/CHANGELOG.md +10 -0
- package/node_modules/@aws-amplify/graphql-function-transformer/lib/graphql-function-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-function-transformer/lib/graphql-function-transformer.js +7 -0
- package/node_modules/@aws-amplify/graphql-function-transformer/lib/graphql-function-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-function-transformer/package.json +11 -7
- package/node_modules/@aws-amplify/graphql-http-transformer/CHANGELOG.md +8 -0
- package/node_modules/@aws-amplify/graphql-http-transformer/package.json +11 -7
- package/node_modules/@aws-amplify/graphql-index-transformer/CHANGELOG.md +10 -0
- package/node_modules/@aws-amplify/graphql-index-transformer/lib/graphql-primary-key-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-index-transformer/lib/graphql-primary-key-transformer.js +4 -4
- package/node_modules/@aws-amplify/graphql-index-transformer/lib/graphql-primary-key-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-index-transformer/lib/resolvers/resolvers.d.ts +3 -5
- package/node_modules/@aws-amplify/graphql-index-transformer/lib/resolvers/resolvers.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-index-transformer/lib/resolvers/resolvers.js +12 -34
- package/node_modules/@aws-amplify/graphql-index-transformer/lib/resolvers/resolvers.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-index-transformer/package.json +13 -9
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/CHANGELOG.md +10 -0
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/assets/mapping-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/graphql-maps-to-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/graphql-maps-to-transformer.js +3 -4
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/graphql-maps-to-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/graphql-refers-to-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/graphql-refers-to-transformer.js +3 -3
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/graphql-refers-to-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/package.json +16 -12
- package/node_modules/@aws-amplify/graphql-model-transformer/API.md +16 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/CHANGELOG.md +13 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/graphql-model-transformer.d.ts +1 -3
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/graphql-model-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/graphql-model-transformer.js +61 -68
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/graphql-model-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/index.d.ts +1 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/index.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/index.js +3 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/index.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-notification-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-patching-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/resolver.d.ts +8 -8
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/resolver.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/resolver.js +32 -36
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/resolver.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/rds-model-resource-generator.d.ts +3 -2
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/rds-model-resource-generator.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/rds-model-resource-generator.js +70 -34
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/rds-model-resource-generator.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/package.json +15 -10
- package/node_modules/@aws-amplify/graphql-predictions-transformer/CHANGELOG.md +8 -0
- package/node_modules/@aws-amplify/graphql-predictions-transformer/lib/predictionsLambdaFunction.zip +0 -0
- package/node_modules/@aws-amplify/graphql-predictions-transformer/package.json +11 -7
- package/node_modules/@aws-amplify/graphql-relational-transformer/API.md +2 -2
- package/node_modules/@aws-amplify/graphql-relational-transformer/CHANGELOG.md +12 -0
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-belongs-to-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-belongs-to-transformer.js +14 -7
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-belongs-to-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-many-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-many-transformer.js +6 -6
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-many-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-one-transformer.js +6 -6
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-one-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-many-to-many-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-many-to-many-transformer.js +8 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-many-to-many-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/ddb-generator.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/ddb-generator.js +5 -3
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/ddb-generator.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/generator-factory.d.ts +2 -2
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/generator-factory.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/generator-factory.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/rds-generator.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/rds-generator.js +18 -6
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/rds-generator.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.d.ts +18 -18
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.js +54 -54
- package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-relational-transformer/package.json +14 -10
- package/node_modules/@aws-amplify/graphql-searchable-transformer/CHANGELOG.md +10 -0
- package/node_modules/@aws-amplify/graphql-searchable-transformer/lib/graphql-searchable-transformer.js +1 -1
- package/node_modules/@aws-amplify/graphql-searchable-transformer/lib/streaming-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-searchable-transformer/package.json +12 -8
- package/node_modules/@aws-amplify/graphql-sql-transformer/CHANGELOG.md +12 -0
- package/node_modules/@aws-amplify/graphql-sql-transformer/lib/graphql-sql-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-sql-transformer/lib/graphql-sql-transformer.js +32 -12
- package/node_modules/@aws-amplify/graphql-sql-transformer/lib/graphql-sql-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-sql-transformer/package.json +12 -8
- package/node_modules/@aws-amplify/graphql-transformer/API.md +4 -16
- package/node_modules/@aws-amplify/graphql-transformer/CHANGELOG.md +10 -0
- package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.d.ts +4 -13
- package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.js +8 -14
- package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer/package.json +20 -16
- package/node_modules/@aws-amplify/graphql-transformer/src/graphql-transformer.ts +30 -54
- package/node_modules/@aws-amplify/graphql-transformer-core/API.md +128 -31
- package/node_modules/@aws-amplify/graphql-transformer-core/CHANGELOG.md +13 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.d.ts +3 -3
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.js +34 -16
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/index.d.ts +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/index.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/index.js +4 -2
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/index.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/transform.d.ts +6 -12
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/transform.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/transform.js +16 -5
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/transform.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/types.d.ts +0 -8
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/types.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/utils.d.ts +12 -10
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/utils.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/utils.js +94 -39
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/utils.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/index.d.ts +18 -12
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/index.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/index.js +13 -15
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/index.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/import-appsync-api-types.d.ts +1 -4
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/import-appsync-api-types.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/import-appsync-api-types.js +1 -4
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/import-appsync-api-types.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/index.d.ts +2 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/index.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/index.js +16 -4
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/index.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/model-datasource-strategies.d.ts +7 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/model-datasource-strategies.d.ts.map +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/model-datasource-strategies.js +15 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/model-datasource-strategies.js.map +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/types/types.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/graphql-utils.d.ts +28 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/graphql-utils.d.ts.map +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/graphql-utils.js +39 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/graphql-utils.js.map +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/index.d.ts +5 -4
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/index.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/index.js +21 -12
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/index.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/model-datasource-strategy-utils.d.ts +14 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/model-datasource-strategy-utils.d.ts.map +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/model-datasource-strategy-utils.js +96 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/model-datasource-strategy-utils.js.map +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/rds-util.d.ts +0 -10
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/rds-util.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/rds-util.js +1 -58
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/rds-util.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/resource-name.d.ts +22 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/resource-name.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/resource-name.js +28 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/resource-name.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/schema-utils.d.ts +2 -2
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/schema-utils.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/schema-utils.js +7 -6
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/schema-utils.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/package.json +9 -5
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/API.md +88 -40
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/CHANGELOG.md +10 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/LICENSE +201 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/graphql-api-provider.d.ts +0 -17
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/graphql-api-provider.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/graphql-api-provider.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/index.d.ts +2 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/index.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/index.js +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/index.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/index.d.ts +2 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/index.d.ts.map +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/index.js +18 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/index.js.map +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.d.ts +59 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.d.ts.map +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.js +3 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.js.map +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transform-host-provider.d.ts +2 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transform-host-provider.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transformer-context/index.d.ts +2 -2
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transformer-context/index.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transformer-context/index.js +1 -3
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transformer-context/index.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transformer-context/transformer-context-provider.d.ts +12 -17
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transformer-context/transformer-context-provider.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transformer-context/transformer-datasource-provider.d.ts +0 -15
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transformer-context/transformer-datasource-provider.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transformer-context/transformer-datasource-provider.js +1 -10
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/transformer-context/transformer-datasource-provider.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/package.json +8 -3
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/graphql-api-provider.ts +1 -41
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/index.ts +1 -4
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/model-datasource/index.ts +1 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/model-datasource/types.ts +195 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/transform-host-provider.ts +1 -1
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/transformer-context/index.ts +4 -9
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/transformer-context/transformer-context-provider.ts +15 -23
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/transformer-context/transformer-datasource-provider.ts +0 -43
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/tsconfig.tsbuildinfo +1 -1
- package/node_modules/graphql-mapping-template/CHANGELOG.md +4 -0
- package/node_modules/graphql-mapping-template/LICENSE +201 -0
- package/node_modules/graphql-mapping-template/package.json +8 -3
- package/node_modules/graphql-transformer-common/API.md +0 -15
- package/node_modules/graphql-transformer-common/CHANGELOG.md +6 -0
- package/node_modules/graphql-transformer-common/lib/ResourceConstants.d.ts +0 -15
- package/node_modules/graphql-transformer-common/lib/ResourceConstants.d.ts.map +1 -1
- package/node_modules/graphql-transformer-common/lib/ResourceConstants.js +0 -15
- package/node_modules/graphql-transformer-common/lib/ResourceConstants.js.map +1 -1
- package/node_modules/graphql-transformer-common/package.json +7 -3
- package/package.json +24 -19
- package/src/amplify-graphql-api.ts +19 -76
- package/src/amplify-graphql-definition.ts +47 -30
- package/src/index.ts +2 -10
- package/src/internal/data-source-config.ts +195 -47
- package/src/internal/model-type-name.ts +5 -4
- package/src/model-datasource-strategy-types.ts +157 -0
- package/src/sql-model-datasource-strategy.ts +3 -3
- package/src/types.ts +13 -144
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/provision-strategy-utils.d.ts +0 -3
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/provision-strategy-utils.d.ts.map +0 -1
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/provision-strategy-utils.js +0 -15
- package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/provision-strategy-utils.js.map +0 -1
@@ -1,49 +1,160 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
4
|
-
|
5
|
-
const
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
3
|
+
exports.validateDataSourceStrategy = exports.schemaByMergingDefinitions = exports.getDataSourceStrategiesProvider = exports.constructCustomSqlDataSourceStrategies = void 0;
|
4
|
+
const graphql_1 = require("graphql");
|
5
|
+
const graphql_transformer_core_1 = require("@aws-amplify/graphql-transformer-core");
|
6
|
+
/**
|
7
|
+
* Creates an interface flavor of customSqlDataSourceStrategies from a factory method's schema and data source. Internally, this function
|
8
|
+
* scans the fields of `Query` and `Mutation` looking for fields annotated with the `@sql` directive and designates the specified
|
9
|
+
* dataSourceStrategy to fulfill those custom queries.
|
10
|
+
*
|
11
|
+
* Note that we do not scan for `Subscription` fields: `@sql` directives are not allowed on those, and it wouldn't make sense to do so
|
12
|
+
* anyway, since subscriptions are processed from an incoming Mutation, not as the result of a direct datasource access.
|
13
|
+
*/
|
14
|
+
const constructCustomSqlDataSourceStrategies = (schema, dataSourceStrategy) => {
|
15
|
+
if (!(0, graphql_transformer_core_1.isSqlStrategy)(dataSourceStrategy)) {
|
16
|
+
return [];
|
17
|
+
}
|
18
|
+
const parsedSchema = (0, graphql_1.parse)(schema);
|
19
|
+
const queryNode = parsedSchema.definitions.find(graphql_transformer_core_1.isQueryNode);
|
20
|
+
const mutationNode = parsedSchema.definitions.find(graphql_transformer_core_1.isMutationNode);
|
21
|
+
if (!queryNode && !mutationNode) {
|
22
|
+
return [];
|
23
|
+
}
|
24
|
+
const customSqlDataSourceStrategies = [];
|
25
|
+
if (queryNode) {
|
26
|
+
const fields = (0, graphql_transformer_core_1.fieldsWithSqlDirective)(queryNode);
|
27
|
+
for (const field of fields) {
|
28
|
+
customSqlDataSourceStrategies.push({
|
29
|
+
typeName: 'Query',
|
30
|
+
fieldName: field.name.value,
|
31
|
+
strategy: dataSourceStrategy,
|
32
|
+
});
|
23
33
|
}
|
24
34
|
}
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
35
|
+
if (mutationNode) {
|
36
|
+
const fields = (0, graphql_transformer_core_1.fieldsWithSqlDirective)(mutationNode);
|
37
|
+
for (const field of fields) {
|
38
|
+
customSqlDataSourceStrategies.push({
|
39
|
+
typeName: 'Mutation',
|
40
|
+
fieldName: field.name.value,
|
41
|
+
strategy: dataSourceStrategy,
|
42
|
+
});
|
43
|
+
}
|
31
44
|
}
|
32
|
-
|
45
|
+
return customSqlDataSourceStrategies;
|
33
46
|
};
|
47
|
+
exports.constructCustomSqlDataSourceStrategies = constructCustomSqlDataSourceStrategies;
|
34
48
|
/**
|
35
|
-
*
|
36
|
-
*
|
49
|
+
* Extracts the data source provider from the definition. This jumps through some hoops to avoid changing the public interface. If we decide
|
50
|
+
* to change the public interface to simplify the structure, then this process gets a lot simpler.
|
37
51
|
*/
|
38
|
-
const
|
39
|
-
const
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
52
|
+
const getDataSourceStrategiesProvider = (definition) => {
|
53
|
+
const provider = {
|
54
|
+
// We can directly use the interface strategies, even though the SQL strategies have the customSqlStatements field that is unused by the
|
55
|
+
// transformer flavor of this type
|
56
|
+
dataSourceStrategies: definition.dataSourceStrategies,
|
57
|
+
sqlDirectiveDataSourceStrategies: [],
|
58
|
+
};
|
59
|
+
// We'll collect all the custom SQL statements from the definition into a single map, and use that to make our
|
60
|
+
// SqlDirectiveDataSourceStrategies
|
61
|
+
const customSqlStatements = {};
|
62
|
+
const constructSqlStrategies = definition.customSqlDataSourceStrategies ?? [];
|
63
|
+
// Note that we're relying on the `customSqlStatements` object reference to stay the same throughout this loop. Don't reassign it, or the
|
64
|
+
// collected sqlDirectiveStrategies will break
|
65
|
+
constructSqlStrategies.forEach((sqlStrategy) => {
|
66
|
+
if (sqlStrategy.strategy.customSqlStatements) {
|
67
|
+
Object.assign(customSqlStatements, sqlStrategy.strategy.customSqlStatements);
|
68
|
+
}
|
69
|
+
provider.sqlDirectiveDataSourceStrategies.push({
|
70
|
+
typeName: sqlStrategy.typeName,
|
71
|
+
fieldName: sqlStrategy.fieldName,
|
72
|
+
strategy: sqlStrategy.strategy,
|
73
|
+
customSqlStatements,
|
74
|
+
});
|
75
|
+
});
|
76
|
+
return provider;
|
77
|
+
};
|
78
|
+
exports.getDataSourceStrategiesProvider = getDataSourceStrategiesProvider;
|
79
|
+
/**
|
80
|
+
* Creates a new schema by merging the individual schemas contained in the definitions, combining fields of the Query and Mutation types in
|
81
|
+
* individual definitions into a single combined definition. Adding directives to `Query` and `Mutation` types participating in a
|
82
|
+
* combination is not supported (the behavior is undefined whether those directives are migrated).
|
83
|
+
*/
|
84
|
+
const schemaByMergingDefinitions = (definitions) => {
|
85
|
+
const schema = definitions.map((def) => def.schema).join('\n');
|
86
|
+
const parsedSchema = (0, graphql_1.parse)(schema);
|
87
|
+
// We store the Query & Mutation definitions separately. Since the interfaces are readonly, we'll have to re-compose the types after we've
|
88
|
+
// collected all the fields
|
89
|
+
const queryAndMutationDefinitions = {};
|
90
|
+
// Throws if the field has already been encountered
|
91
|
+
const validateField = (typeName, fieldName) => {
|
92
|
+
const fields = queryAndMutationDefinitions[typeName]?.fields;
|
93
|
+
if (!fields) {
|
94
|
+
return;
|
95
|
+
}
|
96
|
+
if (fields.find((field) => field.name.value === fieldName)) {
|
97
|
+
throw new Error(`The custom ${typeName} field '${fieldName}' was found in multiple definitions, but a field name cannot be shared between definitions.`);
|
98
|
+
}
|
99
|
+
};
|
100
|
+
// Transform the schema by reducing Mutation & Query types:
|
101
|
+
// - Collect Mutation and Query definitions
|
102
|
+
// - Alter the parsed schema by filtering out Mutation & Query types
|
103
|
+
// - Add the combined Mutation & Query definitions to the filtered schema
|
104
|
+
parsedSchema.definitions.filter(graphql_transformer_core_1.isBuiltInGraphqlNode).forEach((def) => {
|
105
|
+
const typeName = def.name.value;
|
106
|
+
if (!queryAndMutationDefinitions[typeName]) {
|
107
|
+
queryAndMutationDefinitions[typeName] = {
|
108
|
+
node: def,
|
109
|
+
// `ObjectTypeDefinitionNode.fields` is a ReadonlyArray; so we have to create a new mutable array to collect all the fields
|
110
|
+
fields: [...(def.fields ?? [])],
|
111
|
+
};
|
112
|
+
return;
|
113
|
+
}
|
114
|
+
(def.fields ?? []).forEach((field) => {
|
115
|
+
validateField(typeName, field.name.value);
|
116
|
+
});
|
117
|
+
queryAndMutationDefinitions[typeName].fields = [...queryAndMutationDefinitions[typeName].fields, ...(def.fields ?? [])];
|
118
|
+
});
|
119
|
+
// Gather the collected Query & Mutation fields into <=2 new definitions
|
120
|
+
const combinedDefinitions = Object.values(queryAndMutationDefinitions)
|
121
|
+
.sort((a, b) => a.node.name.value.localeCompare(b.node.name.value))
|
122
|
+
.reduce((acc, cur) => {
|
123
|
+
const definitionNode = {
|
124
|
+
...cur.node,
|
125
|
+
fields: cur.fields,
|
126
|
+
};
|
127
|
+
return [...acc, definitionNode];
|
128
|
+
}, []);
|
129
|
+
// Filter out the old Query & Mutation definitions
|
130
|
+
const filteredDefinitions = parsedSchema.definitions.filter((def) => !(0, graphql_transformer_core_1.isBuiltInGraphqlNode)(def));
|
131
|
+
// Compose the new schema by appending the collected definitions to the filtered definitions. This means that every query will be
|
132
|
+
// rewritten such that the Mutation and Query types appear at the end of the schema.
|
133
|
+
const newSchema = {
|
134
|
+
...parsedSchema,
|
135
|
+
definitions: [...filteredDefinitions, ...combinedDefinitions],
|
46
136
|
};
|
137
|
+
const combinedSchemaString = (0, graphql_1.print)(newSchema);
|
138
|
+
return combinedSchemaString;
|
139
|
+
};
|
140
|
+
exports.schemaByMergingDefinitions = schemaByMergingDefinitions;
|
141
|
+
/*
|
142
|
+
* Validates the user input for the dataSourceStrategy. This is a no-op for DynamoDB strategies for now.
|
143
|
+
* @param strategy user provided model data source strategy
|
144
|
+
* @returns validates and throws an error if the strategy is invalid
|
145
|
+
*/
|
146
|
+
const validateDataSourceStrategy = (strategy) => {
|
147
|
+
if (!(0, graphql_transformer_core_1.isSqlStrategy)(strategy)) {
|
148
|
+
return;
|
149
|
+
}
|
150
|
+
const dbConnectionConfig = strategy.dbConnectionConfig;
|
151
|
+
const invalidSSMPaths = Object.values(dbConnectionConfig).filter((value) => typeof value === 'string' && !isValidSSMPath(value));
|
152
|
+
if (invalidSSMPaths.length > 0) {
|
153
|
+
throw new Error(`Invalid data source strategy "${strategy.name}". Following SSM paths must start with '/' in dbConnectionConfig: ${invalidSSMPaths.join(', ')}.`);
|
154
|
+
}
|
155
|
+
};
|
156
|
+
exports.validateDataSourceStrategy = validateDataSourceStrategy;
|
157
|
+
const isValidSSMPath = (path) => {
|
158
|
+
return path.startsWith('/');
|
47
159
|
};
|
48
|
-
exports.parseDataSourceConfig = parseDataSourceConfig;
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVybmFsL2RhdGEtc291cmNlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFZQSxxRkFBcUY7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGdCQUFzQyxFQUFhLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUV0SSxNQUFNLHVCQUF1QixHQUFHLENBQUMsa0JBQTJDLEVBQWtCLEVBQUU7SUFDOUYsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO1FBQzVDLFFBQVEsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUU7WUFDNUMsS0FBSyxTQUFTO2dCQUNaLE9BQU87b0JBQ0wsTUFBTSxFQUFFLEtBQUs7b0JBQ2IsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLGlCQUFpQixtREFBbUM7aUJBQ3JELENBQUM7WUFDSixLQUFLLGVBQWU7Z0JBQ2xCLE9BQU87b0JBQ0wsTUFBTSxFQUFFLEtBQUs7b0JBQ2IsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLGlCQUFpQiwrREFBeUM7aUJBQzNELENBQUM7WUFDSjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUErQyxrQkFBMEIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7U0FDbEg7S0FDRjtTQUFNLElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO1FBQzVGLE9BQU87WUFDTCxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1lBQ25ELFdBQVcsRUFBRSxLQUFLO1lBQ2xCLGlCQUFpQix5REFBeUM7U0FDM0QsQ0FBQztLQUNIO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0Msa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUN2RixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSSxNQUFNLHFCQUFxQixHQUFHLENBQUMsdUJBQWdFLEVBQW9CLEVBQUU7SUFDMUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQUMvRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO1FBQ2xFLE1BQU0sY0FBYyxHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7S0FDL0M7SUFDRCxPQUFPO1FBQ0wsb0JBQW9CO0tBQ3JCLENBQUM7QUFDSixDQUFDLENBQUM7QUFUVyxRQUFBLHFCQUFxQix5QkFTaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEYXRhU291cmNlVHlwZSxcbiAgRHluYW1vREJQcm92aXNpb25TdHJhdGVneSxcbiAgU1FMREJUeXBlLFxuICBTUUxMYW1iZGFNb2RlbFByb3Zpc2lvblN0cmF0ZWd5LFxufSBmcm9tICdAYXdzLWFtcGxpZnkvZ3JhcGhxbC10cmFuc2Zvcm1lci1pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIERhdGFTb3VyY2VDb25maWcgPSB7XG4gIG1vZGVsVG9EYXRhc291cmNlTWFwOiBNYXA8c3RyaW5nLCBEYXRhU291cmNlVHlwZT47XG59O1xuXG4vLyBUT0RPOiBEbyBhd2F5IHdpdGggdGhpcyBhZnRlciB3ZSBub3JtYWxpemUgZGF0YWJhc2UgdHlwZXMgdGhyb3VnaG91dCB0aGUgaW50ZXJuYWxzXG5jb25zdCBjb252ZXJ0U1FMREJUeXBlID0gKGRlZmluaXRpb25EQlR5cGU6ICdNWVNRTCcgfCAnUE9TVEdSRVMnKTogU1FMREJUeXBlID0+IChkZWZpbml0aW9uREJUeXBlID09PSAnTVlTUUwnID8gJ015U1FMJyA6ICdQb3N0Z3JlcycpO1xuXG5jb25zdCBjb252ZXJ0VG9EYXRhU291cmNlVHlwZSA9IChkYXRhU291cmNlU3RyYXRlZ3k6IE1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5KTogRGF0YVNvdXJjZVR5cGUgPT4ge1xuICBpZiAoZGF0YVNvdXJjZVN0cmF0ZWd5LmRiVHlwZSA9PT0gJ0RZTkFNT0RCJykge1xuICAgIHN3aXRjaCAoZGF0YVNvdXJjZVN0cmF0ZWd5LnByb3Zpc2lvblN0cmF0ZWd5KSB7XG4gICAgICBjYXNlICdERUZBVUxUJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYlR5cGU6ICdEREInLFxuICAgICAgICAgIHByb3Zpc2lvbkRCOiB0cnVlLFxuICAgICAgICAgIHByb3Zpc2lvblN0cmF0ZWd5OiBEeW5hbW9EQlByb3Zpc2lvblN0cmF0ZWd5LkRFRkFVTFQsXG4gICAgICAgIH07XG4gICAgICBjYXNlICdBTVBMSUZZX1RBQkxFJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYlR5cGU6ICdEREInLFxuICAgICAgICAgIHByb3Zpc2lvbkRCOiB0cnVlLFxuICAgICAgICAgIHByb3Zpc2lvblN0cmF0ZWd5OiBEeW5hbW9EQlByb3Zpc2lvblN0cmF0ZWd5LkFNUExJRllfVEFCTEUsXG4gICAgICAgIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuY291bnRlcmVkIHVuZXhwZWN0ZWQgcHJvdmlzaW9uIHN0cmF0ZWd5OiAkeyhkYXRhU291cmNlU3RyYXRlZ3kgYXMgYW55KS5wcm92aXNpb25TdHJhdGVneX1gKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF0YVNvdXJjZVN0cmF0ZWd5LmRiVHlwZSA9PT0gJ01ZU1FMJyB8fCBkYXRhU291cmNlU3RyYXRlZ3kuZGJUeXBlID09PSAnUE9TVEdSRVMnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRiVHlwZTogY29udmVydFNRTERCVHlwZShkYXRhU291cmNlU3RyYXRlZ3kuZGJUeXBlKSxcbiAgICAgIHByb3Zpc2lvbkRCOiBmYWxzZSxcbiAgICAgIHByb3Zpc2lvblN0cmF0ZWd5OiBTUUxMYW1iZGFNb2RlbFByb3Zpc2lvblN0cmF0ZWd5LkRFRkFVTFQsXG4gICAgfTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEVuY291bnRlcmVkIHVuZXhwZWN0ZWQgZGF0YWJhc2UgdHlwZSAke2RhdGFTb3VyY2VTdHJhdGVneS5kYlR5cGV9YCk7XG59O1xuXG4vKipcbiAqIEFuIGludGVybmFsIGhlbHBlciB0byBjb252ZXJ0IGZyb20gYSBtYXAgb2YgbW9kZWwtdG8tTW9kZWxEYXRhU291cmNlU3RyYXRlZ2llcyB0byB0aGUgbWFwIG9mIG1vZGVsLXRvLURhdGFTb3VyY2VUeXBlcyB0aGF0IGludGVybmFsXG4gKiB0cmFuc2Zvcm0gcHJvY2Vzc2luZyByZXF1aXJlcy4gVE9ETzogV2UgY2FuIHJlbW92ZSB0aGlzIG9uY2Ugd2UgcmVmYWN0b3IgdGhlIGludGVybmFscyB0byB1c2UgTW9kZWxEYXRhU291cmNlU3RyYXRlZ2llcyBuYXRpdmVseS5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlRGF0YVNvdXJjZUNvbmZpZyA9IChkYXRhU291cmNlRGVmaW5pdGlvbk1hcDogUmVjb3JkPHN0cmluZywgTW9kZWxEYXRhU291cmNlU3RyYXRlZ3k+KTogRGF0YVNvdXJjZUNvbmZpZyA9PiB7XG4gIGNvbnN0IG1vZGVsVG9EYXRhc291cmNlTWFwID0gbmV3IE1hcDxzdHJpbmcsIERhdGFTb3VyY2VUeXBlPigpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhU291cmNlRGVmaW5pdGlvbk1hcCkpIHtcbiAgICBjb25zdCBkYXRhU291cmNlVHlwZSA9IGNvbnZlcnRUb0RhdGFTb3VyY2VUeXBlKHZhbHVlKTtcbiAgICBtb2RlbFRvRGF0YXNvdXJjZU1hcC5zZXQoa2V5LCBkYXRhU291cmNlVHlwZSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtb2RlbFRvRGF0YXNvdXJjZU1hcCxcbiAgfTtcbn07XG4iXX0=
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVybmFsL2RhdGEtc291cmNlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBbUk7QUFDbkksb0ZBTStDO0FBUS9DOzs7Ozs7O0dBT0c7QUFDSSxNQUFNLHNDQUFzQyxHQUFHLENBQ3BELE1BQWMsRUFDZCxrQkFBb0QsRUFDWixFQUFFO0lBQzFDLElBQUksQ0FBQyxJQUFBLHdDQUFhLEVBQUMsa0JBQWtCLENBQUMsRUFBRTtRQUN0QyxPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBQSxlQUFLLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFbkMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsc0NBQVcsQ0FBQyxDQUFDO0lBQzdELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHlDQUFjLENBQUMsQ0FBQztJQUNuRSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQy9CLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFFRCxNQUFNLDZCQUE2QixHQUEyQyxFQUFFLENBQUM7SUFFakYsSUFBSSxTQUFTLEVBQUU7UUFDYixNQUFNLE1BQU0sR0FBRyxJQUFBLGlEQUFzQixFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO1lBQzFCLDZCQUE2QixDQUFDLElBQUksQ0FBQztnQkFDakMsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUs7Z0JBQzNCLFFBQVEsRUFBRSxrQkFBa0I7YUFDN0IsQ0FBQyxDQUFDO1NBQ0o7S0FDRjtJQUVELElBQUksWUFBWSxFQUFFO1FBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUEsaURBQXNC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Q0FBQztBQWRXLFFBQUEsMEJBQTBCLDhCQWNyQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBWSxFQUFXLEVBQUU7SUFDL0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlZmluaXRpb25Ob2RlLCBGaWVsZERlZmluaXRpb25Ob2RlLCBJbnRlcmZhY2VUeXBlRGVmaW5pdGlvbk5vZGUsIE9iamVjdFR5cGVEZWZpbml0aW9uTm9kZSwgcGFyc2UsIHByaW50IH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQge1xuICBpc0J1aWx0SW5HcmFwaHFsTm9kZSxcbiAgaXNTcWxTdHJhdGVneSxcbiAgaXNRdWVyeU5vZGUsXG4gIGlzTXV0YXRpb25Ob2RlLFxuICBmaWVsZHNXaXRoU3FsRGlyZWN0aXZlLFxufSBmcm9tICdAYXdzLWFtcGxpZnkvZ3JhcGhxbC10cmFuc2Zvcm1lci1jb3JlJztcbmltcG9ydCB7IERhdGFTb3VyY2VTdHJhdGVnaWVzUHJvdmlkZXIgfSBmcm9tICdAYXdzLWFtcGxpZnkvZ3JhcGhxbC10cmFuc2Zvcm1lci1pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIEN1c3RvbVNxbERhdGFTb3VyY2VTdHJhdGVneSBhcyBDb25zdHJ1Y3RDdXN0b21TcWxEYXRhU291cmNlU3RyYXRlZ3ksXG4gIE1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5IGFzIENvbnN0cnVjdE1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5LFxufSBmcm9tICcuLi9tb2RlbC1kYXRhc291cmNlLXN0cmF0ZWd5LXR5cGVzJztcbmltcG9ydCB7IElBbXBsaWZ5R3JhcGhxbERlZmluaXRpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBpbnRlcmZhY2UgZmxhdm9yIG9mIGN1c3RvbVNxbERhdGFTb3VyY2VTdHJhdGVnaWVzIGZyb20gYSBmYWN0b3J5IG1ldGhvZCdzIHNjaGVtYSBhbmQgZGF0YSBzb3VyY2UuIEludGVybmFsbHksIHRoaXMgZnVuY3Rpb25cbiAqIHNjYW5zIHRoZSBmaWVsZHMgb2YgYFF1ZXJ5YCBhbmQgYE11dGF0aW9uYCBsb29raW5nIGZvciBmaWVsZHMgYW5ub3RhdGVkIHdpdGggdGhlIGBAc3FsYCBkaXJlY3RpdmUgYW5kIGRlc2lnbmF0ZXMgdGhlIHNwZWNpZmllZFxuICogZGF0YVNvdXJjZVN0cmF0ZWd5IHRvIGZ1bGZpbGwgdGhvc2UgY3VzdG9tIHF1ZXJpZXMuXG4gKlxuICogTm90ZSB0aGF0IHdlIGRvIG5vdCBzY2FuIGZvciBgU3Vic2NyaXB0aW9uYCBmaWVsZHM6IGBAc3FsYCBkaXJlY3RpdmVzIGFyZSBub3QgYWxsb3dlZCBvbiB0aG9zZSwgYW5kIGl0IHdvdWxkbid0IG1ha2Ugc2Vuc2UgdG8gZG8gc29cbiAqIGFueXdheSwgc2luY2Ugc3Vic2NyaXB0aW9ucyBhcmUgcHJvY2Vzc2VkIGZyb20gYW4gaW5jb21pbmcgTXV0YXRpb24sIG5vdCBhcyB0aGUgcmVzdWx0IG9mIGEgZGlyZWN0IGRhdGFzb3VyY2UgYWNjZXNzLlxuICovXG5leHBvcnQgY29uc3QgY29uc3RydWN0Q3VzdG9tU3FsRGF0YVNvdXJjZVN0cmF0ZWdpZXMgPSAoXG4gIHNjaGVtYTogc3RyaW5nLFxuICBkYXRhU291cmNlU3RyYXRlZ3k6IENvbnN0cnVjdE1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5LFxuKTogQ29uc3RydWN0Q3VzdG9tU3FsRGF0YVNvdXJjZVN0cmF0ZWd5W10gPT4ge1xuICBpZiAoIWlzU3FsU3RyYXRlZ3koZGF0YVNvdXJjZVN0cmF0ZWd5KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFNjaGVtYSA9IHBhcnNlKHNjaGVtYSk7XG5cbiAgY29uc3QgcXVlcnlOb2RlID0gcGFyc2VkU2NoZW1hLmRlZmluaXRpb25zLmZpbmQoaXNRdWVyeU5vZGUpO1xuICBjb25zdCBtdXRhdGlvbk5vZGUgPSBwYXJzZWRTY2hlbWEuZGVmaW5pdGlvbnMuZmluZChpc011dGF0aW9uTm9kZSk7XG4gIGlmICghcXVlcnlOb2RlICYmICFtdXRhdGlvbk5vZGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBjdXN0b21TcWxEYXRhU291cmNlU3RyYXRlZ2llczogQ29uc3RydWN0Q3VzdG9tU3FsRGF0YVNvdXJjZVN0cmF0ZWd5W10gPSBbXTtcblxuICBpZiAocXVlcnlOb2RlKSB7XG4gICAgY29uc3QgZmllbGRzID0gZmllbGRzV2l0aFNxbERpcmVjdGl2ZShxdWVyeU5vZGUpO1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICBjdXN0b21TcWxEYXRhU291cmNlU3RyYXRlZ2llcy5wdXNoKHtcbiAgICAgICAgdHlwZU5hbWU6ICdRdWVyeScsXG4gICAgICAgIGZpZWxkTmFtZTogZmllbGQubmFtZS52YWx1ZSxcbiAgICAgICAgc3RyYXRlZ3k6IGRhdGFTb3VyY2VTdHJhdGVneSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXRhdGlvbk5vZGUpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBmaWVsZHNXaXRoU3FsRGlyZWN0aXZlKG11dGF0aW9uTm9kZSk7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIGN1c3RvbVNxbERhdGFTb3VyY2VTdHJhdGVnaWVzLnB1c2goe1xuICAgICAgICB0eXBlTmFtZTogJ011dGF0aW9uJyxcbiAgICAgICAgZmllbGROYW1lOiBmaWVsZC5uYW1lLnZhbHVlLFxuICAgICAgICBzdHJhdGVneTogZGF0YVNvdXJjZVN0cmF0ZWd5LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGN1c3RvbVNxbERhdGFTb3VyY2VTdHJhdGVnaWVzO1xufTtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZGF0YSBzb3VyY2UgcHJvdmlkZXIgZnJvbSB0aGUgZGVmaW5pdGlvbi4gVGhpcyBqdW1wcyB0aHJvdWdoIHNvbWUgaG9vcHMgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIElmIHdlIGRlY2lkZVxuICogdG8gY2hhbmdlIHRoZSBwdWJsaWMgaW50ZXJmYWNlIHRvIHNpbXBsaWZ5IHRoZSBzdHJ1Y3R1cmUsIHRoZW4gdGhpcyBwcm9jZXNzIGdldHMgYSBsb3Qgc2ltcGxlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFTb3VyY2VTdHJhdGVnaWVzUHJvdmlkZXIgPSAoZGVmaW5pdGlvbjogSUFtcGxpZnlHcmFwaHFsRGVmaW5pdGlvbik6IERhdGFTb3VyY2VTdHJhdGVnaWVzUHJvdmlkZXIgPT4ge1xuICBjb25zdCBwcm92aWRlcjogRGF0YVNvdXJjZVN0cmF0ZWdpZXNQcm92aWRlciA9IHtcbiAgICAvLyBXZSBjYW4gZGlyZWN0bHkgdXNlIHRoZSBpbnRlcmZhY2Ugc3RyYXRlZ2llcywgZXZlbiB0aG91Z2ggdGhlIFNRTCBzdHJhdGVnaWVzIGhhdmUgdGhlIGN1c3RvbVNxbFN0YXRlbWVudHMgZmllbGQgdGhhdCBpcyB1bnVzZWQgYnkgdGhlXG4gICAgLy8gdHJhbnNmb3JtZXIgZmxhdm9yIG9mIHRoaXMgdHlwZVxuICAgIGRhdGFTb3VyY2VTdHJhdGVnaWVzOiBkZWZpbml0aW9uLmRhdGFTb3VyY2VTdHJhdGVnaWVzLFxuICAgIHNxbERpcmVjdGl2ZURhdGFTb3VyY2VTdHJhdGVnaWVzOiBbXSxcbiAgfTtcblxuICAvLyBXZSdsbCBjb2xsZWN0IGFsbCB0aGUgY3VzdG9tIFNRTCBzdGF0ZW1lbnRzIGZyb20gdGhlIGRlZmluaXRpb24gaW50byBhIHNpbmdsZSBtYXAsIGFuZCB1c2UgdGhhdCB0byBtYWtlIG91clxuICAvLyBTcWxEaXJlY3RpdmVEYXRhU291cmNlU3RyYXRlZ2llc1xuICBjb25zdCBjdXN0b21TcWxTdGF0ZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgY29uc3QgY29uc3RydWN0U3FsU3RyYXRlZ2llcyA9IGRlZmluaXRpb24uY3VzdG9tU3FsRGF0YVNvdXJjZVN0cmF0ZWdpZXMgPz8gW107XG5cbiAgLy8gTm90ZSB0aGF0IHdlJ3JlIHJlbHlpbmcgb24gdGhlIGBjdXN0b21TcWxTdGF0ZW1lbnRzYCBvYmplY3QgcmVmZXJlbmNlIHRvIHN0YXkgdGhlIHNhbWUgdGhyb3VnaG91dCB0aGlzIGxvb3AuIERvbid0IHJlYXNzaWduIGl0LCBvciB0aGVcbiAgLy8gY29sbGVjdGVkIHNxbERpcmVjdGl2ZVN0cmF0ZWdpZXMgd2lsbCBicmVha1xuICBjb25zdHJ1Y3RTcWxTdHJhdGVnaWVzLmZvckVhY2goKHNxbFN0cmF0ZWd5KSA9PiB7XG4gICAgaWYgKHNxbFN0cmF0ZWd5LnN0cmF0ZWd5LmN1c3RvbVNxbFN0YXRlbWVudHMpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY3VzdG9tU3FsU3RhdGVtZW50cywgc3FsU3RyYXRlZ3kuc3RyYXRlZ3kuY3VzdG9tU3FsU3RhdGVtZW50cyk7XG4gICAgfVxuXG4gICAgcHJvdmlkZXIuc3FsRGlyZWN0aXZlRGF0YVNvdXJjZVN0cmF0ZWdpZXMhLnB1c2goe1xuICAgICAgdHlwZU5hbWU6IHNxbFN0cmF0ZWd5LnR5cGVOYW1lLFxuICAgICAgZmllbGROYW1lOiBzcWxTdHJhdGVneS5maWVsZE5hbWUsXG4gICAgICBzdHJhdGVneTogc3FsU3RyYXRlZ3kuc3RyYXRlZ3ksXG4gICAgICBjdXN0b21TcWxTdGF0ZW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcHJvdmlkZXI7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgc2NoZW1hIGJ5IG1lcmdpbmcgdGhlIGluZGl2aWR1YWwgc2NoZW1hcyBjb250YWluZWQgaW4gdGhlIGRlZmluaXRpb25zLCBjb21iaW5pbmcgZmllbGRzIG9mIHRoZSBRdWVyeSBhbmQgTXV0YXRpb24gdHlwZXMgaW5cbiAqIGluZGl2aWR1YWwgZGVmaW5pdGlvbnMgaW50byBhIHNpbmdsZSBjb21iaW5lZCBkZWZpbml0aW9uLiBBZGRpbmcgZGlyZWN0aXZlcyB0byBgUXVlcnlgIGFuZCBgTXV0YXRpb25gIHR5cGVzIHBhcnRpY2lwYXRpbmcgaW4gYVxuICogY29tYmluYXRpb24gaXMgbm90IHN1cHBvcnRlZCAodGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCB3aGV0aGVyIHRob3NlIGRpcmVjdGl2ZXMgYXJlIG1pZ3JhdGVkKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNjaGVtYUJ5TWVyZ2luZ0RlZmluaXRpb25zID0gKGRlZmluaXRpb25zOiBJQW1wbGlmeUdyYXBocWxEZWZpbml0aW9uW10pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzY2hlbWEgPSBkZWZpbml0aW9ucy5tYXAoKGRlZikgPT4gZGVmLnNjaGVtYSkuam9pbignXFxuJyk7XG4gIGNvbnN0IHBhcnNlZFNjaGVtYSA9IHBhcnNlKHNjaGVtYSk7XG5cbiAgLy8gV2Ugc3RvcmUgdGhlIFF1ZXJ5ICYgTXV0YXRpb24gZGVmaW5pdGlvbnMgc2VwYXJhdGVseS4gU2luY2UgdGhlIGludGVyZmFjZXMgYXJlIHJlYWRvbmx5LCB3ZSdsbCBoYXZlIHRvIHJlLWNvbXBvc2UgdGhlIHR5cGVzIGFmdGVyIHdlJ3ZlXG4gIC8vIGNvbGxlY3RlZCBhbGwgdGhlIGZpZWxkc1xuICBjb25zdCBxdWVyeUFuZE11dGF0aW9uRGVmaW5pdGlvbnM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgbm9kZTogT2JqZWN0VHlwZURlZmluaXRpb25Ob2RlIHwgSW50ZXJmYWNlVHlwZURlZmluaXRpb25Ob2RlO1xuICAgICAgZmllbGRzOiBGaWVsZERlZmluaXRpb25Ob2RlW107XG4gICAgfVxuICA+ID0ge307XG5cbiAgLy8gVGhyb3dzIGlmIHRoZSBmaWVsZCBoYXMgYWxyZWFkeSBiZWVuIGVuY291bnRlcmVkXG4gIGNvbnN0IHZhbGlkYXRlRmllbGQgPSAodHlwZU5hbWU6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBjb25zdCBmaWVsZHMgPSBxdWVyeUFuZE11dGF0aW9uRGVmaW5pdGlvbnNbdHlwZU5hbWVdPy5maWVsZHM7XG4gICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZS52YWx1ZSA9PT0gZmllbGROYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGN1c3RvbSAke3R5cGVOYW1lfSBmaWVsZCAnJHtmaWVsZE5hbWV9JyB3YXMgZm91bmQgaW4gbXVsdGlwbGUgZGVmaW5pdGlvbnMsIGJ1dCBhIGZpZWxkIG5hbWUgY2Fubm90IGJlIHNoYXJlZCBiZXR3ZWVuIGRlZmluaXRpb25zLmAsXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvLyBUcmFuc2Zvcm0gdGhlIHNjaGVtYSBieSByZWR1Y2luZyBNdXRhdGlvbiAmIFF1ZXJ5IHR5cGVzOlxuICAvLyAtIENvbGxlY3QgTXV0YXRpb24gYW5kIFF1ZXJ5IGRlZmluaXRpb25zXG4gIC8vIC0gQWx0ZXIgdGhlIHBhcnNlZCBzY2hlbWEgYnkgZmlsdGVyaW5nIG91dCBNdXRhdGlvbiAmIFF1ZXJ5IHR5cGVzXG4gIC8vIC0gQWRkIHRoZSBjb21iaW5lZCBNdXRhdGlvbiAmIFF1ZXJ5IGRlZmluaXRpb25zIHRvIHRoZSBmaWx0ZXJlZCBzY2hlbWFcbiAgcGFyc2VkU2NoZW1hLmRlZmluaXRpb25zLmZpbHRlcihpc0J1aWx0SW5HcmFwaHFsTm9kZSkuZm9yRWFjaCgoZGVmKSA9PiB7XG4gICAgY29uc3QgdHlwZU5hbWUgPSBkZWYubmFtZS52YWx1ZTtcbiAgICBpZiAoIXF1ZXJ5QW5kTXV0YXRpb25EZWZpbml0aW9uc1t0eXBlTmFtZV0pIHtcbiAgICAgIHF1ZXJ5QW5kTXV0YXRpb25EZWZpbml0aW9uc1t0eXBlTmFtZV0gPSB7XG4gICAgICAgIG5vZGU6IGRlZixcbiAgICAgICAgLy8gYE9iamVjdFR5cGVEZWZpbml0aW9uTm9kZS5maWVsZHNgIGlzIGEgUmVhZG9ubHlBcnJheTsgc28gd2UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgbXV0YWJsZSBhcnJheSB0byBjb2xsZWN0IGFsbCB0aGUgZmllbGRzXG4gICAgICAgIGZpZWxkczogWy4uLihkZWYuZmllbGRzID8/IFtdKV0sXG4gICAgICB9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIChkZWYuZmllbGRzID8/IFtdKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgdmFsaWRhdGVGaWVsZCh0eXBlTmFtZSwgZmllbGQubmFtZS52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBxdWVyeUFuZE11dGF0aW9uRGVmaW5pdGlvbnNbdHlwZU5hbWVdLmZpZWxkcyA9IFsuLi5xdWVyeUFuZE11dGF0aW9uRGVmaW5pdGlvbnNbdHlwZU5hbWVdLmZpZWxkcywgLi4uKGRlZi5maWVsZHMgPz8gW10pXTtcbiAgfSk7XG5cbiAgLy8gR2F0aGVyIHRoZSBjb2xsZWN0ZWQgUXVlcnkgJiBNdXRhdGlvbiBmaWVsZHMgaW50byA8PTIgbmV3IGRlZmluaXRpb25zXG4gIGNvbnN0IGNvbWJpbmVkRGVmaW5pdGlvbnMgPSBPYmplY3QudmFsdWVzKHF1ZXJ5QW5kTXV0YXRpb25EZWZpbml0aW9ucylcbiAgICAuc29ydCgoYSwgYikgPT4gYS5ub2RlLm5hbWUudmFsdWUubG9jYWxlQ29tcGFyZShiLm5vZGUubmFtZS52YWx1ZSkpXG4gICAgLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25Ob2RlID0ge1xuICAgICAgICAuLi5jdXIubm9kZSxcbiAgICAgICAgZmllbGRzOiBjdXIuZmllbGRzLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBbLi4uYWNjLCBkZWZpbml0aW9uTm9kZV07XG4gICAgfSwgW10gYXMgRGVmaW5pdGlvbk5vZGVbXSk7XG5cbiAgLy8gRmlsdGVyIG91dCB0aGUgb2xkIFF1ZXJ5ICYgTXV0YXRpb24gZGVmaW5pdGlvbnNcbiAgY29uc3QgZmlsdGVyZWREZWZpbml0aW9ucyA9IHBhcnNlZFNjaGVtYS5kZWZpbml0aW9ucy5maWx0ZXIoKGRlZikgPT4gIWlzQnVpbHRJbkdyYXBocWxOb2RlKGRlZikpO1xuXG4gIC8vIENvbXBvc2UgdGhlIG5ldyBzY2hlbWEgYnkgYXBwZW5kaW5nIHRoZSBjb2xsZWN0ZWQgZGVmaW5pdGlvbnMgdG8gdGhlIGZpbHRlcmVkIGRlZmluaXRpb25zLiBUaGlzIG1lYW5zIHRoYXQgZXZlcnkgcXVlcnkgd2lsbCBiZVxuICAvLyByZXdyaXR0ZW4gc3VjaCB0aGF0IHRoZSBNdXRhdGlvbiBhbmQgUXVlcnkgdHlwZXMgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIHNjaGVtYS5cbiAgY29uc3QgbmV3U2NoZW1hID0ge1xuICAgIC4uLnBhcnNlZFNjaGVtYSxcbiAgICBkZWZpbml0aW9uczogWy4uLmZpbHRlcmVkRGVmaW5pdGlvbnMsIC4uLmNvbWJpbmVkRGVmaW5pdGlvbnNdLFxuICB9O1xuXG4gIGNvbnN0IGNvbWJpbmVkU2NoZW1hU3RyaW5nID0gcHJpbnQobmV3U2NoZW1hKTtcbiAgcmV0dXJuIGNvbWJpbmVkU2NoZW1hU3RyaW5nO1xufTtcblxuLypcbiAqIFZhbGlkYXRlcyB0aGUgdXNlciBpbnB1dCBmb3IgdGhlIGRhdGFTb3VyY2VTdHJhdGVneS4gVGhpcyBpcyBhIG5vLW9wIGZvciBEeW5hbW9EQiBzdHJhdGVnaWVzIGZvciBub3cuXG4gKiBAcGFyYW0gc3RyYXRlZ3kgdXNlciBwcm92aWRlZCBtb2RlbCBkYXRhIHNvdXJjZSBzdHJhdGVneVxuICogQHJldHVybnMgdmFsaWRhdGVzIGFuZCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHN0cmF0ZWd5IGlzIGludmFsaWRcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRGF0YVNvdXJjZVN0cmF0ZWd5ID0gKHN0cmF0ZWd5OiBDb25zdHJ1Y3RNb2RlbERhdGFTb3VyY2VTdHJhdGVneSkgPT4ge1xuICBpZiAoIWlzU3FsU3RyYXRlZ3koc3RyYXRlZ3kpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGJDb25uZWN0aW9uQ29uZmlnID0gc3RyYXRlZ3kuZGJDb25uZWN0aW9uQ29uZmlnO1xuICBjb25zdCBpbnZhbGlkU1NNUGF0aHMgPSBPYmplY3QudmFsdWVzKGRiQ29ubmVjdGlvbkNvbmZpZykuZmlsdGVyKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhaXNWYWxpZFNTTVBhdGgodmFsdWUpKTtcbiAgaWYgKGludmFsaWRTU01QYXRocy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZGF0YSBzb3VyY2Ugc3RyYXRlZ3kgXCIke1xuICAgICAgICBzdHJhdGVneS5uYW1lXG4gICAgICB9XCIuIEZvbGxvd2luZyBTU00gcGF0aHMgbXVzdCBzdGFydCB3aXRoICcvJyBpbiBkYkNvbm5lY3Rpb25Db25maWc6ICR7aW52YWxpZFNTTVBhdGhzLmpvaW4oJywgJyl9LmAsXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgaXNWYWxpZFNTTVBhdGggPSAocGF0aDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy8nKTtcbn07XG4iXX0=
|
@@ -1,8 +1,8 @@
|
|
1
|
-
import { ModelDataSourceStrategy } from '../types';
|
1
|
+
import { ModelDataSourceStrategy } from '../model-datasource-strategy-types';
|
2
2
|
/**
|
3
3
|
* Get the type names with model directives in the GraphQL schema in SDL
|
4
4
|
* @param schema graphql schema in SDL
|
5
5
|
* @returns type names which model diretives are attached
|
6
6
|
*/
|
7
|
-
export declare
|
8
|
-
export declare const
|
7
|
+
export declare const getModelTypeNames: (schema: string) => string[];
|
8
|
+
export declare const constructDataSourceStrategies: (schema: string, dataSourceStrategy: ModelDataSourceStrategy) => Record<string, ModelDataSourceStrategy>;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.constructDataSourceStrategies = exports.getModelTypeNames = void 0;
|
4
4
|
const graphql_1 = require("graphql");
|
5
5
|
const MODEL_DIRECTIVE_NAME = 'model';
|
6
6
|
const MANY_TO_MANY_DIRECTIVE_NAME = 'manyToMany';
|
@@ -9,7 +9,7 @@ const MANY_TO_MANY_DIRECTIVE_NAME = 'manyToMany';
|
|
9
9
|
* @param schema graphql schema in SDL
|
10
10
|
* @returns type names which model diretives are attached
|
11
11
|
*/
|
12
|
-
|
12
|
+
const getModelTypeNames = (schema) => {
|
13
13
|
const parsedSchema = (0, graphql_1.parse)(schema);
|
14
14
|
const nodesWithModelDirective = parsedSchema.definitions.filter((obj) => obj.kind === graphql_1.Kind.OBJECT_TYPE_DEFINITION && obj.directives?.some((dir) => dir.name.value === MODEL_DIRECTIVE_NAME));
|
15
15
|
const modelKeys = nodesWithModelDirective.map((type) => type.name.value);
|
@@ -27,11 +27,11 @@ function getModelTypeNames(schema) {
|
|
27
27
|
});
|
28
28
|
});
|
29
29
|
return modelKeys.filter((key, idx) => modelKeys.indexOf(key) === idx);
|
30
|
-
}
|
30
|
+
};
|
31
31
|
exports.getModelTypeNames = getModelTypeNames;
|
32
|
-
const
|
33
|
-
const modelKeys = getModelTypeNames(schema);
|
32
|
+
const constructDataSourceStrategies = (schema, dataSourceStrategy) => {
|
33
|
+
const modelKeys = (0, exports.getModelTypeNames)(schema);
|
34
34
|
return modelKeys.reduce((acc, cur) => ({ ...acc, [cur]: dataSourceStrategy }), {});
|
35
35
|
};
|
36
|
-
exports.
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
36
|
+
exports.constructDataSourceStrategies = constructDataSourceStrategies;
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdHlwZS1uYW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVybmFsL21vZGVsLXR5cGUtbmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBaUY7QUFHakYsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSwyQkFBMkIsR0FBRyxZQUFZLENBQUM7QUFFakQ7Ozs7R0FJRztBQUNJLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFjLEVBQVksRUFBRTtJQUM1RCxNQUFNLFlBQVksR0FBRyxJQUFBLGVBQUssRUFBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUM3RCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxjQUFJLENBQUMsc0JBQXNCLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLG9CQUFvQixDQUFDLENBQzVILENBQUM7SUFDRixNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQWlDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3RDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUErQixDQUFDO1FBQ25ELE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN4QixLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLDJCQUEyQixFQUFFO29CQUNsRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLENBQUM7b0JBQ3BGLElBQUksV0FBVyxFQUFFO3dCQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUUsV0FBVyxDQUFDLEtBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQzlEO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN4RSxDQUFDLENBQUM7QUFwQlcsUUFBQSxpQkFBaUIscUJBb0I1QjtBQUVLLE1BQU0sNkJBQTZCLEdBQUcsQ0FDM0MsTUFBYyxFQUNkLGtCQUEyQyxFQUNGLEVBQUU7SUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBQSx5QkFBaUIsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckYsQ0FBQyxDQUFDO0FBTlcsUUFBQSw2QkFBNkIsaUNBTXhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2luZCwgT2JqZWN0VHlwZURlZmluaXRpb25Ob2RlLCBTdHJpbmdWYWx1ZU5vZGUsIHBhcnNlIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBNb2RlbERhdGFTb3VyY2VTdHJhdGVneSB9IGZyb20gJy4uL21vZGVsLWRhdGFzb3VyY2Utc3RyYXRlZ3ktdHlwZXMnO1xuXG5jb25zdCBNT0RFTF9ESVJFQ1RJVkVfTkFNRSA9ICdtb2RlbCc7XG5jb25zdCBNQU5ZX1RPX01BTllfRElSRUNUSVZFX05BTUUgPSAnbWFueVRvTWFueSc7XG5cbi8qKlxuICogR2V0IHRoZSB0eXBlIG5hbWVzIHdpdGggbW9kZWwgZGlyZWN0aXZlcyBpbiB0aGUgR3JhcGhRTCBzY2hlbWEgaW4gU0RMXG4gKiBAcGFyYW0gc2NoZW1hIGdyYXBocWwgc2NoZW1hIGluIFNETFxuICogQHJldHVybnMgdHlwZSBuYW1lcyB3aGljaCBtb2RlbCBkaXJldGl2ZXMgYXJlIGF0dGFjaGVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNb2RlbFR5cGVOYW1lcyA9IChzY2hlbWE6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgcGFyc2VkU2NoZW1hID0gcGFyc2Uoc2NoZW1hKTtcbiAgY29uc3Qgbm9kZXNXaXRoTW9kZWxEaXJlY3RpdmUgPSBwYXJzZWRTY2hlbWEuZGVmaW5pdGlvbnMuZmlsdGVyKFxuICAgIChvYmopID0+IG9iai5raW5kID09PSBLaW5kLk9CSkVDVF9UWVBFX0RFRklOSVRJT04gJiYgb2JqLmRpcmVjdGl2ZXM/LnNvbWUoKGRpcikgPT4gZGlyLm5hbWUudmFsdWUgPT09IE1PREVMX0RJUkVDVElWRV9OQU1FKSxcbiAgKTtcbiAgY29uc3QgbW9kZWxLZXlzID0gbm9kZXNXaXRoTW9kZWxEaXJlY3RpdmUubWFwKCh0eXBlKSA9PiAodHlwZSBhcyBPYmplY3RUeXBlRGVmaW5pdGlvbk5vZGUpLm5hbWUudmFsdWUpO1xuICBub2Rlc1dpdGhNb2RlbERpcmVjdGl2ZS5mb3JFYWNoKChvYmopID0+IHtcbiAgICBjb25zdCB7IGZpZWxkcyB9ID0gb2JqIGFzIE9iamVjdFR5cGVEZWZpbml0aW9uTm9kZTtcbiAgICBmaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBmaWVsZC5kaXJlY3RpdmVzPy5mb3JFYWNoKChkaXIpID0+IHtcbiAgICAgICAgaWYgKGRpci5uYW1lLnZhbHVlID09PSBNQU5ZX1RPX01BTllfRElSRUNUSVZFX05BTUUpIHtcbiAgICAgICAgICBjb25zdCByZWxhdGlvbkFyZyA9IGRpci5hcmd1bWVudHM/LmZpbmQoKGFyZykgPT4gYXJnLm5hbWUudmFsdWUgPT09ICdyZWxhdGlvbk5hbWUnKTtcbiAgICAgICAgICBpZiAocmVsYXRpb25BcmcpIHtcbiAgICAgICAgICAgIG1vZGVsS2V5cy5wdXNoKChyZWxhdGlvbkFyZy52YWx1ZSBhcyBTdHJpbmdWYWx1ZU5vZGUpLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG1vZGVsS2V5cy5maWx0ZXIoKGtleSwgaWR4KSA9PiBtb2RlbEtleXMuaW5kZXhPZihrZXkpID09PSBpZHgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdERhdGFTb3VyY2VTdHJhdGVnaWVzID0gKFxuICBzY2hlbWE6IHN0cmluZyxcbiAgZGF0YVNvdXJjZVN0cmF0ZWd5OiBNb2RlbERhdGFTb3VyY2VTdHJhdGVneSxcbik6IFJlY29yZDxzdHJpbmcsIE1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5PiA9PiB7XG4gIGNvbnN0IG1vZGVsS2V5cyA9IGdldE1vZGVsVHlwZU5hbWVzKHNjaGVtYSk7XG4gIHJldHVybiBtb2RlbEtleXMucmVkdWNlKChhY2MsIGN1cikgPT4gKHsgLi4uYWNjLCBbY3VyXTogZGF0YVNvdXJjZVN0cmF0ZWd5IH0pLCB7fSk7XG59O1xuIl19
|
@@ -0,0 +1,122 @@
|
|
1
|
+
/**
|
2
|
+
* All known ModelDataSourceStrategies. Concrete strategies vary widely in their requirements and implementations.
|
3
|
+
*/
|
4
|
+
export type ModelDataSourceStrategy = DefaultDynamoDbModelDataSourceStrategy | AmplifyDynamoDbModelDataSourceStrategy | SQLLambdaModelDataSourceStrategy;
|
5
|
+
/**
|
6
|
+
* All supported database types that can be used to resolve models.
|
7
|
+
*/
|
8
|
+
export type ModelDataSourceStrategyDbType = 'DYNAMODB' | ModelDataSourceStrategySqlDbType;
|
9
|
+
/**
|
10
|
+
* All supported SQL database types that can be used to resolve models.
|
11
|
+
*/
|
12
|
+
export type ModelDataSourceStrategySqlDbType = 'MYSQL' | 'POSTGRES';
|
13
|
+
/**
|
14
|
+
* Use default CloudFormation type 'AWS::DynamoDB::Table' to provision table.
|
15
|
+
*/
|
16
|
+
export interface DefaultDynamoDbModelDataSourceStrategy {
|
17
|
+
readonly dbType: 'DYNAMODB';
|
18
|
+
readonly provisionStrategy: 'DEFAULT';
|
19
|
+
}
|
20
|
+
/**
|
21
|
+
* Use custom resource type 'Custom::AmplifyDynamoDBTable' to provision table.
|
22
|
+
*/
|
23
|
+
export interface AmplifyDynamoDbModelDataSourceStrategy {
|
24
|
+
readonly dbType: 'DYNAMODB';
|
25
|
+
readonly provisionStrategy: 'AMPLIFY_TABLE';
|
26
|
+
}
|
27
|
+
/**
|
28
|
+
* A strategy that creates a Lambda to connect to a pre-existing SQL table to resolve model data.
|
29
|
+
*/
|
30
|
+
export interface SQLLambdaModelDataSourceStrategy {
|
31
|
+
/**
|
32
|
+
* The name of the strategy. This will be used to name the AppSync DataSource itself, plus any associated resources like resolver Lambdas.
|
33
|
+
* This name must be unique across all schema definitions in a GraphQL API.
|
34
|
+
*/
|
35
|
+
readonly name: string;
|
36
|
+
/**
|
37
|
+
* The type of the SQL database used to process model operations for this definition.
|
38
|
+
*/
|
39
|
+
readonly dbType: ModelDataSourceStrategySqlDbType;
|
40
|
+
/**
|
41
|
+
* The parameters the Lambda data source will use to connect to the database.
|
42
|
+
*/
|
43
|
+
readonly dbConnectionConfig: SqlModelDataSourceDbConnectionConfig;
|
44
|
+
/**
|
45
|
+
* The configuration of the VPC into which to install the Lambda.
|
46
|
+
*/
|
47
|
+
readonly vpcConfiguration?: VpcConfig;
|
48
|
+
/**
|
49
|
+
* Custom SQL statements. The key is the value of the `references` attribute of the `@sql` directive in the `schema`; the value is the SQL
|
50
|
+
* to be executed.
|
51
|
+
*/
|
52
|
+
readonly customSqlStatements?: Record<string, string>;
|
53
|
+
/**
|
54
|
+
* The configuration for the provisioned concurrency of the Lambda.
|
55
|
+
*/
|
56
|
+
readonly sqlLambdaProvisionedConcurrencyConfig?: ProvisionedConcurrencyConfig;
|
57
|
+
}
|
58
|
+
/**
|
59
|
+
* Configuration of the VPC in which to install a Lambda to resolve queries against a SQL-based data source. The SQL Lambda will be deployed
|
60
|
+
* into the specified VPC, subnets, and security groups. The specified subnets and security groups must be in the same VPC. The VPC must
|
61
|
+
* have at least one subnet. The construct will also create VPC service endpoints in the specified subnets, as well as inbound security
|
62
|
+
* rules, to allow traffic on port 443 within each security group. This allows the Lambda to read database connection information from
|
63
|
+
* Secure Systems Manager.
|
64
|
+
*/
|
65
|
+
export interface VpcConfig {
|
66
|
+
/** The VPC to install the Lambda data source in. */
|
67
|
+
readonly vpcId: string;
|
68
|
+
/** The security groups to install the Lambda data source in. */
|
69
|
+
readonly securityGroupIds: string[];
|
70
|
+
/** The subnets to install the Lambda data source in, one per availability zone. */
|
71
|
+
readonly subnetAvailabilityZoneConfig: SubnetAvailabilityZone[];
|
72
|
+
}
|
73
|
+
/**
|
74
|
+
* The configuration for the provisioned concurrency of the Lambda.
|
75
|
+
*/
|
76
|
+
export interface ProvisionedConcurrencyConfig {
|
77
|
+
/** The amount of provisioned concurrency to allocate. **/
|
78
|
+
readonly provisionedConcurrentExecutions: number;
|
79
|
+
}
|
80
|
+
/**
|
81
|
+
* Subnet configuration for VPC endpoints used by a Lambda resolver for a SQL-based data source. Although it is possible to create multiple
|
82
|
+
* subnets in a single availability zone, VPC service endpoints may only be deployed to a single subnet in a given availability zone. This
|
83
|
+
* structure ensures that the Lambda function and VPC service endpoints are mutually consistent.
|
84
|
+
*/
|
85
|
+
export interface SubnetAvailabilityZone {
|
86
|
+
/** The subnet ID to install the Lambda data source in. */
|
87
|
+
readonly subnetId: string;
|
88
|
+
/** The availability zone of the subnet. */
|
89
|
+
readonly availabilityZone: string;
|
90
|
+
}
|
91
|
+
/**
|
92
|
+
* The Secure Systems Manager parameter paths the Lambda data source will use to connect to the database.
|
93
|
+
*
|
94
|
+
* These parameters are retrieved from Secure Systems Manager in the same region as the Lambda.
|
95
|
+
*/
|
96
|
+
export interface SqlModelDataSourceDbConnectionConfig {
|
97
|
+
/** The Secure Systems Manager parameter containing the hostname of the database. For RDS-based SQL data sources, this can be the hostname
|
98
|
+
* of a database proxy, cluster, or instance.
|
99
|
+
*/
|
100
|
+
readonly hostnameSsmPath: string;
|
101
|
+
/** The Secure Systems Manager parameter containing the port number of the database proxy, cluster, or instance. */
|
102
|
+
readonly portSsmPath: string;
|
103
|
+
/** The Secure Systems Manager parameter containing the username to use when connecting to the database. */
|
104
|
+
readonly usernameSsmPath: string;
|
105
|
+
/** The Secure Systems Manager parameter containing the password to use when connecting to the database. */
|
106
|
+
readonly passwordSsmPath: string;
|
107
|
+
/** The Secure Systems Manager parameter containing the database name. */
|
108
|
+
readonly databaseNameSsmPath: string;
|
109
|
+
}
|
110
|
+
/**
|
111
|
+
* The input type for defining a ModelDataSourceStrategy used to resolve a field annotated with a `@sql` directive. Although this is a
|
112
|
+
* public type, you should rarely need to use this. The AmplifyGraphqlDefinition factory methods (e.g., `fromString`,
|
113
|
+
* `fromFilesAndStrategy`) will automatically construct this structure for you.
|
114
|
+
*/
|
115
|
+
export interface CustomSqlDataSourceStrategy {
|
116
|
+
/** The built-in type (either "Query" or "Mutation") with which the custom SQL is associated */
|
117
|
+
readonly typeName: 'Query' | 'Mutation';
|
118
|
+
/** The field name with which the custom SQL is associated */
|
119
|
+
readonly fieldName: string;
|
120
|
+
/** The strategy used to create the datasource that will resolve the custom SQL statement. */
|
121
|
+
readonly strategy: SQLLambdaModelDataSourceStrategy;
|
122
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
"use strict";
|
2
|
+
// #########################################################################################################################################
|
3
|
+
// These are the public-facing types used by customers to define their L3 CDK construct. Many of these have corresponding definitions in the
|
4
|
+
// transformer-interfaces package to define internal behavior.
|
5
|
+
//
|
6
|
+
// If you change types in this file (the customer-facing interface), be sure to make corresponding changes to
|
7
|
+
// amplify-graphql-transformer-interfaces/src/model-datasource (the internal implementation)
|
8
|
+
// #########################################################################################################################################
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZGF0YXNvdXJjZS1zdHJhdGVneS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tb2RlbC1kYXRhc291cmNlLXN0cmF0ZWd5LXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0SUFBNEk7QUFDNUksNElBQTRJO0FBQzVJLDhEQUE4RDtBQUM5RCxFQUFFO0FBQ0YsNkdBQTZHO0FBQzdHLDRGQUE0RjtBQUM1Riw0SUFBNEkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gVGhlc2UgYXJlIHRoZSBwdWJsaWMtZmFjaW5nIHR5cGVzIHVzZWQgYnkgY3VzdG9tZXJzIHRvIGRlZmluZSB0aGVpciBMMyBDREsgY29uc3RydWN0LiBNYW55IG9mIHRoZXNlIGhhdmUgY29ycmVzcG9uZGluZyBkZWZpbml0aW9ucyBpbiB0aGVcbi8vIHRyYW5zZm9ybWVyLWludGVyZmFjZXMgcGFja2FnZSB0byBkZWZpbmUgaW50ZXJuYWwgYmVoYXZpb3IuXG4vL1xuLy8gSWYgeW91IGNoYW5nZSB0eXBlcyBpbiB0aGlzIGZpbGUgKHRoZSBjdXN0b21lci1mYWNpbmcgaW50ZXJmYWNlKSwgYmUgc3VyZSB0byBtYWtlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0b1xuLy8gYW1wbGlmeS1ncmFwaHFsLXRyYW5zZm9ybWVyLWludGVyZmFjZXMvc3JjL21vZGVsLWRhdGFzb3VyY2UgKHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbilcbi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbi8qKlxuICogQWxsIGtub3duIE1vZGVsRGF0YVNvdXJjZVN0cmF0ZWdpZXMuIENvbmNyZXRlIHN0cmF0ZWdpZXMgdmFyeSB3aWRlbHkgaW4gdGhlaXIgcmVxdWlyZW1lbnRzIGFuZCBpbXBsZW1lbnRhdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5ID1cbiAgfCBEZWZhdWx0RHluYW1vRGJNb2RlbERhdGFTb3VyY2VTdHJhdGVneVxuICB8IEFtcGxpZnlEeW5hbW9EYk1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5XG4gIHwgU1FMTGFtYmRhTW9kZWxEYXRhU291cmNlU3RyYXRlZ3k7XG5cbi8qKlxuICogQWxsIHN1cHBvcnRlZCBkYXRhYmFzZSB0eXBlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlc29sdmUgbW9kZWxzLlxuICovXG5leHBvcnQgdHlwZSBNb2RlbERhdGFTb3VyY2VTdHJhdGVneURiVHlwZSA9ICdEWU5BTU9EQicgfCBNb2RlbERhdGFTb3VyY2VTdHJhdGVneVNxbERiVHlwZTtcblxuLyoqXG4gKiBBbGwgc3VwcG9ydGVkIFNRTCBkYXRhYmFzZSB0eXBlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlc29sdmUgbW9kZWxzLlxuICovXG5leHBvcnQgdHlwZSBNb2RlbERhdGFTb3VyY2VTdHJhdGVneVNxbERiVHlwZSA9ICdNWVNRTCcgfCAnUE9TVEdSRVMnO1xuXG4vKipcbiAqIFVzZSBkZWZhdWx0IENsb3VkRm9ybWF0aW9uIHR5cGUgJ0FXUzo6RHluYW1vREI6OlRhYmxlJyB0byBwcm92aXNpb24gdGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdER5bmFtb0RiTW9kZWxEYXRhU291cmNlU3RyYXRlZ3kge1xuICByZWFkb25seSBkYlR5cGU6ICdEWU5BTU9EQic7XG4gIHJlYWRvbmx5IHByb3Zpc2lvblN0cmF0ZWd5OiAnREVGQVVMVCc7XG59XG5cbi8qKlxuICogVXNlIGN1c3RvbSByZXNvdXJjZSB0eXBlICdDdXN0b206OkFtcGxpZnlEeW5hbW9EQlRhYmxlJyB0byBwcm92aXNpb24gdGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW1wbGlmeUR5bmFtb0RiTW9kZWxEYXRhU291cmNlU3RyYXRlZ3kge1xuICByZWFkb25seSBkYlR5cGU6ICdEWU5BTU9EQic7XG4gIHJlYWRvbmx5IHByb3Zpc2lvblN0cmF0ZWd5OiAnQU1QTElGWV9UQUJMRSc7XG59XG5cbi8qKlxuICogQSBzdHJhdGVneSB0aGF0IGNyZWF0ZXMgYSBMYW1iZGEgdG8gY29ubmVjdCB0byBhIHByZS1leGlzdGluZyBTUUwgdGFibGUgdG8gcmVzb2x2ZSBtb2RlbCBkYXRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNRTExhbWJkYU1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdHJhdGVneS4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gbmFtZSB0aGUgQXBwU3luYyBEYXRhU291cmNlIGl0c2VsZiwgcGx1cyBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMgbGlrZSByZXNvbHZlciBMYW1iZGFzLlxuICAgKiBUaGlzIG5hbWUgbXVzdCBiZSB1bmlxdWUgYWNyb3NzIGFsbCBzY2hlbWEgZGVmaW5pdGlvbnMgaW4gYSBHcmFwaFFMIEFQSS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIFNRTCBkYXRhYmFzZSB1c2VkIHRvIHByb2Nlc3MgbW9kZWwgb3BlcmF0aW9ucyBmb3IgdGhpcyBkZWZpbml0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGJUeXBlOiBNb2RlbERhdGFTb3VyY2VTdHJhdGVneVNxbERiVHlwZTtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlcnMgdGhlIExhbWJkYSBkYXRhIHNvdXJjZSB3aWxsIHVzZSB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIHJlYWRvbmx5IGRiQ29ubmVjdGlvbkNvbmZpZzogU3FsTW9kZWxEYXRhU291cmNlRGJDb25uZWN0aW9uQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgVlBDIGludG8gd2hpY2ggdG8gaW5zdGFsbCB0aGUgTGFtYmRhLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZztcblxuICAvKipcbiAgICogQ3VzdG9tIFNRTCBzdGF0ZW1lbnRzLiBUaGUga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgYHJlZmVyZW5jZXNgIGF0dHJpYnV0ZSBvZiB0aGUgYEBzcWxgIGRpcmVjdGl2ZSBpbiB0aGUgYHNjaGVtYWA7IHRoZSB2YWx1ZSBpcyB0aGUgU1FMXG4gICAqIHRvIGJlIGV4ZWN1dGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tU3FsU3RhdGVtZW50cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgcHJvdmlzaW9uZWQgY29uY3VycmVuY3kgb2YgdGhlIExhbWJkYS5cbiAgICovXG4gIHJlYWRvbmx5IHNxbExhbWJkYVByb3Zpc2lvbmVkQ29uY3VycmVuY3lDb25maWc/OiBQcm92aXNpb25lZENvbmN1cnJlbmN5Q29uZmlnO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIFZQQyBpbiB3aGljaCB0byBpbnN0YWxsIGEgTGFtYmRhIHRvIHJlc29sdmUgcXVlcmllcyBhZ2FpbnN0IGEgU1FMLWJhc2VkIGRhdGEgc291cmNlLiBUaGUgU1FMIExhbWJkYSB3aWxsIGJlIGRlcGxveWVkXG4gKiBpbnRvIHRoZSBzcGVjaWZpZWQgVlBDLCBzdWJuZXRzLCBhbmQgc2VjdXJpdHkgZ3JvdXBzLiBUaGUgc3BlY2lmaWVkIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGluIHRoZSBzYW1lIFZQQy4gVGhlIFZQQyBtdXN0XG4gKiBoYXZlIGF0IGxlYXN0IG9uZSBzdWJuZXQuIFRoZSBjb25zdHJ1Y3Qgd2lsbCBhbHNvIGNyZWF0ZSBWUEMgc2VydmljZSBlbmRwb2ludHMgaW4gdGhlIHNwZWNpZmllZCBzdWJuZXRzLCBhcyB3ZWxsIGFzIGluYm91bmQgc2VjdXJpdHlcbiAqIHJ1bGVzLCB0byBhbGxvdyB0cmFmZmljIG9uIHBvcnQgNDQzIHdpdGhpbiBlYWNoIHNlY3VyaXR5IGdyb3VwLiBUaGlzIGFsbG93cyB0aGUgTGFtYmRhIHRvIHJlYWQgZGF0YWJhc2UgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiBmcm9tXG4gKiBTZWN1cmUgU3lzdGVtcyBNYW5hZ2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0NvbmZpZyB7XG4gIC8qKiBUaGUgVlBDIHRvIGluc3RhbGwgdGhlIExhbWJkYSBkYXRhIHNvdXJjZSBpbi4gKi9cbiAgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKiogVGhlIHNlY3VyaXR5IGdyb3VwcyB0byBpbnN0YWxsIHRoZSBMYW1iZGEgZGF0YSBzb3VyY2UgaW4uICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKiBUaGUgc3VibmV0cyB0byBpbnN0YWxsIHRoZSBMYW1iZGEgZGF0YSBzb3VyY2UgaW4sIG9uZSBwZXIgYXZhaWxhYmlsaXR5IHpvbmUuICovXG4gIHJlYWRvbmx5IHN1Ym5ldEF2YWlsYWJpbGl0eVpvbmVDb25maWc6IFN1Ym5ldEF2YWlsYWJpbGl0eVpvbmVbXTtcbn1cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHByb3Zpc2lvbmVkIGNvbmN1cnJlbmN5IG9mIHRoZSBMYW1iZGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlzaW9uZWRDb25jdXJyZW5jeUNvbmZpZyB7XG4gIC8qKiBUaGUgYW1vdW50IG9mIHByb3Zpc2lvbmVkIGNvbmN1cnJlbmN5IHRvIGFsbG9jYXRlLiAqKi9cbiAgcmVhZG9ubHkgcHJvdmlzaW9uZWRDb25jdXJyZW50RXhlY3V0aW9uczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFN1Ym5ldCBjb25maWd1cmF0aW9uIGZvciBWUEMgZW5kcG9pbnRzIHVzZWQgYnkgYSBMYW1iZGEgcmVzb2x2ZXIgZm9yIGEgU1FMLWJhc2VkIGRhdGEgc291cmNlLiBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgbXVsdGlwbGVcbiAqIHN1Ym5ldHMgaW4gYSBzaW5nbGUgYXZhaWxhYmlsaXR5IHpvbmUsIFZQQyBzZXJ2aWNlIGVuZHBvaW50cyBtYXkgb25seSBiZSBkZXBsb3llZCB0byBhIHNpbmdsZSBzdWJuZXQgaW4gYSBnaXZlbiBhdmFpbGFiaWxpdHkgem9uZS4gVGhpc1xuICogc3RydWN0dXJlIGVuc3VyZXMgdGhhdCB0aGUgTGFtYmRhIGZ1bmN0aW9uIGFuZCBWUEMgc2VydmljZSBlbmRwb2ludHMgYXJlIG11dHVhbGx5IGNvbnNpc3RlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0QXZhaWxhYmlsaXR5Wm9uZSB7XG4gIC8qKiBUaGUgc3VibmV0IElEIHRvIGluc3RhbGwgdGhlIExhbWJkYSBkYXRhIHNvdXJjZSBpbi4gKi9cbiAgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZztcblxuICAvKiogVGhlIGF2YWlsYWJpbGl0eSB6b25lIG9mIHRoZSBzdWJuZXQuICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgU2VjdXJlIFN5c3RlbXMgTWFuYWdlciBwYXJhbWV0ZXIgcGF0aHMgdGhlIExhbWJkYSBkYXRhIHNvdXJjZSB3aWxsIHVzZSB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZS5cbiAqXG4gKiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSByZXRyaWV2ZWQgZnJvbSBTZWN1cmUgU3lzdGVtcyBNYW5hZ2VyIGluIHRoZSBzYW1lIHJlZ2lvbiBhcyB0aGUgTGFtYmRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNxbE1vZGVsRGF0YVNvdXJjZURiQ29ubmVjdGlvbkNvbmZpZyB7XG4gIC8qKiBUaGUgU2VjdXJlIFN5c3RlbXMgTWFuYWdlciBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgaG9zdG5hbWUgb2YgdGhlIGRhdGFiYXNlLiBGb3IgUkRTLWJhc2VkIFNRTCBkYXRhIHNvdXJjZXMsIHRoaXMgY2FuIGJlIHRoZSBob3N0bmFtZVxuICAgKiBvZiBhIGRhdGFiYXNlIHByb3h5LCBjbHVzdGVyLCBvciBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RuYW1lU3NtUGF0aDogc3RyaW5nO1xuXG4gIC8qKiBUaGUgU2VjdXJlIFN5c3RlbXMgTWFuYWdlciBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIGRhdGFiYXNlIHByb3h5LCBjbHVzdGVyLCBvciBpbnN0YW5jZS4gKi9cbiAgcmVhZG9ubHkgcG9ydFNzbVBhdGg6IHN0cmluZztcblxuICAvKiogVGhlIFNlY3VyZSBTeXN0ZW1zIE1hbmFnZXIgcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIHVzZXJuYW1lIHRvIHVzZSB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIGRhdGFiYXNlLiAqL1xuICByZWFkb25seSB1c2VybmFtZVNzbVBhdGg6IHN0cmluZztcblxuICAvKiogVGhlIFNlY3VyZSBTeXN0ZW1zIE1hbmFnZXIgcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIHBhc3N3b3JkIHRvIHVzZSB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIGRhdGFiYXNlLiAqL1xuICByZWFkb25seSBwYXNzd29yZFNzbVBhdGg6IHN0cmluZztcblxuICAvKiogVGhlIFNlY3VyZSBTeXN0ZW1zIE1hbmFnZXIgcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIGRhdGFiYXNlIG5hbWUuICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZVNzbVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW5wdXQgdHlwZSBmb3IgZGVmaW5pbmcgYSBNb2RlbERhdGFTb3VyY2VTdHJhdGVneSB1c2VkIHRvIHJlc29sdmUgYSBmaWVsZCBhbm5vdGF0ZWQgd2l0aCBhIGBAc3FsYCBkaXJlY3RpdmUuIEFsdGhvdWdoIHRoaXMgaXMgYVxuICogcHVibGljIHR5cGUsIHlvdSBzaG91bGQgcmFyZWx5IG5lZWQgdG8gdXNlIHRoaXMuIFRoZSBBbXBsaWZ5R3JhcGhxbERlZmluaXRpb24gZmFjdG9yeSBtZXRob2RzIChlLmcuLCBgZnJvbVN0cmluZ2AsXG4gKiBgZnJvbUZpbGVzQW5kU3RyYXRlZ3lgKSB3aWxsIGF1dG9tYXRpY2FsbHkgY29uc3RydWN0IHRoaXMgc3RydWN0dXJlIGZvciB5b3UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tU3FsRGF0YVNvdXJjZVN0cmF0ZWd5IHtcbiAgLyoqIFRoZSBidWlsdC1pbiB0eXBlIChlaXRoZXIgXCJRdWVyeVwiIG9yIFwiTXV0YXRpb25cIikgd2l0aCB3aGljaCB0aGUgY3VzdG9tIFNRTCBpcyBhc3NvY2lhdGVkICovXG4gIHJlYWRvbmx5IHR5cGVOYW1lOiAnUXVlcnknIHwgJ011dGF0aW9uJztcblxuICAvKiogVGhlIGZpZWxkIG5hbWUgd2l0aCB3aGljaCB0aGUgY3VzdG9tIFNRTCBpcyBhc3NvY2lhdGVkICovXG4gIHJlYWRvbmx5IGZpZWxkTmFtZTogc3RyaW5nO1xuXG4gIC8qKiBUaGUgc3RyYXRlZ3kgdXNlZCB0byBjcmVhdGUgdGhlIGRhdGFzb3VyY2UgdGhhdCB3aWxsIHJlc29sdmUgdGhlIGN1c3RvbSBTUUwgc3RhdGVtZW50LiAqL1xuICByZWFkb25seSBzdHJhdGVneTogU1FMTGFtYmRhTW9kZWxEYXRhU291cmNlU3RyYXRlZ3k7XG59XG4iXX0=
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { SQLLambdaModelDataSourceStrategy, SqlModelDataSourceDbConnectionConfig } from './types';
|
1
|
+
import { SQLLambdaModelDataSourceStrategy, SqlModelDataSourceDbConnectionConfig } from './model-datasource-strategy-types';
|
2
2
|
/**
|
3
3
|
* Type predicate that returns true if the object is a SQLLambdaModelDataSourceStrategy.
|
4
4
|
* @param obj the object to inspect
|
@@ -5,6 +5,7 @@ exports.SQLLambdaModelDataSourceStrategyFactory = exports.isSqlModelDataSourceDb
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
6
6
|
const fs = require("fs");
|
7
7
|
const path = require("path");
|
8
|
+
const graphql_transformer_core_1 = require("@aws-amplify/graphql-transformer-core");
|
8
9
|
/**
|
9
10
|
* Type predicate that returns true if the object is a SQLLambdaModelDataSourceStrategy.
|
10
11
|
* @param obj the object to inspect
|
@@ -14,8 +15,7 @@ const isSQLLambdaModelDataSourceStrategy = (obj) => {
|
|
14
15
|
return ((typeof obj === 'object' || typeof obj === 'function') &&
|
15
16
|
typeof obj.name === 'string' &&
|
16
17
|
typeof obj.dbType === 'string' &&
|
17
|
-
|
18
|
-
['MYSQL', 'POSTGRES'].includes(obj.dbType) &&
|
18
|
+
(0, graphql_transformer_core_1.isSqlDbType)(obj.dbType) &&
|
19
19
|
(0, exports.isSqlModelDataSourceDbConnectionConfig)(obj.dbConnectionConfig));
|
20
20
|
};
|
21
21
|
exports.isSQLLambdaModelDataSourceStrategy = isSQLLambdaModelDataSourceStrategy;
|
@@ -57,5 +57,5 @@ class SQLLambdaModelDataSourceStrategyFactory {
|
|
57
57
|
}
|
58
58
|
exports.SQLLambdaModelDataSourceStrategyFactory = SQLLambdaModelDataSourceStrategyFactory;
|
59
59
|
_a = JSII_RTTI_SYMBOL_1;
|
60
|
-
SQLLambdaModelDataSourceStrategyFactory[_a] = { fqn: "@aws-amplify/graphql-api-construct.SQLLambdaModelDataSourceStrategyFactory", version: "1.
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
60
|
+
SQLLambdaModelDataSourceStrategyFactory[_a] = { fqn: "@aws-amplify/graphql-api-construct.SQLLambdaModelDataSourceStrategyFactory", version: "1.5.0" };
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLW1vZGVsLWRhdGFzb3VyY2Utc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3FsLW1vZGVsLWRhdGFzb3VyY2Utc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG9GQUFvRTtBQUdwRTs7OztHQUlHO0FBQ0ksTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLEdBQVEsRUFBMkMsRUFBRTtJQUN0RyxPQUFPLENBQ0wsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssVUFBVSxDQUFDO1FBQ3RELE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRO1FBQzVCLE9BQU8sR0FBRyxDQUFDLE1BQU0sS0FBSyxRQUFRO1FBQzlCLElBQUEsc0NBQVcsRUFBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLElBQUEsOENBQXNDLEVBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQy9ELENBQUM7QUFDSixDQUFDLENBQUM7QUFSVyxRQUFBLGtDQUFrQyxzQ0FRN0M7QUFFRjs7OztHQUlHO0FBQ0ksTUFBTSxzQ0FBc0MsR0FBRyxDQUFDLEdBQVEsRUFBK0MsRUFBRTtJQUM5RyxPQUFPLENBQ0wsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssVUFBVSxDQUFDO1FBQ3RELE9BQU8sR0FBRyxDQUFDLGVBQWUsS0FBSyxRQUFRO1FBQ3ZDLE9BQU8sR0FBRyxDQUFDLFdBQVcsS0FBSyxRQUFRO1FBQ25DLE9BQU8sR0FBRyxDQUFDLGVBQWUsS0FBSyxRQUFRO1FBQ3ZDLE9BQU8sR0FBRyxDQUFDLGVBQWUsS0FBSyxRQUFRO1FBQ3ZDLE9BQU8sR0FBRyxDQUFDLG1CQUFtQixLQUFLLFFBQVEsQ0FDNUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQVRXLFFBQUEsc0NBQXNDLDBDQVNqRDtBQUVGOztHQUVHO0FBQ0gsTUFBYSx1Q0FBdUM7SUFDbEQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQ3ZCLFFBQWtCLEVBQ2xCLE9BQXlFO1FBRXpFLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQTBCLEVBQUU7WUFDcEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDM0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQTRCLENBQUMsQ0FBQztRQUVqQyxPQUFPO1lBQ0wsbUJBQW1CO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUM7SUFDSixDQUFDOztBQXJCSCwwRkFzQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgaXNTcWxEYlR5cGUgfSBmcm9tICdAYXdzLWFtcGxpZnkvZ3JhcGhxbC10cmFuc2Zvcm1lci1jb3JlJztcbmltcG9ydCB7IFNRTExhbWJkYU1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5LCBTcWxNb2RlbERhdGFTb3VyY2VEYkNvbm5lY3Rpb25Db25maWcgfSBmcm9tICcuL21vZGVsLWRhdGFzb3VyY2Utc3RyYXRlZ3ktdHlwZXMnO1xuXG4vKipcbiAqIFR5cGUgcHJlZGljYXRlIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBTUUxMYW1iZGFNb2RlbERhdGFTb3VyY2VTdHJhdGVneS5cbiAqIEBwYXJhbSBvYmogdGhlIG9iamVjdCB0byBpbnNwZWN0XG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgc2hhcGVkIGxpa2UgYSBTUUxMYW1iZGFNb2RlbERhdGFTb3VyY2VTdHJhdGVneVxuICovXG5leHBvcnQgY29uc3QgaXNTUUxMYW1iZGFNb2RlbERhdGFTb3VyY2VTdHJhdGVneSA9IChvYmo6IGFueSk6IG9iaiBpcyBTUUxMYW1iZGFNb2RlbERhdGFTb3VyY2VTdHJhdGVneSA9PiB7XG4gIHJldHVybiAoXG4gICAgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmXG4gICAgdHlwZW9mIG9iai5uYW1lID09PSAnc3RyaW5nJyAmJlxuICAgIHR5cGVvZiBvYmouZGJUeXBlID09PSAnc3RyaW5nJyAmJlxuICAgIGlzU3FsRGJUeXBlKG9iai5kYlR5cGUpICYmXG4gICAgaXNTcWxNb2RlbERhdGFTb3VyY2VEYkNvbm5lY3Rpb25Db25maWcob2JqLmRiQ29ubmVjdGlvbkNvbmZpZylcbiAgKTtcbn07XG5cbi8qKlxuICogVHlwZSBwcmVkaWNhdGUgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIFNxbE1vZGVsRGF0YVNvdXJjZURiQ29ubmVjdGlvbkNvbmZpZy5cbiAqIEBwYXJhbSBvYmogdGhlIG9iamVjdCB0byBpbnNwZWN0XG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgc2hhcGVkIGxpa2UgYSBTcWxNb2RlbERhdGFTb3VyY2VEYkNvbm5lY3Rpb25Db25maWdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU3FsTW9kZWxEYXRhU291cmNlRGJDb25uZWN0aW9uQ29uZmlnID0gKG9iajogYW55KTogb2JqIGlzIFNxbE1vZGVsRGF0YVNvdXJjZURiQ29ubmVjdGlvbkNvbmZpZyA9PiB7XG4gIHJldHVybiAoXG4gICAgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmXG4gICAgdHlwZW9mIG9iai5ob3N0bmFtZVNzbVBhdGggPT09ICdzdHJpbmcnICYmXG4gICAgdHlwZW9mIG9iai5wb3J0U3NtUGF0aCA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2Ygb2JqLnVzZXJuYW1lU3NtUGF0aCA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2Ygb2JqLnBhc3N3b3JkU3NtUGF0aCA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2Ygb2JqLmRhdGFiYXNlTmFtZVNzbVBhdGggPT09ICdzdHJpbmcnXG4gICk7XG59O1xuXG4vKipcbiAqIENsYXNzIGV4cG9zaW5nIHV0aWxpdGllcyB0byBwcm9kdWNlIFNRTExhbWJkYU1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5IG9iamVjdHMgZ2l2ZW4gdmFyaW91cyBpbnB1dHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTUUxMYW1iZGFNb2RlbERhdGFTb3VyY2VTdHJhdGVneUZhY3Rvcnkge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIFNRTExhbWJkYU1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5IHdoZXJlIHRoZSBiaW5kaW5nJ3MgYGN1c3RvbVNxbFN0YXRlbWVudHNgIGFyZSBwb3B1bGF0ZWQgZnJvbSBgc3FsRmlsZXNgLiBUaGUga2V5XG4gICAqIG9mIHRoZSBgY3VzdG9tU3FsU3RhdGVtZW50c2AgcmVjb3JkIGlzIHRoZSBmaWxlJ3MgYmFzZSBuYW1lICh0aGF0IGlzLCB0aGUgbmFtZSBvZiB0aGUgZmlsZSBtaW51cyB0aGUgZGlyZWN0b3J5IGFuZCBleHRlbnNpb24pLlxuICAgKiBAcGFyYW0gc3FsRmlsZXMgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gbG9hZCBTUUwgc3RhdGVtZW50cyBmcm9tLlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0aGUgcmVtYWluaW5nIFNRTExhbWJkYU1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5IG9wdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgZnJvbUN1c3RvbVNxbEZpbGVzKFxuICAgIHNxbEZpbGVzOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zOiBFeGNsdWRlPFNRTExhbWJkYU1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5LCAnY3VzdG9tU3FsU3RhdGVtZW50cyc+LFxuICApOiBTUUxMYW1iZGFNb2RlbERhdGFTb3VyY2VTdHJhdGVneSB7XG4gICAgY29uc3QgY3VzdG9tU3FsU3RhdGVtZW50cyA9IHNxbEZpbGVzLnJlZHVjZSgoYWNjLCBmaWxlUGF0aCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICAgICAgY29uc3QgYmFzZW5hbWUgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKS5uYW1lO1xuICAgICAgYWNjW2Jhc2VuYW1lXSA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VzdG9tU3FsU3RhdGVtZW50cyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxufVxuIl19
|