{"version":3,"file":"next.cjs","names":["factory","AppRouteHandler","PagesRouteHandler"],"sources":["../src/adapter/next/app-route-handler.ts","../src/adapter/next/pages-route-handler.ts","../src/adapter/next/index.ts"],"sourcesContent":["import type { SchemaDef } from '@zenstackhq/orm/schema';\nimport type { NextRequest } from 'next/server';\nimport type { AppRouteRequestHandlerOptions } from '.';\nimport { logInternalError } from '../common';\n\ntype Context = { params: Promise<{ path: string[] }> };\n\n/**\n * Creates a Next.js \"app router\" API route request handler that handles ZenStack CRUD requests.\n *\n * @param options Options for initialization\n * @returns An API route request handler\n */\nexport default function factory<Schema extends SchemaDef>(\n    options: AppRouteRequestHandlerOptions<Schema>,\n): (req: NextRequest, context: Context) => Promise<Response> {\n    return async (req: NextRequest, context: Context) => {\n        const client = await options.getClient(req);\n        if (!client) {\n            return Response.json({ message: 'unable to get ZenStackClient from request context' }, { status: 500 });\n        }\n\n        let params: Awaited<Context['params']>;\n        const url = new URL(req.url);\n        const query = Object.fromEntries(url.searchParams);\n\n        try {\n            params = await context.params;\n        } catch {\n            return Response.json({ message: 'Failed to resolve request parameters' }, { status: 500 });\n        }\n\n        if (!params.path) {\n            return Response.json(\n                { message: 'missing path parameter' },\n                {\n                    status: 400,\n                },\n            );\n        }\n        const path = params.path.join('/');\n\n        let requestBody: unknown;\n        if (req.body) {\n            try {\n                requestBody = await req.json();\n            } catch {\n                // noop\n            }\n        }\n\n        try {\n            const r = await options.apiHandler.handleRequest({\n                method: req.method!,\n                path,\n                query,\n                requestBody,\n                client,\n            });\n            return Response.json(r.body, { status: r.status });\n        } catch (err) {\n            logInternalError(options.apiHandler.log, err);\n            return Response.json({ message: 'An internal server error occurred' }, { status: 500 });\n        }\n    };\n}\n","import type { SchemaDef } from '@zenstackhq/orm/schema';\nimport type { NextApiRequest, NextApiResponse } from 'next';\nimport type { PageRouteRequestHandlerOptions } from '.';\nimport { logInternalError } from '../common';\n\n/**\n * Creates a Next.js API endpoint \"pages\" router request handler that handles ZenStack CRUD requests.\n *\n * @param options Options for initialization\n * @returns An API endpoint request handler\n */\nexport default function factory<Schema extends SchemaDef>(\n    options: PageRouteRequestHandlerOptions<Schema>,\n): (req: NextApiRequest, res: NextApiResponse) => Promise<void> {\n    return async (req: NextApiRequest, res: NextApiResponse) => {\n        const client = await options.getClient(req, res);\n        if (!client) {\n            res.status(500).json({ message: 'unable to get ZenStackClient from request context' });\n            return;\n        }\n\n        if (!req.query['path']) {\n            res.status(400).json({ message: 'missing path parameter' });\n            return;\n        }\n        const path = (req.query['path'] as string[]).join('/');\n\n        try {\n            const r = await options.apiHandler.handleRequest({\n                method: req.method!,\n                path,\n                query: req.query as Record<string, string | string[]>,\n                requestBody: req.body,\n                client,\n            });\n            res.status(r.status).send(r.body);\n        } catch (err) {\n            logInternalError(options.apiHandler.log, err);\n            res.status(500).send({ message: 'An internal server error occurred' });\n        }\n    };\n}\n","import type { ClientContract } from '@zenstackhq/orm';\nimport type { SchemaDef } from '@zenstackhq/orm/schema';\nimport type { NextApiRequest, NextApiResponse } from 'next';\nimport type { NextRequest } from 'next/server';\nimport type { CommonAdapterOptions } from '../common';\nimport { default as AppRouteHandler } from './app-route-handler';\nimport { default as PagesRouteHandler } from './pages-route-handler';\n\n/**\n * Options for initializing a Next.js API endpoint request handler.\n */\nexport interface PageRouteRequestHandlerOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {\n    /**\n     * Callback for getting a ZenStackClient for the given request\n     */\n    getClient: (req: NextApiRequest, res: NextApiResponse) => ClientContract<Schema> | Promise<ClientContract<Schema>>;\n\n    /**\n     * Use app dir or not\n     */\n    useAppDir?: false | undefined;\n}\n\n/**\n * Options for initializing a Next.js 13 app dir API route handler.\n */\nexport interface AppRouteRequestHandlerOptions<Schema extends SchemaDef> extends CommonAdapterOptions<Schema> {\n    /**\n     * Callback for getting a ZenStackClient for the given request.\n     */\n    getClient: (req: NextRequest) => ClientContract<Schema> | Promise<ClientContract<Schema>>;\n\n    /**\n     * Use app dir or not\n     */\n    useAppDir: true;\n}\n\n/**\n * Creates a Next.js API route handler.\n */\nexport function NextRequestHandler<Schema extends SchemaDef>(\n    options: PageRouteRequestHandlerOptions<Schema>,\n): ReturnType<typeof PagesRouteHandler>;\nexport function NextRequestHandler<Schema extends SchemaDef>(\n    options: AppRouteRequestHandlerOptions<Schema>,\n): ReturnType<typeof AppRouteHandler>;\nexport function NextRequestHandler<Schema extends SchemaDef>(\n    options: PageRouteRequestHandlerOptions<Schema> | AppRouteRequestHandlerOptions<Schema>,\n) {\n    if (options.useAppDir === true) {\n        return AppRouteHandler(options);\n    } else {\n        return PagesRouteHandler(options);\n    }\n}\n"],"mappings":";;;;;;;;;AAaA,SAAwBA,UACpB,SACyD;AACzD,QAAO,OAAO,KAAkB,YAAqB;EACjD,MAAM,SAAS,MAAM,QAAQ,UAAU,IAAI;AAC3C,MAAI,CAAC,OACD,QAAO,SAAS,KAAK,EAAE,SAAS,qDAAqD,EAAE,EAAE,QAAQ,KAAK,CAAC;EAG3G,IAAI;EACJ,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI;EAC5B,MAAM,QAAQ,OAAO,YAAY,IAAI,aAAa;AAElD,MAAI;AACA,YAAS,MAAM,QAAQ;UACnB;AACJ,UAAO,SAAS,KAAK,EAAE,SAAS,wCAAwC,EAAE,EAAE,QAAQ,KAAK,CAAC;;AAG9F,MAAI,CAAC,OAAO,KACR,QAAO,SAAS,KACZ,EAAE,SAAS,0BAA0B,EACrC,EACI,QAAQ,KACX,CACJ;EAEL,MAAM,OAAO,OAAO,KAAK,KAAK,IAAI;EAElC,IAAI;AACJ,MAAI,IAAI,KACJ,KAAI;AACA,iBAAc,MAAM,IAAI,MAAM;UAC1B;AAKZ,MAAI;GACA,MAAM,IAAI,MAAM,QAAQ,WAAW,cAAc;IAC7C,QAAQ,IAAI;IACZ;IACA;IACA;IACA;IACH,CAAC;AACF,UAAO,SAAS,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;WAC7C,KAAK;AACV,kBAAA,iBAAiB,QAAQ,WAAW,KAAK,IAAI;AAC7C,UAAO,SAAS,KAAK,EAAE,SAAS,qCAAqC,EAAE,EAAE,QAAQ,KAAK,CAAC;;;;;;;;;;;;ACnDnG,SAAwB,QACpB,SAC4D;AAC5D,QAAO,OAAO,KAAqB,QAAyB;EACxD,MAAM,SAAS,MAAM,QAAQ,UAAU,KAAK,IAAI;AAChD,MAAI,CAAC,QAAQ;AACT,OAAI,OAAO,IAAI,CAAC,KAAK,EAAE,SAAS,qDAAqD,CAAC;AACtF;;AAGJ,MAAI,CAAC,IAAI,MAAM,SAAS;AACpB,OAAI,OAAO,IAAI,CAAC,KAAK,EAAE,SAAS,0BAA0B,CAAC;AAC3D;;EAEJ,MAAM,OAAQ,IAAI,MAAM,QAAqB,KAAK,IAAI;AAEtD,MAAI;GACA,MAAM,IAAI,MAAM,QAAQ,WAAW,cAAc;IAC7C,QAAQ,IAAI;IACZ;IACA,OAAO,IAAI;IACX,aAAa,IAAI;IACjB;IACH,CAAC;AACF,OAAI,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK;WAC5B,KAAK;AACV,kBAAA,iBAAiB,QAAQ,WAAW,KAAK,IAAI;AAC7C,OAAI,OAAO,IAAI,CAAC,KAAK,EAAE,SAAS,qCAAqC,CAAC;;;;;;ACSlF,SAAgB,mBACZ,SACF;AACE,KAAI,QAAQ,cAAc,KACtB,QAAOC,UAAgB,QAAQ;KAE/B,QAAOC,QAAkB,QAAQ"}