@aws-amplify/graphql-transformer-core
Advanced tools
Comparing version 3.0.1 to 3.1.0
54
API.md
@@ -16,2 +16,3 @@ ## API Report File for "@aws-amplify/graphql-transformer-core" | ||
import { CfnApiKey } from 'aws-cdk-lib/aws-appsync'; | ||
import { CfnFunctionConfiguration } from 'aws-cdk-lib/aws-appsync'; | ||
import { CfnGraphQLSchema } from 'aws-cdk-lib/aws-appsync'; | ||
@@ -146,2 +147,5 @@ import { CfnParameter } from 'aws-cdk-lib'; | ||
// @public (undocumented) | ||
export const convertNamedTypeToJSONSchema: (namedType: NamedTypeNode) => JSONSchema; | ||
// @public (undocumented) | ||
function createSyncLambdaIAMPolicy(context: TransformerContextProvider, scope: Construct, name: string, region?: string): iam.Policy; | ||
@@ -301,2 +305,20 @@ | ||
// @public (undocumented) | ||
export const GraphQLScalarJSONSchemaDefinition: { | ||
Boolean: JSONSchema; | ||
Int: JSONSchema; | ||
Float: JSONSchema; | ||
String: JSONSchema; | ||
AWSDateTime: JSONSchema; | ||
ID: JSONSchema; | ||
AWSJSON: JSONSchema; | ||
AWSEmail: JSONSchema; | ||
AWSDate: JSONSchema; | ||
AWSTime: JSONSchema; | ||
AWSTimestamp: JSONSchema; | ||
AWSPhone: JSONSchema; | ||
AWSURL: JSONSchema; | ||
AWSIPAddress: JSONSchema; | ||
}; | ||
// @public (undocumented) | ||
export class GraphQLTransform { | ||
@@ -440,2 +462,5 @@ constructor(options: GraphQLTransformOptions); | ||
// @public (undocumented) | ||
export const isDisallowedScalarType: (type: string) => boolean; | ||
// @public (undocumented) | ||
export const isDynamoDbModel: (ctx: DataSourceStrategiesProvider, typename: string) => boolean; | ||
@@ -470,2 +495,5 @@ | ||
// @public (undocumented) | ||
export const isQueryType: (typeName: string) => typeName is "Query"; | ||
// @public (undocumented) | ||
export const isSqlDbType: (dbType: ModelDataSourceStrategyDbType) => dbType is ModelDataSourceStrategySqlDbType; | ||
@@ -480,2 +508,20 @@ | ||
// @public (undocumented) | ||
export type JSONSchema = { | ||
type: string; | ||
properties?: Record<string, JSONSchema>; | ||
required?: string[]; | ||
items?: JSONSchema; | ||
enum?: (string | number | boolean | null)[]; | ||
minimum?: number; | ||
maximum?: number; | ||
minLength?: number; | ||
maxLength?: number; | ||
pattern?: string; | ||
format?: string; | ||
description?: string; | ||
default?: JSONLike; | ||
additionalProperties?: boolean | JSONSchema; | ||
}; | ||
// @public (undocumented) | ||
export class MappingTemplate { | ||
@@ -622,2 +668,5 @@ // Warning: (ae-forgotten-export) The symbol "InlineTemplate" needs to be exported by the entry point index.d.ts | ||
// @public (undocumented) | ||
export const supportedScalarTypes: string[]; | ||
// @public (undocumented) | ||
export type SyncConfig = SyncConfigOptimistic | SyncConfigServer | SyncConfigLambda; | ||
@@ -778,5 +827,5 @@ | ||
export class TransformerResolver implements TransformerResolverProvider { | ||
constructor(typeName: string, fieldName: string, resolverLogicalId: string, requestMappingTemplate: MappingTemplateProvider, responseMappingTemplate: MappingTemplateProvider, requestSlots: string[], responseSlots: string[], datasource?: DataSourceProvider | undefined); | ||
constructor(typeName: string, fieldName: string, resolverLogicalId: string, requestMappingTemplate: MappingTemplateProvider, responseMappingTemplate: MappingTemplateProvider, requestSlots: string[], responseSlots: string[], datasource?: DataSourceProvider | undefined, runtime?: CfnFunctionConfiguration.AppSyncRuntimeProperty | undefined); | ||
// (undocumented) | ||
addToSlot: (slotName: string, requestMappingTemplate?: MappingTemplateProvider, responseMappingTemplate?: MappingTemplateProvider, dataSource?: DataSourceProvider) => void; | ||
addToSlot: (slotName: string, requestMappingTemplate?: MappingTemplateProvider, responseMappingTemplate?: MappingTemplateProvider, dataSource?: DataSourceProvider, runtime?: CfnFunctionConfiguration.AppSyncRuntimeProperty) => void; | ||
// Warning: (ae-forgotten-export) The symbol "Slot" needs to be exported by the entry point index.d.ts | ||
@@ -829,2 +878,3 @@ // | ||
// src/config/transformer-config.ts:26:3 - (ae-forgotten-export) The symbol "LambdaConflictHandler" needs to be exported by the entry point index.d.ts | ||
// src/utils/ai/json-schema.ts:14:3 - (ae-forgotten-export) The symbol "JSONLike" needs to be exported by the entry point index.d.ts | ||
@@ -831,0 +881,0 @@ // (No @packageDocumentation comment for this package) |
import { MappingTemplateProvider } from '@aws-amplify/graphql-transformer-interfaces'; | ||
import { BaseDataSource } from 'aws-cdk-lib/aws-appsync'; | ||
import { BaseDataSource, CfnFunctionConfiguration } from 'aws-cdk-lib/aws-appsync'; | ||
import { Construct } from 'constructs'; | ||
@@ -13,2 +13,3 @@ import { GraphQLApi } from './graphql-api'; | ||
readonly dataSource: BaseDataSource | string; | ||
readonly runtime: CfnFunctionConfiguration.AppSyncRuntimeProperty | undefined; | ||
} | ||
@@ -15,0 +16,0 @@ export declare class AppSyncFunctionConfiguration extends Construct { |
@@ -6,4 +6,4 @@ "use strict"; | ||
const constructs_1 = require("constructs"); | ||
const template_asset_1 = require("./cdk-compat/template-asset"); | ||
const utils_1 = require("./utils"); | ||
const function_runtime_1 = require("./utils/function-runtime"); | ||
class AppSyncFunctionConfiguration extends constructs_1.Construct { | ||
@@ -13,4 +13,3 @@ constructor(scope, id, props) { | ||
super(scope, id); | ||
const requestTemplate = props.requestMappingTemplate.bind(this, props.api.assetProvider); | ||
const responseTemplate = props.responseMappingTemplate.bind(this, props.api.assetProvider); | ||
const runtimeSpecificProps = (0, function_runtime_1.getRuntimeSpecificFunctionProps)(this, props); | ||
this.function = new aws_appsync_1.CfnFunctionConfiguration(this, `${id}.AppSyncFunction`, { | ||
@@ -22,8 +21,3 @@ name: id, | ||
dataSourceName: props.dataSource instanceof aws_appsync_1.BaseDataSource ? props.dataSource.ds.attrName : props.dataSource, | ||
...(props.requestMappingTemplate instanceof template_asset_1.InlineTemplate | ||
? { requestMappingTemplate: requestTemplate } | ||
: { requestMappingTemplateS3Location: requestTemplate }), | ||
...(props.responseMappingTemplate instanceof template_asset_1.InlineTemplate | ||
? { responseMappingTemplate: responseTemplate } | ||
: { responseMappingTemplateS3Location: responseTemplate }), | ||
...runtimeSpecificProps, | ||
}); | ||
@@ -30,0 +24,0 @@ (0, utils_1.setResourceName)(this.function, { name: id }); |
@@ -5,4 +5,5 @@ export { constructDataSourceStrategies, constructSqlDirectiveDataSourceStrategies, getModelTypeNames, GraphQLTransform, GraphQLTransformOptions, SyncUtils, } from './transformation'; | ||
export { ConflictDetectionType, ConflictHandlerType, ResolverConfig, SyncConfig, SyncConfigOptimistic, SyncConfigServer, SyncConfigLambda, TransformConfig, } from './config/index'; | ||
export { APICategory, collectDirectives, collectDirectivesByTypeNames, constructArrayFieldsStatement, constructAuthFilterStatement, constructFieldMappingInput, constructNonScalarFieldsStatement, DirectiveWrapper, fieldsWithSqlDirective, generateGetArgumentsInput, GetArgumentsOptions, getArrayFields, getConditionInputName, getConnectionName, getDefaultStrategyNameForDbType, getField, getFilterInputName, getImportedRDSTypeFromStrategyDbType, getKeySchema, getModelDataSourceNameForTypeName, getModelDataSourceStrategy, getNonScalarFields, getParameterStoreSecretPath, getPrimaryKeyFieldNodes, getPrimaryKeyFields, getResourceName, getResourceNamesForStrategy, getResourceNamesForStrategyName, getSortKeyFieldNames, getStrategyDbTypeFromModel, getStrategyDbTypeFromTypeNode, getSubscriptionFilterInputName, getTable, getType, isAmplifyDynamoDbModelDataSourceStrategy, isBuiltInGraphqlNode, isDefaultDynamoDbModelDataSourceStrategy, isDynamoDbModel, isDynamoDbType, isModelType, isMutationNode, isObjectTypeDefinitionNode, isQueryNode, isSqlDbType, isSqlModel, isSqlStrategy, normalizeDbType, setResourceName, SQLLambdaResourceNames, } from './utils'; | ||
export { APICategory, collectDirectives, collectDirectivesByTypeNames, constructArrayFieldsStatement, constructAuthFilterStatement, constructFieldMappingInput, constructNonScalarFieldsStatement, DirectiveWrapper, fieldsWithSqlDirective, generateGetArgumentsInput, GetArgumentsOptions, getArrayFields, getConditionInputName, getConnectionName, getDefaultStrategyNameForDbType, getField, getFilterInputName, getImportedRDSTypeFromStrategyDbType, getKeySchema, getModelDataSourceNameForTypeName, getModelDataSourceStrategy, getNonScalarFields, getParameterStoreSecretPath, getPrimaryKeyFieldNodes, getPrimaryKeyFields, getResourceName, getResourceNamesForStrategy, getResourceNamesForStrategyName, getSortKeyFieldNames, getStrategyDbTypeFromModel, getStrategyDbTypeFromTypeNode, getSubscriptionFilterInputName, getTable, getType, isAmplifyDynamoDbModelDataSourceStrategy, isBuiltInGraphqlNode, isDefaultDynamoDbModelDataSourceStrategy, isDynamoDbModel, isDynamoDbType, isModelType, isMutationNode, isObjectTypeDefinitionNode, isQueryNode, isQueryType, isSqlDbType, isSqlModel, isSqlStrategy, normalizeDbType, setResourceName, SQLLambdaResourceNames, } from './utils'; | ||
export type { SetResourceNameProps } from './utils'; | ||
export { type JSONSchema, isDisallowedScalarType, supportedScalarTypes, GraphQLScalarJSONSchemaDefinition, convertNamedTypeToJSONSchema, } from './utils/ai'; | ||
export * from './utils/operation-names'; | ||
@@ -9,0 +10,0 @@ export * from './errors'; |
@@ -17,4 +17,4 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isSqlDbType = exports.isQueryNode = exports.isObjectTypeDefinitionNode = exports.isMutationNode = exports.isModelType = exports.isDynamoDbType = exports.isDynamoDbModel = exports.isDefaultDynamoDbModelDataSourceStrategy = exports.isBuiltInGraphqlNode = exports.isAmplifyDynamoDbModelDataSourceStrategy = exports.getType = exports.getTable = exports.getSubscriptionFilterInputName = exports.getStrategyDbTypeFromTypeNode = exports.getStrategyDbTypeFromModel = exports.getSortKeyFieldNames = exports.getResourceNamesForStrategyName = exports.getResourceNamesForStrategy = exports.getResourceName = exports.getPrimaryKeyFields = exports.getPrimaryKeyFieldNodes = exports.getParameterStoreSecretPath = exports.getNonScalarFields = exports.getModelDataSourceStrategy = exports.getModelDataSourceNameForTypeName = exports.getKeySchema = exports.getImportedRDSTypeFromStrategyDbType = exports.getFilterInputName = exports.getField = exports.getDefaultStrategyNameForDbType = exports.getConnectionName = exports.getConditionInputName = exports.getArrayFields = exports.generateGetArgumentsInput = exports.fieldsWithSqlDirective = exports.DirectiveWrapper = exports.constructNonScalarFieldsStatement = exports.constructFieldMappingInput = exports.constructAuthFilterStatement = exports.constructArrayFieldsStatement = exports.collectDirectivesByTypeNames = exports.collectDirectives = exports.APICategory = exports.ConflictHandlerType = exports.validateModelSchema = exports.SyncUtils = exports.GraphQLTransform = exports.getModelTypeNames = exports.constructSqlDirectiveDataSourceStrategies = exports.constructDataSourceStrategies = void 0; | ||
exports.ObjectDefinitionWrapper = exports.InputObjectDefinitionWrapper = exports.InputFieldWrapper = exports.FieldWrapper = exports.EnumWrapper = exports.MappingTemplate = exports.getAppSyncServiceExtraDirectives = exports.SQL_SCHEMA_FILE_NAME = exports.POSTGRES_DB_TYPE = exports.MYSQL_DB_TYPE = exports.ImportedRDSType = exports.DDB_DEFAULT_DATASOURCE_STRATEGY = exports.DDB_DB_TYPE = exports.DDB_AMPLIFY_MANAGED_DATASOURCE_STRATEGY = exports.StackManager = exports.TransformerResolver = exports.TransformerAuthBase = exports.TransformerPluginBase = exports.TransformerModelEnhancerBase = exports.TransformerModelBase = exports.setResourceName = exports.normalizeDbType = exports.isSqlStrategy = exports.isSqlModel = void 0; | ||
exports.isQueryType = exports.isQueryNode = exports.isObjectTypeDefinitionNode = exports.isMutationNode = exports.isModelType = exports.isDynamoDbType = exports.isDynamoDbModel = exports.isDefaultDynamoDbModelDataSourceStrategy = exports.isBuiltInGraphqlNode = exports.isAmplifyDynamoDbModelDataSourceStrategy = exports.getType = exports.getTable = exports.getSubscriptionFilterInputName = exports.getStrategyDbTypeFromTypeNode = exports.getStrategyDbTypeFromModel = exports.getSortKeyFieldNames = exports.getResourceNamesForStrategyName = exports.getResourceNamesForStrategy = exports.getResourceName = exports.getPrimaryKeyFields = exports.getPrimaryKeyFieldNodes = exports.getParameterStoreSecretPath = exports.getNonScalarFields = exports.getModelDataSourceStrategy = exports.getModelDataSourceNameForTypeName = exports.getKeySchema = exports.getImportedRDSTypeFromStrategyDbType = exports.getFilterInputName = exports.getField = exports.getDefaultStrategyNameForDbType = exports.getConnectionName = exports.getConditionInputName = exports.getArrayFields = exports.generateGetArgumentsInput = exports.fieldsWithSqlDirective = exports.DirectiveWrapper = exports.constructNonScalarFieldsStatement = exports.constructFieldMappingInput = exports.constructAuthFilterStatement = exports.constructArrayFieldsStatement = exports.collectDirectivesByTypeNames = exports.collectDirectives = exports.APICategory = exports.ConflictHandlerType = exports.validateModelSchema = exports.SyncUtils = exports.GraphQLTransform = exports.getModelTypeNames = exports.constructSqlDirectiveDataSourceStrategies = exports.constructDataSourceStrategies = void 0; | ||
exports.ObjectDefinitionWrapper = exports.InputObjectDefinitionWrapper = exports.InputFieldWrapper = exports.FieldWrapper = exports.EnumWrapper = exports.MappingTemplate = exports.getAppSyncServiceExtraDirectives = exports.SQL_SCHEMA_FILE_NAME = exports.POSTGRES_DB_TYPE = exports.MYSQL_DB_TYPE = exports.ImportedRDSType = exports.DDB_DEFAULT_DATASOURCE_STRATEGY = exports.DDB_DB_TYPE = exports.DDB_AMPLIFY_MANAGED_DATASOURCE_STRATEGY = exports.StackManager = exports.TransformerResolver = exports.TransformerAuthBase = exports.TransformerPluginBase = exports.TransformerModelEnhancerBase = exports.TransformerModelBase = exports.convertNamedTypeToJSONSchema = exports.GraphQLScalarJSONSchemaDefinition = exports.supportedScalarTypes = exports.isDisallowedScalarType = exports.setResourceName = exports.normalizeDbType = exports.isSqlStrategy = exports.isSqlModel = exports.isSqlDbType = void 0; | ||
const graphql_1 = require("graphql"); | ||
@@ -75,2 +75,3 @@ const validation_1 = require("./transformation/validation"); | ||
Object.defineProperty(exports, "isQueryNode", { enumerable: true, get: function () { return utils_1.isQueryNode; } }); | ||
Object.defineProperty(exports, "isQueryType", { enumerable: true, get: function () { return utils_1.isQueryType; } }); | ||
Object.defineProperty(exports, "isSqlDbType", { enumerable: true, get: function () { return utils_1.isSqlDbType; } }); | ||
@@ -81,2 +82,7 @@ Object.defineProperty(exports, "isSqlModel", { enumerable: true, get: function () { return utils_1.isSqlModel; } }); | ||
Object.defineProperty(exports, "setResourceName", { enumerable: true, get: function () { return utils_1.setResourceName; } }); | ||
var ai_1 = require("./utils/ai"); | ||
Object.defineProperty(exports, "isDisallowedScalarType", { enumerable: true, get: function () { return ai_1.isDisallowedScalarType; } }); | ||
Object.defineProperty(exports, "supportedScalarTypes", { enumerable: true, get: function () { return ai_1.supportedScalarTypes; } }); | ||
Object.defineProperty(exports, "GraphQLScalarJSONSchemaDefinition", { enumerable: true, get: function () { return ai_1.GraphQLScalarJSONSchemaDefinition; } }); | ||
Object.defineProperty(exports, "convertNamedTypeToJSONSchema", { enumerable: true, get: function () { return ai_1.convertNamedTypeToJSONSchema; } }); | ||
__exportStar(require("./utils/operation-names"), exports); | ||
@@ -83,0 +89,0 @@ __exportStar(require("./errors"), exports); |
import { DynamoDbDataSourceOptions, MappingTemplateProvider, SearchableDataSourceOptions, TransformHostProvider, VpcConfig } from '@aws-amplify/graphql-transformer-interfaces'; | ||
import { BaseDataSource, DataSourceOptions, DynamoDbDataSource, HttpDataSource, HttpDataSourceOptions, LambdaDataSource, NoneDataSource, CfnResolver } from 'aws-cdk-lib/aws-appsync'; | ||
import { BaseDataSource, DataSourceOptions, DynamoDbDataSource, HttpDataSource, HttpDataSourceOptions, LambdaDataSource, NoneDataSource, CfnResolver, CfnFunctionConfiguration } from 'aws-cdk-lib/aws-appsync'; | ||
import { ITable } from 'aws-cdk-lib/aws-dynamodb'; | ||
@@ -30,4 +30,4 @@ import { IRole } from 'aws-cdk-lib/aws-iam'; | ||
addLambdaDataSource: (name: string, lambdaFunction: IFunction, options?: DataSourceOptions, scope?: Construct) => LambdaDataSource; | ||
addAppSyncFunction: (name: string, requestMappingTemplate: MappingTemplateProvider, responseMappingTemplate: MappingTemplateProvider, dataSourceName: string, scope?: Construct) => AppSyncFunctionConfiguration; | ||
addResolver: (typeName: string, fieldName: string, requestMappingTemplate: MappingTemplateProvider, responseMappingTemplate: MappingTemplateProvider, resolverLogicalId?: string, dataSourceName?: string, pipelineConfig?: string[], scope?: Construct) => CfnResolver; | ||
addAppSyncFunction: (name: string, requestMappingTemplate: MappingTemplateProvider, responseMappingTemplate: MappingTemplateProvider, dataSourceName: string, scope?: Construct, runtime?: CfnFunctionConfiguration.AppSyncRuntimeProperty) => AppSyncFunctionConfiguration; | ||
addResolver: (typeName: string, fieldName: string, requestMappingTemplate: MappingTemplateProvider, responseMappingTemplate: MappingTemplateProvider, resolverLogicalId?: string, dataSourceName?: string, pipelineConfig?: string[], scope?: Construct, runtime?: CfnFunctionConfiguration.AppSyncRuntimeProperty) => CfnResolver; | ||
addLambdaFunction: (functionName: string, functionKey: string, handlerName: string, filePath: string, runtime: Runtime, layers?: ILayerVersion[], role?: IRole, environment?: { | ||
@@ -34,0 +34,0 @@ [key: string]: string; |
@@ -16,2 +16,3 @@ "use strict"; | ||
const utils_1 = require("./utils"); | ||
const function_runtime_1 = require("./utils/function-runtime"); | ||
class DefaultTransformHost { | ||
@@ -62,3 +63,3 @@ constructor(options) { | ||
}; | ||
this.addAppSyncFunction = (name, requestMappingTemplate, responseMappingTemplate, dataSourceName, scope) => { | ||
this.addAppSyncFunction = (name, requestMappingTemplate, responseMappingTemplate, dataSourceName, scope, runtime) => { | ||
if (dataSourceName && !aws_cdk_lib_1.Token.isUnresolved(dataSourceName) && !this.dataSources.has(dataSourceName)) { | ||
@@ -85,2 +86,3 @@ throw new Error(`DataSource ${dataSourceName} is missing in the API`); | ||
responseMappingTemplate, | ||
runtime, | ||
}); | ||
@@ -90,10 +92,14 @@ this.appsyncFunctions.set(slotHash, fn); | ||
}; | ||
this.addResolver = (typeName, fieldName, requestMappingTemplate, responseMappingTemplate, resolverLogicalId, dataSourceName, pipelineConfig, scope) => { | ||
this.addResolver = (typeName, fieldName, requestMappingTemplate, responseMappingTemplate, resolverLogicalId, dataSourceName, pipelineConfig, scope, runtime) => { | ||
if (dataSourceName && !aws_cdk_lib_1.Token.isUnresolved(dataSourceName) && !this.dataSources.has(dataSourceName)) { | ||
throw new Error(`DataSource ${dataSourceName} is missing in the API`); | ||
} | ||
const requestTemplateLocation = requestMappingTemplate.bind(this.api, this.api.assetProvider); | ||
const responseTemplateLocation = responseMappingTemplate.bind(this.api, this.api.assetProvider); | ||
const resolverName = (0, graphql_transformer_common_1.toCamelCase)([(0, graphql_transformer_common_1.resourceName)(typeName), (0, graphql_transformer_common_1.resourceName)(fieldName), 'Resolver']); | ||
const resourceId = resolverLogicalId !== null && resolverLogicalId !== void 0 ? resolverLogicalId : graphql_transformer_common_1.ResolverResourceIDs.ResolverResourceID(typeName, fieldName); | ||
const runtimeSpecificProps = (0, function_runtime_1.getRuntimeSpecificFunctionProps)(this.api, { | ||
requestMappingTemplate, | ||
responseMappingTemplate, | ||
runtime, | ||
api: this.api, | ||
}); | ||
if (dataSourceName) { | ||
@@ -107,8 +113,3 @@ const dataSource = this.dataSources.get(dataSourceName); | ||
dataSourceName: (dataSource === null || dataSource === void 0 ? void 0 : dataSource.ds.attrName) || dataSourceName, | ||
...(requestMappingTemplate instanceof template_asset_1.InlineTemplate | ||
? { requestMappingTemplate: requestTemplateLocation } | ||
: { requestMappingTemplateS3Location: requestTemplateLocation }), | ||
...(responseMappingTemplate instanceof template_asset_1.InlineTemplate | ||
? { responseMappingTemplate: responseTemplateLocation } | ||
: { responseMappingTemplateS3Location: responseTemplateLocation }), | ||
...runtimeSpecificProps, | ||
}); | ||
@@ -126,11 +127,6 @@ resolver.overrideLogicalId(resourceId); | ||
kind: 'PIPELINE', | ||
...(requestMappingTemplate instanceof template_asset_1.InlineTemplate | ||
? { requestMappingTemplate: requestTemplateLocation } | ||
: { requestMappingTemplateS3Location: requestTemplateLocation }), | ||
...(responseMappingTemplate instanceof template_asset_1.InlineTemplate | ||
? { responseMappingTemplate: responseTemplateLocation } | ||
: { responseMappingTemplateS3Location: responseTemplateLocation }), | ||
pipelineConfig: { | ||
functions: pipelineConfig, | ||
}, | ||
...runtimeSpecificProps, | ||
}); | ||
@@ -137,0 +133,0 @@ resolver.overrideLogicalId(resourceId); |
import { AppSyncFunctionConfigurationProvider, DataSourceProvider, GraphQLAPIProvider, MappingTemplateProvider, TransformerContextProvider, TransformerResolverProvider, TransformerResolversManagerProvider } from '@aws-amplify/graphql-transformer-interfaces'; | ||
import { CfnFunctionConfiguration } from 'aws-cdk-lib/aws-appsync'; | ||
import { Stack } from 'aws-cdk-lib'; | ||
@@ -8,2 +9,3 @@ import { Construct } from 'constructs'; | ||
dataSource?: DataSourceProvider; | ||
runtime?: CfnFunctionConfiguration.AppSyncRuntimeProperty; | ||
}; | ||
@@ -31,9 +33,10 @@ export declare const NONE_DATA_SOURCE_NAME = "NONE_DS"; | ||
private datasource?; | ||
private runtime?; | ||
private readonly slotMap; | ||
private readonly slotNames; | ||
private scope?; | ||
constructor(typeName: string, fieldName: string, resolverLogicalId: string, requestMappingTemplate: MappingTemplateProvider, responseMappingTemplate: MappingTemplateProvider, requestSlots: string[], responseSlots: string[], datasource?: DataSourceProvider | undefined); | ||
constructor(typeName: string, fieldName: string, resolverLogicalId: string, requestMappingTemplate: MappingTemplateProvider, responseMappingTemplate: MappingTemplateProvider, requestSlots: string[], responseSlots: string[], datasource?: DataSourceProvider | undefined, runtime?: CfnFunctionConfiguration.AppSyncRuntimeProperty | undefined); | ||
mapToStack: (stack: Stack) => void; | ||
setScope: (scope: Construct) => void; | ||
addToSlot: (slotName: string, requestMappingTemplate?: MappingTemplateProvider, responseMappingTemplate?: MappingTemplateProvider, dataSource?: DataSourceProvider) => void; | ||
addToSlot: (slotName: string, requestMappingTemplate?: MappingTemplateProvider, responseMappingTemplate?: MappingTemplateProvider, dataSource?: DataSourceProvider, runtime?: CfnFunctionConfiguration.AppSyncRuntimeProperty) => void; | ||
slotExists: (slotName: string, requestMappingTemplate?: MappingTemplateProvider, responseMappingTemplate?: MappingTemplateProvider) => boolean; | ||
@@ -46,4 +49,5 @@ findSlot: (slotName: string, requestMappingTemplate?: MappingTemplateProvider, responseMappingTemplate?: MappingTemplateProvider) => Slot | undefined; | ||
private ensureNoneDataSource; | ||
private createStashStatementGenerator; | ||
} | ||
export {}; | ||
//# sourceMappingURL=resolver.d.ts.map |
@@ -33,2 +33,3 @@ "use strict"; | ||
const SyncUtils = __importStar(require("../transformation/sync-utils")); | ||
const function_runtime_1 = require("../utils/function-runtime"); | ||
exports.NONE_DATA_SOURCE_NAME = 'NONE_DS'; | ||
@@ -73,3 +74,3 @@ class ResolverManager { | ||
class TransformerResolver { | ||
constructor(typeName, fieldName, resolverLogicalId, requestMappingTemplate, responseMappingTemplate, requestSlots, responseSlots, datasource) { | ||
constructor(typeName, fieldName, resolverLogicalId, requestMappingTemplate, responseMappingTemplate, requestSlots, responseSlots, datasource, runtime) { | ||
this.typeName = typeName; | ||
@@ -83,2 +84,3 @@ this.fieldName = fieldName; | ||
this.datasource = datasource; | ||
this.runtime = runtime; | ||
this.slotMap = new Map(); | ||
@@ -91,3 +93,3 @@ this.mapToStack = (stack) => { | ||
}; | ||
this.addToSlot = (slotName, requestMappingTemplate, responseMappingTemplate, dataSource) => { | ||
this.addToSlot = (slotName, requestMappingTemplate, responseMappingTemplate, dataSource, runtime) => { | ||
if (!this.slotNames.has(slotName)) { | ||
@@ -111,2 +113,3 @@ throw new Error(`Resolver is missing slot ${slotName}`); | ||
dataSource, | ||
runtime, | ||
}); | ||
@@ -155,3 +158,4 @@ } | ||
[this.requestMappingTemplate, this.requestMappingTemplate].map((template) => this.substituteSlotInfo(template, 'main', 0)); | ||
const dataSourceProviderFn = api.host.addAppSyncFunction((0, graphql_transformer_common_1.toPascalCase)([this.typeName, this.fieldName, 'DataResolverFn']), this.requestMappingTemplate, this.responseMappingTemplate, ((_a = this.datasource) === null || _a === void 0 ? void 0 : _a.name) || exports.NONE_DATA_SOURCE_NAME, scope); | ||
const dataSourceProviderFn = api.host.addAppSyncFunction((0, graphql_transformer_common_1.toPascalCase)([this.typeName, this.fieldName, 'DataResolverFn']), this.requestMappingTemplate, this.responseMappingTemplate, ((_a = this.datasource) === null || _a === void 0 ? void 0 : _a.name) || exports.NONE_DATA_SOURCE_NAME, scope, this.runtime); | ||
const { stashString, stashExpression } = this.createStashStatementGenerator(this.runtime); | ||
let dataSourceType = 'NONE'; | ||
@@ -165,3 +169,3 @@ let dataSource = ''; | ||
const tableName = (_b = this.datasource.ds.dynamoDbConfig) === null || _b === void 0 ? void 0 : _b.tableName; | ||
dataSource = `$util.qr($ctx.stash.put("tableName", "${tableName}"))`; | ||
dataSource = stashString({ name: 'tableName', value: tableName }); | ||
if (((_c = this.datasource.ds.dynamoDbConfig) === null || _c === void 0 ? void 0 : _c.deltaSyncConfig) && | ||
@@ -182,3 +186,3 @@ !(0, aws_cdk_lib_1.isResolvableObject)((_d = this.datasource.ds.dynamoDbConfig) === null || _d === void 0 ? void 0 : _d.deltaSyncConfig)) { | ||
}); | ||
dataSource += `\n$util.qr($ctx.stash.put("deltaSyncTableTtl", ${deltaSyncTableTtl}))`; | ||
dataSource += '\n' + stashString({ name: 'deltaSyncTableTtl', value: deltaSyncTableTtl }); | ||
} | ||
@@ -208,3 +212,3 @@ } | ||
const endpoint = (_e = this.datasource.ds.elasticsearchConfig) === null || _e === void 0 ? void 0 : _e.endpoint; | ||
dataSource = `$util.qr($ctx.stash.put("endpoint", "${endpoint}"))`; | ||
dataSource = stashString({ name: 'endpoint', value: endpoint }); | ||
} | ||
@@ -215,3 +219,3 @@ break; | ||
const lambdaFunctionArn = (_f = this.datasource.ds.lambdaConfig) === null || _f === void 0 ? void 0 : _f.lambdaFunctionArn; | ||
dataSource = `$util.qr($ctx.stash.put("lambdaFunctionArn", "${lambdaFunctionArn}"))`; | ||
dataSource = stashString({ name: 'lambdaFunctionArn', value: lambdaFunctionArn }); | ||
} | ||
@@ -222,3 +226,3 @@ break; | ||
const endpoint = (_g = this.datasource.ds.httpConfig) === null || _g === void 0 ? void 0 : _g.endpoint; | ||
dataSource = `$util.qr($ctx.stash.put("endpoint", "${endpoint}"))`; | ||
dataSource = stashString({ name: 'endpoint', value: endpoint }); | ||
} | ||
@@ -231,3 +235,3 @@ break; | ||
const databaseName = (_j = this.datasource.ds.relationalDatabaseConfig) === null || _j === void 0 ? void 0 : _j.rdsHttpEndpointConfig.databaseName; | ||
dataSource = `$util.qr($ctx.stash.metadata.put("databaseName", "${databaseName}"))`; | ||
dataSource = stashString({ name: 'databaseName', value: databaseName }); | ||
} | ||
@@ -240,9 +244,9 @@ break; | ||
let initResolver = (0, ts_dedent_1.dedent) ` | ||
$util.qr($ctx.stash.put("typeName", "${this.typeName}")) | ||
$util.qr($ctx.stash.put("fieldName", "${this.fieldName}")) | ||
$util.qr($ctx.stash.put("conditions", [])) | ||
$util.qr($ctx.stash.put("metadata", {})) | ||
$util.qr($ctx.stash.metadata.put("dataSourceType", "${dataSourceType}")) | ||
$util.qr($ctx.stash.metadata.put("apiId", "${api.apiId}")) | ||
$util.qr($ctx.stash.put("connectionAttributes", {})) | ||
${stashString({ name: 'typeName', value: this.typeName })} | ||
${stashString({ name: 'fieldName', value: this.fieldName })} | ||
${stashExpression({ name: 'conditions', value: '[]' })} | ||
${stashExpression({ name: 'metadata', value: '{}' })} | ||
${stashString({ name: 'dataSourceType', value: dataSourceType, object: 'metadata' })} | ||
${stashString({ name: 'apiId', value: api.apiId, object: 'metadata' })} | ||
${stashExpression({ name: 'connectionAttributes', value: '{}' })} | ||
${dataSource} | ||
@@ -253,4 +257,6 @@ `; | ||
if (authRole) { | ||
const authRoleArn = `arn:aws:sts::${account}:assumed-role/${authRole}/CognitoIdentityCredentials`; | ||
const authRoleStatement = stashString({ name: 'authRole', value: authRoleArn }); | ||
initResolver += (0, ts_dedent_1.dedent) `\n | ||
$util.qr($ctx.stash.put("authRole", "arn:aws:sts::${account}:assumed-role/${authRole}/CognitoIdentityCredentials")) | ||
${authRoleStatement} | ||
`; | ||
@@ -260,4 +266,6 @@ } | ||
if (unauthRole) { | ||
const unauthRoleArn = `arn:aws:sts::${account}:assumed-role/${unauthRole}/CognitoIdentityCredentials`; | ||
const unauthRoleStatement = stashString({ name: 'unauthRole', value: unauthRoleArn }); | ||
initResolver += (0, ts_dedent_1.dedent) `\n | ||
$util.qr($ctx.stash.put("unauthRole", "arn:aws:sts::${account}:assumed-role/${unauthRole}/CognitoIdentityCredentials")) | ||
${unauthRoleStatement} | ||
`; | ||
@@ -267,13 +275,32 @@ } | ||
if (identityPoolId) { | ||
const identityPoolStatement = stashString({ name: 'identityPoolId', value: identityPoolId }); | ||
initResolver += (0, ts_dedent_1.dedent) `\n | ||
$util.qr($ctx.stash.put("identityPoolId", "${identityPoolId}")) | ||
${identityPoolStatement} | ||
`; | ||
} | ||
const adminRoles = (_k = context.synthParameters.adminRoles) !== null && _k !== void 0 ? _k : []; | ||
const adminRolesStatement = stashExpression({ name: 'adminRoles', value: JSON.stringify(adminRoles) }); | ||
initResolver += (0, ts_dedent_1.dedent) `\n | ||
$util.qr($ctx.stash.put("adminRoles", ${JSON.stringify(adminRoles)})) | ||
${adminRolesStatement} | ||
`; | ||
initResolver += '\n$util.toJson({})'; | ||
api.host.addResolver(this.typeName, this.fieldName, cdk_compat_1.MappingTemplate.inlineTemplateFromString(initResolver), cdk_compat_1.MappingTemplate.inlineTemplateFromString('$util.toJson($ctx.prev.result)'), this.resolverLogicalId, undefined, [...requestFns, dataSourceProviderFn, ...responseFns].map((fn) => fn.functionId), scope); | ||
if ((0, function_runtime_1.isJsResolverFnRuntime)(this.runtime)) { | ||
initResolver = (0, ts_dedent_1.dedent) ` | ||
export const request = (ctx) => { | ||
${initResolver} | ||
return {}; | ||
} | ||
`; | ||
} | ||
else { | ||
initResolver += '\n$util.toJson({})'; | ||
} | ||
const initResponseResolver = (0, function_runtime_1.isJsResolverFnRuntime)(this.runtime) | ||
? (0, ts_dedent_1.dedent) ` | ||
export const response = (ctx) => { | ||
return ctx.prev.result; | ||
}; | ||
` | ||
: '$util.toJson($ctx.prev.result)'; | ||
api.host.addResolver(this.typeName, this.fieldName, cdk_compat_1.MappingTemplate.inlineTemplateFromString(initResolver), cdk_compat_1.MappingTemplate.inlineTemplateFromString(initResponseResolver), this.resolverLogicalId, undefined, [...requestFns, dataSourceProviderFn, ...responseFns].map((fn) => fn.functionId), scope, this.runtime); | ||
}; | ||
this.synthesizeResolvers = (scope, api, slotsNames) => { | ||
@@ -290,3 +317,3 @@ const appSyncFunctions = []; | ||
responseMappingTemplate && this.substituteSlotInfo(responseMappingTemplate, slotName, index); | ||
const fn = api.host.addAppSyncFunction(name, requestMappingTemplate || cdk_compat_1.MappingTemplate.inlineTemplateFromString('$util.toJson({})'), responseMappingTemplate || cdk_compat_1.MappingTemplate.inlineTemplateFromString('$util.toJson({})'), (dataSource === null || dataSource === void 0 ? void 0 : dataSource.name) || exports.NONE_DATA_SOURCE_NAME, scope); | ||
const fn = api.host.addAppSyncFunction(name, requestMappingTemplate || cdk_compat_1.MappingTemplate.inlineTemplateFromString('$util.toJson({})'), responseMappingTemplate || cdk_compat_1.MappingTemplate.inlineTemplateFromString('$util.toJson({})'), (dataSource === null || dataSource === void 0 ? void 0 : dataSource.name) || exports.NONE_DATA_SOURCE_NAME, scope, slotItem.runtime); | ||
appSyncFunctions.push(fn); | ||
@@ -333,4 +360,25 @@ } | ||
} | ||
createStashStatementGenerator(runtime) { | ||
const jsStash = (props) => { | ||
const { name, value, object } = props; | ||
const objectPrefix = object ? `.${object}` : ''; | ||
return `ctx.stash${objectPrefix}.${name} = ${value};`; | ||
}; | ||
const generateJsStashStatement = { | ||
stashExpression: (props) => jsStash(props), | ||
stashString: (props) => jsStash({ ...props, value: `"${props.value}"` }), | ||
}; | ||
const vtlStash = (props) => { | ||
const { name, value, object } = props; | ||
const objectPrefix = object ? `.${object}` : ''; | ||
return `$util.qr($ctx.stash${objectPrefix}.put("${name}", ${value}))`; | ||
}; | ||
const generateVtlStashStatement = { | ||
stashExpression: (props) => vtlStash(props), | ||
stashString: (props) => vtlStash({ ...props, value: `"${props.value}"` }), | ||
}; | ||
return (0, function_runtime_1.isJsResolverFnRuntime)(runtime) ? generateJsStashStatement : generateVtlStashStatement; | ||
} | ||
} | ||
exports.TransformerResolver = TransformerResolver; | ||
//# sourceMappingURL=resolver.js.map |
{ | ||
"name": "@aws-amplify/graphql-transformer-core", | ||
"version": "3.0.1", | ||
"version": "3.1.0", | ||
"description": "A framework to transform from GraphQL SDL to AWS CloudFormation.", | ||
@@ -32,8 +32,8 @@ "repository": { | ||
"dependencies": { | ||
"@aws-amplify/graphql-directives": "2.0.0", | ||
"@aws-amplify/graphql-transformer-interfaces": "4.0.1", | ||
"@aws-amplify/graphql-directives": "2.1.0", | ||
"@aws-amplify/graphql-transformer-interfaces": "4.1.0", | ||
"fs-extra": "^8.1.0", | ||
"graphql": "^15.5.0", | ||
"graphql-mapping-template": "5.0.0", | ||
"graphql-transformer-common": "5.0.0", | ||
"graphql-mapping-template": "5.0.1", | ||
"graphql-transformer-common": "5.0.1", | ||
"hjson": "^3.2.2", | ||
@@ -53,3 +53,3 @@ "lodash": "^4.17.21", | ||
"@types/md5": "^2.3.1", | ||
"@types/node": "^12.12.6", | ||
"@types/node": "^18.0.0", | ||
"@types/object-hash": "^2.2.1", | ||
@@ -62,3 +62,5 @@ "@types/uuid": "^9.0.1" | ||
}, | ||
"testURL": "http://localhost", | ||
"testEnvironmentOptions": { | ||
"url": "http://localhost" | ||
}, | ||
"testRegex": "(src/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", | ||
@@ -86,3 +88,2 @@ "moduleFileExtensions": [ | ||
], | ||
"testEnvironment": "../../FixJestEnvironment.js", | ||
"collectCoverageFrom": [ | ||
@@ -93,5 +94,9 @@ "src/**/*.ts" | ||
"/__tests__/" | ||
] | ||
], | ||
"snapshotFormat": { | ||
"escapeString": true, | ||
"printBasicPrototype": true | ||
} | ||
}, | ||
"gitHead": "ff03cb41e09b3a91d1095efe0fb20f3520a5d671" | ||
"gitHead": "47cbcc39b5c28486ff5759d29efee07725bb8b55" | ||
} |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
671476
217
5776
+ Added@aws-amplify/graphql-directives@2.1.0(transitive)
+ Added@aws-amplify/graphql-transformer-interfaces@4.1.0(transitive)
+ Added@aws-cdk/cloud-assembly-schema@36.1.1(transitive)
+ Addedgraphql-mapping-template@5.0.1(transitive)
+ Addedgraphql-transformer-common@5.0.1(transitive)
- Removed@aws-amplify/graphql-directives@2.0.0(transitive)
- Removed@aws-amplify/graphql-transformer-interfaces@4.0.1(transitive)
- Removed@aws-cdk/cloud-assembly-schema@36.0.25(transitive)
- Removedgraphql-mapping-template@5.0.0(transitive)
- Removedgraphql-transformer-common@5.0.0(transitive)