one
Version:
One is a React framework for web, iOS, and Android apps.
1 lines • 13.4 kB
Source Map (JSON)
{"version":3,"file":"buildVercelOutputDirectory.js","names":[],"sources":["esm/vercel/build/buildVercelOutputDirectory.js"],"sourcesContent":["import { join, resolve } from \"node:path\";\nimport FSExtra from \"fs-extra\";\nimport { isMatching, P } from \"ts-pattern\";\nimport { vercelBuildOutputConfigBase } from \"./config/vc-build-output-config-base\";\nimport { serverlessVercelPackageJson } from \"./config/vc-package-base\";\nimport { createApiServerlessFunction } from \"./generate/createApiServerlessFunction\";\nimport { createSsrServerlessFunction } from \"./generate/createSsrServerlessFunction\";\nimport { getPathFromRoute } from \"./getPathFromRoute\";\nconst { copy, ensureDir, existsSync, remove, writeJSON } = FSExtra;\nasync function moveAllFiles(src, dest) {\n try {\n await copy(src, dest, { overwrite: true, errorOnExist: false });\n } catch (err) {\n console.error(\"Error moving files:\", err);\n }\n}\nfunction getMiddlewaresByNamedRegex(buildInfoForWriting) {\n const outDir = buildInfoForWriting.outDir || \"dist\";\n const prefix = `${outDir}/middlewares/`;\n return buildInfoForWriting.manifest.allRoutes.filter((r) => r.middlewares && r.middlewares.length > 0).map((r) => [\n r.namedRegex,\n r.middlewares.map(\n (m) => m.contextKey.startsWith(prefix) ? m.contextKey.substring(prefix.length) : m.contextKey\n )\n ]).sort((a, b) => b[0].length - a[0].length);\n}\nconst buildVercelOutputDirectory = async ({\n apiOutput,\n buildInfoForWriting,\n clientDir,\n oneOptionsRoot,\n postBuildLogs\n}) => {\n const outDir = buildInfoForWriting.outDir || \"dist\";\n const vercelOutputDir = resolve(join(oneOptionsRoot, \".vercel/output\"));\n if (existsSync(vercelOutputDir)) {\n await remove(vercelOutputDir);\n }\n const { routeToBuildInfo } = buildInfoForWriting;\n if (apiOutput) {\n const compiltedApiRoutes = (apiOutput?.output ?? []).filter(\n (o) => isMatching({ code: P.string, facadeModuleId: P.string }, o)\n );\n for (const route of buildInfoForWriting.manifest.apiRoutes) {\n const compiledRoute = compiltedApiRoutes.find((compiled) => {\n const flag = compiled.facadeModuleId.includes(route.file.replace(\"./\", \"\"));\n return flag;\n });\n if (compiledRoute) {\n postBuildLogs.push(\n `[one.build][vercel] generating serverless function for apiRoute ${route.page}`\n );\n await createApiServerlessFunction(\n route,\n compiledRoute.code,\n oneOptionsRoot,\n postBuildLogs,\n outDir\n );\n } else {\n console.warn(\n \"\\n \\u{1F528}[one.build][vercel] apiRoute missing code compilation for\",\n route.file\n );\n }\n }\n }\n const vercelOutputFunctionsDir = join(oneOptionsRoot, \".vercel/output/functions\");\n await ensureDir(vercelOutputFunctionsDir);\n for (const route of buildInfoForWriting.manifest.pageRoutes) {\n switch (route.type) {\n case \"ssr\": {\n const builtPageRoute = routeToBuildInfo[route.file];\n if (builtPageRoute) {\n postBuildLogs.push(\n `[one.build][vercel] generate serverless function for ${route.page} with ${route.type}`\n );\n await createSsrServerlessFunction(\n route,\n buildInfoForWriting,\n oneOptionsRoot,\n postBuildLogs\n );\n }\n break;\n }\n default:\n break;\n }\n }\n const distMiddlewareDir = resolve(join(oneOptionsRoot, outDir, \"middlewares\"));\n if (existsSync(distMiddlewareDir)) {\n const vercelMiddlewareDir = resolve(\n join(oneOptionsRoot, \".vercel/output/functions/_middleware.func\")\n );\n await ensureDir(vercelMiddlewareDir);\n postBuildLogs.push(\n `[one.build][vercel] copying middlewares from ${distMiddlewareDir} to ${vercelMiddlewareDir}`\n );\n await moveAllFiles(\n resolve(join(oneOptionsRoot, outDir, \"middlewares\")),\n vercelMiddlewareDir\n );\n const vercelMiddlewarePackageJsonFilePath = resolve(\n join(vercelMiddlewareDir, \"package.json\")\n );\n postBuildLogs.push(\n `[one.build][vercel] writing package.json to ${vercelMiddlewarePackageJsonFilePath}`\n );\n await writeJSON(vercelMiddlewarePackageJsonFilePath, serverlessVercelPackageJson);\n const wrappedMiddlewareEntryPointFilename = \"_wrapped_middleware.js\";\n const wrappedMiddlewareEntryPointPath = resolve(\n join(vercelMiddlewareDir, wrappedMiddlewareEntryPointFilename)\n );\n const middlewaresByNamedRegex = getMiddlewaresByNamedRegex(buildInfoForWriting);\n const middlewaresToVariableNameMap = middlewaresByNamedRegex.reduce(\n (acc, [namedRegex, middlewares]) => {\n ;\n (Array.isArray(middlewares) ? middlewares : [middlewares]).forEach(\n (middleware) => {\n const middlewareVariableName = middleware.replace(/\\.[a-z]+$/, \"\").replaceAll(\"/\", \"_\");\n acc[middleware] = middlewareVariableName;\n }\n );\n return acc;\n },\n {}\n );\n await FSExtra.writeFile(\n wrappedMiddlewareEntryPointPath,\n `\nconst middlewaresByNamedRegex = ${JSON.stringify(middlewaresByNamedRegex)}\n${Object.entries(middlewaresToVariableNameMap).map(([path, variableName]) => `import ${variableName} from './${path}'`).join(\"\\n\")}\n\nfunction getMiddleware(path) {\n switch (path){\n ${Object.entries(middlewaresToVariableNameMap).map(([path, variableName]) => `case '${path}': return ${variableName}`).join(\"\\n\")}\n default: return null\n }\n}\n\nconst next = (e) => {\n const t = new Headers(null == e ? void 0 : e.headers)\n t.set('x-middleware-next', '1')\n return new Response(null, { ...e, headers: t })\n}\n\nconst wrappedMiddlewareFunction = (request, event) => {\n const url = new URL(request.url)\n const pathname = url.pathname\n \n // Find matching middlewares for this request\n const matchingMiddlewares = [...middlewaresByNamedRegex\n .filter(([namedRegex]) => new RegExp(namedRegex).test(pathname))\n .reduce((prev, current) => prev.length > current[1]?.length ? prev : current[1], [])];\n \n // Import and execute the middleware function\n const boundNext = () => {\n if (matchingMiddlewares.length === 0) {\n return next(request)\n }\n \n const middleware = getMiddleware(matchingMiddlewares.shift())\n return middleware ? middleware({request, event, next: boundNext}) : next(request)\n };\n return boundNext()\n}\n\nexport { wrappedMiddlewareFunction as default }\n `\n );\n const middlewareVercelConfigFilePath = resolve(\n join(vercelMiddlewareDir, \".vc-config.json\")\n );\n postBuildLogs.push(\n `[one.build][vercel] writing .vc-config.json to ${middlewareVercelConfigFilePath}`\n );\n await writeJSON(middlewareVercelConfigFilePath, {\n runtime: \"edge\",\n // Seems that middlewares only work with edge runtime\n entrypoint: wrappedMiddlewareEntryPointFilename\n });\n }\n const vercelOutputStaticDir = resolve(join(oneOptionsRoot, \".vercel/output/static\"));\n await ensureDir(vercelOutputStaticDir);\n postBuildLogs.push(\n `[one.build][vercel] copying static files from ${clientDir} to ${vercelOutputStaticDir}`\n );\n await moveAllFiles(clientDir, vercelOutputStaticDir);\n const ssrLoaderRoutes = buildInfoForWriting.manifest.pageRoutes.filter((r) => r.type === \"ssr\").map((r) => {\n const pagePath = getPathFromRoute(r) || \"/\";\n const cleanPath = pagePath.slice(1).replace(/\\//g, \"_\");\n const paramPattern = /\\[(?:\\.\\.\\.)?(\\w+)\\]/g;\n const loaderPattern = cleanPath.replace(paramPattern, \"(?<$1>[^_]+)\");\n const src = `^/assets/${loaderPattern}(?:_refetch_\\\\d+)?_\\\\d+_vxrn_loader\\\\.js$`;\n let dest = `${pagePath}?__loader=1`;\n for (const [, paramName] of cleanPath.matchAll(paramPattern)) {\n dest += `&${paramName}=$${paramName}`;\n }\n return { src, dest };\n });\n const spaRoutes = buildInfoForWriting.manifest.pageRoutes.filter((route) => route.type === \"spa\" && !route.isNotFound).flatMap((route) => {\n const htmlPath = routeToBuildInfo[route.file]?.htmlPath;\n return htmlPath ? [{ src: route.namedRegex, dest: htmlPath }] : [];\n });\n const vercelConfigFilePath = resolve(\n join(oneOptionsRoot, \".vercel/output\", \"config.json\")\n );\n await writeJSON(vercelConfigFilePath, {\n ...vercelBuildOutputConfigBase,\n routes: [\n ...vercelBuildOutputConfigBase.routes,\n ...existsSync(distMiddlewareDir) ? [\n {\n src: \"/(.*)\",\n middlewarePath: \"_middleware\",\n continue: true\n }\n ] : [],\n {\n handle: \"rewrite\"\n },\n // SSR loader routes must come before dynamic page routes\n ...ssrLoaderRoutes,\n ...spaRoutes,\n ...buildInfoForWriting.manifest.allRoutes.filter((r) => r.routeKeys && Object.keys(r.routeKeys).length > 0).map((r) => ({\n src: r.namedRegex,\n dest: `${getPathFromRoute(r) || \"/\"}?${Object.entries(r.routeKeys).map(([k, v]) => `${k}=$${v}`).join(\"&\")}`\n }))\n ]\n });\n postBuildLogs.push(`[one.build] wrote vercel config to: ${vercelConfigFilePath}`);\n};\nexport {\n buildVercelOutputDirectory\n};\n//# sourceMappingURL=buildVercelOutputDirectory.js.map\n"],"mappings":";;;;;;;;;;AAQA,MAAM,EAAE,MAAM,WAAW,YAAY,QAAQ,cAAc;AAC3D,eAAe,aAAa,KAAK,MAAM;CACrC,IAAI;EACF,MAAM,KAAK,KAAK,MAAM;GAAE,WAAW;GAAM,cAAc;EAAM,CAAC;CAChE,SAAS,KAAK;EACZ,QAAQ,MAAM,uBAAuB,GAAG;CAC1C;AACF;AACA,SAAS,2BAA2B,qBAAqB;CACvD,MAAM,SAAS,oBAAoB,UAAU;CAC7C,MAAM,SAAS,GAAG,OAAO;CACzB,OAAO,oBAAoB,SAAS,UAAU,QAAQ,MAAM,EAAE,eAAe,EAAE,YAAY,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAChH,EAAE,YACF,EAAE,YAAY,KACX,MAAM,EAAE,WAAW,WAAW,MAAM,IAAI,EAAE,WAAW,UAAU,OAAO,MAAM,IAAI,EAAE,UACrF,CACF,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM;AAC7C;AACA,MAAM,6BAA6B,OAAO,EACxC,WACA,qBACA,WACA,gBACA,oBACI;CACJ,MAAM,SAAS,oBAAoB,UAAU;CAC7C,MAAM,kBAAkB,QAAQ,KAAK,gBAAgB,gBAAgB,CAAC;CACtE,IAAI,WAAW,eAAe,GAAG;EAC/B,MAAM,OAAO,eAAe;CAC9B;CACA,MAAM,EAAE,qBAAqB;CAC7B,IAAI,WAAW;EACb,MAAM,sBAAsB,WAAW,UAAU,CAAC,EAAC,CAAE,QAClD,MAAM,WAAW;GAAE,MAAM,EAAE;GAAQ,gBAAgB,EAAE;EAAO,GAAG,CAAC,CACnE;EACA,KAAK,MAAM,SAAS,oBAAoB,SAAS,WAAW;GAC1D,MAAM,gBAAgB,mBAAmB,MAAM,aAAa;IAC1D,MAAM,OAAO,SAAS,eAAe,SAAS,MAAM,KAAK,QAAQ,MAAM,EAAE,CAAC;IAC1E,OAAO;GACT,CAAC;GACD,IAAI,eAAe;IACjB,cAAc,KACZ,mEAAmE,MAAM,MAC3E;IACA,MAAM,4BACJ,OACA,cAAc,MACd,gBACA,eACA,MACF;GACF,OAAO;IACL,QAAQ,KACN,kEACA,MAAM,IACR;GACF;EACF;CACF;CACA,MAAM,2BAA2B,KAAK,gBAAgB,0BAA0B;CAChF,MAAM,UAAU,wBAAwB;CACxC,KAAK,MAAM,SAAS,oBAAoB,SAAS,YAAY;EAC3D,QAAQ,MAAM,MAAd;GACE,KAAK,OAAO;IACV,MAAM,iBAAiB,iBAAiB,MAAM;IAC9C,IAAI,gBAAgB;KAClB,cAAc,KACZ,wDAAwD,MAAM,KAAK,QAAQ,MAAM,MACnF;KACA,MAAM,4BACJ,OACA,qBACA,gBACA,aACF;IACF;IACA;GACF;GACA,SACE;EACJ;CACF;CACA,MAAM,oBAAoB,QAAQ,KAAK,gBAAgB,QAAQ,aAAa,CAAC;CAC7E,IAAI,WAAW,iBAAiB,GAAG;EACjC,MAAM,sBAAsB,QAC1B,KAAK,gBAAgB,2CAA2C,CAClE;EACA,MAAM,UAAU,mBAAmB;EACnC,cAAc,KACZ,gDAAgD,kBAAkB,MAAM,qBAC1E;EACA,MAAM,aACJ,QAAQ,KAAK,gBAAgB,QAAQ,aAAa,CAAC,GACnD,mBACF;EACA,MAAM,sCAAsC,QAC1C,KAAK,qBAAqB,cAAc,CAC1C;EACA,cAAc,KACZ,+CAA+C,qCACjD;EACA,MAAM,UAAU,qCAAqC,2BAA2B;EAChF,MAAM,sCAAsC;EAC5C,MAAM,kCAAkC,QACtC,KAAK,qBAAqB,mCAAmC,CAC/D;EACA,MAAM,0BAA0B,2BAA2B,mBAAmB;EAC9E,MAAM,+BAA+B,wBAAwB,QAC1D,KAAK,CAAC,YAAY,iBAAiB;GAClC;GACA,CAAC,MAAM,QAAQ,WAAW,IAAI,cAAc,CAAC,WAAW,EAAC,CAAE,SACxD,eAAe;IACd,MAAM,yBAAyB,WAAW,QAAQ,aAAa,EAAE,CAAC,CAAC,WAAW,KAAK,GAAG;IACtF,IAAI,cAAc;GACpB,CACF;GACA,OAAO;EACT,GACA,CAAC,CACH;EACA,MAAM,QAAQ,UACZ,iCACA;kCAC4B,KAAK,UAAU,uBAAuB,EAAE;EACxE,OAAO,QAAQ,4BAA4B,CAAC,CAAC,KAAK,CAAC,MAAM,kBAAkB,UAAU,aAAa,WAAW,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;;;;QAI3H,OAAO,QAAQ,4BAA4B,CAAC,CAAC,KAAK,CAAC,MAAM,kBAAkB,SAAS,KAAK,YAAY,cAAc,CAAC,CAAC,KAAK,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCpI;EACA,MAAM,iCAAiC,QACrC,KAAK,qBAAqB,iBAAiB,CAC7C;EACA,cAAc,KACZ,kDAAkD,gCACpD;EACA,MAAM,UAAU,gCAAgC;GAC9C,SAAS;GAET,YAAY;EACd,CAAC;CACH;CACA,MAAM,wBAAwB,QAAQ,KAAK,gBAAgB,uBAAuB,CAAC;CACnF,MAAM,UAAU,qBAAqB;CACrC,cAAc,KACZ,iDAAiD,UAAU,MAAM,uBACnE;CACA,MAAM,aAAa,WAAW,qBAAqB;CACnD,MAAM,kBAAkB,oBAAoB,SAAS,WAAW,QAAQ,MAAM,EAAE,SAAS,KAAK,CAAC,CAAC,KAAK,MAAM;EACzG,MAAM,WAAW,iBAAiB,CAAC,KAAK;EACxC,MAAM,YAAY,SAAS,MAAM,CAAC,CAAC,CAAC,QAAQ,OAAO,GAAG;EACtD,MAAM,eAAe;EACrB,MAAM,gBAAgB,UAAU,QAAQ,cAAc,cAAc;EACpE,MAAM,MAAM,YAAY,cAAc;EACtC,IAAI,OAAO,GAAG,SAAS;EACvB,KAAK,MAAM,GAAG,cAAc,UAAU,SAAS,YAAY,GAAG;GAC5D,QAAQ,IAAI,UAAU,IAAI;EAC5B;EACA,OAAO;GAAE;GAAK;EAAK;CACrB,CAAC;CACD,MAAM,YAAY,oBAAoB,SAAS,WAAW,QAAQ,UAAU,MAAM,SAAS,SAAS,CAAC,MAAM,UAAU,CAAC,CAAC,SAAS,UAAU;EACxI,MAAM,WAAW,iBAAiB,MAAM,KAAK,EAAE;EAC/C,OAAO,WAAW,CAAC;GAAE,KAAK,MAAM;GAAY,MAAM;EAAS,CAAC,IAAI,CAAC;CACnE,CAAC;CACD,MAAM,uBAAuB,QAC3B,KAAK,gBAAgB,kBAAkB,aAAa,CACtD;CACA,MAAM,UAAU,sBAAsB;EACpC,GAAG;EACH,QAAQ;GACN,GAAG,4BAA4B;GAC/B,GAAG,WAAW,iBAAiB,IAAI,CACjC;IACE,KAAK;IACL,gBAAgB;IAChB,UAAU;GACZ,CACF,IAAI,CAAC;GACL,EACE,QAAQ,UACV;GAEA,GAAG;GACH,GAAG;GACH,GAAG,oBAAoB,SAAS,UAAU,QAAQ,MAAM,EAAE,aAAa,OAAO,KAAK,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO;IACtH,KAAK,EAAE;IACP,MAAM,GAAG,iBAAiB,CAAC,KAAK,IAAI,GAAG,OAAO,QAAQ,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG;GAC3G,EAAE;EACJ;CACF,CAAC;CACD,cAAc,KAAK,uCAAuC,sBAAsB;AAClF"}