{"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            ruleParts.push(`provider: ${rule.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, projectionType, nonKeyAttributes) => {\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 && !projectionType) {\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        // Add projection attributes if specified\n        if (projectionType && projectionType !== 'ALL') {\n            if (projectionType === 'KEYS_ONLY') {\n                attributes.push(`projection: { type: KEYS_ONLY }`);\n            }\n            else if (projectionType === 'INCLUDE' && nonKeyAttributes?.length) {\n                const nonKeyAttrsStr = nonKeyAttributes.map(attr => `\"${attr}\"`).join(', ');\n                attributes.push(`projection: { type: INCLUDE, nonKeyAttributes: [${nonKeyAttrsStr}] }`);\n            }\n        }\n        return `@index(${attributes.join(', ')})`;\n    };\n    return secondaryIndexes.reduce((acc, { data: { partitionKey, sortKeys, indexName, queryField, projectionType, nonKeyAttributes } }) => {\n        acc[partitionKey] = acc[partitionKey] || [];\n        acc[partitionKey].push(indexDirectiveWithAttributes(partitionKey, sortKeys, indexName, queryField, projectionType, nonKeyAttributes));\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            const disabledAttrs = modelAttributesFromDisabledOps(typeDef.data.disabledOperations);\n            const modelAttrs = disabledAttrs\n                ? `timestamps: null, ${disabledAttrs}`\n                : 'timestamps: null';\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\n             * fields, passing (timestamps: null) to @model to suppress this behavior\n             * as a short term solution.\n             */\n            const model = `type ${typeName} @model(${modelAttrs}) ${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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"}