{"version":3,"file":"CustomOperation.mjs","sources":["../../src/CustomOperation.ts"],"sourcesContent":["import { brand } from './util';\nimport { allowForCustomOperations, } from './Authorization';\nimport { brandSymbol } from './util/Brand';\nconst queryBrand = 'queryCustomOperation';\nconst mutationBrand = 'mutationCustomOperation';\nconst subscriptionBrand = 'subscriptionCustomOperation';\nconst generationBrand = 'generationCustomOperation';\nexport const CustomOperationNames = [\n    'Query',\n    'Mutation',\n    'Subscription',\n    'Generation',\n];\nfunction brandedBuilder(builder, brandValue) {\n    return { ...builder, ...brand(brandValue) };\n}\nfunction _custom(typeName, brand, input) {\n    const data = {\n        arguments: {},\n        returnType: null,\n        authorization: [],\n        typeName: typeName,\n        handlers: null,\n        subscriptionSource: [],\n        input,\n    };\n    const builder = brandedBuilder({\n        arguments(args) {\n            data.arguments = args;\n            return this;\n        },\n        returns(returnType) {\n            data.returnType = returnType;\n            return this;\n        },\n        authorization(callback) {\n            const rules = callback(allowForCustomOperations);\n            data.authorization = Array.isArray(rules) ? rules : [rules];\n            return this;\n        },\n        handler(handlers) {\n            data.handlers = Array.isArray(handlers)\n                ? handlers\n                : [handlers];\n            if (lastHandlerIsAsyncFunction(handlers)) {\n                data.returnType = eventInvocationResponse;\n            }\n            return this;\n        },\n        for(source) {\n            data.subscriptionSource = Array.isArray(source) ? source : [source];\n            return this;\n        },\n    }, brand);\n    return { ...builder, data };\n}\n/**\n * Use a custom query to define an API request that will retrieve backend data.\n * @see {@link https://docs.amplify.aws/react/build-a-backend/data/custom-business-logic/}\n * @example\n * const schema = a.schema({\n *   echo: a\n *     .query()\n *     .arguments({ content: a.string() })\n *     .returns(a.ref('EchoResponse'))\n *     .authorization(allow => [allow.publicApiKey()])\n *     // 3. set the function has the handler\n *     .handler(a.handler.function(echoHandler)),\n *\n *   EchoResponse: a.customType({\n *     content: a.string(),\n *     executionDuration: a.float()\n *   }),\n * });\n * @returns a custom query\n */\nexport function query() {\n    return _custom('Query', queryBrand);\n}\n/**\n * Use a custom mutation to define an API request that will modify backend data or trigger a subscription event.\n * @see {@link https://docs.amplify.aws/react/build-a-backend/data/custom-business-logic/}\n * @example\n * likePost: a\n *   .mutation()\n *   .arguments({ postId: a.string() })\n *   .returns(a.ref('Post'))\n *   .authorization(allow => [allow.publicApiKey()])\n *   .handler(a.handler.function(echoHandler))\n * @returns a custom mutation\n */\nexport function mutation() {\n    return _custom('Mutation', mutationBrand);\n}\n/**\n * Define a custom subscription to receive an event when a mutation is triggered\n * @see {@link https://docs.amplify.aws/react/build-a-backend/data/custom-subscription/}\n * @example\n * // Subscribe to incoming messages\n * receive: a.subscription()\n *   // subscribes to the 'publish' mutation\n *   .for(a.ref('publish'))\n *   // subscription handler to set custom filters\n *   .handler(a.handler.custom({entry: './receive.js'}))\n *   // authorization rules as to who can subscribe to the data\n *   .authorization(allow => [allow.publicApiKey()]),\n * @returns a custom subscription\n */\nexport function subscription() {\n    return _custom('Subscription', subscriptionBrand);\n}\nconst eventInvocationResponse = {\n    data: {\n        type: 'ref',\n        link: 'EventInvocationResponse',\n        valueRequired: false,\n        array: false,\n        arrayRequired: false,\n        mutationOperations: [],\n        authorization: [],\n    },\n};\nfunction lastHandlerIsAsyncFunction(handlers) {\n    const lastHandlerBrandSymbol = Array.isArray(handlers)\n        ? handlers[handlers.length - 1][brandSymbol]\n        : handlers[brandSymbol];\n    return lastHandlerBrandSymbol === 'asyncFunctionHandler';\n}\n/**\n * Define an AI generation route for single request-response interaction with specified AI model.\n * @example\n * makeRecipe: a.generation({\n *   aiModel: { resourcePath },\n *   systemPrompt: 'Please make a recipe from the provided ingredients',\n * })\n *   .arguments({ ingredients: a.string().array() })\n *   .returns(a.ref(\"Recipe\"))\n * @returns a generation route definition\n */\nexport function generation(input) {\n    return _custom('Generation', generationBrand, input);\n}\n"],"names":[],"mappings":"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"}