UNPKG

@aws-amplify/appsync-modelgen-plugin

Version:
168 lines 6.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processConversationRoute = void 0; const introspection_1 = require("../interfaces/introspection"); const change_case_1 = require("change-case"); const pluralize_1 = require("pluralize"); function processConversationRoute(mutationObj, generateGraphQLOperationMetadata) { const routeName = (0, change_case_1.pascalCase)(mutationObj.name); const conversationModelName = `Conversation${routeName}`; const conversationMessageModelName = `ConversationMessage${routeName}`; return { name: mutationObj.name, models: { [conversationModelName]: generateConversationModel(conversationModelName, conversationMessageModelName), [conversationMessageModelName]: generateConversationMessageModel(conversationModelName, conversationMessageModelName), }, nonModels: {}, enums: { ConversationParticipantRole: { name: 'AmplifyAIConversationParticipantRole', values: ['user', 'assistant'], } }, conversation: { modelName: conversationModelName }, message: { modelName: conversationMessageModelName, send: { ...generateGraphQLOperationMetadata(mutationObj), type: { model: conversationMessageModelName } }, subscribe: generateSubscriptionMetadata(routeName, conversationMessageModelName), } }; } exports.processConversationRoute = processConversationRoute; function generateConversationModel(modelName, messageModelName) { return { name: modelName, fields: { id: generateField('id', 'ID', { isRequired: true }), name: generateField('name', 'String'), metadata: generateField('metadata', 'AWSJSON'), messages: generateMessagesField(messageModelName), createdAt: generateTimestampField('createdAt'), updatedAt: generateTimestampField('updatedAt'), owner: generateField('owner', 'String'), }, syncable: true, pluralName: (0, pluralize_1.plural)(modelName), attributes: [ { type: 'model', properties: { subscriptions: { level: 'off' }, mutations: { update: null } } }, generateAuthAttribute() ], primaryKeyInfo: generatePrimaryKeyInfo(), }; } function generateConversationMessageModel(conversationModelName, modelName) { return { name: modelName, fields: { id: generateField('id', 'ID', { isRequired: true }), conversationId: generateField('conversationId', 'ID', { isRequired: true }), conversation: generateConversationField(conversationModelName), role: generateField('role', { enum: 'AmplifyAIConversationParticipantRole' }), content: generateField('content', { nonModel: 'AmplifyAIContentBlock' }, { isArray: true }), aiContext: generateField('aiContext', 'AWSJSON'), toolConfiguration: generateField('toolConfiguration', { nonModel: 'AmplifyAIToolConfiguration' }, { isArray: true, isArrayNullable: true }), createdAt: generateTimestampField('createdAt'), updatedAt: generateTimestampField('updatedAt'), }, syncable: true, pluralName: (0, pluralize_1.plural)(modelName), attributes: [ { type: 'model', properties: { subscriptions: {} } }, generateAuthAttribute() ], primaryKeyInfo: generatePrimaryKeyInfo(), }; } function generateField(name, type, options = {}) { const { isRequired = false, isArray = false, isArrayNullable, isReadOnly } = options; return { name, type, attributes: [], isArray, isRequired, isReadOnly, ...(isArray && { isArrayNullable }), }; } function generateTimestampField(name) { return { ...generateField(name, 'AWSDateTime', { isReadOnly: true }), isReadOnly: true, }; } function generateMessagesField(messageModelName) { return { ...generateField('messages', { model: messageModelName }, { isArray: true, isArrayNullable: true }), association: { connectionType: introspection_1.CodeGenConnectionType.HAS_MANY, associatedWith: ['conversationId'] } }; } function generateConversationField(conversationModelName) { return { ...generateField('conversation', { model: conversationModelName }), association: { connectionType: introspection_1.CodeGenConnectionType.BELONGS_TO, targetNames: ['conversationId'] } }; } function generateAuthAttribute() { return { type: 'auth', properties: { rules: [ { provider: 'userPools', ownerField: 'owner', allow: 'owner', identityClaim: 'cognito:username', operations: ['create', 'update', 'delete', 'read'] } ] } }; } function generatePrimaryKeyInfo() { return { isCustomPrimaryKey: false, primaryKeyFieldName: 'id', sortKeyFieldNames: [] }; } function generateSubscriptionMetadata(routeName, modelName) { return { isArray: false, isRequired: false, name: `onCreateAssistantResponse${routeName}`, type: { nonModel: 'AmplifyAIConversationMessageStreamPart' }, arguments: { 'conversationId': { name: 'conversationId', isArray: false, isRequired: true, type: 'ID', }, } }; } //# sourceMappingURL=process-conversation.js.map