{"version":3,"file":"createApiServerlessFunction.js","names":["fs"],"sources":["esm/vercel/build/generate/createApiServerlessFunction.js"],"sourcesContent":["import { dirname, join, resolve } from \"node:path\";\nimport { parseSync } from \"oxc-parser\";\nimport MagicString from \"magic-string\";\nimport { resolvePath } from \"@vxrn/resolve\";\nimport FSExtra from \"fs-extra\";\nimport fs from \"fs-extra\";\nimport { serverlessVercelNodeJsConfig } from \"../config/vc-config-base\";\nimport { serverlessVercelPackageJson } from \"../config/vc-package-base\";\nimport { getPathFromRoute } from \"../getPathFromRoute\";\nasync function createApiServerlessFunction(route, code, oneOptionsRoot, postBuildLogs, outDir = \"dist\") {\n  try {\n    const path = getPathFromRoute(route, { includeIndex: true });\n    postBuildLogs.push(\n      `[one.build][vercel.createSsrServerlessFunction] pageName: ${path}`\n    );\n    const funcFolder = join(oneOptionsRoot, `.vercel/output/functions/${path}.func`);\n    await fs.ensureDir(funcFolder);\n    if (code.includes(\"react\")) {\n      postBuildLogs.push(\n        `[one.build][vercel.createSsrServerlessFunction] detected react in depenency tree for ${path}`\n      );\n      const reactPath = dirname(resolvePath(\"react/package.json\", oneOptionsRoot));\n      await fs.copy(\n        resolve(reactPath),\n        resolve(join(funcFolder, \"node_modules\", \"react\"))\n      );\n    }\n    const distAssetsFolder = resolve(join(funcFolder, \"assets\"));\n    postBuildLogs.push(\n      `[one.build][vercel.createSsrServerlessFunction] copy shared assets to ${distAssetsFolder}`\n    );\n    const sourceAssetsFolder = resolve(join(oneOptionsRoot, outDir, \"api\", \"assets\"));\n    if (await FSExtra.pathExists(sourceAssetsFolder)) {\n      await fs.copy(sourceAssetsFolder, distAssetsFolder);\n    }\n    await fs.ensureDir(resolve(join(funcFolder, \"entrypoint\")));\n    const entrypointFilePath = resolve(join(funcFolder, \"entrypoint\", \"index.js\"));\n    postBuildLogs.push(\n      `[one.build][vercel.createSsrServerlessFunction] writing entrypoint to ${entrypointFilePath}`\n    );\n    await fs.writeFile(entrypointFilePath, wrapHandlerFunctions(code));\n    const packageJsonFilePath = resolve(join(funcFolder, \"package.json\"));\n    postBuildLogs.push(\n      `[one.build][vercel.createSsrServerlessFunction] writing package.json to ${packageJsonFilePath}`\n    );\n    await fs.writeJSON(packageJsonFilePath, serverlessVercelPackageJson);\n    postBuildLogs.push(\n      `[one.build][vercel.createSsrServerlessFunction] writing .vc-config.json to ${join(funcFolder, \".vc-config.json\")}`\n    );\n    return fs.writeJson(join(funcFolder, \".vc-config.json\"), {\n      ...serverlessVercelNodeJsConfig,\n      handler: \"entrypoint/index.js\"\n    });\n  } catch (e) {\n    console.error(\n      `[one.build][vercel.createSsrServerlessFunction] failed to generate func for ${route.file}`,\n      e\n    );\n  }\n}\nfunction wrapHandlerFunctions(code) {\n  let parsed;\n  try {\n    parsed = parseSync(\"api.js\", code);\n  } catch {\n    return code;\n  }\n  if (!parsed?.program) return code;\n  const functionNamesToHandle = /* @__PURE__ */ new Set([\n    \"GET\",\n    \"POST\",\n    \"PUT\",\n    \"PATCH\",\n    \"DELETE\",\n    \"HEAD\",\n    \"OPTIONS\"\n  ]);\n  const ms = new MagicString(code);\n  const wrappersToAppend = [];\n  for (const item of parsed.program.body || []) {\n    let fnDecl = null;\n    let isExported = false;\n    let exportNode = null;\n    if (item.type === \"ExportNamedDeclaration\" && item.declaration?.type === \"FunctionDeclaration\") {\n      fnDecl = item.declaration;\n      isExported = true;\n      exportNode = item;\n    } else if (item.type === \"FunctionDeclaration\") {\n      fnDecl = item;\n      isExported = false;\n    }\n    if (!fnDecl || !fnDecl.id?.name || !functionNamesToHandle.has(fnDecl.id.name)) {\n      continue;\n    }\n    const name = fnDecl.id.name;\n    const originalName = `orig_${name}`;\n    if (isExported) {\n      ms.remove(exportNode.start, fnDecl.start);\n    }\n    ms.overwrite(fnDecl.id.start, fnDecl.id.end, originalName);\n    const exportPrefix = isExported ? \"export \" : \"\";\n    wrappersToAppend.push(\n      `\n${exportPrefix}function ${name}(request) {\n  const url = new URL(request.url);\n  const params = Object.fromEntries(url.searchParams.entries());\n  return ${originalName}(request, { params });\n}`\n    );\n  }\n  if (wrappersToAppend.length > 0) {\n    ms.append(wrappersToAppend.join(\"\\n\"));\n    return ms.toString();\n  }\n  return code;\n}\nexport {\n  createApiServerlessFunction\n};\n//# sourceMappingURL=createApiServerlessFunction.js.map\n"],"mappings":";;;;;;;;;;AASA,eAAe,4BAA4B,OAAO,MAAM,gBAAgB,eAAe,SAAS,QAAQ;CACtG,IAAI;EACF,MAAM,OAAO,iBAAiB,OAAO,EAAE,cAAc,KAAK,CAAC;EAC3D,cAAc,KACZ,6DAA6D,MAC/D;EACA,MAAM,aAAa,KAAK,gBAAgB,4BAA4B,KAAK,MAAM;EAC/E,MAAMA,QAAG,UAAU,UAAU;EAC7B,IAAI,KAAK,SAAS,OAAO,GAAG;GAC1B,cAAc,KACZ,wFAAwF,MAC1F;GACA,MAAM,YAAY,QAAQ,YAAY,sBAAsB,cAAc,CAAC;GAC3E,MAAMA,QAAG,KACP,QAAQ,SAAS,GACjB,QAAQ,KAAK,YAAY,gBAAgB,OAAO,CAAC,CACnD;EACF;EACA,MAAM,mBAAmB,QAAQ,KAAK,YAAY,QAAQ,CAAC;EAC3D,cAAc,KACZ,yEAAyE,kBAC3E;EACA,MAAM,qBAAqB,QAAQ,KAAK,gBAAgB,QAAQ,OAAO,QAAQ,CAAC;EAChF,IAAI,MAAM,QAAQ,WAAW,kBAAkB,GAAG;GAChD,MAAMA,QAAG,KAAK,oBAAoB,gBAAgB;EACpD;EACA,MAAMA,QAAG,UAAU,QAAQ,KAAK,YAAY,YAAY,CAAC,CAAC;EAC1D,MAAM,qBAAqB,QAAQ,KAAK,YAAY,cAAc,UAAU,CAAC;EAC7E,cAAc,KACZ,yEAAyE,oBAC3E;EACA,MAAMA,QAAG,UAAU,oBAAoB,qBAAqB,IAAI,CAAC;EACjE,MAAM,sBAAsB,QAAQ,KAAK,YAAY,cAAc,CAAC;EACpE,cAAc,KACZ,2EAA2E,qBAC7E;EACA,MAAMA,QAAG,UAAU,qBAAqB,2BAA2B;EACnE,cAAc,KACZ,8EAA8E,KAAK,YAAY,iBAAiB,GAClH;EACA,OAAOA,QAAG,UAAU,KAAK,YAAY,iBAAiB,GAAG;GACvD,GAAG;GACH,SAAS;EACX,CAAC;CACH,SAAS,GAAG;EACV,QAAQ,MACN,+EAA+E,MAAM,QACrF,CACF;CACF;AACF;AACA,SAAS,qBAAqB,MAAM;CAClC,IAAI;CACJ,IAAI;EACF,SAAS,UAAU,UAAU,IAAI;CACnC,QAAQ;EACN,OAAO;CACT;CACA,IAAI,CAAC,QAAQ,SAAS,OAAO;CAC7B,MAAM,wCAAwC,IAAI,IAAI;EACpD;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,KAAK,IAAI,YAAY,IAAI;CAC/B,MAAM,mBAAmB,CAAC;CAC1B,KAAK,MAAM,QAAQ,OAAO,QAAQ,QAAQ,CAAC,GAAG;EAC5C,IAAI,SAAS;EACb,IAAI,aAAa;EACjB,IAAI,aAAa;EACjB,IAAI,KAAK,SAAS,4BAA4B,KAAK,aAAa,SAAS,uBAAuB;GAC9F,SAAS,KAAK;GACd,aAAa;GACb,aAAa;EACf,OAAO,IAAI,KAAK,SAAS,uBAAuB;GAC9C,SAAS;GACT,aAAa;EACf;EACA,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,sBAAsB,IAAI,OAAO,GAAG,IAAI,GAAG;GAC7E;EACF;EACA,MAAM,OAAO,OAAO,GAAG;EACvB,MAAM,eAAe,QAAQ;EAC7B,IAAI,YAAY;GACd,GAAG,OAAO,WAAW,OAAO,OAAO,KAAK;EAC1C;EACA,GAAG,UAAU,OAAO,GAAG,OAAO,OAAO,GAAG,KAAK,YAAY;EACzD,MAAM,eAAe,aAAa,YAAY;EAC9C,iBAAiB,KACf;EACJ,aAAa,WAAW,KAAK;;;WAGpB,aAAa;EAEpB;CACF;CACA,IAAI,iBAAiB,SAAS,GAAG;EAC/B,GAAG,OAAO,iBAAiB,KAAK,IAAI,CAAC;EACrC,OAAO,GAAG,SAAS;CACrB;CACA,OAAO;AACT"}