@aws-amplify/data-schema 1.21.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/SchemaProcessor.js +18 -3
- package/dist/cjs/SchemaProcessor.js.map +1 -1
- package/dist/cjs/ai/ModelType.js +3 -0
- package/dist/cjs/ai/ModelType.js.map +1 -1
- package/dist/esm/SchemaProcessor.mjs +18 -3
- package/dist/esm/SchemaProcessor.mjs.map +1 -1
- package/dist/esm/ai/ModelType.d.ts +3 -0
- package/dist/esm/ai/ModelType.mjs +3 -0
- package/dist/esm/ai/ModelType.mjs.map +1 -1
- package/dist/meta/cjs.tsbuildinfo +1 -1
- package/package.json +1 -2
- package/src/SchemaProcessor.ts +18 -3
- package/src/ai/ModelType.ts +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaProcessor.mjs","sources":["../../src/SchemaProcessor.ts"],"sourcesContent":["import { string, ModelFieldType, __generated, } from './ModelField';\nimport { ModelRelationshipTypes, } from './ModelRelationshipField';\nimport { accessData, accessSchemaData, } from './Authorization';\nimport { CustomOperationNames, } from './CustomOperation';\nimport { getBrand } from './util';\nimport { getHandlerData, } from './Handler';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { brandSymbol } from './util/Brand';\nimport { brandName as conversationBrandName, } from './ai/ConversationType';\nimport { CONVERSATION_SCHEMA_GRAPHQL_TYPES } from './ai/ConversationSchemaGraphQLTypes';\nimport { createConversationField } from './ai/ConversationSchemaProcessor';\nfunction isInternalModel(model) {\n if (model.data &&\n !isCustomType(model) &&\n !isCustomOperation(model) &&\n !isConversationRoute(model)) {\n return true;\n }\n return false;\n}\nfunction isEnumType(data) {\n if (data?.type === 'enum') {\n return true;\n }\n return false;\n}\nfunction isCustomType(data) {\n if (data?.data?.type === 'customType') {\n return true;\n }\n return false;\n}\nfunction isConversationRoute(type) {\n return getBrand(type) === conversationBrandName;\n}\nfunction isGenerationInput(input) {\n return Boolean(input?.aiModel && input?.systemPrompt);\n}\nfunction isCustomOperation(type) {\n if (CustomOperationNames.includes(type?.data?.typeName)) {\n return true;\n }\n return false;\n}\nfunction isModelFieldDef(data) {\n return data?.fieldType === 'model';\n}\nfunction isScalarFieldDef(data) {\n return data?.fieldType !== 'model';\n}\nfunction isRefFieldDef(data) {\n return data?.type === 'ref';\n}\nfunction isModelField(field) {\n return isModelFieldDef(field?.data);\n}\nfunction dataSourceIsRef(dataSource) {\n return (typeof dataSource !== 'string' &&\n dataSource?.data &&\n dataSource.data.type === 'ref');\n}\nfunction isScalarField(field) {\n return isScalarFieldDef(field?.data);\n}\nfunction isRefField(field) {\n return isRefFieldDef(field?.data);\n}\nfunction canGenerateFieldType(fieldType) {\n return fieldType === 'Int';\n}\nfunction scalarFieldToGql(fieldDef, identifier, secondaryIndexes = []) {\n const { fieldType, required, array, arrayRequired, default: _default, validation = [], } = fieldDef;\n let field = fieldType;\n if (identifier !== undefined) {\n field += '!';\n if (identifier.length > 1) {\n const [_pk, ...sk] = identifier;\n field += ` @primaryKey(sortKeyFields: [${sk\n .map((sk) => `\"${sk}\"`)\n .join(', ')}])`;\n }\n else {\n field += ' @primaryKey';\n }\n for (const index of secondaryIndexes) {\n field += ` ${index}`;\n }\n if (_default === __generated) {\n field += ` @default`;\n }\n return field;\n }\n if (required === true) {\n field += '!';\n }\n if (array) {\n field = `[${field}]`;\n if (arrayRequired === true) {\n field += '!';\n }\n }\n if (_default === __generated) {\n field += ` @default`;\n }\n else if (_default !== undefined) {\n field += ` @default(value: \"${_default?.toString()}\")`;\n }\n for (const index of secondaryIndexes) {\n field += ` ${index}`;\n }\n // Add validation directives for each validation rule\n for (const validationRule of validation) {\n const valueStr = typeof validationRule.value === 'number' ? validationRule.value.toString() : validationRule.value;\n if (validationRule.errorMessage) {\n field += ` @validate(type: ${validationRule.type}, value: \"${valueStr}\", errorMessage: ${escapeGraphQlString(validationRule.errorMessage)})`;\n }\n else {\n field += ` @validate(type: ${validationRule.type}, value: \"${valueStr}\")`;\n }\n }\n return field;\n}\nfunction modelFieldToGql(fieldDef) {\n const { type, relatedModel, array, valueRequired, arrayRequired, references, } = fieldDef;\n let field = relatedModel;\n if (valueRequired === true) {\n field += '!';\n }\n if (array) {\n field = `[${field}]`;\n }\n if (arrayRequired === true) {\n field += '!';\n }\n if (references && Array.isArray(references) && references.length > 0) {\n field += ` @${type}(references: [${references.map((s) => `\"${String(s)}\"`)}])`;\n }\n else {\n field += ` @${type}`;\n }\n return field;\n}\nfunction refFieldToGql(fieldDef, secondaryIndexes = []) {\n const { link, valueRequired, array, arrayRequired } = fieldDef;\n let field = link;\n if (valueRequired === true) {\n field += '!';\n }\n if (array === true) {\n field = `[${field}]`;\n }\n if (arrayRequired === true) {\n field += '!';\n }\n for (const index of secondaryIndexes) {\n field += ` ${index}`;\n }\n return field;\n}\nfunction enumFieldToGql(enumName, secondaryIndexes = []) {\n let field = enumName;\n for (const index of secondaryIndexes) {\n field += ` ${index}`;\n }\n return field;\n}\nfunction transformFunctionHandler(handlers, functionFieldName) {\n let gqlHandlerContent = '';\n const lambdaFunctionDefinition = {};\n handlers.forEach((handler, idx) => {\n const handlerData = getHandlerData(handler);\n if (typeof handlerData.handler === 'string') {\n gqlHandlerContent += `@function(name: \"${handlerData.handler}\") `;\n }\n else if (typeof handlerData.handler.getInstance === 'function') {\n const fnName = `Fn${capitalize(functionFieldName)}${idx === 0 ? '' : `${idx + 1}`}`;\n lambdaFunctionDefinition[fnName] = handlerData.handler;\n const invocationTypeArg = handlerData.invocationType === 'Event'\n ? ', invocationType: Event)'\n : ')';\n gqlHandlerContent += `@function(name: \"${fnName}\"${invocationTypeArg} `;\n }\n else {\n throw new Error(`Invalid value specified for ${functionFieldName} handler.function(). Expected: defineFunction or string.`);\n }\n });\n return {\n gqlHandlerContent,\n lambdaFunctionDefinition,\n };\n}\nfunction customOperationToGql(typeName, typeDef, authorization, isCustom = false, databaseType, getRefType) {\n const { arguments: fieldArgs, typeName: opType, returnType, handlers, subscriptionSource, } = typeDef.data;\n let callSignature = typeName;\n const implicitTypes = [];\n // When Custom Operations are defined with a Custom Type return type,\n // the Custom Type inherits the operation's auth rules\n let customTypeAuthRules = undefined;\n const { authString } = isCustom\n ? mapToNativeAppSyncAuthDirectives(authorization, true)\n : calculateAuth(authorization);\n /**\n *\n * @param returnType The return type from the `data` field of a customer operation.\n * @param refererTypeName The type the refers {@link returnType} by `a.ref()`.\n * @param shouldAddCustomTypeToImplicitTypes A flag indicates wether it should push\n * the return type resolved CustomType to the `implicitTypes` list.\n * @returns\n */\n const resolveReturnTypeNameFromReturnType = (returnType, { refererTypeName, shouldAddCustomTypeToImplicitTypes = true, }) => {\n if (isRefField(returnType)) {\n const { type } = getRefType(returnType.data.link, typeName);\n if (type === 'CustomType') {\n customTypeAuthRules = {\n typeName: returnType.data.link,\n authRules: authorization,\n };\n }\n return refFieldToGql(returnType?.data);\n }\n else if (isCustomType(returnType)) {\n const returnTypeName = `${capitalize(refererTypeName)}ReturnType`;\n if (shouldAddCustomTypeToImplicitTypes) {\n customTypeAuthRules = {\n typeName: returnTypeName,\n authRules: authorization,\n };\n implicitTypes.push([returnTypeName, returnType]);\n }\n return returnTypeName;\n }\n else if (isEnumType(returnType)) {\n const returnTypeName = `${capitalize(refererTypeName)}ReturnType`;\n implicitTypes.push([returnTypeName, returnType]);\n return returnTypeName;\n }\n else if (isScalarField(returnType)) {\n return scalarFieldToGql(returnType?.data);\n }\n else {\n throw new Error(`Unrecognized return type on ${typeName}`);\n }\n };\n let returnTypeName;\n if (opType === 'Subscription' && returnType === null) {\n // up to this point, we've validated that each subscription resource resolves\n // the same return type, so it's safe to use subscriptionSource[0] here.\n const { type, def } = getRefType(subscriptionSource[0].data.link, typeName);\n if (type === 'CustomOperation') {\n returnTypeName = resolveReturnTypeNameFromReturnType(def.data.returnType, {\n refererTypeName: subscriptionSource[0].data.link,\n shouldAddCustomTypeToImplicitTypes: false,\n });\n }\n else {\n returnTypeName = refFieldToGql(subscriptionSource[0].data);\n }\n }\n else {\n returnTypeName = resolveReturnTypeNameFromReturnType(returnType, {\n refererTypeName: typeName,\n });\n }\n const { inputTypes, argDefinitions, collectedEnums } = generateInputTypes(typeName, fieldArgs, getRefType);\n // Handle collected enums\n for (const [enumName, enumDef] of collectedEnums) {\n if (!implicitTypes.some(([name]) => name === enumName)) {\n implicitTypes.push([enumName, enumDef]);\n }\n }\n if (argDefinitions.length > 0) {\n callSignature += `(${argDefinitions.join(', ')})`;\n }\n const handler = handlers && handlers[0];\n const brand = handler && getBrand(handler);\n let gqlHandlerContent = '';\n let lambdaFunctionDefinition = {};\n let customSqlDataSourceStrategy;\n if (isFunctionHandler(handlers)) {\n ({ gqlHandlerContent, lambdaFunctionDefinition } = transformFunctionHandler(handlers, typeName));\n }\n else if (databaseType === 'sql' && handler && brand === 'inlineSql') {\n gqlHandlerContent = `@sql(statement: ${escapeGraphQlString(String(getHandlerData(handler)))}) `;\n customSqlDataSourceStrategy = {\n typeName: opType,\n fieldName: typeName,\n };\n }\n else if (isSqlReferenceHandler(handlers)) {\n const handlerData = getHandlerData(handlers[0]);\n const entry = resolveEntryPath(handlerData, 'Could not determine import path to construct absolute code path for sql reference handler. Consider using an absolute path instead.');\n const reference = typeof entry === 'string' ? entry : entry.relativePath;\n customSqlDataSourceStrategy = {\n typeName: opType,\n fieldName: typeName,\n entry,\n };\n gqlHandlerContent = `@sql(reference: \"${reference}\") `;\n }\n if (opType === 'Subscription') {\n const subscriptionSources = subscriptionSource\n .flatMap((source) => {\n const refTarget = source.data.link;\n const { type } = getRefType(refTarget, typeName);\n if (type === 'CustomOperation') {\n return refTarget;\n }\n if (type === 'Model') {\n return source.data.mutationOperations.map(\n // capitalize explicitly in case customer used lowercase model name\n (op) => `${op}${capitalize(refTarget)}`);\n }\n })\n .join('\", \"');\n gqlHandlerContent += `@aws_subscribe(mutations: [\"${subscriptionSources}\"]) `;\n }\n if (opType === 'Generation') {\n if (!isGenerationInput(typeDef.data.input)) {\n throw new Error(`Invalid Generation Route definition. A Generation Route must include a valid input. ${typeName} has an invalid or no input defined.`);\n }\n const { aiModel, systemPrompt, inferenceConfiguration } = typeDef.data.input;\n // This is done to escape newlines in potentially multi-line system prompts\n // e.g.\n // generateStuff: a.generation({\n // aiModel: a.ai.model('Claude 3 Haiku'),\n // systemPrompt: `Generate a haiku\n // make it multiline`,\n // }),\n //\n // It doesn't affect non multi-line string inputs for system prompts\n const escapedSystemPrompt = systemPrompt.replace(/\\r?\\n/g, '\\\\n');\n const inferenceConfigurationEntries = Object.entries(inferenceConfiguration ?? {});\n const inferenceConfigurationGql = inferenceConfigurationEntries.length > 0\n ? `, inferenceConfiguration: { ${inferenceConfigurationEntries\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ')} }`\n : '';\n gqlHandlerContent += `@generation(aiModel: \"${aiModel.resourcePath}\", systemPrompt: \"${escapedSystemPrompt}\"${inferenceConfigurationGql}) `;\n }\n const gqlField = `${callSignature}: ${returnTypeName} ${gqlHandlerContent}${authString}`;\n return {\n gqlField,\n implicitTypes: implicitTypes,\n customTypeAuthRules,\n lambdaFunctionDefinition,\n customSqlDataSourceStrategy,\n inputTypes,\n };\n}\n/**\n * Escape a string that will be used inside of a graphql string.\n * @param str The input string to be escaped\n * @returns The string with special charactars escaped\n */\nfunction escapeGraphQlString(str) {\n return JSON.stringify(str);\n}\n/**\n * AWS AppSync scalars that are stored as strings in the data source\n */\nconst stringFieldTypes = {\n ID: true,\n String: true,\n AWSDate: true,\n AWSTime: true,\n AWSDateTime: true,\n AWSEmail: true,\n AWSPhone: true,\n AWSURL: true,\n AWSIPAddress: true,\n};\n/**\n * Normalize string-compatible field types for comparison\n */\nconst normalizeStringFieldTypes = (fieldType) => {\n if (fieldType in stringFieldTypes) {\n return ModelFieldType.String;\n }\n return fieldType;\n};\n/**\n * Tests whether two ModelField definitions are in conflict.\n *\n * This is a shallow check intended to catch conflicts between defined fields\n * and fields implied by authorization rules. Hence, it only compares type\n * and plurality.\n *\n * @param left\n * @param right\n * @returns\n */\nfunction areConflicting(left, right) {\n const leftData = left.data;\n const rightData = right.data;\n // `array` and `fieldType` are the only props we care about for this comparison, because the others\n // (required, arrayRequired, etc) are not specified on auth or FK directives.\n if (leftData.array !== rightData.array) {\n return true;\n }\n // Convert \"string-compatible\" field types to `String` for the sake of this comparison\n //\n // E.g. if a customer has an explicit a.id() field that they're referencing in an allow.ownerDefinedIn rule\n // we treat ID and String as equivalent/non-conflicting\n if (normalizeStringFieldTypes(leftData.fieldType) !==\n normalizeStringFieldTypes(rightData.fieldType)) {\n return true;\n }\n return false;\n}\n/**\n * Merges one field defition object onto an existing one, performing\n * validation (conflict detection) along the way.\n *\n * @param existing An existing field map\n * @param additions A field map to merge in\n */\nfunction addFields(existing, additions) {\n for (const [k, addition] of Object.entries(additions)) {\n if (!existing[k]) {\n existing[k] = addition;\n }\n else if (areConflicting(existing[k], addition)) {\n throw new Error(`Field ${k} defined twice with conflicting definitions.`);\n }\n else {\n // fields are defined on both sides, but match.\n }\n }\n}\n/**\n * Validate that no implicit fields are used by the model definition\n *\n * @param existing An existing field map\n * @param implicitFields A field map inferred from other schema usage\n *\n * @throws An error when an undefined field is used or when a field is used in a way that conflicts with its generated definition\n */\nfunction validateStaticFields(existing, implicitFields) {\n if (implicitFields === undefined) {\n return;\n }\n for (const [k, field] of Object.entries(implicitFields)) {\n if (!existing[k]) {\n throw new Error(`Field ${k} isn't defined.`);\n }\n else if (areConflicting(existing[k], field)) {\n throw new Error(`Field ${k} defined twice with conflicting definitions.`);\n }\n }\n}\n/**\n * Validate that no implicit fields conflict with explicitly defined fields.\n *\n * @param existing An existing field map\n * @param implicitFields A field map inferred from other schema usage\n *\n * @throws An error when an undefined field is used or when a field is used in a way that conflicts with its generated definition\n */\nfunction validateImpliedFields(existing, implicitFields) {\n if (implicitFields === undefined) {\n return;\n }\n for (const [k, field] of Object.entries(implicitFields)) {\n if (existing[k] && areConflicting(existing[k], field)) {\n throw new Error(`Implicit field ${k} conflicts with the explicit field definition.`);\n }\n }\n}\nfunction validateRefUseCases(referrerName, referrerType, fields, getRefType) {\n const check = (fieldName, refLink, targetType) => {\n const { def } = getRefType(refLink, referrerName);\n if (isInternalModel(def)) {\n throw new Error(`Cannot use \\`.ref()\\` to refer a model from a \\`${targetType}\\`. Field \\`${fieldName}\\` of \\`${referrerName}\\` refers to model \\`${refLink}\\``);\n }\n };\n for (const [fieldName, field] of Object.entries(fields)) {\n if (isRefField(field)) {\n check(fieldName, field.data.link, referrerType === 'customType' ? 'custom type' : 'model');\n }\n }\n}\n/**\n * Given a list of authorization rules, produces a set of the implied owner and/or\n * group fields, along with the associated graphql `@auth` string directive.\n *\n * This is intended to be called for each model and field to collect the implied\n * fields and directives from that individual \"item's\" auth rules.\n *\n * The computed directives are intended to be appended to the graphql field definition.\n *\n * The computed fields will be used to confirm no conflicts between explicit field definitions\n * and implicit auth fields.\n *\n * @param authorization A list of authorization rules.\n * @returns\n */\nfunction calculateAuth(authorization) {\n const authFields = {};\n const rules = [];\n for (const entry of authorization) {\n const rule = accessData(entry);\n const ruleParts = [];\n if (rule.strategy) {\n ruleParts.push([`allow: ${rule.strategy}`]);\n }\n else {\n return {\n authFields,\n authString: '',\n };\n }\n if (rule.provider) {\n // identityPool maps to iam in the transform\n const provider = rule.provider === 'identityPool' ? 'iam' : rule.provider;\n ruleParts.push(`provider: ${provider}`);\n }\n if (rule.operations) {\n ruleParts.push(`operations: [${rule.operations.join(', ')}]`);\n }\n if (rule.groupOrOwnerField) {\n // directive attribute, depending whether it's owner or group auth\n if (rule.strategy === 'groups') {\n // does this need to be escaped?\n ruleParts.push(`groupsField: \"${rule.groupOrOwnerField}\"`);\n }\n else {\n // does this need to be escaped?\n ruleParts.push(`ownerField: \"${rule.groupOrOwnerField}\"`);\n }\n // model field dep, type of which depends on whether multiple owner/group\n // is required.\n if (rule.multiOwner) {\n addFields(authFields, { [rule.groupOrOwnerField]: string().array() });\n }\n else {\n addFields(authFields, { [rule.groupOrOwnerField]: string() });\n }\n }\n if (rule.groups) {\n // does `group` need to be escaped?\n ruleParts.push(`groups: [${rule.groups.map((group) => `\"${group}\"`).join(', ')}]`);\n }\n // identityClaim\n if (rule.identityClaim) {\n // does this need to be escaped?\n ruleParts.push(`identityClaim: \"${rule.identityClaim}\"`);\n }\n // groupClaim\n if (rule.groupClaim) {\n // does this need to be escaped?\n ruleParts.push(`groupClaim: \"${rule.groupClaim}\"`);\n }\n rules.push(`{${ruleParts.join(', ')}}`);\n }\n const authString = rules.length > 0 ? `@auth(rules: [${rules.join(',\\n ')}])` : '';\n return { authString, authFields };\n}\nfunction validateCustomHandlerAuthRule(rule) {\n if (rule.groups && rule.provider === 'oidc') {\n throw new Error('OIDC group auth is not supported with a.handler.custom');\n }\n // not currently supported with handler.custom (JS Resolvers), but will be in the future\n if (rule.provider === 'identityPool' || rule.provider === 'iam') {\n throw new Error(\"identityPool-based auth (allow.guest() and allow.authenticated('identityPool')) is not supported with a.handler.custom\");\n }\n}\nfunction getAppSyncAuthDirectiveFromRule(rule) {\n const strategyDict = {\n public: {\n default: '@aws_api_key',\n apiKey: '@aws_api_key',\n iam: '@aws_iam',\n identityPool: '@aws_iam',\n },\n private: {\n default: '@aws_cognito_user_pools',\n userPools: '@aws_cognito_user_pools',\n oidc: '@aws_oidc',\n iam: '@aws_iam',\n identityPool: '@aws_iam',\n },\n groups: {\n default: '@aws_cognito_user_pools',\n userPools: '@aws_cognito_user_pools',\n },\n custom: {\n default: '@aws_lambda',\n function: '@aws_lambda',\n },\n };\n const stratProviders = strategyDict[rule.strategy];\n if (stratProviders === undefined) {\n throw new Error(`Unsupported auth strategy for custom handlers: ${rule.strategy}`);\n }\n const provider = rule.provider || 'default';\n const stratProvider = stratProviders[provider];\n if (stratProvider === undefined) {\n throw new Error(`Unsupported provider for custom handlers: ${rule.provider}`);\n }\n return stratProvider;\n}\nfunction mapToNativeAppSyncAuthDirectives(authorization, isCustomHandler) {\n const rules = new Set();\n const groupProvider = new Map();\n const generalProviderUsed = new Set();\n for (const entry of authorization) {\n const rule = accessData(entry);\n isCustomHandler && validateCustomHandlerAuthRule(rule);\n const provider = getAppSyncAuthDirectiveFromRule(rule);\n if (rule.groups) {\n if (!groupProvider.has(provider)) {\n groupProvider.set(provider, new Set());\n }\n ;\n rule.groups.forEach((group) => groupProvider.get(provider)?.add(group));\n }\n else {\n generalProviderUsed.add(provider);\n rules.add(provider);\n }\n }\n groupProvider.forEach((groups, provider) => {\n if (!generalProviderUsed.has(provider)) {\n rules.add(`${provider}(cognito_groups: [${Array.from(groups).reduce((acc, group) => acc == \"\" ? `\"${group}\"` : `${acc}, \"${group}\"`, \"\")}])`);\n // example: (cognito_groups: [\"Bloggers\", \"Readers\"])\n }\n });\n const authString = [...rules].join(' ');\n return { authString };\n}\nfunction capitalize(s) {\n return `${s[0].toUpperCase()}${s.slice(1)}`;\n}\nfunction processFieldLevelAuthRules(fields, authFields) {\n const fieldLevelAuthRules = {};\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n const fieldAuth = fieldDef?.data?.authorization || [];\n const { authString, authFields: fieldAuthField } = calculateAuth(fieldAuth);\n if (authString)\n fieldLevelAuthRules[fieldName] = authString;\n if (fieldAuthField) {\n addFields(authFields, fieldAuthField);\n }\n }\n return fieldLevelAuthRules;\n}\nfunction validateDBGeneration(fields, databaseEngine) {\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n const _default = fieldDef.data?.default;\n const fieldType = fieldDef.data?.fieldType;\n const isGenerated = _default === __generated;\n if (isGenerated && databaseEngine !== 'postgresql') {\n throw new Error(`Invalid field definition for ${fieldName}. DB-generated fields are only supported with PostgreSQL data sources.`);\n }\n if (isGenerated && !canGenerateFieldType(fieldType)) {\n throw new Error(`Incompatible field type. Field type ${fieldType} in field ${fieldName} cannot be configured as a DB-generated field.`);\n }\n }\n}\nfunction validateNullableIdentifiers(fields, identifier) {\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n const fieldType = fieldDef.data?.fieldType;\n const required = fieldDef.data?.required;\n const _default = fieldDef.data?.default;\n const isGenerated = _default === __generated;\n if (identifier !== undefined && identifier.includes(fieldName)) {\n if (!required && fieldType !== 'ID' && !isGenerated) {\n throw new Error(`Invalid identifier definition. Field ${fieldName} cannot be used in the identifier. Identifiers must reference required or DB-generated fields)`);\n }\n }\n }\n}\nfunction processFields(typeName, fields, impliedFields, fieldLevelAuthRules, identifier, partitionKey, secondaryIndexes = {}, databaseEngine = 'dynamodb') {\n const gqlFields = [];\n // stores nested, field-level type definitions (custom types and enums)\n // the need to be hoisted to top-level schema types and processed accordingly\n const implicitTypes = [];\n validateImpliedFields(fields, impliedFields);\n validateDBGeneration(fields, databaseEngine);\n validateNullableIdentifiers(fields, identifier);\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n const fieldAuth = fieldLevelAuthRules[fieldName]\n ? ` ${fieldLevelAuthRules[fieldName]}`\n : '';\n if (isModelField(fieldDef)) {\n gqlFields.push(`${fieldName}: ${modelFieldToGql(fieldDef.data)}${fieldAuth}`);\n }\n else if (isScalarField(fieldDef)) {\n if (fieldName === partitionKey) {\n gqlFields.push(`${fieldName}: ${scalarFieldToGql(fieldDef.data, identifier, secondaryIndexes[fieldName])}${fieldAuth}`);\n }\n else if (isRefField(fieldDef)) {\n gqlFields.push(`${fieldName}: ${refFieldToGql(fieldDef.data, secondaryIndexes[fieldName])}${fieldAuth}`);\n }\n else if (isEnumType(fieldDef)) {\n // The inline enum type name should be `<TypeName><FieldName>` to avoid\n // enum type name conflicts\n const enumName = `${capitalize(typeName)}${capitalize(fieldName)}`;\n implicitTypes.push([enumName, fieldDef]);\n gqlFields.push(`${fieldName}: ${enumFieldToGql(enumName, secondaryIndexes[fieldName])}`);\n }\n else if (isCustomType(fieldDef)) {\n // The inline CustomType name should be `<TypeName><FieldName>` to avoid\n // CustomType name conflicts\n const customTypeName = `${capitalize(typeName)}${capitalize(fieldName)}`;\n implicitTypes.push([customTypeName, fieldDef]);\n gqlFields.push(`${fieldName}: ${customTypeName}`);\n }\n else {\n gqlFields.push(`${fieldName}: ${scalarFieldToGql(fieldDef.data, undefined, secondaryIndexes[fieldName])}${fieldAuth}`);\n }\n }\n else {\n throw new Error(`Unexpected field definition: ${fieldDef}`);\n }\n }\n return { gqlFields, implicitTypes };\n}\n/**\n *\n * @param pk - partition key field name\n * @param sk - (optional) array of sort key field names\n * @returns default query field name\n */\nconst secondaryIndexDefaultQueryField = (modelName, pk, sk) => {\n const skName = sk?.length ? 'And' + sk?.map(capitalize).join('And') : '';\n const queryField = `list${capitalize(modelName)}By${capitalize(pk)}${skName}`;\n return queryField;\n};\n/**\n * Given InternalModelIndexType[] returns a map where the key is the model field to be annotated with an @index directive\n * and the value is an array of transformed Amplify @index directives with all supplied attributes\n */\nconst transformedSecondaryIndexesForModel = (modelName, secondaryIndexes, modelFields, getRefType) => {\n const indexDirectiveWithAttributes = (partitionKey, sortKeys, indexName, queryField) => {\n for (const keyName of [partitionKey, ...sortKeys]) {\n const field = modelFields[keyName];\n if (isRefField(field)) {\n const { def } = getRefType(field.data.link, modelName);\n if (!isEnumType(def)) {\n throw new Error(`The ref field \\`${keyName}\\` used in the secondary index of \\`${modelName}\\` should refer to an enum type. \\`${field.data.link}\\` is not a enum type.`);\n }\n }\n }\n if (!sortKeys.length && !indexName && !queryField && queryField !== null) {\n return `@index(queryField: \"${secondaryIndexDefaultQueryField(modelName, partitionKey)}\")`;\n }\n const attributes = [];\n if (indexName) {\n attributes.push(`name: \"${indexName}\"`);\n }\n if (sortKeys.length) {\n attributes.push(`sortKeyFields: [${sortKeys.map((sk) => `\"${sk}\"`).join(', ')}]`);\n }\n if (queryField === null) {\n attributes.push(`queryField: null`);\n }\n else if (queryField) {\n attributes.push(`queryField: \"${queryField}\"`);\n }\n else {\n attributes.push(`queryField: \"${secondaryIndexDefaultQueryField(modelName, partitionKey, sortKeys)}\"`);\n }\n return `@index(${attributes.join(', ')})`;\n };\n return secondaryIndexes.reduce((acc, { data: { partitionKey, sortKeys, indexName, queryField } }) => {\n acc[partitionKey] = acc[partitionKey] || [];\n acc[partitionKey].push(indexDirectiveWithAttributes(partitionKey, sortKeys, indexName, queryField));\n return acc;\n }, {});\n};\nconst ruleIsResourceAuth = (authRule) => {\n const data = accessSchemaData(authRule);\n return data.strategy === 'resource';\n};\n/**\n * Separates out lambda resource auth rules from remaining schema rules.\n *\n * @param authRules schema auth rules\n */\nconst extractFunctionSchemaAccess = (authRules) => {\n const schemaAuth = [];\n const functionSchemaAccess = [];\n const defaultActions = [\n 'query',\n 'mutate',\n 'listen',\n ];\n for (const rule of authRules) {\n if (ruleIsResourceAuth(rule)) {\n const ruleData = accessSchemaData(rule);\n const fnAccess = {\n resourceProvider: ruleData.resource,\n actions: ruleData.operations || defaultActions,\n };\n functionSchemaAccess.push(fnAccess);\n }\n else {\n schemaAuth.push(rule);\n }\n }\n return { schemaAuth, functionSchemaAccess };\n};\n/**\n * Searches a schema and all related schemas (through `.combine()`) for the given type by name.\n *\n * @param schema\n * @param name\n * @returns\n */\nconst findCombinedSchemaType = (schema, name) => {\n if (schema.context) {\n for (const contextualSchema of schema.context.schemas) {\n if (contextualSchema.data.types[name]) {\n return contextualSchema.data.types[name];\n }\n }\n }\n else {\n return schema.data.types[name];\n }\n return undefined;\n};\n/**\n * Returns a closure for retrieving reference type and definition from schema\n */\nconst getRefTypeForSchema = (schema) => {\n const getRefType = (name, referrerName) => {\n const typeDef = findCombinedSchemaType(schema, name);\n if (typeDef === undefined) {\n throw new Error(referrerName\n ? `Invalid ref. ${referrerName} is referring to ${name} which is not defined in the schema`\n : `Invalid ref. ${name} is not defined in the schema`);\n }\n if (isInternalModel(typeDef)) {\n return { type: 'Model', def: typeDef };\n }\n if (isCustomOperation(typeDef)) {\n return { type: 'CustomOperation', def: typeDef };\n }\n if (isCustomType(typeDef)) {\n return { type: 'CustomType', def: typeDef };\n }\n if (isEnumType(typeDef)) {\n return { type: 'Enum', def: typeDef };\n }\n throw new Error(referrerName\n ? `Invalid ref. ${referrerName} is referring to ${name} which is neither a Model, Custom Operation, Custom Type, or Enum`\n : `Invalid ref. ${name} is neither a Model, Custom Operation, Custom Type, or Enum`);\n };\n return getRefType;\n};\n/**\n * Sorts top-level schema types to where Custom Types are processed last\n * This allows us to accrue and then apply inherited auth rules for custom types from custom operations\n * that reference them in their return values\n */\nconst sortTopLevelTypes = (topLevelTypes) => {\n return topLevelTypes.sort(([_typeNameA, typeDefA], [_typeNameB, typeDefB]) => {\n if ((isCustomType(typeDefA) && isCustomType(typeDefB)) ||\n (!isCustomType(typeDefA) && !isCustomType(typeDefB))) {\n return 0;\n }\n else if (isCustomType(typeDefA) && !isCustomType(typeDefB)) {\n return 1;\n }\n else {\n return -1;\n }\n });\n};\n/**\n * Builds up dictionary of Custom Type name - array of inherited auth rules\n */\nconst mergeCustomTypeAuthRules = (existing, added) => {\n if (!added)\n return;\n const { typeName, authRules } = added;\n if (typeName in existing) {\n existing[typeName] = [...existing[typeName], ...authRules];\n }\n else {\n existing[typeName] = authRules;\n }\n};\n/**\n * Generates input types for custom operations in the schema.\n *\n * Processes operation arguments to create corresponding input types,\n * handling referenced and inline custom types, enums, and nested structures.\n * Manages circular references and prevents duplicate processing.\n *\n **/\nfunction generateInputTypes(operationName, args, getRefType) {\n const inputTypes = [];\n const argDefinitions = [];\n const collectedEnums = new Map();\n const processedTypes = new Set(); // Track processed types to avoid duplicates\n const processNonScalarFields = (fields, originalTypeName, isParentRef = false, parentChain = []) => {\n const processedFields = {};\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n if (isRefField(fieldDef)) {\n const refType = getRefType(fieldDef.data.link, originalTypeName);\n if (refType.type === 'CustomType') {\n const nestedInputTypeName = `${fieldDef.data.link}Input`;\n processedFields[fieldName] = {\n data: { type: 'ref', link: nestedInputTypeName },\n };\n // Process the nested type if it hasn't been processed and isn't a circular reference\n if (!parentChain.includes(nestedInputTypeName) &&\n !processedTypes.has(nestedInputTypeName)) {\n processedTypes.add(nestedInputTypeName);\n const nestedFields = processNonScalarFields(refType.def.data.fields, fieldDef.data.link, true, [...parentChain, nestedInputTypeName]);\n inputTypes.push({\n name: nestedInputTypeName,\n fields: nestedFields,\n });\n }\n }\n else if (refType.type === 'Enum') {\n processedFields[fieldName] = {\n data: { type: 'ref', link: fieldDef.data.link },\n };\n }\n else {\n throw new Error(`Unsupported reference type '${refType.type}' for field '${fieldName}'. ` +\n `Only references to CustomType and Enum are supported.`);\n }\n }\n else if (isCustomType(fieldDef)) {\n // Handle inline custom types\n const nestedInputTypeName = `${capitalize(originalTypeName)}${capitalize(fieldName)}Input`;\n processedFields[fieldName] = {\n data: { type: 'ref', link: nestedInputTypeName },\n };\n if (!processedTypes.has(nestedInputTypeName)) {\n processedTypes.add(nestedInputTypeName);\n const nestedFields = processNonScalarFields(fieldDef.data.fields, `${capitalize(originalTypeName)}${capitalize(fieldName)}`, isParentRef, [...parentChain, nestedInputTypeName]);\n inputTypes.push({\n name: nestedInputTypeName,\n fields: nestedFields,\n });\n }\n }\n else if (isEnumType(fieldDef)) {\n // Handle enum types\n const enumName = `${capitalize(originalTypeName)}${capitalize(fieldName)}`;\n if (!collectedEnums.has(enumName) && !isParentRef) {\n collectedEnums.set(enumName, fieldDef);\n }\n processedFields[fieldName] = { data: { type: 'ref', link: enumName } };\n }\n else {\n processedFields[fieldName] = fieldDef;\n }\n }\n return processedFields;\n };\n // Process top-level arguments\n for (const [argName, argDef] of Object.entries(args)) {\n if (isRefField(argDef)) {\n const refType = getRefType(argDef.data.link, operationName);\n if (refType.type === 'CustomType') {\n const { valueRequired, array, arrayRequired } = argDef.data;\n const inputTypeName = `${argDef.data.link}Input`;\n let field = inputTypeName;\n if (valueRequired === true) {\n field += '!';\n }\n if (array) {\n field = `[${field}]`;\n if (arrayRequired === true) {\n field += '!';\n }\n }\n argDefinitions.push(`${argName}: ${field}`);\n // Process the input type if it hasn't been processed yet\n if (!processedTypes.has(inputTypeName)) {\n processedTypes.add(inputTypeName);\n const fields = processNonScalarFields(refType.def.data.fields, argDef.data.link, true, [inputTypeName]);\n inputTypes.push({\n name: inputTypeName,\n fields,\n });\n }\n }\n else if (refType.type === 'Enum') {\n const { valueRequired, array, arrayRequired } = argDef.data;\n let field = argDef.data.link;\n if (valueRequired === true) {\n field += '!';\n }\n if (array) {\n field = `[${field}]`;\n if (arrayRequired === true) {\n field += '!';\n }\n }\n argDefinitions.push(`${argName}: ${field}`);\n }\n else {\n throw new Error(`Unsupported reference type '${refType.type}' for argument '${argName}' in '${operationName}'. ` +\n `Only references to CustomType and Enum are supported.`);\n }\n }\n else if (isEnumType(argDef)) {\n // Handle top-level enum arguments\n const enumName = `${capitalize(operationName)}${capitalize(argName)}`;\n if (!collectedEnums.has(enumName)) {\n collectedEnums.set(enumName, argDef);\n }\n argDefinitions.push(`${argName}: ${enumName}`);\n }\n else if (isCustomType(argDef)) {\n // Handle top-level custom type arguments\n const inputTypeName = `${capitalize(operationName)}${capitalize(argName)}Input`;\n argDefinitions.push(`${argName}: ${inputTypeName}`);\n if (!processedTypes.has(inputTypeName)) {\n processedTypes.add(inputTypeName);\n const fields = processNonScalarFields(argDef.data.fields, `${capitalize(operationName)}${capitalize(argName)}`, false, [inputTypeName]);\n inputTypes.push({\n name: inputTypeName,\n fields,\n });\n }\n }\n else if (isScalarField(argDef)) {\n argDefinitions.push(`${argName}: ${scalarFieldToGql(argDef.data)}`);\n }\n else {\n throw new Error(`Unsupported argument type for ${argName}`);\n }\n }\n return { inputTypes, argDefinitions, collectedEnums };\n}\nconst schemaPreprocessor = (schema) => {\n const gqlModels = [];\n const customQueries = [];\n const customMutations = [];\n const customSubscriptions = [];\n let shouldAddConversationTypes = false;\n // Dict of auth rules to be applied to custom types\n // Inherited from the auth configured on the custom operations that return these custom types\n const customTypeInheritedAuthRules = {};\n const jsFunctions = [];\n const lambdaFunctions = {};\n const customSqlDataSourceStrategies = [];\n const databaseEngine = schema.data.configuration.database.engine;\n const databaseType = databaseEngine === 'dynamodb' ? 'dynamodb' : 'sql';\n const staticSchema = databaseType === 'sql';\n // If the schema contains a custom operation with an async lambda handler,\n // we need to add the EventInvocationResponse custom type to the schema.\n // This is done here so that:\n // - it only happens once per schema\n // - downstream validation based on `getRefTypeForSchema` finds the EventInvocationResponse type\n const containsAsyncLambdaCustomOperation = Object.entries(schema.data.types).find(([_, typeDef]) => {\n return (isCustomOperation(typeDef) &&\n finalHandlerIsAsyncFunctionHandler(typeDef.data.handlers));\n });\n if (containsAsyncLambdaCustomOperation) {\n schema.data.types['EventInvocationResponse'] =\n eventInvocationResponseCustomType;\n }\n const topLevelTypes = sortTopLevelTypes(Object.entries(schema.data.types));\n const { schemaAuth, functionSchemaAccess } = extractFunctionSchemaAccess(schema.data.authorization);\n const getRefType = getRefTypeForSchema(schema);\n const uniqueInputTypes = new Map();\n for (const [typeName, typeDef] of topLevelTypes) {\n const mostRelevantAuthRules = typeDef.data?.authorization?.length > 0\n ? typeDef.data.authorization\n : schemaAuth;\n if (!isInternalModel(typeDef)) {\n if (isEnumType(typeDef)) {\n if (typeDef.values.some((value) => /\\s/.test(value))) {\n throw new Error(`Values of the enum type ${typeName} should not contain any whitespace.`);\n }\n const enumType = `enum ${typeName} {\\n ${typeDef.values.join('\\n ')}\\n}`;\n gqlModels.push(enumType);\n }\n else if (isCustomType(typeDef)) {\n const fields = typeDef.data.fields;\n validateRefUseCases(typeName, 'customType', fields, getRefType);\n const fieldAuthApplicableFields = Object.fromEntries(Object.entries(fields).filter((pair) => isModelField(pair[1])));\n let customAuth = '';\n if (typeName in customTypeInheritedAuthRules) {\n const { authString } = mapToNativeAppSyncAuthDirectives(customTypeInheritedAuthRules[typeName], false);\n customAuth = authString;\n }\n const authFields = {};\n const fieldLevelAuthRules = processFieldLevelAuthRules(fieldAuthApplicableFields, authFields);\n const { gqlFields, implicitTypes } = processFields(typeName, fields, authFields, fieldLevelAuthRules, undefined, undefined, undefined, databaseEngine);\n topLevelTypes.push(...implicitTypes);\n const joined = gqlFields.join('\\n ');\n const model = `type ${typeName} ${customAuth}\\n{\\n ${joined}\\n}`;\n gqlModels.push(model);\n }\n else if (isCustomOperation(typeDef)) {\n // TODO: add generation route logic.\n const { typeName: opType } = typeDef.data;\n const { gqlField, implicitTypes, customTypeAuthRules, jsFunctionForField, lambdaFunctionDefinition, customSqlDataSourceStrategy, inputTypes, } = transformCustomOperations(typeDef, typeName, mostRelevantAuthRules, databaseType, getRefType);\n // Process input types without duplicates\n for (const { name, fields } of inputTypes) {\n if (!uniqueInputTypes.has(name)) {\n uniqueInputTypes.set(name, fields);\n }\n }\n topLevelTypes.push(...implicitTypes);\n mergeCustomTypeAuthRules(customTypeInheritedAuthRules, customTypeAuthRules);\n if (customTypeAuthRules) {\n const nestedCustomTypeNames = extractNestedCustomTypeNames(customTypeAuthRules, topLevelTypes, getRefType);\n for (const nestedCustomType of nestedCustomTypeNames) {\n mergeCustomTypeAuthRules(customTypeInheritedAuthRules, {\n typeName: nestedCustomType,\n authRules: customTypeAuthRules.authRules, // apply the same auth rules as the top-level custom type\n });\n }\n }\n Object.assign(lambdaFunctions, lambdaFunctionDefinition);\n if (jsFunctionForField) {\n jsFunctions.push(jsFunctionForField);\n }\n if (customSqlDataSourceStrategy) {\n customSqlDataSourceStrategies.push(customSqlDataSourceStrategy);\n }\n switch (opType) {\n case 'Query':\n case 'Generation':\n customQueries.push(gqlField);\n break;\n case 'Mutation':\n customMutations.push(gqlField);\n break;\n case 'Subscription':\n customSubscriptions.push(gqlField);\n break;\n default:\n break;\n }\n }\n else if (isConversationRoute(typeDef)) {\n const { field, functionHandler } = createConversationField(typeDef, typeName);\n customMutations.push(field);\n Object.assign(lambdaFunctions, functionHandler);\n shouldAddConversationTypes = true;\n }\n }\n else if (staticSchema) {\n const fields = { ...typeDef.data.fields };\n validateRefUseCases(typeName, 'model', fields, getRefType);\n const identifier = typeDef.data.identifier;\n const [partitionKey] = identifier;\n const { authString, authFields } = calculateAuth(mostRelevantAuthRules);\n const fieldLevelAuthRules = processFieldLevelAuthRules(fields, authFields);\n validateStaticFields(fields, authFields);\n const { gqlFields, implicitTypes } = processFields(typeName, fields, authFields, fieldLevelAuthRules, identifier, partitionKey, undefined, databaseEngine);\n topLevelTypes.push(...implicitTypes);\n const joined = gqlFields.join('\\n ');\n const refersToString = typeDef.data.originalName\n ? ` @refersTo(name: \"${typeDef.data.originalName}\")`\n : '';\n // TODO: update @model(timestamps: null) once a longer term solution gets\n // determined.\n //\n // Context: SQL schema should not be automatically inserted with timestamp fields,\n // passing (timestamps: null) to @model to suppress this behavior as a short\n // term solution.\n const model = `type ${typeName} @model(timestamps: null) ${authString}${refersToString}\\n{\\n ${joined}\\n}`;\n gqlModels.push(model);\n }\n else {\n const fields = typeDef.data.fields;\n validateRefUseCases(typeName, 'model', fields, getRefType);\n const identifier = typeDef.data.identifier;\n const [partitionKey] = identifier;\n const transformedSecondaryIndexes = transformedSecondaryIndexesForModel(typeName, typeDef.data.secondaryIndexes, fields, getRefType);\n const { authString, authFields } = calculateAuth(mostRelevantAuthRules);\n if (authString == '') {\n throw new Error(`Model \\`${typeName}\\` is missing authorization rules. Add global rules to the schema or ensure every model has its own rules.`);\n }\n const getInternalModel = (modelName, sourceName) => {\n const model = getRefType(modelName, sourceName);\n if (!isInternalModel(model.def)) {\n throw new Error(`Expected to find model type with name ${modelName}`);\n }\n return model.def;\n };\n validateRelationships(typeName, fields, getInternalModel);\n const fieldLevelAuthRules = processFieldLevelAuthRules(fields, authFields);\n const { gqlFields, implicitTypes } = processFields(typeName, fields, authFields, fieldLevelAuthRules, identifier, partitionKey, transformedSecondaryIndexes, databaseEngine);\n topLevelTypes.push(...implicitTypes);\n const joined = gqlFields.join('\\n ');\n const modelAttrs = modelAttributesFromDisabledOps(typeDef.data.disabledOperations);\n const modelDirective = modelAttrs ? `@model(${modelAttrs})` : '@model';\n const model = `type ${typeName} ${modelDirective} ${authString}\\n{\\n ${joined}\\n}`;\n gqlModels.push(model);\n }\n }\n // Generate input types after processing all custom operations\n for (const [name, fields] of uniqueInputTypes) {\n const { gqlFields } = processFields(name, fields, {}, {}, undefined, undefined, undefined, databaseEngine);\n const inputTypeDefinition = `input ${name} {\\n ${gqlFields.join('\\n ')}\\n}`;\n gqlModels.push(inputTypeDefinition);\n }\n const customOperations = {\n queries: customQueries,\n mutations: customMutations,\n subscriptions: customSubscriptions,\n };\n gqlModels.push(...generateCustomOperationTypes(customOperations));\n if (shouldAddConversationTypes) {\n gqlModels.push(CONVERSATION_SCHEMA_GRAPHQL_TYPES);\n }\n const processedSchema = gqlModels.join('\\n\\n');\n return {\n schema: processedSchema,\n jsFunctions,\n functionSchemaAccess,\n lambdaFunctions,\n customSqlDataSourceStrategies,\n };\n};\nfunction validateCustomOperations(typeDef, typeName, authRules, getRefType) {\n const { handlers, typeName: opType, subscriptionSource } = typeDef.data;\n const handlerConfigured = handlers?.length;\n const authConfigured = authRules.length > 0;\n if (opType !== 'Generation' &&\n ((authConfigured && !handlerConfigured) ||\n (handlerConfigured && !authConfigured))) {\n // Deploying a custom operation with auth and no handler reference OR\n // with a handler reference but no auth\n // causes the CFN stack to reach an unrecoverable state. Ideally, this should be fixed\n // in the CDK construct, but we're catching it early here as a stopgap\n throw new Error(`Custom operation ${typeName} requires both an authorization rule and a handler reference`);\n }\n // Handlers must all be of the same type\n if (handlers?.length) {\n const configuredHandlers = new Set();\n for (const handler of handlers) {\n configuredHandlers.add(getBrand(handler));\n }\n if (configuredHandlers.size > 1) {\n configuredHandlers.delete('asyncFunctionHandler');\n configuredHandlers.delete('functionHandler');\n if (configuredHandlers.size > 0) {\n const configuredHandlersStr = JSON.stringify(Array.from(configuredHandlers));\n throw new Error(`Field handlers must be of the same type. ${typeName} has been configured with ${configuredHandlersStr}`);\n }\n }\n }\n if (typeDef.data.returnType === null &&\n (opType === 'Query' || opType === 'Mutation' || opType === 'Generation')) {\n // TODO: There should be a more elegant and readable way to handle this check.\n // Maybe it's not even necessary anymore since we're the setting returnType in the handler() method.\n if (!handlers ||\n handlers.length === 0 ||\n handlers[handlers.length - 1][brandSymbol] !== 'asyncFunctionHandler') {\n const typeDescription = opType === 'Generation' ? 'Generation Route' : `Custom ${opType}`;\n throw new Error(`Invalid ${typeDescription} definition. A ${typeDescription} must include a return type. ${typeName} has no return type specified.`);\n }\n }\n if (opType !== 'Subscription' && subscriptionSource.length > 0) {\n throw new Error(`The .for() modifier function can only be used with a custom subscription. ${typeName} is not a custom subscription.`);\n }\n if (opType === 'Subscription') {\n if (subscriptionSource.length < 1) {\n throw new Error(`${typeName} is missing a mutation source. Custom subscriptions must reference a mutation source via subscription().for(a.ref('ModelOrOperationName')) `);\n }\n let expectedReturnType;\n for (const source of subscriptionSource) {\n const sourceName = source.data.link;\n const { type, def } = getRefType(sourceName, typeName);\n if (type !== 'Model' && source.data.mutationOperations.length > 0) {\n throw new Error(`Invalid subscription definition. .mutations() modifier can only be used with a Model ref. ${typeName} is referencing ${type}`);\n }\n let resolvedReturnType;\n if (type === 'Model') {\n if (source.data.mutationOperations.length === 0) {\n throw new Error(`Invalid subscription definition. .mutations() modifier must be used with a Model ref subscription source. ${typeName} is referencing ${sourceName} without specifying a mutation`);\n }\n else {\n resolvedReturnType = def;\n }\n }\n if (type === 'CustomOperation') {\n if (def.data.typeName !== 'Mutation') {\n throw new Error(`Invalid subscription definition. .for() can only reference a mutation. ${typeName} is referencing ${sourceName} which is a ${def.data.typeName}`);\n }\n else {\n const returnType = def.data.returnType;\n if (isRefField(returnType)) {\n ({ def: resolvedReturnType } = getRefType(returnType.data.link, typeName));\n }\n else {\n resolvedReturnType = returnType;\n }\n }\n }\n expectedReturnType = expectedReturnType ?? resolvedReturnType;\n // As the return types are resolved from the root `schema` object and they should\n // not be mutated, we compare by references here.\n if (expectedReturnType !== resolvedReturnType) {\n throw new Error(`Invalid subscription definition. .for() can only reference resources that have the same return type. ${typeName} is referencing resources that have different return types.`);\n }\n }\n }\n}\nconst isSqlReferenceHandler = (handler) => {\n return Array.isArray(handler) && getBrand(handler[0]) === 'sqlReference';\n};\nconst isCustomHandler = (handler) => {\n return Array.isArray(handler) && getBrand(handler[0]) === 'customHandler';\n};\nconst isFunctionHandler = (handler) => {\n return (Array.isArray(handler) &&\n ['functionHandler', 'asyncFunctionHandler'].includes(getBrand(handler[0])));\n};\nconst finalHandlerIsAsyncFunctionHandler = (handler) => {\n return (Array.isArray(handler) &&\n getBrand(handler[handler.length - 1]) === 'asyncFunctionHandler');\n};\nconst normalizeDataSourceName = (dataSource) => {\n // default data source\n const noneDataSourceName = 'NONE_DS';\n if (dataSource === undefined) {\n return noneDataSourceName;\n }\n if (dataSourceIsRef(dataSource)) {\n return `${dataSource.data.link}Table`;\n }\n return dataSource;\n};\nconst sanitizeStackTrace = (stackTrace) => {\n // normalize EOL to \\n so that parsing is consistent across platforms\n const normalizedStackTrace = stackTrace.replace(new RegExp(os.EOL), '\\n');\n return (normalizedStackTrace\n .split('\\n')\n .map((line) => line.trim())\n // filters out noise not relevant to the stack trace. All stack trace lines begin with 'at'\n .filter((line) => line.startsWith('at')) || []);\n};\n// copied from the defineFunction path resolution impl:\n// https://github.com/aws-amplify/amplify-backend/blob/main/packages/backend-function/src/get_caller_directory.ts\nconst resolveEntryPath = (data, errorMessage) => {\n if (path.isAbsolute(data.entry)) {\n return data.entry;\n }\n if (!data.stack) {\n throw new Error(errorMessage);\n }\n const stackTraceLines = sanitizeStackTrace(data.stack);\n if (stackTraceLines.length < 2) {\n throw new Error(errorMessage);\n }\n const stackTraceImportLine = stackTraceLines[1]; // the first entry is the file where the error was initialized (our code). The second entry is where the customer called our code which is what we are interested in\n // if entry is relative, compute with respect to the caller directory\n return { relativePath: data.entry, importLine: stackTraceImportLine };\n};\nconst handleCustom = (handlers, opType, typeName) => {\n const transformedHandlers = handlers.map((handler) => {\n const handlerData = getHandlerData(handler);\n return {\n dataSource: normalizeDataSourceName(handlerData.dataSource),\n entry: resolveEntryPath(handlerData, 'Could not determine import path to construct absolute code path for custom handler. Consider using an absolute path instead.'),\n };\n });\n const jsFn = {\n typeName: opType,\n fieldName: typeName,\n handlers: transformedHandlers,\n };\n return jsFn;\n};\nconst eventInvocationResponseCustomType = {\n data: {\n fields: {\n success: {\n data: {\n fieldType: ModelFieldType.Boolean,\n required: true,\n array: false,\n arrayRequired: false,\n },\n },\n },\n type: 'customType',\n },\n};\nfunction transformCustomOperations(typeDef, typeName, authRules, databaseType, getRefType) {\n const { typeName: opType, handlers } = typeDef.data;\n let jsFunctionForField = undefined;\n validateCustomOperations(typeDef, typeName, authRules, getRefType);\n if (isCustomHandler(handlers)) {\n jsFunctionForField = handleCustom(handlers, \n // Generation routes should not have handlers\n opType, typeName);\n }\n const isCustom = Boolean(jsFunctionForField);\n const { gqlField, implicitTypes, customTypeAuthRules, lambdaFunctionDefinition, customSqlDataSourceStrategy, inputTypes, } = customOperationToGql(typeName, typeDef, authRules, isCustom, databaseType, getRefType);\n return {\n gqlField,\n implicitTypes,\n customTypeAuthRules,\n jsFunctionForField,\n lambdaFunctionDefinition,\n customSqlDataSourceStrategy,\n inputTypes,\n };\n}\nfunction generateCustomOperationTypes({ queries, mutations, subscriptions, }) {\n const types = [];\n if (mutations.length > 0) {\n types.push(`type Mutation {\\n ${mutations.join('\\n ')}\\n}`);\n }\n if (queries.length > 0) {\n types.push(`type Query {\\n ${queries.join('\\n ')}\\n}`);\n }\n if (subscriptions.length > 0) {\n types.push(`type Subscription {\\n ${subscriptions.join('\\n ')}\\n}`);\n }\n return types;\n}\nfunction extractNestedCustomTypeNames(customTypeAuthRules, topLevelTypes, getRefType) {\n if (!customTypeAuthRules) {\n return [];\n }\n const [_, customTypeDef] = topLevelTypes.find(([topLevelTypeName]) => customTypeAuthRules.typeName === topLevelTypeName);\n // traverse the custom type's fields and extract any nested custom type names.\n // Those nested custom types also inherit the custom op's auth configuration.\n // Supports both inline custom types and refs to custom types\n const traverseCustomTypeFields = (name, typeDef, namesList = []) => {\n const fields = typeDef.data.fields;\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n if (isCustomType(fieldDef)) {\n const customTypeName = `${capitalize(name)}${capitalize(fieldName)}`;\n namesList.push(customTypeName);\n traverseCustomTypeFields(customTypeName, fieldDef, namesList);\n }\n else if (isRefField(fieldDef)) {\n const refType = getRefType(fieldDef.data.link, name);\n if (refType.type === 'CustomType') {\n namesList.push(fieldDef.data.link);\n traverseCustomTypeFields(fieldDef.data.link, refType.def, namesList);\n }\n }\n }\n return namesList;\n };\n const nestedCustomTypeNames = traverseCustomTypeFields(customTypeAuthRules.typeName, customTypeDef);\n return nestedCustomTypeNames;\n}\n/**\n * Validates that defined relationships conform to the following rules.\n * - relationships are bidirectional\n * - hasOne has a belongsTo counterpart\n * - hasMany has a belongsTo counterpart\n * - belongsTo has either a hasOne or hasMany counterpart\n * - both sides of a relationship have identical `references` defined.\n * - the `references` match the primary key of the parent model\n * - references[0] is the primaryKey's partitionKey on the parent model\n * - references[1...n] are the primaryKey's sortKey(s) on the parent model\n * - types match (id / string / number)\n * - the `references` are fields defined on the child model\n * - field names match the named `references` arguments\n * - child model references fields types match those of the parent model's primaryKey\n * @param typeName source model's type name.\n * @param record map of field name to {@link ModelField}\n * @param getInternalModel given a model name, return an {@link InternalModel}\n */\nfunction validateRelationships(typeName, record, getInternalModel) {\n for (const [name, field] of Object.entries(record)) {\n // If the field's type is not a model, there's no relationship\n // to evaluate and we can skip this iteration.\n if (!isModelField(field)) {\n continue;\n }\n // Create a structure representing the relationship for validation.\n const relationship = getModelRelationship(typeName, { name: name, def: field.data }, getInternalModel);\n // Validate that the references defined in the relationship follow the\n // relationship definition rules.\n validateRelationshipReferences(relationship);\n }\n}\n/**\n * Helper function that describes the relationship of a given connection field for use in logging or error messages.\n *\n * `Parent.child: Child @hasMany(references: ['parentId'])`\n * -- or --\n * `Child.parent: Parent @belongsTo(references: ['parentId'])`\n * @param sourceField The {@link ConnectionField} to describe.\n * @param sourceModelName The name of the model within which the sourceField is defined.\n * @returns a 'string' describing the relationship\n */\nfunction describeConnectFieldRelationship(sourceField, sourceModelName) {\n const associatedTypeDescription = sourceField.def.array\n ? `[${sourceField.def.relatedModel}]`\n : sourceField.def.relatedModel;\n const referencesDescription = sourceField.def.references\n .reduce((description, reference) => description + `'${reference}', `, 'references: [')\n .slice(0, -2) + ']';\n return `${sourceModelName}.${sourceField.name}: ${associatedTypeDescription} @${sourceField.def.type}(${referencesDescription})`;\n}\n/**\n * Validates that the types of child model's reference fields match the types of the parent model's identifier fields.\n * @param relationship The {@link ModelRelationship} to validate.\n */\nfunction validateRelationshipReferences(relationship) {\n const { parent, parentConnectionField, child, childConnectionField, references, } = relationship;\n const parentIdentifiers = getIndentifierTypes(parent);\n const childReferenceTypes = [];\n // Iterate through the model schema defined 'references' to find each matching field on the Related model.\n // If a field by that name is not found, throw a validate error.\n // Accumulate the ModelFieldType for each reference field to validate matching types below.\n for (const reference of references) {\n const relatedReferenceType = child.data.fields[reference]?.data\n .fieldType;\n // reference field on related type with name passed to references not found. Time to throw a validation error.\n if (!relatedReferenceType) {\n const errorMessage = `reference field '${reference}' must be defined on ${parentConnectionField.def.relatedModel}. ` +\n describeConnectFieldRelationship(parentConnectionField, childConnectionField.def.relatedModel) +\n ' <-> ' +\n describeConnectFieldRelationship(childConnectionField, parentConnectionField.def.relatedModel);\n throw new Error(errorMessage);\n }\n childReferenceTypes.push(relatedReferenceType);\n }\n if (parentIdentifiers.length !== childReferenceTypes.length) {\n throw new Error(`The identifiers defined on ${childConnectionField.def.relatedModel} must match the reference fields defined on ${parentConnectionField.def.relatedModel}.\\n` +\n `${parentIdentifiers.length} identifiers defined on ${childConnectionField.def.relatedModel}.\\n` +\n `${childReferenceTypes.length} reference fields found on ${parentConnectionField.def.relatedModel}`);\n }\n const matchingModelFieldType = (a, b) => {\n // `String` and `Id` are considered equal types for when comparing\n // the child model's references fields with their counterparts within\n // the parent model's identifier (parent key) fields.\n const matching = [ModelFieldType.Id, ModelFieldType.String];\n return a === b || (matching.includes(a) && matching.includes(b));\n };\n // Zip pairs of child model's reference field with corresponding parent model's identifier field.\n // Confirm that the types match. If they don't, throw a validation error.\n parentIdentifiers\n .map((identifier, index) => [identifier, childReferenceTypes[index]])\n .forEach(([parent, child]) => {\n if (!matchingModelFieldType(parent, child)) {\n throw new Error('Validate Error: types do not match');\n }\n });\n}\n/**\n * Relationship definitions require bi-directionality.\n * Use this to generate a `ModelRelationshipTypes[]` containing acceptable counterparts on the\n * associated model.\n *\n * Given {@link ModelRelationshipTypes.hasOne} or {@link ModelRelationshipTypes.hasOne} returns [{@link ModelRelationshipTypes.belongsTo}]\n * Given {@link ModelRelationshipTypes.belongsTo} returns [{@link ModelRelationshipTypes.hasOne}, {@link ModelRelationshipTypes.belongsTo}]\n *\n * @param relationshipType {@link ModelRelationshipTypes} defined on source model's connection field.\n * @returns possible counterpart {@link ModelRelationshipTypes} as `ModelRelationshipTypes[]`\n */\nfunction associatedRelationshipTypes(relationshipType) {\n switch (relationshipType) {\n case ModelRelationshipTypes.hasOne:\n case ModelRelationshipTypes.hasMany:\n return [ModelRelationshipTypes.belongsTo];\n case ModelRelationshipTypes.belongsTo:\n return [ModelRelationshipTypes.hasOne, ModelRelationshipTypes.hasMany];\n default:\n return []; // TODO: Remove this case on types are updated.\n }\n}\n/**\n * Retrieves the types of the identifiers defined on a model.\n *\n * Note: if a field by the name `id` isn't found in the {@link InternalModel},\n * this assumes an implicitly generated identifier is used with the type.\n *\n * This function does not validate that a corresponding field exists for each of the\n * identifiers because this validation happens at compile time.\n * @param model {@link InternalModel} from which to retrieve identifier types.\n * @returns Array of {@link ModelFieldType} of the model's identifiers found.\n */\nfunction getIndentifierTypes(model) {\n return model.data.identifier.flatMap((fieldName) => {\n const field = model.data.fields[fieldName];\n if (field) {\n return [field.data.fieldType];\n }\n else if (fieldName === 'id') {\n // implicity generated ID\n return [ModelFieldType.Id];\n }\n return [];\n });\n}\n/**\n * Given a relationship definition within a source model (`sourceModelName`, `sourceConnectionField`) and\n * the associated model (`associatedModel`), this finds the connection field for the relationship defined on the\n * associated model. Invalid states, such a 0 or >1 matching connection fields result in an error.\n * @param sourceModelName\n * @param sourceConnectionField\n * @param associatedModel\n * @returns\n */\nfunction getAssociatedConnectionField(sourceModelName, sourceConnectionField, associatedModel) {\n const associatedRelationshipOptions = associatedRelationshipTypes(sourceConnectionField.def.type);\n // Iterate through the associated model's fields to find the associated connection field for the relationship defined on the source model.\n const associatedConnectionFieldCandidates = Object.entries(associatedModel.data.fields).filter(([_key, connectionField]) => {\n // If the field isn't a model, it's not part of the relationship definition -- ignore the field.\n if (!isModelField(connectionField)) {\n return false;\n }\n // In order to find that associated connection field, we need to do some validation that we'll depend on further downstream.\n // 1. Field type matches the source model's type.\n // 2. A valid counterpart relationship modifier is defined on the field. See `associatedRelationshipTypes` for more information.\n // 3. The reference arguments provided to the field match (element count + string comparison) references passed to the source connection field.\n return (connectionField.data.relatedModel === sourceModelName &&\n associatedRelationshipOptions.includes(connectionField.data.type) &&\n connectionField.data.references.length ===\n sourceConnectionField.def.references.length &&\n connectionField.data.references.every((value, index) => value === sourceConnectionField.def.references[index]));\n });\n // We should have found exactly one connection field candidate. If that's not the case, we need to throw a validation error.\n if (associatedConnectionFieldCandidates.length != 1) {\n // const associatedModelDescription = sourceConnectionField.def.array\n // ? `[${sourceConnectionField.def.relatedModel}]`\n // : sourceConnectionField.def.relatedModel\n const sourceConnectionFieldDescription = describeConnectFieldRelationship(sourceConnectionField, sourceModelName); // `${sourceModelName}.${sourceConnectionField.name}: ${associatedModelDescription} @${sourceConnectionField.def.type}(references: [${sourceConnectionField.def.references}])`\n const errorMessage = associatedConnectionFieldCandidates.length === 0\n ? `Unable to find associated relationship definition in ${sourceConnectionField.def.relatedModel}`\n : `Found multiple relationship associations with ${associatedConnectionFieldCandidates.map((field) => `${sourceConnectionField.def.relatedModel}.${field[0]}`).join(', ')}`;\n throw new Error(`${errorMessage} for ${sourceConnectionFieldDescription}`);\n }\n const associatedConnectionField = associatedConnectionFieldCandidates[0];\n if (!isModelField(associatedConnectionField[1])) {\n // This shouldn't happen because we've validated that it's a model field above.\n // However it's necessary to narrow the type.\n // const associatedModelDescription = sourceConnectionField.def.array\n // ? `[${sourceConnectionField.def.relatedModel}]`\n // : sourceConnectionField.def.relatedModel\n const sourceConnectionFieldDescription = describeConnectFieldRelationship(sourceConnectionField, sourceModelName);\n const errorMessage = `Cannot find counterpart to relationship defintion for ${sourceConnectionFieldDescription}`;\n throw new Error(errorMessage);\n }\n return {\n name: associatedConnectionField[0],\n def: associatedConnectionField[1].data,\n };\n}\n/**\n * Given either side of a relationship (source), this retrieves the other side (related)\n * and packages the information neatly into a {@link ModelRelationship} for validation purposes.\n *\n * @param sourceModelName\n * @param sourceConnectionField\n * @param getInternalModel\n * @returns a {@link ModelRelationship}\n */\nfunction getModelRelationship(sourceModelName, sourceModelConnectionField, getInternalModel) {\n const sourceModel = getInternalModel(sourceModelName, sourceModelName);\n const associatedModel = getInternalModel(sourceModelConnectionField.def.relatedModel, sourceModelName);\n const relatedModelConnectionField = getAssociatedConnectionField(sourceModelName, sourceModelConnectionField, associatedModel);\n switch (sourceModelConnectionField.def.type) {\n case ModelRelationshipTypes.hasOne:\n case ModelRelationshipTypes.hasMany:\n return {\n parent: sourceModel,\n parentConnectionField: sourceModelConnectionField,\n child: associatedModel,\n childConnectionField: relatedModelConnectionField,\n references: sourceModelConnectionField.def.references,\n };\n case ModelRelationshipTypes.belongsTo:\n return {\n parent: associatedModel,\n parentConnectionField: relatedModelConnectionField,\n child: sourceModel,\n childConnectionField: sourceModelConnectionField,\n references: sourceModelConnectionField.def.references,\n };\n default:\n throw new Error(`\"${sourceModelConnectionField.def.type}\" is not a valid relationship type.`);\n }\n}\n/**\n *\n * @param disabledOps\n * @returns sanitized string @model directive attribute; can be passed in as-is\n *\n * @example\n * ```ts\n * const disabledOps = [\"subscriptions\", \"create\"];\n * ```\n * returns\n * ```\n * subscriptions:null,mutations:{create:null}\n * ```\n */\nfunction modelAttributesFromDisabledOps(disabledOps) {\n const fineCoarseMap = {\n onCreate: 'subscriptions',\n onUpdate: 'subscriptions',\n onDelete: 'subscriptions',\n create: 'mutations',\n update: 'mutations',\n delete: 'mutations',\n list: 'queries',\n get: 'queries',\n };\n const coarseGrainedOps = ['queries', 'mutations', 'subscriptions'];\n const coarseFirstSorted = disabledOps\n // disabledOps is readOnly; create a copy w/ slice\n .slice()\n .sort((a, b) => {\n if (coarseGrainedOps.includes(a) && !coarseGrainedOps.includes(b)) {\n return -1;\n }\n if (!coarseGrainedOps.includes(a) && coarseGrainedOps.includes(b)) {\n return 1;\n }\n return 0;\n });\n const modelAttrs = {};\n for (const op of coarseFirstSorted) {\n if (coarseGrainedOps.includes(op)) {\n modelAttrs[op] = null;\n continue;\n }\n const coarseOp = fineCoarseMap[op];\n if (modelAttrs[coarseOp] !== null) {\n modelAttrs[coarseOp] = modelAttrs[coarseOp] || {};\n modelAttrs[coarseOp][op] = null;\n }\n }\n const modelAttrsStr = JSON.stringify(modelAttrs)\n .replace(/\"/g, '') // remove quotes\n .slice(1, -1); // drop outer curlies {}\n return modelAttrsStr;\n}\n/**\n * Returns API definition from ModelSchema or string schema\n * @param arg - { schema }\n * @returns DerivedApiDefinition that conforms to IAmplifyGraphqlDefinition\n */\nexport function processSchema(arg) {\n const { schema, jsFunctions, functionSchemaAccess, lambdaFunctions, customSqlDataSourceStrategies, } = schemaPreprocessor(arg.schema);\n return {\n schema,\n functionSlots: [],\n jsFunctions,\n functionSchemaAccess,\n lambdaFunctions,\n customSqlDataSourceStrategies,\n };\n}\n"],"names":["conversationBrandName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SchemaProcessor.mjs","sources":["../../src/SchemaProcessor.ts"],"sourcesContent":["import { string, ModelFieldType, __generated, } from './ModelField';\nimport { ModelRelationshipTypes, } from './ModelRelationshipField';\nimport { accessData, accessSchemaData, } from './Authorization';\nimport { CustomOperationNames, } from './CustomOperation';\nimport { getBrand } from './util';\nimport { getHandlerData, } from './Handler';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { brandSymbol } from './util/Brand';\nimport { brandName as conversationBrandName, } from './ai/ConversationType';\nimport { CONVERSATION_SCHEMA_GRAPHQL_TYPES } from './ai/ConversationSchemaGraphQLTypes';\nimport { createConversationField } from './ai/ConversationSchemaProcessor';\nfunction isInternalModel(model) {\n if (model.data &&\n !isCustomType(model) &&\n !isCustomOperation(model) &&\n !isConversationRoute(model)) {\n return true;\n }\n return false;\n}\nfunction isEnumType(data) {\n if (data?.type === 'enum') {\n return true;\n }\n return false;\n}\nfunction isCustomType(data) {\n if (data?.data?.type === 'customType') {\n return true;\n }\n return false;\n}\nfunction isConversationRoute(type) {\n return getBrand(type) === conversationBrandName;\n}\nfunction isGenerationInput(input) {\n return Boolean(input?.aiModel && input?.systemPrompt);\n}\nfunction isCustomOperation(type) {\n if (CustomOperationNames.includes(type?.data?.typeName)) {\n return true;\n }\n return false;\n}\nfunction isModelFieldDef(data) {\n return data?.fieldType === 'model';\n}\nfunction isScalarFieldDef(data) {\n return data?.fieldType !== 'model';\n}\nfunction isRefFieldDef(data) {\n return data?.type === 'ref';\n}\nfunction isModelField(field) {\n return isModelFieldDef(field?.data);\n}\nfunction dataSourceIsRef(dataSource) {\n return (typeof dataSource !== 'string' &&\n dataSource?.data &&\n dataSource.data.type === 'ref');\n}\nfunction isScalarField(field) {\n return isScalarFieldDef(field?.data);\n}\nfunction isRefField(field) {\n return isRefFieldDef(field?.data);\n}\nfunction canGenerateFieldType(fieldType) {\n return fieldType === 'Int';\n}\nfunction scalarFieldToGql(fieldDef, identifier, secondaryIndexes = []) {\n const { fieldType, required, array, arrayRequired, default: _default, validation = [], } = fieldDef;\n let field = fieldType;\n if (identifier !== undefined) {\n field += '!';\n if (identifier.length > 1) {\n const [_pk, ...sk] = identifier;\n field += ` @primaryKey(sortKeyFields: [${sk\n .map((sk) => `\"${sk}\"`)\n .join(', ')}])`;\n }\n else {\n field += ' @primaryKey';\n }\n for (const index of secondaryIndexes) {\n field += ` ${index}`;\n }\n if (_default === __generated) {\n field += ` @default`;\n }\n return field;\n }\n if (required === true) {\n field += '!';\n }\n if (array) {\n field = `[${field}]`;\n if (arrayRequired === true) {\n field += '!';\n }\n }\n if (_default === __generated) {\n field += ` @default`;\n }\n else if (_default !== undefined) {\n field += ` @default(value: \"${_default?.toString()}\")`;\n }\n for (const index of secondaryIndexes) {\n field += ` ${index}`;\n }\n // Add validation directives for each validation rule\n for (const validationRule of validation) {\n const valueStr = typeof validationRule.value === 'number' ? validationRule.value.toString() : validationRule.value;\n if (validationRule.errorMessage) {\n field += ` @validate(type: ${validationRule.type}, value: \"${valueStr}\", errorMessage: ${escapeGraphQlString(validationRule.errorMessage)})`;\n }\n else {\n field += ` @validate(type: ${validationRule.type}, value: \"${valueStr}\")`;\n }\n }\n return field;\n}\nfunction modelFieldToGql(fieldDef) {\n const { type, relatedModel, array, valueRequired, arrayRequired, references, } = fieldDef;\n let field = relatedModel;\n if (valueRequired === true) {\n field += '!';\n }\n if (array) {\n field = `[${field}]`;\n }\n if (arrayRequired === true) {\n field += '!';\n }\n if (references && Array.isArray(references) && references.length > 0) {\n field += ` @${type}(references: [${references.map((s) => `\"${String(s)}\"`)}])`;\n }\n else {\n field += ` @${type}`;\n }\n return field;\n}\nfunction refFieldToGql(fieldDef, secondaryIndexes = []) {\n const { link, valueRequired, array, arrayRequired } = fieldDef;\n let field = link;\n if (valueRequired === true) {\n field += '!';\n }\n if (array === true) {\n field = `[${field}]`;\n }\n if (arrayRequired === true) {\n field += '!';\n }\n for (const index of secondaryIndexes) {\n field += ` ${index}`;\n }\n return field;\n}\nfunction enumFieldToGql(enumName, secondaryIndexes = []) {\n let field = enumName;\n for (const index of secondaryIndexes) {\n field += ` ${index}`;\n }\n return field;\n}\nfunction transformFunctionHandler(handlers, functionFieldName) {\n let gqlHandlerContent = '';\n const lambdaFunctionDefinition = {};\n handlers.forEach((handler, idx) => {\n const handlerData = getHandlerData(handler);\n if (typeof handlerData.handler === 'string') {\n gqlHandlerContent += `@function(name: \"${handlerData.handler}\") `;\n }\n else if (typeof handlerData.handler.getInstance === 'function') {\n const fnName = `Fn${capitalize(functionFieldName)}${idx === 0 ? '' : `${idx + 1}`}`;\n lambdaFunctionDefinition[fnName] = handlerData.handler;\n const invocationTypeArg = handlerData.invocationType === 'Event'\n ? ', invocationType: Event)'\n : ')';\n gqlHandlerContent += `@function(name: \"${fnName}\"${invocationTypeArg} `;\n }\n else {\n throw new Error(`Invalid value specified for ${functionFieldName} handler.function(). Expected: defineFunction or string.`);\n }\n });\n return {\n gqlHandlerContent,\n lambdaFunctionDefinition,\n };\n}\nfunction customOperationToGql(typeName, typeDef, authorization, isCustom = false, databaseType, getRefType) {\n const { arguments: fieldArgs, typeName: opType, returnType, handlers, subscriptionSource, } = typeDef.data;\n let callSignature = typeName;\n const implicitTypes = [];\n // When Custom Operations are defined with a Custom Type return type,\n // the Custom Type inherits the operation's auth rules\n let customTypeAuthRules = undefined;\n const { authString } = isCustom\n ? mapToNativeAppSyncAuthDirectives(authorization, true)\n : calculateAuth(authorization);\n /**\n *\n * @param returnType The return type from the `data` field of a customer operation.\n * @param refererTypeName The type the refers {@link returnType} by `a.ref()`.\n * @param shouldAddCustomTypeToImplicitTypes A flag indicates wether it should push\n * the return type resolved CustomType to the `implicitTypes` list.\n * @returns\n */\n const resolveReturnTypeNameFromReturnType = (returnType, { refererTypeName, shouldAddCustomTypeToImplicitTypes = true, }) => {\n if (isRefField(returnType)) {\n const { type } = getRefType(returnType.data.link, typeName);\n if (type === 'CustomType') {\n customTypeAuthRules = {\n typeName: returnType.data.link,\n authRules: authorization,\n };\n }\n return refFieldToGql(returnType?.data);\n }\n else if (isCustomType(returnType)) {\n const returnTypeName = `${capitalize(refererTypeName)}ReturnType`;\n if (shouldAddCustomTypeToImplicitTypes) {\n customTypeAuthRules = {\n typeName: returnTypeName,\n authRules: authorization,\n };\n implicitTypes.push([returnTypeName, returnType]);\n }\n return returnTypeName;\n }\n else if (isEnumType(returnType)) {\n const returnTypeName = `${capitalize(refererTypeName)}ReturnType`;\n implicitTypes.push([returnTypeName, returnType]);\n return returnTypeName;\n }\n else if (isScalarField(returnType)) {\n return scalarFieldToGql(returnType?.data);\n }\n else {\n throw new Error(`Unrecognized return type on ${typeName}`);\n }\n };\n let returnTypeName;\n if (opType === 'Subscription' && returnType === null) {\n // up to this point, we've validated that each subscription resource resolves\n // the same return type, so it's safe to use subscriptionSource[0] here.\n const { type, def } = getRefType(subscriptionSource[0].data.link, typeName);\n if (type === 'CustomOperation') {\n returnTypeName = resolveReturnTypeNameFromReturnType(def.data.returnType, {\n refererTypeName: subscriptionSource[0].data.link,\n shouldAddCustomTypeToImplicitTypes: false,\n });\n }\n else {\n returnTypeName = refFieldToGql(subscriptionSource[0].data);\n }\n }\n else {\n returnTypeName = resolveReturnTypeNameFromReturnType(returnType, {\n refererTypeName: typeName,\n });\n }\n const { inputTypes, argDefinitions, collectedEnums } = generateInputTypes(typeName, fieldArgs, getRefType);\n // Handle collected enums\n for (const [enumName, enumDef] of collectedEnums) {\n if (!implicitTypes.some(([name]) => name === enumName)) {\n implicitTypes.push([enumName, enumDef]);\n }\n }\n if (argDefinitions.length > 0) {\n callSignature += `(${argDefinitions.join(', ')})`;\n }\n const handler = handlers && handlers[0];\n const brand = handler && getBrand(handler);\n let gqlHandlerContent = '';\n let lambdaFunctionDefinition = {};\n let customSqlDataSourceStrategy;\n if (isFunctionHandler(handlers)) {\n ({ gqlHandlerContent, lambdaFunctionDefinition } = transformFunctionHandler(handlers, typeName));\n }\n else if (databaseType === 'sql' && handler && brand === 'inlineSql') {\n gqlHandlerContent = `@sql(statement: ${escapeGraphQlString(String(getHandlerData(handler)))}) `;\n customSqlDataSourceStrategy = {\n typeName: opType,\n fieldName: typeName,\n };\n }\n else if (isSqlReferenceHandler(handlers)) {\n const handlerData = getHandlerData(handlers[0]);\n const entry = resolveEntryPath(handlerData, 'Could not determine import path to construct absolute code path for sql reference handler. Consider using an absolute path instead.');\n const reference = typeof entry === 'string' ? entry : entry.relativePath;\n customSqlDataSourceStrategy = {\n typeName: opType,\n fieldName: typeName,\n entry,\n };\n gqlHandlerContent = `@sql(reference: \"${reference}\") `;\n }\n if (opType === 'Subscription') {\n const subscriptionSources = subscriptionSource\n .flatMap((source) => {\n const refTarget = source.data.link;\n const { type } = getRefType(refTarget, typeName);\n if (type === 'CustomOperation') {\n return refTarget;\n }\n if (type === 'Model') {\n return source.data.mutationOperations.map(\n // capitalize explicitly in case customer used lowercase model name\n (op) => `${op}${capitalize(refTarget)}`);\n }\n })\n .join('\", \"');\n gqlHandlerContent += `@aws_subscribe(mutations: [\"${subscriptionSources}\"]) `;\n }\n if (opType === 'Generation') {\n if (!isGenerationInput(typeDef.data.input)) {\n throw new Error(`Invalid Generation Route definition. A Generation Route must include a valid input. ${typeName} has an invalid or no input defined.`);\n }\n const { aiModel, systemPrompt, inferenceConfiguration } = typeDef.data.input;\n // This is done to escape newlines in potentially multi-line system prompts\n // e.g.\n // generateStuff: a.generation({\n // aiModel: a.ai.model('Claude 3 Haiku'),\n // systemPrompt: `Generate a haiku\n // make it multiline`,\n // }),\n //\n // It doesn't affect non multi-line string inputs for system prompts\n const escapedSystemPrompt = systemPrompt.replace(/\\r?\\n/g, '\\\\n');\n const inferenceConfigurationEntries = Object.entries(inferenceConfiguration ?? {});\n const inferenceConfigurationGql = inferenceConfigurationEntries.length > 0\n ? `, inferenceConfiguration: { ${inferenceConfigurationEntries\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ')} }`\n : '';\n gqlHandlerContent += `@generation(aiModel: \"${aiModel.resourcePath}\", systemPrompt: \"${escapedSystemPrompt}\"${inferenceConfigurationGql}) `;\n }\n const gqlField = `${callSignature}: ${returnTypeName} ${gqlHandlerContent}${authString}`;\n return {\n gqlField,\n implicitTypes: implicitTypes,\n customTypeAuthRules,\n lambdaFunctionDefinition,\n customSqlDataSourceStrategy,\n inputTypes,\n };\n}\n/**\n * Escape a string that will be used inside of a graphql string.\n * @param str The input string to be escaped\n * @returns The string with special charactars escaped\n */\nfunction escapeGraphQlString(str) {\n return JSON.stringify(str);\n}\n/**\n * AWS AppSync scalars that are stored as strings in the data source\n */\nconst stringFieldTypes = {\n ID: true,\n String: true,\n AWSDate: true,\n AWSTime: true,\n AWSDateTime: true,\n AWSEmail: true,\n AWSPhone: true,\n AWSURL: true,\n AWSIPAddress: true,\n};\n/**\n * Normalize string-compatible field types for comparison\n */\nconst normalizeStringFieldTypes = (fieldType) => {\n if (fieldType in stringFieldTypes) {\n return ModelFieldType.String;\n }\n return fieldType;\n};\n/**\n * Tests whether two ModelField definitions are in conflict.\n *\n * This is a shallow check intended to catch conflicts between defined fields\n * and fields implied by authorization rules. Hence, it only compares type\n * and plurality.\n *\n * @param left\n * @param right\n * @returns\n */\nfunction areConflicting(left, right) {\n const leftData = left.data;\n const rightData = right.data;\n // `array` and `fieldType` are the only props we care about for this comparison, because the others\n // (required, arrayRequired, etc) are not specified on auth or FK directives.\n if (leftData.array !== rightData.array) {\n return true;\n }\n // Convert \"string-compatible\" field types to `String` for the sake of this comparison\n //\n // E.g. if a customer has an explicit a.id() field that they're referencing in an allow.ownerDefinedIn rule\n // we treat ID and String as equivalent/non-conflicting\n if (normalizeStringFieldTypes(leftData.fieldType) !==\n normalizeStringFieldTypes(rightData.fieldType)) {\n return true;\n }\n return false;\n}\n/**\n * Merges one field defition object onto an existing one, performing\n * validation (conflict detection) along the way.\n *\n * @param existing An existing field map\n * @param additions A field map to merge in\n */\nfunction addFields(existing, additions) {\n for (const [k, addition] of Object.entries(additions)) {\n if (!existing[k]) {\n existing[k] = addition;\n }\n else if (areConflicting(existing[k], addition)) {\n throw new Error(`Field ${k} defined twice with conflicting definitions.`);\n }\n else {\n // fields are defined on both sides, but match.\n }\n }\n}\n/**\n * Validate that no implicit fields are used by the model definition\n *\n * @param existing An existing field map\n * @param implicitFields A field map inferred from other schema usage\n *\n * @throws An error when an undefined field is used or when a field is used in a way that conflicts with its generated definition\n */\nfunction validateStaticFields(existing, implicitFields) {\n if (implicitFields === undefined) {\n return;\n }\n for (const [k, field] of Object.entries(implicitFields)) {\n if (!existing[k]) {\n throw new Error(`Field ${k} isn't defined.`);\n }\n else if (areConflicting(existing[k], field)) {\n throw new Error(`Field ${k} defined twice with conflicting definitions.`);\n }\n }\n}\n/**\n * Validate that no implicit fields conflict with explicitly defined fields.\n *\n * @param existing An existing field map\n * @param implicitFields A field map inferred from other schema usage\n *\n * @throws An error when an undefined field is used or when a field is used in a way that conflicts with its generated definition\n */\nfunction validateImpliedFields(existing, implicitFields) {\n if (implicitFields === undefined) {\n return;\n }\n for (const [k, field] of Object.entries(implicitFields)) {\n if (existing[k] && areConflicting(existing[k], field)) {\n throw new Error(`Implicit field ${k} conflicts with the explicit field definition.`);\n }\n }\n}\nfunction validateRefUseCases(referrerName, referrerType, fields, getRefType) {\n const check = (fieldName, refLink, targetType) => {\n const { def } = getRefType(refLink, referrerName);\n if (isInternalModel(def)) {\n throw new Error(`Cannot use \\`.ref()\\` to refer a model from a \\`${targetType}\\`. Field \\`${fieldName}\\` of \\`${referrerName}\\` refers to model \\`${refLink}\\``);\n }\n };\n for (const [fieldName, field] of Object.entries(fields)) {\n if (isRefField(field)) {\n check(fieldName, field.data.link, referrerType === 'customType' ? 'custom type' : 'model');\n }\n }\n}\n/**\n * Given a list of authorization rules, produces a set of the implied owner and/or\n * group fields, along with the associated graphql `@auth` string directive.\n *\n * This is intended to be called for each model and field to collect the implied\n * fields and directives from that individual \"item's\" auth rules.\n *\n * The computed directives are intended to be appended to the graphql field definition.\n *\n * The computed fields will be used to confirm no conflicts between explicit field definitions\n * and implicit auth fields.\n *\n * @param authorization A list of authorization rules.\n * @returns\n */\nfunction calculateAuth(authorization) {\n const authFields = {};\n const rules = [];\n for (const entry of authorization) {\n const rule = accessData(entry);\n const ruleParts = [];\n if (rule.strategy) {\n ruleParts.push([`allow: ${rule.strategy}`]);\n }\n else {\n return {\n authFields,\n authString: '',\n };\n }\n if (rule.provider) {\n // identityPool maps to iam in the transform\n const provider = rule.provider === 'identityPool' ? 'iam' : rule.provider;\n ruleParts.push(`provider: ${provider}`);\n }\n if (rule.operations) {\n ruleParts.push(`operations: [${rule.operations.join(', ')}]`);\n }\n if (rule.groupOrOwnerField) {\n // directive attribute, depending whether it's owner or group auth\n if (rule.strategy === 'groups') {\n // does this need to be escaped?\n ruleParts.push(`groupsField: \"${rule.groupOrOwnerField}\"`);\n }\n else {\n // does this need to be escaped?\n ruleParts.push(`ownerField: \"${rule.groupOrOwnerField}\"`);\n }\n // model field dep, type of which depends on whether multiple owner/group\n // is required.\n if (rule.multiOwner) {\n addFields(authFields, { [rule.groupOrOwnerField]: string().array() });\n }\n else {\n addFields(authFields, { [rule.groupOrOwnerField]: string() });\n }\n }\n if (rule.groups) {\n // does `group` need to be escaped?\n ruleParts.push(`groups: [${rule.groups.map((group) => `\"${group}\"`).join(', ')}]`);\n }\n // identityClaim\n if (rule.identityClaim) {\n // does this need to be escaped?\n ruleParts.push(`identityClaim: \"${rule.identityClaim}\"`);\n }\n // groupClaim\n if (rule.groupClaim) {\n // does this need to be escaped?\n ruleParts.push(`groupClaim: \"${rule.groupClaim}\"`);\n }\n rules.push(`{${ruleParts.join(', ')}}`);\n }\n const authString = rules.length > 0 ? `@auth(rules: [${rules.join(',\\n ')}])` : '';\n return { authString, authFields };\n}\nfunction validateCustomHandlerAuthRule(rule) {\n if (rule.groups && rule.provider === 'oidc') {\n throw new Error('OIDC group auth is not supported with a.handler.custom');\n }\n // not currently supported with handler.custom (JS Resolvers), but will be in the future\n if (rule.provider === 'identityPool' || rule.provider === 'iam') {\n throw new Error(\"identityPool-based auth (allow.guest() and allow.authenticated('identityPool')) is not supported with a.handler.custom\");\n }\n}\nfunction getAppSyncAuthDirectiveFromRule(rule) {\n const strategyDict = {\n public: {\n default: '@aws_api_key',\n apiKey: '@aws_api_key',\n iam: '@aws_iam',\n identityPool: '@aws_iam',\n },\n private: {\n default: '@aws_cognito_user_pools',\n userPools: '@aws_cognito_user_pools',\n oidc: '@aws_oidc',\n iam: '@aws_iam',\n identityPool: '@aws_iam',\n },\n groups: {\n default: '@aws_cognito_user_pools',\n userPools: '@aws_cognito_user_pools',\n },\n custom: {\n default: '@aws_lambda',\n function: '@aws_lambda',\n },\n };\n const stratProviders = strategyDict[rule.strategy];\n if (stratProviders === undefined) {\n throw new Error(`Unsupported auth strategy for custom handlers: ${rule.strategy}`);\n }\n const provider = rule.provider || 'default';\n const stratProvider = stratProviders[provider];\n if (stratProvider === undefined) {\n throw new Error(`Unsupported provider for custom handlers: ${rule.provider}`);\n }\n return stratProvider;\n}\nfunction mapToNativeAppSyncAuthDirectives(authorization, isCustomHandler) {\n const rules = new Set();\n const groupProvider = new Map();\n const generalProviderUsed = new Set();\n for (const entry of authorization) {\n const rule = accessData(entry);\n isCustomHandler && validateCustomHandlerAuthRule(rule);\n const provider = getAppSyncAuthDirectiveFromRule(rule);\n if (rule.groups) {\n if (!groupProvider.has(provider)) {\n groupProvider.set(provider, new Set());\n }\n ;\n rule.groups.forEach((group) => groupProvider.get(provider)?.add(group));\n }\n else {\n generalProviderUsed.add(provider);\n rules.add(provider);\n }\n }\n groupProvider.forEach((groups, provider) => {\n if (!generalProviderUsed.has(provider)) {\n rules.add(`${provider}(cognito_groups: [${Array.from(groups).reduce((acc, group) => acc == \"\" ? `\"${group}\"` : `${acc}, \"${group}\"`, \"\")}])`);\n // example: (cognito_groups: [\"Bloggers\", \"Readers\"])\n }\n });\n const authString = [...rules].join(' ');\n return { authString };\n}\nfunction capitalize(s) {\n return `${s[0].toUpperCase()}${s.slice(1)}`;\n}\nfunction processFieldLevelAuthRules(fields, authFields) {\n const fieldLevelAuthRules = {};\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n const fieldAuth = fieldDef?.data?.authorization || [];\n const { authString, authFields: fieldAuthField } = calculateAuth(fieldAuth);\n if (authString)\n fieldLevelAuthRules[fieldName] = authString;\n if (fieldAuthField) {\n addFields(authFields, fieldAuthField);\n }\n }\n return fieldLevelAuthRules;\n}\nfunction validateDBGeneration(fields, databaseEngine) {\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n const _default = fieldDef.data?.default;\n const fieldType = fieldDef.data?.fieldType;\n const isGenerated = _default === __generated;\n if (isGenerated && databaseEngine !== 'postgresql') {\n throw new Error(`Invalid field definition for ${fieldName}. DB-generated fields are only supported with PostgreSQL data sources.`);\n }\n if (isGenerated && !canGenerateFieldType(fieldType)) {\n throw new Error(`Incompatible field type. Field type ${fieldType} in field ${fieldName} cannot be configured as a DB-generated field.`);\n }\n }\n}\nfunction validateNullableIdentifiers(fields, identifier) {\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n const fieldType = fieldDef.data?.fieldType;\n const required = fieldDef.data?.required;\n const _default = fieldDef.data?.default;\n const isGenerated = _default === __generated;\n if (identifier !== undefined && identifier.includes(fieldName)) {\n if (!required && fieldType !== 'ID' && !isGenerated) {\n throw new Error(`Invalid identifier definition. Field ${fieldName} cannot be used in the identifier. Identifiers must reference required or DB-generated fields)`);\n }\n }\n }\n}\nfunction processFields(typeName, fields, impliedFields, fieldLevelAuthRules, identifier, partitionKey, secondaryIndexes = {}, databaseEngine = 'dynamodb') {\n const gqlFields = [];\n // stores nested, field-level type definitions (custom types and enums)\n // the need to be hoisted to top-level schema types and processed accordingly\n const implicitTypes = [];\n validateImpliedFields(fields, impliedFields);\n validateDBGeneration(fields, databaseEngine);\n validateNullableIdentifiers(fields, identifier);\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n const fieldAuth = fieldLevelAuthRules[fieldName]\n ? ` ${fieldLevelAuthRules[fieldName]}`\n : '';\n if (isModelField(fieldDef)) {\n gqlFields.push(`${fieldName}: ${modelFieldToGql(fieldDef.data)}${fieldAuth}`);\n }\n else if (isScalarField(fieldDef)) {\n if (fieldName === partitionKey) {\n gqlFields.push(`${fieldName}: ${scalarFieldToGql(fieldDef.data, identifier, secondaryIndexes[fieldName])}${fieldAuth}`);\n }\n else if (isRefField(fieldDef)) {\n gqlFields.push(`${fieldName}: ${refFieldToGql(fieldDef.data, secondaryIndexes[fieldName])}${fieldAuth}`);\n }\n else if (isEnumType(fieldDef)) {\n // The inline enum type name should be `<TypeName><FieldName>` to avoid\n // enum type name conflicts\n const enumName = `${capitalize(typeName)}${capitalize(fieldName)}`;\n implicitTypes.push([enumName, fieldDef]);\n gqlFields.push(`${fieldName}: ${enumFieldToGql(enumName, secondaryIndexes[fieldName])}`);\n }\n else if (isCustomType(fieldDef)) {\n // The inline CustomType name should be `<TypeName><FieldName>` to avoid\n // CustomType name conflicts\n const customTypeName = `${capitalize(typeName)}${capitalize(fieldName)}`;\n implicitTypes.push([customTypeName, fieldDef]);\n gqlFields.push(`${fieldName}: ${customTypeName}`);\n }\n else {\n gqlFields.push(`${fieldName}: ${scalarFieldToGql(fieldDef.data, undefined, secondaryIndexes[fieldName])}${fieldAuth}`);\n }\n }\n else {\n throw new Error(`Unexpected field definition: ${fieldDef}`);\n }\n }\n return { gqlFields, implicitTypes };\n}\n/**\n *\n * @param pk - partition key field name\n * @param sk - (optional) array of sort key field names\n * @returns default query field name\n */\nconst secondaryIndexDefaultQueryField = (modelName, pk, sk) => {\n const skName = sk?.length ? 'And' + sk?.map(capitalize).join('And') : '';\n const queryField = `list${capitalize(modelName)}By${capitalize(pk)}${skName}`;\n return queryField;\n};\n/**\n * Given InternalModelIndexType[] returns a map where the key is the model field to be annotated with an @index directive\n * and the value is an array of transformed Amplify @index directives with all supplied attributes\n */\nconst transformedSecondaryIndexesForModel = (modelName, secondaryIndexes, modelFields, getRefType) => {\n const indexDirectiveWithAttributes = (partitionKey, sortKeys, indexName, queryField) => {\n for (const keyName of [partitionKey, ...sortKeys]) {\n const field = modelFields[keyName];\n if (isRefField(field)) {\n const { def } = getRefType(field.data.link, modelName);\n if (!isEnumType(def)) {\n throw new Error(`The ref field \\`${keyName}\\` used in the secondary index of \\`${modelName}\\` should refer to an enum type. \\`${field.data.link}\\` is not a enum type.`);\n }\n }\n }\n if (!sortKeys.length && !indexName && !queryField && queryField !== null) {\n return `@index(queryField: \"${secondaryIndexDefaultQueryField(modelName, partitionKey)}\")`;\n }\n const attributes = [];\n if (indexName) {\n attributes.push(`name: \"${indexName}\"`);\n }\n if (sortKeys.length) {\n attributes.push(`sortKeyFields: [${sortKeys.map((sk) => `\"${sk}\"`).join(', ')}]`);\n }\n if (queryField === null) {\n attributes.push(`queryField: null`);\n }\n else if (queryField) {\n attributes.push(`queryField: \"${queryField}\"`);\n }\n else {\n attributes.push(`queryField: \"${secondaryIndexDefaultQueryField(modelName, partitionKey, sortKeys)}\"`);\n }\n return `@index(${attributes.join(', ')})`;\n };\n return secondaryIndexes.reduce((acc, { data: { partitionKey, sortKeys, indexName, queryField } }) => {\n acc[partitionKey] = acc[partitionKey] || [];\n acc[partitionKey].push(indexDirectiveWithAttributes(partitionKey, sortKeys, indexName, queryField));\n return acc;\n }, {});\n};\nconst ruleIsResourceAuth = (authRule) => {\n const data = accessSchemaData(authRule);\n return data.strategy === 'resource';\n};\n/**\n * Separates out lambda resource auth rules from remaining schema rules.\n *\n * @param authRules schema auth rules\n */\nconst extractFunctionSchemaAccess = (authRules) => {\n const schemaAuth = [];\n const functionSchemaAccess = [];\n const defaultActions = [\n 'query',\n 'mutate',\n 'listen',\n ];\n for (const rule of authRules) {\n if (ruleIsResourceAuth(rule)) {\n const ruleData = accessSchemaData(rule);\n const fnAccess = {\n resourceProvider: ruleData.resource,\n actions: ruleData.operations || defaultActions,\n };\n functionSchemaAccess.push(fnAccess);\n }\n else {\n schemaAuth.push(rule);\n }\n }\n return { schemaAuth, functionSchemaAccess };\n};\n/**\n * Searches a schema and all related schemas (through `.combine()`) for the given type by name.\n *\n * @param schema\n * @param name\n * @returns\n */\nconst findCombinedSchemaType = (schema, name) => {\n if (schema.context) {\n for (const contextualSchema of schema.context.schemas) {\n if (contextualSchema.data.types[name]) {\n return contextualSchema.data.types[name];\n }\n }\n }\n else {\n return schema.data.types[name];\n }\n return undefined;\n};\n/**\n * Returns a closure for retrieving reference type and definition from schema\n */\nconst getRefTypeForSchema = (schema) => {\n const getRefType = (name, referrerName) => {\n const typeDef = findCombinedSchemaType(schema, name);\n if (typeDef === undefined) {\n throw new Error(referrerName\n ? `Invalid ref. ${referrerName} is referring to ${name} which is not defined in the schema`\n : `Invalid ref. ${name} is not defined in the schema`);\n }\n if (isInternalModel(typeDef)) {\n return { type: 'Model', def: typeDef };\n }\n if (isCustomOperation(typeDef)) {\n return { type: 'CustomOperation', def: typeDef };\n }\n if (isCustomType(typeDef)) {\n return { type: 'CustomType', def: typeDef };\n }\n if (isEnumType(typeDef)) {\n return { type: 'Enum', def: typeDef };\n }\n throw new Error(referrerName\n ? `Invalid ref. ${referrerName} is referring to ${name} which is neither a Model, Custom Operation, Custom Type, or Enum`\n : `Invalid ref. ${name} is neither a Model, Custom Operation, Custom Type, or Enum`);\n };\n return getRefType;\n};\n/**\n * Sorts top-level schema types to where Custom Types are processed last\n * This allows us to accrue and then apply inherited auth rules for custom types from custom operations\n * that reference them in their return values\n */\nconst sortTopLevelTypes = (topLevelTypes) => {\n return topLevelTypes.sort(([_typeNameA, typeDefA], [_typeNameB, typeDefB]) => {\n if ((isCustomType(typeDefA) && isCustomType(typeDefB)) ||\n (!isCustomType(typeDefA) && !isCustomType(typeDefB))) {\n return 0;\n }\n else if (isCustomType(typeDefA) && !isCustomType(typeDefB)) {\n return 1;\n }\n else {\n return -1;\n }\n });\n};\n/**\n * Builds up dictionary of Custom Type name - array of inherited auth rules\n */\nconst mergeCustomTypeAuthRules = (existing, added) => {\n if (!added)\n return;\n const { typeName, authRules } = added;\n if (typeName in existing) {\n existing[typeName] = [...existing[typeName], ...authRules];\n }\n else {\n existing[typeName] = authRules;\n }\n};\n/**\n * Generates input types for custom operations in the schema.\n *\n * Processes operation arguments to create corresponding input types,\n * handling referenced and inline custom types, enums, and nested structures.\n * Manages circular references and prevents duplicate processing.\n *\n **/\nfunction generateInputTypes(operationName, args, getRefType) {\n const inputTypes = [];\n const argDefinitions = [];\n const collectedEnums = new Map();\n const processedTypes = new Set(); // Track processed types to avoid duplicates\n const processNonScalarFields = (fields, originalTypeName, isParentRef = false, parentChain = []) => {\n const processedFields = {};\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n if (isRefField(fieldDef)) {\n const refType = getRefType(fieldDef.data.link, originalTypeName);\n if (refType.type === 'CustomType') {\n const nestedInputTypeName = `${fieldDef.data.link}Input`;\n processedFields[fieldName] = {\n data: {\n type: 'ref',\n link: nestedInputTypeName,\n array: fieldDef.data.array,\n arrayRequired: fieldDef.data.arrayRequired,\n valueRequired: fieldDef.data.valueRequired\n },\n };\n // Process the nested type if it hasn't been processed and isn't a circular reference\n if (!parentChain.includes(nestedInputTypeName) &&\n !processedTypes.has(nestedInputTypeName)) {\n processedTypes.add(nestedInputTypeName);\n const nestedFields = processNonScalarFields(refType.def.data.fields, fieldDef.data.link, true, [...parentChain, nestedInputTypeName]);\n inputTypes.push({\n name: nestedInputTypeName,\n fields: nestedFields,\n });\n }\n }\n else if (refType.type === 'Enum') {\n processedFields[fieldName] = {\n data: {\n type: 'ref',\n link: fieldDef.data.link,\n array: fieldDef.data.array,\n arrayRequired: fieldDef.data.arrayRequired,\n valueRequired: fieldDef.data.valueRequired\n },\n };\n }\n else {\n throw new Error(`Unsupported reference type '${refType.type}' for field '${fieldName}'. ` +\n `Only references to CustomType and Enum are supported.`);\n }\n }\n else if (isCustomType(fieldDef)) {\n // Handle inline custom types\n const nestedInputTypeName = `${capitalize(originalTypeName)}${capitalize(fieldName)}Input`;\n processedFields[fieldName] = {\n data: {\n type: 'ref',\n link: nestedInputTypeName\n },\n };\n if (!processedTypes.has(nestedInputTypeName)) {\n processedTypes.add(nestedInputTypeName);\n const nestedFields = processNonScalarFields(fieldDef.data.fields, `${capitalize(originalTypeName)}${capitalize(fieldName)}`, isParentRef, [...parentChain, nestedInputTypeName]);\n inputTypes.push({\n name: nestedInputTypeName,\n fields: nestedFields,\n });\n }\n }\n else if (isEnumType(fieldDef)) {\n // Handle enum types\n const enumName = `${capitalize(originalTypeName)}${capitalize(fieldName)}`;\n if (!collectedEnums.has(enumName) && !isParentRef) {\n collectedEnums.set(enumName, fieldDef);\n }\n processedFields[fieldName] = { data: { type: 'ref', link: enumName } };\n }\n else {\n processedFields[fieldName] = fieldDef;\n }\n }\n return processedFields;\n };\n // Process top-level arguments\n for (const [argName, argDef] of Object.entries(args)) {\n if (isRefField(argDef)) {\n const refType = getRefType(argDef.data.link, operationName);\n if (refType.type === 'CustomType') {\n const { valueRequired, array, arrayRequired } = argDef.data;\n const inputTypeName = `${argDef.data.link}Input`;\n let field = inputTypeName;\n if (valueRequired === true) {\n field += '!';\n }\n if (array) {\n field = `[${field}]`;\n if (arrayRequired === true) {\n field += '!';\n }\n }\n argDefinitions.push(`${argName}: ${field}`);\n // Process the input type if it hasn't been processed yet\n if (!processedTypes.has(inputTypeName)) {\n processedTypes.add(inputTypeName);\n const fields = processNonScalarFields(refType.def.data.fields, argDef.data.link, true, [inputTypeName]);\n inputTypes.push({\n name: inputTypeName,\n fields,\n });\n }\n }\n else if (refType.type === 'Enum') {\n const { valueRequired, array, arrayRequired } = argDef.data;\n let field = argDef.data.link;\n if (valueRequired === true) {\n field += '!';\n }\n if (array) {\n field = `[${field}]`;\n if (arrayRequired === true) {\n field += '!';\n }\n }\n argDefinitions.push(`${argName}: ${field}`);\n }\n else {\n throw new Error(`Unsupported reference type '${refType.type}' for argument '${argName}' in '${operationName}'. ` +\n `Only references to CustomType and Enum are supported.`);\n }\n }\n else if (isEnumType(argDef)) {\n // Handle top-level enum arguments\n const enumName = `${capitalize(operationName)}${capitalize(argName)}`;\n if (!collectedEnums.has(enumName)) {\n collectedEnums.set(enumName, argDef);\n }\n argDefinitions.push(`${argName}: ${enumName}`);\n }\n else if (isCustomType(argDef)) {\n // Handle top-level custom type arguments\n const inputTypeName = `${capitalize(operationName)}${capitalize(argName)}Input`;\n argDefinitions.push(`${argName}: ${inputTypeName}`);\n if (!processedTypes.has(inputTypeName)) {\n processedTypes.add(inputTypeName);\n const fields = processNonScalarFields(argDef.data.fields, `${capitalize(operationName)}${capitalize(argName)}`, false, [inputTypeName]);\n inputTypes.push({\n name: inputTypeName,\n fields,\n });\n }\n }\n else if (isScalarField(argDef)) {\n argDefinitions.push(`${argName}: ${scalarFieldToGql(argDef.data)}`);\n }\n else {\n throw new Error(`Unsupported argument type for ${argName}`);\n }\n }\n return { inputTypes, argDefinitions, collectedEnums };\n}\nconst schemaPreprocessor = (schema) => {\n const gqlModels = [];\n const customQueries = [];\n const customMutations = [];\n const customSubscriptions = [];\n let shouldAddConversationTypes = false;\n // Dict of auth rules to be applied to custom types\n // Inherited from the auth configured on the custom operations that return these custom types\n const customTypeInheritedAuthRules = {};\n const jsFunctions = [];\n const lambdaFunctions = {};\n const customSqlDataSourceStrategies = [];\n const databaseEngine = schema.data.configuration.database.engine;\n const databaseType = databaseEngine === 'dynamodb' ? 'dynamodb' : 'sql';\n const staticSchema = databaseType === 'sql';\n // If the schema contains a custom operation with an async lambda handler,\n // we need to add the EventInvocationResponse custom type to the schema.\n // This is done here so that:\n // - it only happens once per schema\n // - downstream validation based on `getRefTypeForSchema` finds the EventInvocationResponse type\n const containsAsyncLambdaCustomOperation = Object.entries(schema.data.types).find(([_, typeDef]) => {\n return (isCustomOperation(typeDef) &&\n finalHandlerIsAsyncFunctionHandler(typeDef.data.handlers));\n });\n if (containsAsyncLambdaCustomOperation) {\n schema.data.types['EventInvocationResponse'] =\n eventInvocationResponseCustomType;\n }\n const topLevelTypes = sortTopLevelTypes(Object.entries(schema.data.types));\n const { schemaAuth, functionSchemaAccess } = extractFunctionSchemaAccess(schema.data.authorization);\n const getRefType = getRefTypeForSchema(schema);\n const uniqueInputTypes = new Map();\n for (const [typeName, typeDef] of topLevelTypes) {\n const mostRelevantAuthRules = typeDef.data?.authorization?.length > 0\n ? typeDef.data.authorization\n : schemaAuth;\n if (!isInternalModel(typeDef)) {\n if (isEnumType(typeDef)) {\n if (typeDef.values.some((value) => /\\s/.test(value))) {\n throw new Error(`Values of the enum type ${typeName} should not contain any whitespace.`);\n }\n const enumType = `enum ${typeName} {\\n ${typeDef.values.join('\\n ')}\\n}`;\n gqlModels.push(enumType);\n }\n else if (isCustomType(typeDef)) {\n const fields = typeDef.data.fields;\n validateRefUseCases(typeName, 'customType', fields, getRefType);\n const fieldAuthApplicableFields = Object.fromEntries(Object.entries(fields).filter((pair) => isModelField(pair[1])));\n let customAuth = '';\n if (typeName in customTypeInheritedAuthRules) {\n const { authString } = mapToNativeAppSyncAuthDirectives(customTypeInheritedAuthRules[typeName], false);\n customAuth = authString;\n }\n const authFields = {};\n const fieldLevelAuthRules = processFieldLevelAuthRules(fieldAuthApplicableFields, authFields);\n const { gqlFields, implicitTypes } = processFields(typeName, fields, authFields, fieldLevelAuthRules, undefined, undefined, undefined, databaseEngine);\n topLevelTypes.push(...implicitTypes);\n const joined = gqlFields.join('\\n ');\n const model = `type ${typeName} ${customAuth}\\n{\\n ${joined}\\n}`;\n gqlModels.push(model);\n }\n else if (isCustomOperation(typeDef)) {\n // TODO: add generation route logic.\n const { typeName: opType } = typeDef.data;\n const { gqlField, implicitTypes, customTypeAuthRules, jsFunctionForField, lambdaFunctionDefinition, customSqlDataSourceStrategy, inputTypes, } = transformCustomOperations(typeDef, typeName, mostRelevantAuthRules, databaseType, getRefType);\n // Process input types without duplicates\n for (const { name, fields } of inputTypes) {\n if (!uniqueInputTypes.has(name)) {\n uniqueInputTypes.set(name, fields);\n }\n }\n topLevelTypes.push(...implicitTypes);\n mergeCustomTypeAuthRules(customTypeInheritedAuthRules, customTypeAuthRules);\n if (customTypeAuthRules) {\n const nestedCustomTypeNames = extractNestedCustomTypeNames(customTypeAuthRules, topLevelTypes, getRefType);\n for (const nestedCustomType of nestedCustomTypeNames) {\n mergeCustomTypeAuthRules(customTypeInheritedAuthRules, {\n typeName: nestedCustomType,\n authRules: customTypeAuthRules.authRules, // apply the same auth rules as the top-level custom type\n });\n }\n }\n Object.assign(lambdaFunctions, lambdaFunctionDefinition);\n if (jsFunctionForField) {\n jsFunctions.push(jsFunctionForField);\n }\n if (customSqlDataSourceStrategy) {\n customSqlDataSourceStrategies.push(customSqlDataSourceStrategy);\n }\n switch (opType) {\n case 'Query':\n case 'Generation':\n customQueries.push(gqlField);\n break;\n case 'Mutation':\n customMutations.push(gqlField);\n break;\n case 'Subscription':\n customSubscriptions.push(gqlField);\n break;\n default:\n break;\n }\n }\n else if (isConversationRoute(typeDef)) {\n const { field, functionHandler } = createConversationField(typeDef, typeName);\n customMutations.push(field);\n Object.assign(lambdaFunctions, functionHandler);\n shouldAddConversationTypes = true;\n }\n }\n else if (staticSchema) {\n const fields = { ...typeDef.data.fields };\n validateRefUseCases(typeName, 'model', fields, getRefType);\n const identifier = typeDef.data.identifier;\n const [partitionKey] = identifier;\n const { authString, authFields } = calculateAuth(mostRelevantAuthRules);\n const fieldLevelAuthRules = processFieldLevelAuthRules(fields, authFields);\n validateStaticFields(fields, authFields);\n const { gqlFields, implicitTypes } = processFields(typeName, fields, authFields, fieldLevelAuthRules, identifier, partitionKey, undefined, databaseEngine);\n topLevelTypes.push(...implicitTypes);\n const joined = gqlFields.join('\\n ');\n const refersToString = typeDef.data.originalName\n ? ` @refersTo(name: \"${typeDef.data.originalName}\")`\n : '';\n // TODO: update @model(timestamps: null) once a longer term solution gets\n // determined.\n //\n // Context: SQL schema should not be automatically inserted with timestamp fields,\n // passing (timestamps: null) to @model to suppress this behavior as a short\n // term solution.\n const model = `type ${typeName} @model(timestamps: null) ${authString}${refersToString}\\n{\\n ${joined}\\n}`;\n gqlModels.push(model);\n }\n else {\n const fields = typeDef.data.fields;\n validateRefUseCases(typeName, 'model', fields, getRefType);\n const identifier = typeDef.data.identifier;\n const [partitionKey] = identifier;\n const transformedSecondaryIndexes = transformedSecondaryIndexesForModel(typeName, typeDef.data.secondaryIndexes, fields, getRefType);\n const { authString, authFields } = calculateAuth(mostRelevantAuthRules);\n if (authString == '') {\n throw new Error(`Model \\`${typeName}\\` is missing authorization rules. Add global rules to the schema or ensure every model has its own rules.`);\n }\n const getInternalModel = (modelName, sourceName) => {\n const model = getRefType(modelName, sourceName);\n if (!isInternalModel(model.def)) {\n throw new Error(`Expected to find model type with name ${modelName}`);\n }\n return model.def;\n };\n validateRelationships(typeName, fields, getInternalModel);\n const fieldLevelAuthRules = processFieldLevelAuthRules(fields, authFields);\n const { gqlFields, implicitTypes } = processFields(typeName, fields, authFields, fieldLevelAuthRules, identifier, partitionKey, transformedSecondaryIndexes, databaseEngine);\n topLevelTypes.push(...implicitTypes);\n const joined = gqlFields.join('\\n ');\n const modelAttrs = modelAttributesFromDisabledOps(typeDef.data.disabledOperations);\n const modelDirective = modelAttrs ? `@model(${modelAttrs})` : '@model';\n const model = `type ${typeName} ${modelDirective} ${authString}\\n{\\n ${joined}\\n}`;\n gqlModels.push(model);\n }\n }\n // Generate input types after processing all custom operations\n for (const [name, fields] of uniqueInputTypes) {\n const { gqlFields } = processFields(name, fields, {}, {}, undefined, undefined, undefined, databaseEngine);\n const inputTypeDefinition = `input ${name} {\\n ${gqlFields.join('\\n ')}\\n}`;\n gqlModels.push(inputTypeDefinition);\n }\n const customOperations = {\n queries: customQueries,\n mutations: customMutations,\n subscriptions: customSubscriptions,\n };\n gqlModels.push(...generateCustomOperationTypes(customOperations));\n if (shouldAddConversationTypes) {\n gqlModels.push(CONVERSATION_SCHEMA_GRAPHQL_TYPES);\n }\n const processedSchema = gqlModels.join('\\n\\n');\n return {\n schema: processedSchema,\n jsFunctions,\n functionSchemaAccess,\n lambdaFunctions,\n customSqlDataSourceStrategies,\n };\n};\nfunction validateCustomOperations(typeDef, typeName, authRules, getRefType) {\n const { handlers, typeName: opType, subscriptionSource } = typeDef.data;\n const handlerConfigured = handlers?.length;\n const authConfigured = authRules.length > 0;\n if (opType !== 'Generation' &&\n ((authConfigured && !handlerConfigured) ||\n (handlerConfigured && !authConfigured))) {\n // Deploying a custom operation with auth and no handler reference OR\n // with a handler reference but no auth\n // causes the CFN stack to reach an unrecoverable state. Ideally, this should be fixed\n // in the CDK construct, but we're catching it early here as a stopgap\n throw new Error(`Custom operation ${typeName} requires both an authorization rule and a handler reference`);\n }\n // Handlers must all be of the same type\n if (handlers?.length) {\n const configuredHandlers = new Set();\n for (const handler of handlers) {\n configuredHandlers.add(getBrand(handler));\n }\n if (configuredHandlers.size > 1) {\n configuredHandlers.delete('asyncFunctionHandler');\n configuredHandlers.delete('functionHandler');\n if (configuredHandlers.size > 0) {\n const configuredHandlersStr = JSON.stringify(Array.from(configuredHandlers));\n throw new Error(`Field handlers must be of the same type. ${typeName} has been configured with ${configuredHandlersStr}`);\n }\n }\n }\n if (typeDef.data.returnType === null &&\n (opType === 'Query' || opType === 'Mutation' || opType === 'Generation')) {\n // TODO: There should be a more elegant and readable way to handle this check.\n // Maybe it's not even necessary anymore since we're the setting returnType in the handler() method.\n if (!handlers ||\n handlers.length === 0 ||\n handlers[handlers.length - 1][brandSymbol] !== 'asyncFunctionHandler') {\n const typeDescription = opType === 'Generation' ? 'Generation Route' : `Custom ${opType}`;\n throw new Error(`Invalid ${typeDescription} definition. A ${typeDescription} must include a return type. ${typeName} has no return type specified.`);\n }\n }\n if (opType !== 'Subscription' && subscriptionSource.length > 0) {\n throw new Error(`The .for() modifier function can only be used with a custom subscription. ${typeName} is not a custom subscription.`);\n }\n if (opType === 'Subscription') {\n if (subscriptionSource.length < 1) {\n throw new Error(`${typeName} is missing a mutation source. Custom subscriptions must reference a mutation source via subscription().for(a.ref('ModelOrOperationName')) `);\n }\n let expectedReturnType;\n for (const source of subscriptionSource) {\n const sourceName = source.data.link;\n const { type, def } = getRefType(sourceName, typeName);\n if (type !== 'Model' && source.data.mutationOperations.length > 0) {\n throw new Error(`Invalid subscription definition. .mutations() modifier can only be used with a Model ref. ${typeName} is referencing ${type}`);\n }\n let resolvedReturnType;\n if (type === 'Model') {\n if (source.data.mutationOperations.length === 0) {\n throw new Error(`Invalid subscription definition. .mutations() modifier must be used with a Model ref subscription source. ${typeName} is referencing ${sourceName} without specifying a mutation`);\n }\n else {\n resolvedReturnType = def;\n }\n }\n if (type === 'CustomOperation') {\n if (def.data.typeName !== 'Mutation') {\n throw new Error(`Invalid subscription definition. .for() can only reference a mutation. ${typeName} is referencing ${sourceName} which is a ${def.data.typeName}`);\n }\n else {\n const returnType = def.data.returnType;\n if (isRefField(returnType)) {\n ({ def: resolvedReturnType } = getRefType(returnType.data.link, typeName));\n }\n else {\n resolvedReturnType = returnType;\n }\n }\n }\n expectedReturnType = expectedReturnType ?? resolvedReturnType;\n // As the return types are resolved from the root `schema` object and they should\n // not be mutated, we compare by references here.\n if (expectedReturnType !== resolvedReturnType) {\n throw new Error(`Invalid subscription definition. .for() can only reference resources that have the same return type. ${typeName} is referencing resources that have different return types.`);\n }\n }\n }\n}\nconst isSqlReferenceHandler = (handler) => {\n return Array.isArray(handler) && getBrand(handler[0]) === 'sqlReference';\n};\nconst isCustomHandler = (handler) => {\n return Array.isArray(handler) && getBrand(handler[0]) === 'customHandler';\n};\nconst isFunctionHandler = (handler) => {\n return (Array.isArray(handler) &&\n ['functionHandler', 'asyncFunctionHandler'].includes(getBrand(handler[0])));\n};\nconst finalHandlerIsAsyncFunctionHandler = (handler) => {\n return (Array.isArray(handler) &&\n getBrand(handler[handler.length - 1]) === 'asyncFunctionHandler');\n};\nconst normalizeDataSourceName = (dataSource) => {\n // default data source\n const noneDataSourceName = 'NONE_DS';\n if (dataSource === undefined) {\n return noneDataSourceName;\n }\n if (dataSourceIsRef(dataSource)) {\n return `${dataSource.data.link}Table`;\n }\n return dataSource;\n};\nconst sanitizeStackTrace = (stackTrace) => {\n // normalize EOL to \\n so that parsing is consistent across platforms\n const normalizedStackTrace = stackTrace.replace(new RegExp(os.EOL), '\\n');\n return (normalizedStackTrace\n .split('\\n')\n .map((line) => line.trim())\n // filters out noise not relevant to the stack trace. All stack trace lines begin with 'at'\n .filter((line) => line.startsWith('at')) || []);\n};\n// copied from the defineFunction path resolution impl:\n// https://github.com/aws-amplify/amplify-backend/blob/main/packages/backend-function/src/get_caller_directory.ts\nconst resolveEntryPath = (data, errorMessage) => {\n if (path.isAbsolute(data.entry)) {\n return data.entry;\n }\n if (!data.stack) {\n throw new Error(errorMessage);\n }\n const stackTraceLines = sanitizeStackTrace(data.stack);\n if (stackTraceLines.length < 2) {\n throw new Error(errorMessage);\n }\n const stackTraceImportLine = stackTraceLines[1]; // the first entry is the file where the error was initialized (our code). The second entry is where the customer called our code which is what we are interested in\n // if entry is relative, compute with respect to the caller directory\n return { relativePath: data.entry, importLine: stackTraceImportLine };\n};\nconst handleCustom = (handlers, opType, typeName) => {\n const transformedHandlers = handlers.map((handler) => {\n const handlerData = getHandlerData(handler);\n return {\n dataSource: normalizeDataSourceName(handlerData.dataSource),\n entry: resolveEntryPath(handlerData, 'Could not determine import path to construct absolute code path for custom handler. Consider using an absolute path instead.'),\n };\n });\n const jsFn = {\n typeName: opType,\n fieldName: typeName,\n handlers: transformedHandlers,\n };\n return jsFn;\n};\nconst eventInvocationResponseCustomType = {\n data: {\n fields: {\n success: {\n data: {\n fieldType: ModelFieldType.Boolean,\n required: true,\n array: false,\n arrayRequired: false,\n },\n },\n },\n type: 'customType',\n },\n};\nfunction transformCustomOperations(typeDef, typeName, authRules, databaseType, getRefType) {\n const { typeName: opType, handlers } = typeDef.data;\n let jsFunctionForField = undefined;\n validateCustomOperations(typeDef, typeName, authRules, getRefType);\n if (isCustomHandler(handlers)) {\n jsFunctionForField = handleCustom(handlers, \n // Generation routes should not have handlers\n opType, typeName);\n }\n const isCustom = Boolean(jsFunctionForField);\n const { gqlField, implicitTypes, customTypeAuthRules, lambdaFunctionDefinition, customSqlDataSourceStrategy, inputTypes, } = customOperationToGql(typeName, typeDef, authRules, isCustom, databaseType, getRefType);\n return {\n gqlField,\n implicitTypes,\n customTypeAuthRules,\n jsFunctionForField,\n lambdaFunctionDefinition,\n customSqlDataSourceStrategy,\n inputTypes,\n };\n}\nfunction generateCustomOperationTypes({ queries, mutations, subscriptions, }) {\n const types = [];\n if (mutations.length > 0) {\n types.push(`type Mutation {\\n ${mutations.join('\\n ')}\\n}`);\n }\n if (queries.length > 0) {\n types.push(`type Query {\\n ${queries.join('\\n ')}\\n}`);\n }\n if (subscriptions.length > 0) {\n types.push(`type Subscription {\\n ${subscriptions.join('\\n ')}\\n}`);\n }\n return types;\n}\nfunction extractNestedCustomTypeNames(customTypeAuthRules, topLevelTypes, getRefType) {\n if (!customTypeAuthRules) {\n return [];\n }\n const [_, customTypeDef] = topLevelTypes.find(([topLevelTypeName]) => customTypeAuthRules.typeName === topLevelTypeName);\n // traverse the custom type's fields and extract any nested custom type names.\n // Those nested custom types also inherit the custom op's auth configuration.\n // Supports both inline custom types and refs to custom types\n const traverseCustomTypeFields = (name, typeDef, namesList = []) => {\n const fields = typeDef.data.fields;\n for (const [fieldName, fieldDef] of Object.entries(fields)) {\n if (isCustomType(fieldDef)) {\n const customTypeName = `${capitalize(name)}${capitalize(fieldName)}`;\n namesList.push(customTypeName);\n traverseCustomTypeFields(customTypeName, fieldDef, namesList);\n }\n else if (isRefField(fieldDef)) {\n const refType = getRefType(fieldDef.data.link, name);\n if (refType.type === 'CustomType') {\n namesList.push(fieldDef.data.link);\n traverseCustomTypeFields(fieldDef.data.link, refType.def, namesList);\n }\n }\n }\n return namesList;\n };\n const nestedCustomTypeNames = traverseCustomTypeFields(customTypeAuthRules.typeName, customTypeDef);\n return nestedCustomTypeNames;\n}\n/**\n * Validates that defined relationships conform to the following rules.\n * - relationships are bidirectional\n * - hasOne has a belongsTo counterpart\n * - hasMany has a belongsTo counterpart\n * - belongsTo has either a hasOne or hasMany counterpart\n * - both sides of a relationship have identical `references` defined.\n * - the `references` match the primary key of the parent model\n * - references[0] is the primaryKey's partitionKey on the parent model\n * - references[1...n] are the primaryKey's sortKey(s) on the parent model\n * - types match (id / string / number)\n * - the `references` are fields defined on the child model\n * - field names match the named `references` arguments\n * - child model references fields types match those of the parent model's primaryKey\n * @param typeName source model's type name.\n * @param record map of field name to {@link ModelField}\n * @param getInternalModel given a model name, return an {@link InternalModel}\n */\nfunction validateRelationships(typeName, record, getInternalModel) {\n for (const [name, field] of Object.entries(record)) {\n // If the field's type is not a model, there's no relationship\n // to evaluate and we can skip this iteration.\n if (!isModelField(field)) {\n continue;\n }\n // Create a structure representing the relationship for validation.\n const relationship = getModelRelationship(typeName, { name: name, def: field.data }, getInternalModel);\n // Validate that the references defined in the relationship follow the\n // relationship definition rules.\n validateRelationshipReferences(relationship);\n }\n}\n/**\n * Helper function that describes the relationship of a given connection field for use in logging or error messages.\n *\n * `Parent.child: Child @hasMany(references: ['parentId'])`\n * -- or --\n * `Child.parent: Parent @belongsTo(references: ['parentId'])`\n * @param sourceField The {@link ConnectionField} to describe.\n * @param sourceModelName The name of the model within which the sourceField is defined.\n * @returns a 'string' describing the relationship\n */\nfunction describeConnectFieldRelationship(sourceField, sourceModelName) {\n const associatedTypeDescription = sourceField.def.array\n ? `[${sourceField.def.relatedModel}]`\n : sourceField.def.relatedModel;\n const referencesDescription = sourceField.def.references\n .reduce((description, reference) => description + `'${reference}', `, 'references: [')\n .slice(0, -2) + ']';\n return `${sourceModelName}.${sourceField.name}: ${associatedTypeDescription} @${sourceField.def.type}(${referencesDescription})`;\n}\n/**\n * Validates that the types of child model's reference fields match the types of the parent model's identifier fields.\n * @param relationship The {@link ModelRelationship} to validate.\n */\nfunction validateRelationshipReferences(relationship) {\n const { parent, parentConnectionField, child, childConnectionField, references, } = relationship;\n const parentIdentifiers = getIndentifierTypes(parent);\n const childReferenceTypes = [];\n // Iterate through the model schema defined 'references' to find each matching field on the Related model.\n // If a field by that name is not found, throw a validate error.\n // Accumulate the ModelFieldType for each reference field to validate matching types below.\n for (const reference of references) {\n const relatedReferenceType = child.data.fields[reference]?.data\n .fieldType;\n // reference field on related type with name passed to references not found. Time to throw a validation error.\n if (!relatedReferenceType) {\n const errorMessage = `reference field '${reference}' must be defined on ${parentConnectionField.def.relatedModel}. ` +\n describeConnectFieldRelationship(parentConnectionField, childConnectionField.def.relatedModel) +\n ' <-> ' +\n describeConnectFieldRelationship(childConnectionField, parentConnectionField.def.relatedModel);\n throw new Error(errorMessage);\n }\n childReferenceTypes.push(relatedReferenceType);\n }\n if (parentIdentifiers.length !== childReferenceTypes.length) {\n throw new Error(`The identifiers defined on ${childConnectionField.def.relatedModel} must match the reference fields defined on ${parentConnectionField.def.relatedModel}.\\n` +\n `${parentIdentifiers.length} identifiers defined on ${childConnectionField.def.relatedModel}.\\n` +\n `${childReferenceTypes.length} reference fields found on ${parentConnectionField.def.relatedModel}`);\n }\n const matchingModelFieldType = (a, b) => {\n // `String` and `Id` are considered equal types for when comparing\n // the child model's references fields with their counterparts within\n // the parent model's identifier (parent key) fields.\n const matching = [ModelFieldType.Id, ModelFieldType.String];\n return a === b || (matching.includes(a) && matching.includes(b));\n };\n // Zip pairs of child model's reference field with corresponding parent model's identifier field.\n // Confirm that the types match. If they don't, throw a validation error.\n parentIdentifiers\n .map((identifier, index) => [identifier, childReferenceTypes[index]])\n .forEach(([parent, child]) => {\n if (!matchingModelFieldType(parent, child)) {\n throw new Error('Validate Error: types do not match');\n }\n });\n}\n/**\n * Relationship definitions require bi-directionality.\n * Use this to generate a `ModelRelationshipTypes[]` containing acceptable counterparts on the\n * associated model.\n *\n * Given {@link ModelRelationshipTypes.hasOne} or {@link ModelRelationshipTypes.hasOne} returns [{@link ModelRelationshipTypes.belongsTo}]\n * Given {@link ModelRelationshipTypes.belongsTo} returns [{@link ModelRelationshipTypes.hasOne}, {@link ModelRelationshipTypes.belongsTo}]\n *\n * @param relationshipType {@link ModelRelationshipTypes} defined on source model's connection field.\n * @returns possible counterpart {@link ModelRelationshipTypes} as `ModelRelationshipTypes[]`\n */\nfunction associatedRelationshipTypes(relationshipType) {\n switch (relationshipType) {\n case ModelRelationshipTypes.hasOne:\n case ModelRelationshipTypes.hasMany:\n return [ModelRelationshipTypes.belongsTo];\n case ModelRelationshipTypes.belongsTo:\n return [ModelRelationshipTypes.hasOne, ModelRelationshipTypes.hasMany];\n default:\n return []; // TODO: Remove this case on types are updated.\n }\n}\n/**\n * Retrieves the types of the identifiers defined on a model.\n *\n * Note: if a field by the name `id` isn't found in the {@link InternalModel},\n * this assumes an implicitly generated identifier is used with the type.\n *\n * This function does not validate that a corresponding field exists for each of the\n * identifiers because this validation happens at compile time.\n * @param model {@link InternalModel} from which to retrieve identifier types.\n * @returns Array of {@link ModelFieldType} of the model's identifiers found.\n */\nfunction getIndentifierTypes(model) {\n return model.data.identifier.flatMap((fieldName) => {\n const field = model.data.fields[fieldName];\n if (field) {\n return [field.data.fieldType];\n }\n else if (fieldName === 'id') {\n // implicity generated ID\n return [ModelFieldType.Id];\n }\n return [];\n });\n}\n/**\n * Given a relationship definition within a source model (`sourceModelName`, `sourceConnectionField`) and\n * the associated model (`associatedModel`), this finds the connection field for the relationship defined on the\n * associated model. Invalid states, such a 0 or >1 matching connection fields result in an error.\n * @param sourceModelName\n * @param sourceConnectionField\n * @param associatedModel\n * @returns\n */\nfunction getAssociatedConnectionField(sourceModelName, sourceConnectionField, associatedModel) {\n const associatedRelationshipOptions = associatedRelationshipTypes(sourceConnectionField.def.type);\n // Iterate through the associated model's fields to find the associated connection field for the relationship defined on the source model.\n const associatedConnectionFieldCandidates = Object.entries(associatedModel.data.fields).filter(([_key, connectionField]) => {\n // If the field isn't a model, it's not part of the relationship definition -- ignore the field.\n if (!isModelField(connectionField)) {\n return false;\n }\n // In order to find that associated connection field, we need to do some validation that we'll depend on further downstream.\n // 1. Field type matches the source model's type.\n // 2. A valid counterpart relationship modifier is defined on the field. See `associatedRelationshipTypes` for more information.\n // 3. The reference arguments provided to the field match (element count + string comparison) references passed to the source connection field.\n return (connectionField.data.relatedModel === sourceModelName &&\n associatedRelationshipOptions.includes(connectionField.data.type) &&\n connectionField.data.references.length ===\n sourceConnectionField.def.references.length &&\n connectionField.data.references.every((value, index) => value === sourceConnectionField.def.references[index]));\n });\n // We should have found exactly one connection field candidate. If that's not the case, we need to throw a validation error.\n if (associatedConnectionFieldCandidates.length != 1) {\n // const associatedModelDescription = sourceConnectionField.def.array\n // ? `[${sourceConnectionField.def.relatedModel}]`\n // : sourceConnectionField.def.relatedModel\n const sourceConnectionFieldDescription = describeConnectFieldRelationship(sourceConnectionField, sourceModelName); // `${sourceModelName}.${sourceConnectionField.name}: ${associatedModelDescription} @${sourceConnectionField.def.type}(references: [${sourceConnectionField.def.references}])`\n const errorMessage = associatedConnectionFieldCandidates.length === 0\n ? `Unable to find associated relationship definition in ${sourceConnectionField.def.relatedModel}`\n : `Found multiple relationship associations with ${associatedConnectionFieldCandidates.map((field) => `${sourceConnectionField.def.relatedModel}.${field[0]}`).join(', ')}`;\n throw new Error(`${errorMessage} for ${sourceConnectionFieldDescription}`);\n }\n const associatedConnectionField = associatedConnectionFieldCandidates[0];\n if (!isModelField(associatedConnectionField[1])) {\n // This shouldn't happen because we've validated that it's a model field above.\n // However it's necessary to narrow the type.\n // const associatedModelDescription = sourceConnectionField.def.array\n // ? `[${sourceConnectionField.def.relatedModel}]`\n // : sourceConnectionField.def.relatedModel\n const sourceConnectionFieldDescription = describeConnectFieldRelationship(sourceConnectionField, sourceModelName);\n const errorMessage = `Cannot find counterpart to relationship defintion for ${sourceConnectionFieldDescription}`;\n throw new Error(errorMessage);\n }\n return {\n name: associatedConnectionField[0],\n def: associatedConnectionField[1].data,\n };\n}\n/**\n * Given either side of a relationship (source), this retrieves the other side (related)\n * and packages the information neatly into a {@link ModelRelationship} for validation purposes.\n *\n * @param sourceModelName\n * @param sourceConnectionField\n * @param getInternalModel\n * @returns a {@link ModelRelationship}\n */\nfunction getModelRelationship(sourceModelName, sourceModelConnectionField, getInternalModel) {\n const sourceModel = getInternalModel(sourceModelName, sourceModelName);\n const associatedModel = getInternalModel(sourceModelConnectionField.def.relatedModel, sourceModelName);\n const relatedModelConnectionField = getAssociatedConnectionField(sourceModelName, sourceModelConnectionField, associatedModel);\n switch (sourceModelConnectionField.def.type) {\n case ModelRelationshipTypes.hasOne:\n case ModelRelationshipTypes.hasMany:\n return {\n parent: sourceModel,\n parentConnectionField: sourceModelConnectionField,\n child: associatedModel,\n childConnectionField: relatedModelConnectionField,\n references: sourceModelConnectionField.def.references,\n };\n case ModelRelationshipTypes.belongsTo:\n return {\n parent: associatedModel,\n parentConnectionField: relatedModelConnectionField,\n child: sourceModel,\n childConnectionField: sourceModelConnectionField,\n references: sourceModelConnectionField.def.references,\n };\n default:\n throw new Error(`\"${sourceModelConnectionField.def.type}\" is not a valid relationship type.`);\n }\n}\n/**\n *\n * @param disabledOps\n * @returns sanitized string @model directive attribute; can be passed in as-is\n *\n * @example\n * ```ts\n * const disabledOps = [\"subscriptions\", \"create\"];\n * ```\n * returns\n * ```\n * subscriptions:null,mutations:{create:null}\n * ```\n */\nfunction modelAttributesFromDisabledOps(disabledOps) {\n const fineCoarseMap = {\n onCreate: 'subscriptions',\n onUpdate: 'subscriptions',\n onDelete: 'subscriptions',\n create: 'mutations',\n update: 'mutations',\n delete: 'mutations',\n list: 'queries',\n get: 'queries',\n };\n const coarseGrainedOps = ['queries', 'mutations', 'subscriptions'];\n const coarseFirstSorted = disabledOps\n // disabledOps is readOnly; create a copy w/ slice\n .slice()\n .sort((a, b) => {\n if (coarseGrainedOps.includes(a) && !coarseGrainedOps.includes(b)) {\n return -1;\n }\n if (!coarseGrainedOps.includes(a) && coarseGrainedOps.includes(b)) {\n return 1;\n }\n return 0;\n });\n const modelAttrs = {};\n for (const op of coarseFirstSorted) {\n if (coarseGrainedOps.includes(op)) {\n modelAttrs[op] = null;\n continue;\n }\n const coarseOp = fineCoarseMap[op];\n if (modelAttrs[coarseOp] !== null) {\n modelAttrs[coarseOp] = modelAttrs[coarseOp] || {};\n modelAttrs[coarseOp][op] = null;\n }\n }\n const modelAttrsStr = JSON.stringify(modelAttrs)\n .replace(/\"/g, '') // remove quotes\n .slice(1, -1); // drop outer curlies {}\n return modelAttrsStr;\n}\n/**\n * Returns API definition from ModelSchema or string schema\n * @param arg - { schema }\n * @returns DerivedApiDefinition that conforms to IAmplifyGraphqlDefinition\n */\nexport function processSchema(arg) {\n const { schema, jsFunctions, functionSchemaAccess, lambdaFunctions, customSqlDataSourceStrategies, } = schemaPreprocessor(arg.schema);\n return {\n schema,\n functionSlots: [],\n jsFunctions,\n functionSchemaAccess,\n lambdaFunctions,\n customSqlDataSourceStrategies,\n };\n}\n"],"names":["conversationBrandName"],"mappings":"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"}
|