UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 6.73 kB
{"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"}