{"version":3,"file":"Handler.mjs","sources":["../../src/Handler.ts"],"sourcesContent":["import { brand } from './util';\nconst dataSymbol = Symbol('Data');\nfunction buildHandler(brandName) {\n    return brand(brandName);\n}\nexport function getHandlerData(handler) {\n    return handler[dataSymbol];\n}\n//#region handler.inlineSql\nconst inlineSqlBrand = 'inlineSql';\nfunction inlineSql(sql) {\n    return { [dataSymbol]: sql, ...buildHandler(inlineSqlBrand) };\n}\n//#endregion\n//#region handler.sqlReference\nconst sqlReferenceBrand = 'sqlReference';\nfunction sqlReference(sqlFilePath) {\n    // used to determine caller directory in order to resolve relative path downstream\n    const stack = new Error().stack;\n    return {\n        [dataSymbol]: { stack, entry: sqlFilePath },\n        ...buildHandler(sqlReferenceBrand),\n    };\n}\nconst customHandlerBrand = 'customHandler';\n/**\n * Use a custom JavaScript resolver to handle a query, mutation, or subscription.\n * @see {@link https://docs.amplify.aws/react/build-a-backend/data/custom-business-logic/#step-2---configure-custom-business-logic-handler-code}\n * @param customHandler `{ entry: \"path-to-javascript-resolver-file.js\", dataSource: \"Data Source name added via \"backend.data.add*DataSoruce(...)\"}`\n * @returns A JavaScript resolver attached to the query, mutation, or subscription.\n * @example\n * const schema = a.schema({\n *   Post: a.model({\n *     content: a.string(),\n *     likes: a.integer()\n *       .authorization(allow => [allow.authenticated().to(['read'])])\n *   }).authorization(allow => [\n *     allow.owner(),\n *     allow.authenticated().to(['read'])\n *   ]),\n *\n *   likePost: a\n *     .mutation()\n *     .arguments({ postId: a.id() })\n *     .returns(a.ref('Post'))\n *     .authorization(allow => [allow.authenticated()])\n *     .handler(a.handler.custom({\n *       dataSource: a.ref('Post'),\n *       entry: './increment-like.js'\n *     }))\n * });\n */\nfunction custom(customHandler) {\n    // used to determine caller directory in order to resolve relative path downstream\n    const stack = new Error().stack;\n    return {\n        [dataSymbol]: { ...customHandler, stack },\n        ...buildHandler(customHandlerBrand),\n    };\n}\nconst functionHandlerBrand = 'functionHandler';\nconst asyncFunctionHandlerBrand = 'asyncFunctionHandler';\n/**\n * Use a function created via `defineFunction` to handle the custom query/mutation/subscription. In your function handler,\n * you can use the `Schema[\"YOUR_QUERY_OR_MUTATION_NAME\"][\"functionHandler\"]` utility type to type the handler function.\n * @example\n * import {\n *   type ClientSchema,\n *   a,\n *   defineData,\n *   defineFunction // 1.Import \"defineFunction\" to create new functions\n * } from '@aws-amplify/backend';\n *\n * // 2. define a function\n * const echoHandler = defineFunction({\n *   entry: './echo-handler/handler.ts'\n * })\n *\n * const schema = a.schema({\n *   EchoResponse: a.customType({\n *     content: a.string(),\n *     executionDuration: a.float()\n *   }),\n *\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 * @see {@link https://docs.amplify.aws/react/build-a-backend/data/custom-business-logic/}\n * @param fn A function created via `defineFunction`. Alternatively, you can pass in a \"string\" of the function name and pass\n * in a corresponding value into the `functionMap` property of defineData.\n * @returns A handler for the query / mutation / subscription\n */\nfunction fcn(fn) {\n    return {\n        [dataSymbol]: {\n            handler: fn,\n            invocationType: 'RequestResponse',\n        },\n        async() {\n            return _async(this);\n        },\n        ...buildHandler(functionHandlerBrand),\n    };\n}\nfunction _async(fnHandler) {\n    return {\n        [dataSymbol]: {\n            handler: fnHandler[dataSymbol].handler,\n            invocationType: 'Event',\n        },\n        ...buildHandler(asyncFunctionHandlerBrand),\n    };\n}\n//#endregion\nexport const handler = {\n    inlineSql,\n    sqlReference,\n    custom,\n    function: fcn,\n};\n"],"names":[],"mappings":";;AACA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;AACjC,SAAS,YAAY,CAAC,SAAS,EAAE;AACjC,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC;AAC3B;AACO,SAAS,cAAc,CAAC,OAAO,EAAE;AACxC,IAAI,OAAO,OAAO,CAAC,UAAU,CAAC;AAC9B;AACA;AACA,MAAM,cAAc,GAAG,WAAW;AAClC,SAAS,SAAS,CAAC,GAAG,EAAE;AACxB,IAAI,OAAO,EAAE,CAAC,UAAU,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,cAAc,CAAC,EAAE;AACjE;AACA;AACA;AACA,MAAM,iBAAiB,GAAG,cAAc;AACxC,SAAS,YAAY,CAAC,WAAW,EAAE;AACnC;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK;AACnC,IAAI,OAAO;AACX,QAAQ,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;AACnD,QAAQ,GAAG,YAAY,CAAC,iBAAiB,CAAC;AAC1C,KAAK;AACL;AACA,MAAM,kBAAkB,GAAG,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,aAAa,EAAE;AAC/B;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK;AACnC,IAAI,OAAO;AACX,QAAQ,CAAC,UAAU,GAAG,EAAE,GAAG,aAAa,EAAE,KAAK,EAAE;AACjD,QAAQ,GAAG,YAAY,CAAC,kBAAkB,CAAC;AAC3C,KAAK;AACL;AACA,MAAM,oBAAoB,GAAG,iBAAiB;AAC9C,MAAM,yBAAyB,GAAG,sBAAsB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG,CAAC,EAAE,EAAE;AACjB,IAAI,OAAO;AACX,QAAQ,CAAC,UAAU,GAAG;AACtB,YAAY,OAAO,EAAE,EAAE;AACvB,YAAY,cAAc,EAAE,iBAAiB;AAC7C,SAAS;AACT,QAAQ,KAAK,GAAG;AAChB,YAAY,OAAO,MAAM,CAAC,IAAI,CAAC;AAC/B,QAAQ,CAAC;AACT,QAAQ,GAAG,YAAY,CAAC,oBAAoB,CAAC;AAC7C,KAAK;AACL;AACA,SAAS,MAAM,CAAC,SAAS,EAAE;AAC3B,IAAI,OAAO;AACX,QAAQ,CAAC,UAAU,GAAG;AACtB,YAAY,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO;AAClD,YAAY,cAAc,EAAE,OAAO;AACnC,SAAS;AACT,QAAQ,GAAG,YAAY,CAAC,yBAAyB,CAAC;AAClD,KAAK;AACL;AACA;AACY,MAAC,OAAO,GAAG;AACvB,IAAI,SAAS;AACb,IAAI,YAAY;AAChB,IAAI,MAAM;AACV,IAAI,QAAQ,EAAE,GAAG;AACjB;;;;"}