one 2.6.22 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/useHeaderHeight.native.cjs +5 -23
- package/dist/cjs/useHeaderHeight.native.js +5 -23
- package/dist/cjs/useHeaderHeight.native.js.map +1 -1
- package/dist/cjs/vercel/build/buildVercelOutputDirectory.cjs +4 -7
- package/dist/cjs/vercel/build/buildVercelOutputDirectory.native.cjs +16 -19
- package/dist/cjs/vercel/build/buildVercelOutputDirectory.native.js +16 -19
- package/dist/cjs/vercel/build/buildVercelOutputDirectory.native.js.map +1 -1
- package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.cjs +6 -3
- package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.native.cjs +6 -3
- package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.native.js +6 -3
- package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.native.js.map +1 -1
- package/dist/cjs/vercel/build/getPathFromRoute.cjs +6 -1
- package/dist/cjs/vercel/build/getPathFromRoute.native.cjs +23 -1
- package/dist/cjs/vercel/build/getPathFromRoute.native.js +23 -1
- package/dist/cjs/vercel/build/getPathFromRoute.native.js.map +1 -1
- package/dist/esm/useHeaderHeight.native.js +3 -21
- package/dist/esm/useHeaderHeight.native.js.map +1 -1
- package/dist/esm/vercel/build/buildVercelOutputDirectory.mjs +4 -7
- package/dist/esm/vercel/build/buildVercelOutputDirectory.mjs.map +1 -1
- package/dist/esm/vercel/build/buildVercelOutputDirectory.native.js +16 -19
- package/dist/esm/vercel/build/buildVercelOutputDirectory.native.js.map +1 -1
- package/dist/esm/vercel/build/generate/createSsrServerlessFunction.mjs +6 -3
- package/dist/esm/vercel/build/generate/createSsrServerlessFunction.mjs.map +1 -1
- package/dist/esm/vercel/build/generate/createSsrServerlessFunction.native.js +6 -3
- package/dist/esm/vercel/build/generate/createSsrServerlessFunction.native.js.map +1 -1
- package/dist/esm/vercel/build/getPathFromRoute.mjs +6 -1
- package/dist/esm/vercel/build/getPathFromRoute.mjs.map +1 -1
- package/dist/esm/vercel/build/getPathFromRoute.native.js +23 -1
- package/dist/esm/vercel/build/getPathFromRoute.native.js.map +1 -1
- package/ios/Nitro/HybridOneImageManipulator.swift +1 -1
- package/package.json +27 -27
- package/src/useHeaderHeight.native.ts +7 -0
- package/src/vercel/build/buildVercelOutputDirectory.ts +7 -10
- package/src/vercel/build/generate/createSsrServerlessFunction.ts +6 -3
- package/src/vercel/build/getPathFromRoute.ts +10 -1
- package/types/useHeaderHeight.native.d.ts +2 -0
- package/types/useHeaderHeight.native.d.ts.map +1 -0
- package/types/vercel/build/buildVercelOutputDirectory.d.ts.map +1 -1
- package/types/vercel/build/generate/createSsrServerlessFunction.d.ts.map +1 -1
- package/types/vercel/build/getPathFromRoute.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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 loaderPattern = cleanPath.replace(/:([^_]+)/g, \"(?<$1>[^_]+)\");\n const src = `^/assets/${loaderPattern}(?:_refetch_\\\\d+)?_\\\\d+_vxrn_loader\\\\.js$`;\n let dest = `${pagePath}?__loader=1`;\n const paramMatches = cleanPath.match(/:([^_]+)/g);\n if (paramMatches) {\n for (const match of paramMatches) {\n const paramName = match.slice(1);\n dest += `&${paramName}=$${paramName}`;\n }\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,gBAAgB,UAAU,QAAQ,aAAa,cAAc;EACnE,MAAM,MAAM,YAAY,cAAc;EACtC,IAAI,OAAO,GAAG,SAAS;EACvB,MAAM,eAAe,UAAU,MAAM,WAAW;EAChD,IAAI,cAAc;GAChB,KAAK,MAAM,SAAS,cAAc;IAChC,MAAM,YAAY,MAAM,MAAM,CAAC;IAC/B,QAAQ,IAAI,UAAU,IAAI;GAC5B;EACF;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"}
|
|
1
|
+
{"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":"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"}
|
|
@@ -193,30 +193,27 @@ export { wrappedMiddlewareFunction as default }
|
|
|
193
193
|
}).map(function(r) {
|
|
194
194
|
var pagePath = getPathFromRoute(r) || "/";
|
|
195
195
|
var cleanPath = pagePath.slice(1).replace(/\//g, "_");
|
|
196
|
-
var
|
|
196
|
+
var paramPattern = /\[(?:\.\.\.)?(\w+)\]/g;
|
|
197
|
+
var loaderPattern = cleanPath.replace(paramPattern, "(?<$1>[^_]+)");
|
|
197
198
|
var src = `^/assets/${loaderPattern}(?:_refetch_\\d+)?_\\d+_vxrn_loader\\.js$`;
|
|
198
199
|
var dest = `${pagePath}?__loader=1`;
|
|
199
|
-
var
|
|
200
|
-
|
|
201
|
-
var
|
|
200
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
|
|
201
|
+
try {
|
|
202
|
+
for (var _iterator2 = cleanPath.matchAll(paramPattern)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
203
|
+
var [, paramName] = _step2.value;
|
|
204
|
+
dest += `&${paramName}=$${paramName}`;
|
|
205
|
+
}
|
|
206
|
+
} catch (err) {
|
|
207
|
+
_didIteratorError2 = true;
|
|
208
|
+
_iteratorError2 = err;
|
|
209
|
+
} finally {
|
|
202
210
|
try {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
var paramName = match.slice(1);
|
|
206
|
-
dest += `&${paramName}=$${paramName}`;
|
|
211
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
212
|
+
_iterator2.return();
|
|
207
213
|
}
|
|
208
|
-
} catch (err) {
|
|
209
|
-
_didIteratorError2 = true;
|
|
210
|
-
_iteratorError2 = err;
|
|
211
214
|
} finally {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
_iterator2.return();
|
|
215
|
-
}
|
|
216
|
-
} finally {
|
|
217
|
-
if (_didIteratorError2) {
|
|
218
|
-
throw _iteratorError2;
|
|
219
|
-
}
|
|
215
|
+
if (_didIteratorError2) {
|
|
216
|
+
throw _iteratorError2;
|
|
220
217
|
}
|
|
221
218
|
}
|
|
222
219
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildVercelOutputDirectory.native.js","names":[],"sources":["esm/vercel/build/buildVercelOutputDirectory.native.js"],"sourcesContent":["import { join, resolve } from \"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\";\nvar { copy, ensureDir, existsSync, remove, writeJSON } = FSExtra;\nasync function moveAllFiles(src, dest) {\n try {\n await copy(src, dest, {\n overwrite: true,\n errorOnExist: false\n });\n } catch (err) {\n console.error(\"Error moving files:\", err);\n }\n}\nfunction getMiddlewaresByNamedRegex(buildInfoForWriting) {\n var outDir = buildInfoForWriting.outDir || \"dist\";\n var prefix = `${outDir}/middlewares/`;\n return buildInfoForWriting.manifest.allRoutes.filter(function(r) {\n return r.middlewares && r.middlewares.length > 0;\n }).map(function(r) {\n return [\n r.namedRegex,\n r.middlewares.map(function(m) {\n return m.contextKey.startsWith(prefix) ? m.contextKey.substring(prefix.length) : m.contextKey;\n })\n ];\n }).sort(function(a, b) {\n return b[0].length - a[0].length;\n });\n}\nvar buildVercelOutputDirectory = async function buildVercelOutputDirectory2(param) {\n var { apiOutput, buildInfoForWriting, clientDir, oneOptionsRoot, postBuildLogs } = param;\n var outDir = buildInfoForWriting.outDir || \"dist\";\n var vercelOutputDir = resolve(join(oneOptionsRoot, \".vercel/output\"));\n if (existsSync(vercelOutputDir)) {\n await remove(vercelOutputDir);\n }\n var { routeToBuildInfo } = buildInfoForWriting;\n if (apiOutput) {\n var _ref;\n var compiltedApiRoutes = ((_ref = apiOutput === null || apiOutput === void 0 ? void 0 : apiOutput.output) !== null && _ref !== void 0 ? _ref : []).filter(function(o) {\n return isMatching({\n code: P.string,\n facadeModuleId: P.string\n }, o);\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n var _loop = async function() {\n var route2 = _step.value;\n var compiledRoute = compiltedApiRoutes.find(function(compiled) {\n var flag = compiled.facadeModuleId.includes(route2.file.replace(\"./\", \"\"));\n return flag;\n });\n if (compiledRoute) {\n postBuildLogs.push(`[one.build][vercel] generating serverless function for apiRoute ${route2.page}`);\n await createApiServerlessFunction(route2, compiledRoute.code, oneOptionsRoot, postBuildLogs, outDir);\n } else {\n console.warn(\"\\n \\u{1F528}[one.build][vercel] apiRoute missing code compilation for\", route2.file);\n }\n };\n for (var _iterator = buildInfoForWriting.manifest.apiRoutes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) await _loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n var vercelOutputFunctionsDir = join(oneOptionsRoot, \".vercel/output/functions\");\n await ensureDir(vercelOutputFunctionsDir);\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = buildInfoForWriting.manifest.pageRoutes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var route = _step1.value;\n switch (route.type) {\n case \"ssr\": {\n var builtPageRoute = routeToBuildInfo[route.file];\n if (builtPageRoute) {\n postBuildLogs.push(`[one.build][vercel] generate serverless function for ${route.page} with ${route.type}`);\n await createSsrServerlessFunction(route, buildInfoForWriting, oneOptionsRoot, postBuildLogs);\n }\n break;\n }\n default:\n break;\n }\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n var distMiddlewareDir = resolve(join(oneOptionsRoot, outDir, \"middlewares\"));\n if (existsSync(distMiddlewareDir)) {\n var vercelMiddlewareDir = resolve(join(oneOptionsRoot, \".vercel/output/functions/_middleware.func\"));\n await ensureDir(vercelMiddlewareDir);\n postBuildLogs.push(`[one.build][vercel] copying middlewares from ${distMiddlewareDir} to ${vercelMiddlewareDir}`);\n await moveAllFiles(resolve(join(oneOptionsRoot, outDir, \"middlewares\")), vercelMiddlewareDir);\n var vercelMiddlewarePackageJsonFilePath = resolve(join(vercelMiddlewareDir, \"package.json\"));\n postBuildLogs.push(`[one.build][vercel] writing package.json to ${vercelMiddlewarePackageJsonFilePath}`);\n await writeJSON(vercelMiddlewarePackageJsonFilePath, serverlessVercelPackageJson);\n var wrappedMiddlewareEntryPointFilename = \"_wrapped_middleware.js\";\n var wrappedMiddlewareEntryPointPath = resolve(join(vercelMiddlewareDir, wrappedMiddlewareEntryPointFilename));\n var middlewaresByNamedRegex = getMiddlewaresByNamedRegex(buildInfoForWriting);\n var middlewaresToVariableNameMap = middlewaresByNamedRegex.reduce(function(acc, param2) {\n var [namedRegex, middlewares] = param2;\n ;\n (Array.isArray(middlewares) ? middlewares : [\n middlewares\n ]).forEach(function(middleware) {\n var middlewareVariableName = middleware.replace(/\\.[a-z]+$/, \"\").replaceAll(\"/\", \"_\");\n acc[middleware] = middlewareVariableName;\n });\n return acc;\n }, {});\n await FSExtra.writeFile(wrappedMiddlewareEntryPointPath, `\nconst middlewaresByNamedRegex = ${JSON.stringify(middlewaresByNamedRegex)}\n${Object.entries(middlewaresToVariableNameMap).map(function(param2) {\n var [path, variableName] = param2;\n return `import ${variableName} from './${path}'`;\n }).join(\"\\n\")}\n\nfunction getMiddleware(path) {\n switch (path){\n ${Object.entries(middlewaresToVariableNameMap).map(function(param2) {\n var [path, variableName] = param2;\n return `case '${path}': return ${variableName}`;\n }).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 var middlewareVercelConfigFilePath = resolve(join(vercelMiddlewareDir, \".vc-config.json\"));\n postBuildLogs.push(`[one.build][vercel] writing .vc-config.json to ${middlewareVercelConfigFilePath}`);\n await writeJSON(middlewareVercelConfigFilePath, {\n runtime: \"edge\",\n // Seems that middlewares only work with edge runtime\n entrypoint: wrappedMiddlewareEntryPointFilename\n });\n }\n var vercelOutputStaticDir = resolve(join(oneOptionsRoot, \".vercel/output/static\"));\n await ensureDir(vercelOutputStaticDir);\n postBuildLogs.push(`[one.build][vercel] copying static files from ${clientDir} to ${vercelOutputStaticDir}`);\n await moveAllFiles(clientDir, vercelOutputStaticDir);\n var ssrLoaderRoutes = buildInfoForWriting.manifest.pageRoutes.filter(function(r) {\n return r.type === \"ssr\";\n }).map(function(r) {\n var pagePath = getPathFromRoute(r) || \"/\";\n var cleanPath = pagePath.slice(1).replace(/\\//g, \"_\");\n var loaderPattern = cleanPath.replace(/:([^_]+)/g, \"(?<$1>[^_]+)\");\n var src = `^/assets/${loaderPattern}(?:_refetch_\\\\d+)?_\\\\d+_vxrn_loader\\\\.js$`;\n var dest = `${pagePath}?__loader=1`;\n var paramMatches = cleanPath.match(/:([^_]+)/g);\n if (paramMatches) {\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = paramMatches[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var match = _step2.value;\n var paramName = match.slice(1);\n dest += `&${paramName}=$${paramName}`;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n return {\n src,\n dest\n };\n });\n var spaRoutes = buildInfoForWriting.manifest.pageRoutes.filter(function(route2) {\n return route2.type === \"spa\" && !route2.isNotFound;\n }).flatMap(function(route2) {\n var _routeToBuildInfo_route_file;\n var htmlPath = (_routeToBuildInfo_route_file = routeToBuildInfo[route2.file]) === null || _routeToBuildInfo_route_file === void 0 ? void 0 : _routeToBuildInfo_route_file.htmlPath;\n return htmlPath ? [\n {\n src: route2.namedRegex,\n dest: htmlPath\n }\n ] : [];\n });\n var vercelConfigFilePath = resolve(join(oneOptionsRoot, \".vercel/output\", \"config.json\"));\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(function(r) {\n return r.routeKeys && Object.keys(r.routeKeys).length > 0;\n }).map(function(r) {\n return {\n src: r.namedRegex,\n dest: `${getPathFromRoute(r) || \"/\"}?${Object.entries(r.routeKeys).map(function(param2) {\n var [k, v] = param2;\n return `${k}=$${v}`;\n }).join(\"&\")}`\n };\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":"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"}
|
|
1
|
+
{"version":3,"file":"buildVercelOutputDirectory.native.js","names":[],"sources":["esm/vercel/build/buildVercelOutputDirectory.native.js"],"sourcesContent":["import { join, resolve } from \"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\";\nvar { copy, ensureDir, existsSync, remove, writeJSON } = FSExtra;\nasync function moveAllFiles(src, dest) {\n try {\n await copy(src, dest, {\n overwrite: true,\n errorOnExist: false\n });\n } catch (err) {\n console.error(\"Error moving files:\", err);\n }\n}\nfunction getMiddlewaresByNamedRegex(buildInfoForWriting) {\n var outDir = buildInfoForWriting.outDir || \"dist\";\n var prefix = `${outDir}/middlewares/`;\n return buildInfoForWriting.manifest.allRoutes.filter(function(r) {\n return r.middlewares && r.middlewares.length > 0;\n }).map(function(r) {\n return [\n r.namedRegex,\n r.middlewares.map(function(m) {\n return m.contextKey.startsWith(prefix) ? m.contextKey.substring(prefix.length) : m.contextKey;\n })\n ];\n }).sort(function(a, b) {\n return b[0].length - a[0].length;\n });\n}\nvar buildVercelOutputDirectory = async function buildVercelOutputDirectory2(param) {\n var { apiOutput, buildInfoForWriting, clientDir, oneOptionsRoot, postBuildLogs } = param;\n var outDir = buildInfoForWriting.outDir || \"dist\";\n var vercelOutputDir = resolve(join(oneOptionsRoot, \".vercel/output\"));\n if (existsSync(vercelOutputDir)) {\n await remove(vercelOutputDir);\n }\n var { routeToBuildInfo } = buildInfoForWriting;\n if (apiOutput) {\n var _ref;\n var compiltedApiRoutes = ((_ref = apiOutput === null || apiOutput === void 0 ? void 0 : apiOutput.output) !== null && _ref !== void 0 ? _ref : []).filter(function(o) {\n return isMatching({\n code: P.string,\n facadeModuleId: P.string\n }, o);\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n var _loop = async function() {\n var route2 = _step.value;\n var compiledRoute = compiltedApiRoutes.find(function(compiled) {\n var flag = compiled.facadeModuleId.includes(route2.file.replace(\"./\", \"\"));\n return flag;\n });\n if (compiledRoute) {\n postBuildLogs.push(`[one.build][vercel] generating serverless function for apiRoute ${route2.page}`);\n await createApiServerlessFunction(route2, compiledRoute.code, oneOptionsRoot, postBuildLogs, outDir);\n } else {\n console.warn(\"\\n \\u{1F528}[one.build][vercel] apiRoute missing code compilation for\", route2.file);\n }\n };\n for (var _iterator = buildInfoForWriting.manifest.apiRoutes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) await _loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n var vercelOutputFunctionsDir = join(oneOptionsRoot, \".vercel/output/functions\");\n await ensureDir(vercelOutputFunctionsDir);\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = buildInfoForWriting.manifest.pageRoutes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var route = _step1.value;\n switch (route.type) {\n case \"ssr\": {\n var builtPageRoute = routeToBuildInfo[route.file];\n if (builtPageRoute) {\n postBuildLogs.push(`[one.build][vercel] generate serverless function for ${route.page} with ${route.type}`);\n await createSsrServerlessFunction(route, buildInfoForWriting, oneOptionsRoot, postBuildLogs);\n }\n break;\n }\n default:\n break;\n }\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n var distMiddlewareDir = resolve(join(oneOptionsRoot, outDir, \"middlewares\"));\n if (existsSync(distMiddlewareDir)) {\n var vercelMiddlewareDir = resolve(join(oneOptionsRoot, \".vercel/output/functions/_middleware.func\"));\n await ensureDir(vercelMiddlewareDir);\n postBuildLogs.push(`[one.build][vercel] copying middlewares from ${distMiddlewareDir} to ${vercelMiddlewareDir}`);\n await moveAllFiles(resolve(join(oneOptionsRoot, outDir, \"middlewares\")), vercelMiddlewareDir);\n var vercelMiddlewarePackageJsonFilePath = resolve(join(vercelMiddlewareDir, \"package.json\"));\n postBuildLogs.push(`[one.build][vercel] writing package.json to ${vercelMiddlewarePackageJsonFilePath}`);\n await writeJSON(vercelMiddlewarePackageJsonFilePath, serverlessVercelPackageJson);\n var wrappedMiddlewareEntryPointFilename = \"_wrapped_middleware.js\";\n var wrappedMiddlewareEntryPointPath = resolve(join(vercelMiddlewareDir, wrappedMiddlewareEntryPointFilename));\n var middlewaresByNamedRegex = getMiddlewaresByNamedRegex(buildInfoForWriting);\n var middlewaresToVariableNameMap = middlewaresByNamedRegex.reduce(function(acc, param2) {\n var [namedRegex, middlewares] = param2;\n ;\n (Array.isArray(middlewares) ? middlewares : [\n middlewares\n ]).forEach(function(middleware) {\n var middlewareVariableName = middleware.replace(/\\.[a-z]+$/, \"\").replaceAll(\"/\", \"_\");\n acc[middleware] = middlewareVariableName;\n });\n return acc;\n }, {});\n await FSExtra.writeFile(wrappedMiddlewareEntryPointPath, `\nconst middlewaresByNamedRegex = ${JSON.stringify(middlewaresByNamedRegex)}\n${Object.entries(middlewaresToVariableNameMap).map(function(param2) {\n var [path, variableName] = param2;\n return `import ${variableName} from './${path}'`;\n }).join(\"\\n\")}\n\nfunction getMiddleware(path) {\n switch (path){\n ${Object.entries(middlewaresToVariableNameMap).map(function(param2) {\n var [path, variableName] = param2;\n return `case '${path}': return ${variableName}`;\n }).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 var middlewareVercelConfigFilePath = resolve(join(vercelMiddlewareDir, \".vc-config.json\"));\n postBuildLogs.push(`[one.build][vercel] writing .vc-config.json to ${middlewareVercelConfigFilePath}`);\n await writeJSON(middlewareVercelConfigFilePath, {\n runtime: \"edge\",\n // Seems that middlewares only work with edge runtime\n entrypoint: wrappedMiddlewareEntryPointFilename\n });\n }\n var vercelOutputStaticDir = resolve(join(oneOptionsRoot, \".vercel/output/static\"));\n await ensureDir(vercelOutputStaticDir);\n postBuildLogs.push(`[one.build][vercel] copying static files from ${clientDir} to ${vercelOutputStaticDir}`);\n await moveAllFiles(clientDir, vercelOutputStaticDir);\n var ssrLoaderRoutes = buildInfoForWriting.manifest.pageRoutes.filter(function(r) {\n return r.type === \"ssr\";\n }).map(function(r) {\n var pagePath = getPathFromRoute(r) || \"/\";\n var cleanPath = pagePath.slice(1).replace(/\\//g, \"_\");\n var paramPattern = /\\[(?:\\.\\.\\.)?(\\w+)\\]/g;\n var loaderPattern = cleanPath.replace(paramPattern, \"(?<$1>[^_]+)\");\n var src = `^/assets/${loaderPattern}(?:_refetch_\\\\d+)?_\\\\d+_vxrn_loader\\\\.js$`;\n var dest = `${pagePath}?__loader=1`;\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = cleanPath.matchAll(paramPattern)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var [, paramName] = _step2.value;\n dest += `&${paramName}=$${paramName}`;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n return {\n src,\n dest\n };\n });\n var spaRoutes = buildInfoForWriting.manifest.pageRoutes.filter(function(route2) {\n return route2.type === \"spa\" && !route2.isNotFound;\n }).flatMap(function(route2) {\n var _routeToBuildInfo_route_file;\n var htmlPath = (_routeToBuildInfo_route_file = routeToBuildInfo[route2.file]) === null || _routeToBuildInfo_route_file === void 0 ? void 0 : _routeToBuildInfo_route_file.htmlPath;\n return htmlPath ? [\n {\n src: route2.namedRegex,\n dest: htmlPath\n }\n ] : [];\n });\n var vercelConfigFilePath = resolve(join(oneOptionsRoot, \".vercel/output\", \"config.json\"));\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(function(r) {\n return r.routeKeys && Object.keys(r.routeKeys).length > 0;\n }).map(function(r) {\n return {\n src: r.namedRegex,\n dest: `${getPathFromRoute(r) || \"/\"}?${Object.entries(r.routeKeys).map(function(param2) {\n var [k, v] = param2;\n return `${k}=$${v}`;\n }).join(\"&\")}`\n };\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":"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"}
|
|
@@ -69,11 +69,14 @@ async function createSsrServerlessFunction(route, buildInfo, oneOptionsRoot, pos
|
|
|
69
69
|
headers: new Headers(req.headers || {}),
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
// Reconstruct the original path by replacing
|
|
73
|
-
// The pathname might be the rewritten path (e.g., /dynamic
|
|
72
|
+
// Reconstruct the original path by replacing [param] placeholders with actual values
|
|
73
|
+
// The pathname might be the rewritten path (e.g., /dynamic/[id] instead of /dynamic/123)
|
|
74
74
|
let originalPath = url.pathname;
|
|
75
75
|
for (const [key, value] of Object.entries(routeParams)) {
|
|
76
|
-
originalPath = originalPath.replace(
|
|
76
|
+
originalPath = originalPath.replace(
|
|
77
|
+
new RegExp(\`(\\\\[|%5B)(\\\\.\\\\.\\\\.)?\${key}(\\\\]|%5D)\`, 'i'),
|
|
78
|
+
() => (Array.isArray(value) ? value.join('/') : value)
|
|
79
|
+
);
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
const host = url.hostname;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSsrServerlessFunction.js","names":[],"sources":["esm/vercel/build/generate/createSsrServerlessFunction.js"],"sourcesContent":["import { join, resolve } from \"node:path\";\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 createSsrServerlessFunction(route, buildInfo, oneOptionsRoot, postBuildLogs) {\n try {\n const path = getPathFromRoute(route, { includeIndex: true });\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] path: ${path}`);\n const buildInfoAsString = JSON.stringify(buildInfo);\n const funcFolder = resolve(\n join(oneOptionsRoot, `.vercel/output/functions/${path}.func`)\n );\n await fs.ensureDir(funcFolder);\n const outDir = buildInfo.outDir || \"dist\";\n const distServerFrom = resolve(join(oneOptionsRoot, outDir, \"server\"));\n const distServerTo = resolve(join(funcFolder, \"server\"));\n await fs.ensureDir(distServerTo);\n postBuildLogs.push(\n `[one.build][vercel.createSsrServerlessFunction] copy server dist files from ${distServerFrom} to ${distServerTo}`\n );\n await fs.copy(distServerFrom, distServerTo);\n postBuildLogs.push(\n `[one.build][vercel.createSsrServerlessFunction] writing buildInfo.json`\n );\n await fs.writeFile(\n join(funcFolder, \"buildInfo.js\"),\n `export default ${buildInfoAsString}`\n );\n await fs.ensureDir(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(\n entrypointFilePath,\n `\n const buildInfoConfig = await import('../buildInfo.js');\n const entry = await import('../server/_virtual_one-entry.js');\n const routeFile = ${JSON.stringify(route.file)}\n\n const handler = async (req, res) => {\n // console.debug(\"req.url\", req.url);\n const url = new URL(req.url, \\`https://\\${process.env.VERCEL_URL}\\`);\n\n // Check if this is a loader request (routed here by config.json rewrite)\n const isLoaderRequest = url.searchParams.get('__loader') === '1';\n\n // Extract route params - from URL path match OR from query params (for loader requests)\n const routePattern = ${JSON.stringify(route.page)};\n const paramNames = [];\n const regexPattern = routePattern\n .replace(/\\\\[\\\\.\\\\.\\\\.(\\\\w+)\\\\]/g, (_, name) => { paramNames.push({ name, catch: true }); return '(.+)'; })\n .replace(/\\\\[(\\\\w+)\\\\]/g, (_, name) => { paramNames.push({ name, catch: false }); return '([^/]+)'; });\n\n const routeParams = {};\n\n // First try to get params from query string (set by Vercel rewrite rules)\n // This handles both loader requests and regular page requests that went through rewrites\n for (const param of paramNames) {\n const value = url.searchParams.get(param.name);\n if (value) {\n routeParams[param.name] = param.catch ? value.split('/') : value;\n }\n }\n\n // If no params found in query string, try extracting from URL path\n if (Object.keys(routeParams).length === 0) {\n const match = url.pathname.match(new RegExp(\\`^\\${regexPattern}$\\`));\n if (match) {\n paramNames.forEach((param, index) => {\n const value = match[index + 1];\n routeParams[param.name] = param.catch ? value.split('/') : value;\n });\n }\n }\n\n // Create a proper Request object for SSR loaders\n const request = new Request(url.toString(), {\n method: req.method || 'GET',\n headers: new Headers(req.headers || {}),\n });\n\n // Reconstruct the original path by replacing
|
|
1
|
+
{"version":3,"file":"createSsrServerlessFunction.js","names":[],"sources":["esm/vercel/build/generate/createSsrServerlessFunction.js"],"sourcesContent":["import { join, resolve } from \"node:path\";\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 createSsrServerlessFunction(route, buildInfo, oneOptionsRoot, postBuildLogs) {\n try {\n const path = getPathFromRoute(route, { includeIndex: true });\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] path: ${path}`);\n const buildInfoAsString = JSON.stringify(buildInfo);\n const funcFolder = resolve(\n join(oneOptionsRoot, `.vercel/output/functions/${path}.func`)\n );\n await fs.ensureDir(funcFolder);\n const outDir = buildInfo.outDir || \"dist\";\n const distServerFrom = resolve(join(oneOptionsRoot, outDir, \"server\"));\n const distServerTo = resolve(join(funcFolder, \"server\"));\n await fs.ensureDir(distServerTo);\n postBuildLogs.push(\n `[one.build][vercel.createSsrServerlessFunction] copy server dist files from ${distServerFrom} to ${distServerTo}`\n );\n await fs.copy(distServerFrom, distServerTo);\n postBuildLogs.push(\n `[one.build][vercel.createSsrServerlessFunction] writing buildInfo.json`\n );\n await fs.writeFile(\n join(funcFolder, \"buildInfo.js\"),\n `export default ${buildInfoAsString}`\n );\n await fs.ensureDir(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(\n entrypointFilePath,\n `\n const buildInfoConfig = await import('../buildInfo.js');\n const entry = await import('../server/_virtual_one-entry.js');\n const routeFile = ${JSON.stringify(route.file)}\n\n const handler = async (req, res) => {\n // console.debug(\"req.url\", req.url);\n const url = new URL(req.url, \\`https://\\${process.env.VERCEL_URL}\\`);\n\n // Check if this is a loader request (routed here by config.json rewrite)\n const isLoaderRequest = url.searchParams.get('__loader') === '1';\n\n // Extract route params - from URL path match OR from query params (for loader requests)\n const routePattern = ${JSON.stringify(route.page)};\n const paramNames = [];\n const regexPattern = routePattern\n .replace(/\\\\[\\\\.\\\\.\\\\.(\\\\w+)\\\\]/g, (_, name) => { paramNames.push({ name, catch: true }); return '(.+)'; })\n .replace(/\\\\[(\\\\w+)\\\\]/g, (_, name) => { paramNames.push({ name, catch: false }); return '([^/]+)'; });\n\n const routeParams = {};\n\n // First try to get params from query string (set by Vercel rewrite rules)\n // This handles both loader requests and regular page requests that went through rewrites\n for (const param of paramNames) {\n const value = url.searchParams.get(param.name);\n if (value) {\n routeParams[param.name] = param.catch ? value.split('/') : value;\n }\n }\n\n // If no params found in query string, try extracting from URL path\n if (Object.keys(routeParams).length === 0) {\n const match = url.pathname.match(new RegExp(\\`^\\${regexPattern}$\\`));\n if (match) {\n paramNames.forEach((param, index) => {\n const value = match[index + 1];\n routeParams[param.name] = param.catch ? value.split('/') : value;\n });\n }\n }\n\n // Create a proper Request object for SSR loaders\n const request = new Request(url.toString(), {\n method: req.method || 'GET',\n headers: new Headers(req.headers || {}),\n });\n\n // Reconstruct the original path by replacing [param] placeholders with actual values\n // The pathname might be the rewritten path (e.g., /dynamic/[id] instead of /dynamic/123)\n let originalPath = url.pathname;\n for (const [key, value] of Object.entries(routeParams)) {\n originalPath = originalPath.replace(\n new RegExp(\\`(\\\\\\\\[|%5B)(\\\\\\\\.\\\\\\\\.\\\\\\\\.)?\\${key}(\\\\\\\\]|%5D)\\`, 'i'),\n () => (Array.isArray(value) ? value.join('/') : value)\n );\n }\n\n const host = url.hostname;\n let subdomain;\n if (host && host !== 'localhost' && !/^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\\\\.\\\\d+$/.test(host)) {\n const parts = host.split('.');\n if (parts.length >= 3) subdomain = parts.slice(0, -2).join('.');\n }\n\n const loaderProps = {\n path: originalPath,\n params: routeParams,\n subdomain,\n request,\n }\n\n const postfix = url.pathname.endsWith('/') ? 'index.tsx' : '+ssr.tsx';\n // const routeFile = \\`.\\${url.pathname}\\${postfix}\\`;\n let route = buildInfoConfig.default.routeToBuildInfo[routeFile];\n\n // If we cannot find the route by direct match, try to find it by looking it up in the\n // pathToRoute mapping. Currently this handles cases such as \"(some-group)/index.tsx\",\n // \"index.web.tsx\".\n if (!route) {\n const routeName = buildInfoConfig.default.pathToRoute[url.pathname];\n route = buildInfoConfig.default.routeToBuildInfo[routeName];\n }\n\n const exported = await import(route.serverJsPath.replace('${outDir}/','../'))\n const loaderData = await exported.loader?.(loaderProps)\n\n // For loader requests, return the loader data as a JavaScript module\n if (isLoaderRequest) {\n res.setHeader('Content-Type', 'application/javascript; charset=utf-8')\n res.setHeader('Cache-Control', 'no-store')\n res.end(\\`export function loader() { return \\${JSON.stringify(loaderData)} }\\`)\n return\n }\n\n // For page requests, render the full HTML\n const render = entry.default.render;\n const preloads = route.preloads\n const css = route.css || []\n const rendered = await render({\n mode: route.type,\n loaderData,\n loaderProps,\n path: loaderProps?.path || '/',\n preloads,\n css,\n })\n res.setHeader('Content-Type', 'text/html; charset=utf-8')\n // https://vercel.com/docs/deployments/skew-protection#supported-frameworks__\n if (process.env.VERCEL_SKEW_PROTECTION_ENABLED === '1') {\n res.setHeader('Set-Cookie', [\n \\`__vdpl=\\${process.env.VERCEL_DEPLOYMENT_ID}; HttpOnly\\`,\n ]);\n }\n res.end(rendered)\n }\n\n export default handler;\n `\n );\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 const vcConfigFilePath = resolve(join(funcFolder, \".vc-config.json\"));\n postBuildLogs.push(\n `[one.build][vercel.createSsrServerlessFunction] writing .vc-config.json to ${vcConfigFilePath}`\n );\n return fs.writeJson(vcConfigFilePath, {\n ...serverlessVercelNodeJsConfig,\n handler: \"entrypoint/index.js\",\n environment: {\n ...serverlessVercelNodeJsConfig.environment,\n ONE_DEFAULT_RENDER_MODE: \"ssr\"\n }\n });\n } catch (e) {\n console.error(\n `[one.build][vercel.createSsrServerlessFunction] failed to generate func for ${route.file}`,\n e\n );\n }\n}\nexport {\n createSsrServerlessFunction\n};\n//# sourceMappingURL=createSsrServerlessFunction.js.map\n"],"mappings":";;;;;;;AAKA,eAAe,4BAA4B,OAAO,WAAW,gBAAgB,eAAe;CAC1F,IAAI;EACF,MAAM,OAAO,iBAAiB,OAAO,EAAE,cAAc,KAAK,CAAC;EAC3D,cAAc,KAAK,yDAAyD,MAAM;EAClF,MAAM,oBAAoB,KAAK,UAAU,SAAS;EAClD,MAAM,aAAa,QACjB,KAAK,gBAAgB,4BAA4B,KAAK,MAAM,CAC9D;EACA,MAAM,GAAG,UAAU,UAAU;EAC7B,MAAM,SAAS,UAAU,UAAU;EACnC,MAAM,iBAAiB,QAAQ,KAAK,gBAAgB,QAAQ,QAAQ,CAAC;EACrE,MAAM,eAAe,QAAQ,KAAK,YAAY,QAAQ,CAAC;EACvD,MAAM,GAAG,UAAU,YAAY;EAC/B,cAAc,KACZ,+EAA+E,eAAe,MAAM,cACtG;EACA,MAAM,GAAG,KAAK,gBAAgB,YAAY;EAC1C,cAAc,KACZ,wEACF;EACA,MAAM,GAAG,UACP,KAAK,YAAY,cAAc,GAC/B,kBAAkB,mBACpB;EACA,MAAM,GAAG,UAAU,KAAK,YAAY,YAAY,CAAC;EACjD,MAAM,qBAAqB,QAAQ,KAAK,YAAY,cAAc,UAAU,CAAC;EAC7E,cAAc,KACZ,yEAAyE,oBAC3E;EACA,MAAM,GAAG,UACP,oBACA;;;sBAGgB,KAAK,UAAU,MAAM,IAAI,EAAE;;;;;;;;;;2BAUtB,KAAK,UAAU,MAAM,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAsEU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCnE;EACA,MAAM,sBAAsB,QAAQ,KAAK,YAAY,cAAc,CAAC;EACpE,cAAc,KACZ,2EAA2E,qBAC7E;EACA,MAAM,GAAG,UAAU,qBAAqB,2BAA2B;EACnE,MAAM,mBAAmB,QAAQ,KAAK,YAAY,iBAAiB,CAAC;EACpE,cAAc,KACZ,8EAA8E,kBAChF;EACA,OAAO,GAAG,UAAU,kBAAkB;GACpC,GAAG;GACH,SAAS;GACT,aAAa;IACX,GAAG,6BAA6B;IAChC,yBAAyB;GAC3B;EACF,CAAC;CACH,SAAS,GAAG;EACV,QAAQ,MACN,+EAA+E,MAAM,QACrF,CACF;CACF;AACF"}
|
|
@@ -69,11 +69,14 @@ async function createSsrServerlessFunction(route, buildInfo, oneOptionsRoot, pos
|
|
|
69
69
|
headers: new Headers(req.headers || {}),
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
// Reconstruct the original path by replacing
|
|
73
|
-
// The pathname might be the rewritten path (e.g., /dynamic
|
|
72
|
+
// Reconstruct the original path by replacing [param] placeholders with actual values
|
|
73
|
+
// The pathname might be the rewritten path (e.g., /dynamic/[id] instead of /dynamic/123)
|
|
74
74
|
let originalPath = url.pathname;
|
|
75
75
|
for (const [key, value] of Object.entries(routeParams)) {
|
|
76
|
-
originalPath = originalPath.replace(
|
|
76
|
+
originalPath = originalPath.replace(
|
|
77
|
+
new RegExp(\`(\\\\[|%5B)(\\\\.\\\\.\\\\.)?\${key}(\\\\]|%5D)\`, 'i'),
|
|
78
|
+
() => (Array.isArray(value) ? value.join('/') : value)
|
|
79
|
+
);
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
const host = url.hostname;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSsrServerlessFunction.native.js","names":[],"sources":["esm/vercel/build/generate/createSsrServerlessFunction.native.js"],"sourcesContent":["import { join, resolve } from \"path\";\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 createSsrServerlessFunction(route, buildInfo, oneOptionsRoot, postBuildLogs) {\n try {\n var path = getPathFromRoute(route, {\n includeIndex: true\n });\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] path: ${path}`);\n var buildInfoAsString = JSON.stringify(buildInfo);\n var funcFolder = resolve(join(oneOptionsRoot, `.vercel/output/functions/${path}.func`));\n await fs.ensureDir(funcFolder);\n var outDir = buildInfo.outDir || \"dist\";\n var distServerFrom = resolve(join(oneOptionsRoot, outDir, \"server\"));\n var distServerTo = resolve(join(funcFolder, \"server\"));\n await fs.ensureDir(distServerTo);\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] copy server dist files from ${distServerFrom} to ${distServerTo}`);\n await fs.copy(distServerFrom, distServerTo);\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] writing buildInfo.json`);\n await fs.writeFile(join(funcFolder, \"buildInfo.js\"), `export default ${buildInfoAsString}`);\n await fs.ensureDir(join(funcFolder, \"entrypoint\"));\n var entrypointFilePath = resolve(join(funcFolder, \"entrypoint\", \"index.js\"));\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] writing entrypoint to ${entrypointFilePath}`);\n await fs.writeFile(entrypointFilePath, `\n const buildInfoConfig = await import('../buildInfo.js');\n const entry = await import('../server/_virtual_one-entry.js');\n const routeFile = ${JSON.stringify(route.file)}\n\n const handler = async (req, res) => {\n // console.debug(\"req.url\", req.url);\n const url = new URL(req.url, \\`https://\\${process.env.VERCEL_URL}\\`);\n\n // Check if this is a loader request (routed here by config.json rewrite)\n const isLoaderRequest = url.searchParams.get('__loader') === '1';\n\n // Extract route params - from URL path match OR from query params (for loader requests)\n const routePattern = ${JSON.stringify(route.page)};\n const paramNames = [];\n const regexPattern = routePattern\n .replace(/\\\\[\\\\.\\\\.\\\\.(\\\\w+)\\\\]/g, (_, name) => { paramNames.push({ name, catch: true }); return '(.+)'; })\n .replace(/\\\\[(\\\\w+)\\\\]/g, (_, name) => { paramNames.push({ name, catch: false }); return '([^/]+)'; });\n\n const routeParams = {};\n\n // First try to get params from query string (set by Vercel rewrite rules)\n // This handles both loader requests and regular page requests that went through rewrites\n for (const param of paramNames) {\n const value = url.searchParams.get(param.name);\n if (value) {\n routeParams[param.name] = param.catch ? value.split('/') : value;\n }\n }\n\n // If no params found in query string, try extracting from URL path\n if (Object.keys(routeParams).length === 0) {\n const match = url.pathname.match(new RegExp(\\`^\\${regexPattern}$\\`));\n if (match) {\n paramNames.forEach((param, index) => {\n const value = match[index + 1];\n routeParams[param.name] = param.catch ? value.split('/') : value;\n });\n }\n }\n\n // Create a proper Request object for SSR loaders\n const request = new Request(url.toString(), {\n method: req.method || 'GET',\n headers: new Headers(req.headers || {}),\n });\n\n // Reconstruct the original path by replacing
|
|
1
|
+
{"version":3,"file":"createSsrServerlessFunction.native.js","names":[],"sources":["esm/vercel/build/generate/createSsrServerlessFunction.native.js"],"sourcesContent":["import { join, resolve } from \"path\";\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 createSsrServerlessFunction(route, buildInfo, oneOptionsRoot, postBuildLogs) {\n try {\n var path = getPathFromRoute(route, {\n includeIndex: true\n });\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] path: ${path}`);\n var buildInfoAsString = JSON.stringify(buildInfo);\n var funcFolder = resolve(join(oneOptionsRoot, `.vercel/output/functions/${path}.func`));\n await fs.ensureDir(funcFolder);\n var outDir = buildInfo.outDir || \"dist\";\n var distServerFrom = resolve(join(oneOptionsRoot, outDir, \"server\"));\n var distServerTo = resolve(join(funcFolder, \"server\"));\n await fs.ensureDir(distServerTo);\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] copy server dist files from ${distServerFrom} to ${distServerTo}`);\n await fs.copy(distServerFrom, distServerTo);\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] writing buildInfo.json`);\n await fs.writeFile(join(funcFolder, \"buildInfo.js\"), `export default ${buildInfoAsString}`);\n await fs.ensureDir(join(funcFolder, \"entrypoint\"));\n var entrypointFilePath = resolve(join(funcFolder, \"entrypoint\", \"index.js\"));\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] writing entrypoint to ${entrypointFilePath}`);\n await fs.writeFile(entrypointFilePath, `\n const buildInfoConfig = await import('../buildInfo.js');\n const entry = await import('../server/_virtual_one-entry.js');\n const routeFile = ${JSON.stringify(route.file)}\n\n const handler = async (req, res) => {\n // console.debug(\"req.url\", req.url);\n const url = new URL(req.url, \\`https://\\${process.env.VERCEL_URL}\\`);\n\n // Check if this is a loader request (routed here by config.json rewrite)\n const isLoaderRequest = url.searchParams.get('__loader') === '1';\n\n // Extract route params - from URL path match OR from query params (for loader requests)\n const routePattern = ${JSON.stringify(route.page)};\n const paramNames = [];\n const regexPattern = routePattern\n .replace(/\\\\[\\\\.\\\\.\\\\.(\\\\w+)\\\\]/g, (_, name) => { paramNames.push({ name, catch: true }); return '(.+)'; })\n .replace(/\\\\[(\\\\w+)\\\\]/g, (_, name) => { paramNames.push({ name, catch: false }); return '([^/]+)'; });\n\n const routeParams = {};\n\n // First try to get params from query string (set by Vercel rewrite rules)\n // This handles both loader requests and regular page requests that went through rewrites\n for (const param of paramNames) {\n const value = url.searchParams.get(param.name);\n if (value) {\n routeParams[param.name] = param.catch ? value.split('/') : value;\n }\n }\n\n // If no params found in query string, try extracting from URL path\n if (Object.keys(routeParams).length === 0) {\n const match = url.pathname.match(new RegExp(\\`^\\${regexPattern}$\\`));\n if (match) {\n paramNames.forEach((param, index) => {\n const value = match[index + 1];\n routeParams[param.name] = param.catch ? value.split('/') : value;\n });\n }\n }\n\n // Create a proper Request object for SSR loaders\n const request = new Request(url.toString(), {\n method: req.method || 'GET',\n headers: new Headers(req.headers || {}),\n });\n\n // Reconstruct the original path by replacing [param] placeholders with actual values\n // The pathname might be the rewritten path (e.g., /dynamic/[id] instead of /dynamic/123)\n let originalPath = url.pathname;\n for (const [key, value] of Object.entries(routeParams)) {\n originalPath = originalPath.replace(\n new RegExp(\\`(\\\\\\\\[|%5B)(\\\\\\\\.\\\\\\\\.\\\\\\\\.)?\\${key}(\\\\\\\\]|%5D)\\`, 'i'),\n () => (Array.isArray(value) ? value.join('/') : value)\n );\n }\n\n const host = url.hostname;\n let subdomain;\n if (host && host !== 'localhost' && !/^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\\\\.\\\\d+$/.test(host)) {\n const parts = host.split('.');\n if (parts.length >= 3) subdomain = parts.slice(0, -2).join('.');\n }\n\n const loaderProps = {\n path: originalPath,\n params: routeParams,\n subdomain,\n request,\n }\n\n const postfix = url.pathname.endsWith('/') ? 'index.tsx' : '+ssr.tsx';\n // const routeFile = \\`.\\${url.pathname}\\${postfix}\\`;\n let route = buildInfoConfig.default.routeToBuildInfo[routeFile];\n\n // If we cannot find the route by direct match, try to find it by looking it up in the\n // pathToRoute mapping. Currently this handles cases such as \"(some-group)/index.tsx\",\n // \"index.web.tsx\".\n if (!route) {\n const routeName = buildInfoConfig.default.pathToRoute[url.pathname];\n route = buildInfoConfig.default.routeToBuildInfo[routeName];\n }\n\n const exported = await import(route.serverJsPath.replace('${outDir}/','../'))\n const loaderData = await exported.loader?.(loaderProps)\n\n // For loader requests, return the loader data as a JavaScript module\n if (isLoaderRequest) {\n res.setHeader('Content-Type', 'application/javascript; charset=utf-8')\n res.setHeader('Cache-Control', 'no-store')\n res.end(\\`export function loader() { return \\${JSON.stringify(loaderData)} }\\`)\n return\n }\n\n // For page requests, render the full HTML\n const render = entry.default.render;\n const preloads = route.preloads\n const css = route.css || []\n const rendered = await render({\n mode: route.type,\n loaderData,\n loaderProps,\n path: loaderProps?.path || '/',\n preloads,\n css,\n })\n res.setHeader('Content-Type', 'text/html; charset=utf-8')\n // https://vercel.com/docs/deployments/skew-protection#supported-frameworks__\n if (process.env.VERCEL_SKEW_PROTECTION_ENABLED === '1') {\n res.setHeader('Set-Cookie', [\n \\`__vdpl=\\${process.env.VERCEL_DEPLOYMENT_ID}; HttpOnly\\`,\n ]);\n }\n res.end(rendered)\n }\n\n export default handler;\n `);\n var packageJsonFilePath = resolve(join(funcFolder, \"package.json\"));\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] writing package.json to ${packageJsonFilePath}`);\n await fs.writeJSON(packageJsonFilePath, serverlessVercelPackageJson);\n var vcConfigFilePath = resolve(join(funcFolder, \".vc-config.json\"));\n postBuildLogs.push(`[one.build][vercel.createSsrServerlessFunction] writing .vc-config.json to ${vcConfigFilePath}`);\n return fs.writeJson(vcConfigFilePath, {\n ...serverlessVercelNodeJsConfig,\n handler: \"entrypoint/index.js\",\n environment: {\n ...serverlessVercelNodeJsConfig.environment,\n ONE_DEFAULT_RENDER_MODE: \"ssr\"\n }\n });\n } catch (e) {\n console.error(`[one.build][vercel.createSsrServerlessFunction] failed to generate func for ${route.file}`, e);\n }\n}\nexport {\n createSsrServerlessFunction\n};\n//# sourceMappingURL=createSsrServerlessFunction.js.map\n"],"mappings":";;;;;;;AAKA,eAAe,4BAA4B,OAAO,WAAW,gBAAgB,eAAe;CAC1F,IAAI;EACF,IAAI,OAAO,iBAAiB,OAAO,EACjC,cAAc,KAChB,CAAC;EACD,cAAc,KAAK,yDAAyD,MAAM;EAClF,IAAI,oBAAoB,KAAK,UAAU,SAAS;EAChD,IAAI,aAAa,QAAQ,KAAK,gBAAgB,4BAA4B,KAAK,MAAM,CAAC;EACtF,MAAM,GAAG,UAAU,UAAU;EAC7B,IAAI,SAAS,UAAU,UAAU;EACjC,IAAI,iBAAiB,QAAQ,KAAK,gBAAgB,QAAQ,QAAQ,CAAC;EACnE,IAAI,eAAe,QAAQ,KAAK,YAAY,QAAQ,CAAC;EACrD,MAAM,GAAG,UAAU,YAAY;EAC/B,cAAc,KAAK,+EAA+E,eAAe,MAAM,cAAc;EACrI,MAAM,GAAG,KAAK,gBAAgB,YAAY;EAC1C,cAAc,KAAK,wEAAwE;EAC3F,MAAM,GAAG,UAAU,KAAK,YAAY,cAAc,GAAG,kBAAkB,mBAAmB;EAC1F,MAAM,GAAG,UAAU,KAAK,YAAY,YAAY,CAAC;EACjD,IAAI,qBAAqB,QAAQ,KAAK,YAAY,cAAc,UAAU,CAAC;EAC3E,cAAc,KAAK,yEAAyE,oBAAoB;EAChH,MAAM,GAAG,UAAU,oBAAoB;;;sBAGrB,KAAK,UAAU,MAAM,IAAI,EAAE;;;;;;;;;;2BAUtB,KAAK,UAAU,MAAM,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAsEU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCpE;EACC,IAAI,sBAAsB,QAAQ,KAAK,YAAY,cAAc,CAAC;EAClE,cAAc,KAAK,2EAA2E,qBAAqB;EACnH,MAAM,GAAG,UAAU,qBAAqB,2BAA2B;EACnE,IAAI,mBAAmB,QAAQ,KAAK,YAAY,iBAAiB,CAAC;EAClE,cAAc,KAAK,8EAA8E,kBAAkB;EACnH,OAAO,GAAG,UAAU,kBAAkB;GACpC,GAAG;GACH,SAAS;GACT,aAAa;IACX,GAAG,6BAA6B;IAChC,yBAAyB;GAC3B;EACF,CAAC;CACH,SAAS,GAAG;EACV,QAAQ,MAAM,+EAA+E,MAAM,QAAQ,CAAC;CAC9G;AACF"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { getPathnameFromFilePath } from "../../utils/getPathnameFromFilePath.mjs";
|
|
2
2
|
|
|
3
3
|
function getPathFromRoute(route, options = {}) {
|
|
4
|
-
|
|
4
|
+
const params = {};
|
|
5
|
+
for (const [param, inner] of route.file.matchAll(/\[([^\]]+)\]/g)) {
|
|
6
|
+
params[inner] = param;
|
|
7
|
+
params[inner.replace(/^\.\.\./, "")] = param;
|
|
8
|
+
}
|
|
9
|
+
return getPathnameFromFilePath(route.file, params, false, {
|
|
5
10
|
...options,
|
|
6
11
|
preserveExtensions: true
|
|
7
12
|
}).replace(/^\.\//, "/").replace(/\/+$/, "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPathFromRoute.js","names":[],"sources":["esm/vercel/build/getPathFromRoute.js"],"sourcesContent":["import { getPathnameFromFilePath } from \"../../utils/getPathnameFromFilePath\";\nfunction getPathFromRoute(route, options = {}) {\n return getPathnameFromFilePath(route.file,
|
|
1
|
+
{"version":3,"file":"getPathFromRoute.js","names":[],"sources":["esm/vercel/build/getPathFromRoute.js"],"sourcesContent":["import { getPathnameFromFilePath } from \"../../utils/getPathnameFromFilePath\";\nfunction getPathFromRoute(route, options = {}) {\n const params = {};\n for (const [param, inner] of route.file.matchAll(/\\[([^\\]]+)\\]/g)) {\n params[inner] = param;\n params[inner.replace(/^\\.\\.\\./, \"\")] = param;\n }\n return getPathnameFromFilePath(route.file, params, false, {\n ...options,\n preserveExtensions: true\n }).replace(/^\\.\\//, \"/\").replace(/\\/+$/, \"\");\n}\nexport {\n getPathFromRoute\n};\n//# sourceMappingURL=getPathFromRoute.js.map\n"],"mappings":";;;AACA,SAAS,iBAAiB,OAAO,UAAU,CAAC,GAAG;CAC7C,MAAM,SAAS,CAAC;CAChB,KAAK,MAAM,CAAC,OAAO,UAAU,MAAM,KAAK,SAAS,eAAe,GAAG;EACjE,OAAO,SAAS;EAChB,OAAO,MAAM,QAAQ,WAAW,EAAE,KAAK;CACzC;CACA,OAAO,wBAAwB,MAAM,MAAM,QAAQ,OAAO;EACxD,GAAG;EACH,oBAAoB;CACtB,CAAC,CAAC,CAAC,QAAQ,SAAS,GAAG,CAAC,CAAC,QAAQ,QAAQ,EAAE;AAC7C"}
|
|
@@ -2,7 +2,29 @@ import { getPathnameFromFilePath } from "../../utils/getPathnameFromFilePath.nat
|
|
|
2
2
|
|
|
3
3
|
function getPathFromRoute(route) {
|
|
4
4
|
var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
5
|
-
|
|
5
|
+
var params = {};
|
|
6
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
7
|
+
try {
|
|
8
|
+
for (var _iterator = route.file.matchAll(/\[([^\]]+)\]/g)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
9
|
+
var [param, inner] = _step.value;
|
|
10
|
+
params[inner] = param;
|
|
11
|
+
params[inner.replace(/^\.\.\./, "")] = param;
|
|
12
|
+
}
|
|
13
|
+
} catch (err) {
|
|
14
|
+
_didIteratorError = true;
|
|
15
|
+
_iteratorError = err;
|
|
16
|
+
} finally {
|
|
17
|
+
try {
|
|
18
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
19
|
+
_iterator.return();
|
|
20
|
+
}
|
|
21
|
+
} finally {
|
|
22
|
+
if (_didIteratorError) {
|
|
23
|
+
throw _iteratorError;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return getPathnameFromFilePath(route.file, params, false, {
|
|
6
28
|
...options,
|
|
7
29
|
preserveExtensions: true
|
|
8
30
|
}).replace(/^\.\//, "/").replace(/\/+$/, "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPathFromRoute.native.js","names":[],"sources":["esm/vercel/build/getPathFromRoute.native.js"],"sourcesContent":["import { getPathnameFromFilePath } from \"../../utils/getPathnameFromFilePath\";\nfunction getPathFromRoute(route) {\n var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n
|
|
1
|
+
{"version":3,"file":"getPathFromRoute.native.js","names":[],"sources":["esm/vercel/build/getPathFromRoute.native.js"],"sourcesContent":["import { getPathnameFromFilePath } from \"../../utils/getPathnameFromFilePath\";\nfunction getPathFromRoute(route) {\n var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n var params = {};\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = route.file.matchAll(/\\[([^\\]]+)\\]/g)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var [param, inner] = _step.value;\n params[inner] = param;\n params[inner.replace(/^\\.\\.\\./, \"\")] = param;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return getPathnameFromFilePath(route.file, params, false, {\n ...options,\n preserveExtensions: true\n }).replace(/^\\.\\//, \"/\").replace(/\\/+$/, \"\");\n}\nexport {\n getPathFromRoute\n};\n//# sourceMappingURL=getPathFromRoute.js.map\n"],"mappings":";;;AACA,SAAS,iBAAiB,OAAO;CAC/B,IAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,KAAK,IAAI,UAAU,KAAK,CAAC;CAChF,IAAI,SAAS,CAAC;CACd,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,MAAM,KAAK,SAAS,eAAe,CAAC,CAAC,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GACrL,IAAI,CAAC,OAAO,SAAS,MAAM;GAC3B,OAAO,SAAS;GAChB,OAAO,MAAM,QAAQ,WAAW,EAAE,KAAK;EACzC;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,OAAO,wBAAwB,MAAM,MAAM,QAAQ,OAAO;EACxD,GAAG;EACH,oBAAoB;CACtB,CAAC,CAAC,CAAC,QAAQ,SAAS,GAAG,CAAC,CAAC,QAAQ,QAAQ,EAAE;AAC7C"}
|
|
@@ -143,7 +143,7 @@ final class HybridOneImageManipulator: HybridOneImageManipulatorSpec {
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
private static func webPData(_ image: UIImage, quality: Double) -> Data? {
|
|
146
|
-
SDImageWebPCoder.
|
|
146
|
+
SDImageWebPCoder.shared.encodedData(
|
|
147
147
|
with: image, format: .webP, options: [.encodeCompressionQuality: quality])
|
|
148
148
|
}
|
|
149
149
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "one",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.1",
|
|
4
4
|
"description": "One is a React framework for web, iOS, and Android apps.",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
6
|
"sideEffects": [
|
|
@@ -231,23 +231,23 @@
|
|
|
231
231
|
"@react-native-community/cli-platform-android": "^20.2.0",
|
|
232
232
|
"@react-native-community/cli-platform-ios": "^20.2.0",
|
|
233
233
|
"@radix-ui/react-slot": "^1.0.2",
|
|
234
|
-
"@react-navigation/bottom-tabs": "8.0.0-alpha.
|
|
235
|
-
"@react-navigation/elements": "3.0.0-alpha.
|
|
236
|
-
"@react-navigation/native-stack": "8.0.0-alpha.
|
|
237
|
-
"@react-navigation/routers": "8.0.0-alpha.
|
|
234
|
+
"@react-navigation/bottom-tabs": "8.0.0-alpha.57",
|
|
235
|
+
"@react-navigation/elements": "3.0.0-alpha.55",
|
|
236
|
+
"@react-navigation/native-stack": "8.0.0-alpha.59",
|
|
237
|
+
"@react-navigation/routers": "8.0.0-alpha.21",
|
|
238
238
|
"@ungap/structured-clone": "^1.2.0",
|
|
239
|
-
"@vxrn/color-scheme": "2.
|
|
240
|
-
"@vxrn/compiler": "2.
|
|
241
|
-
"@vxrn/resolve": "2.
|
|
242
|
-
"@vxrn/tslib-lite": "2.
|
|
243
|
-
"@vxrn/use-isomorphic-layout-effect": "2.
|
|
244
|
-
"@vxrn/utils": "2.
|
|
245
|
-
"@vxrn/vite-plugin-metro": "2.
|
|
239
|
+
"@vxrn/color-scheme": "2.7.1",
|
|
240
|
+
"@vxrn/compiler": "2.7.1",
|
|
241
|
+
"@vxrn/resolve": "2.7.1",
|
|
242
|
+
"@vxrn/tslib-lite": "2.7.1",
|
|
243
|
+
"@vxrn/use-isomorphic-layout-effect": "2.7.1",
|
|
244
|
+
"@vxrn/utils": "2.7.1",
|
|
245
|
+
"@vxrn/vite-plugin-metro": "2.7.1",
|
|
246
246
|
"babel-dead-code-elimination": "1.0.10",
|
|
247
247
|
"babel-plugin-module-resolver": "^5.0.2",
|
|
248
248
|
"citty": "^0.1.6",
|
|
249
249
|
"core-js": "^3.38.1",
|
|
250
|
-
"create-vxrn": "2.
|
|
250
|
+
"create-vxrn": "2.7.1",
|
|
251
251
|
"escape-string-regexp": "^5.0.0",
|
|
252
252
|
"fast-deep-equal": "^3.1.3",
|
|
253
253
|
"fast-glob": "^3.3.3",
|
|
@@ -269,7 +269,7 @@
|
|
|
269
269
|
"tsconfig-paths": "^4",
|
|
270
270
|
"use-latest-callback": "^0.2.3",
|
|
271
271
|
"vite": "^8.2.2",
|
|
272
|
-
"vxrn": "2.
|
|
272
|
+
"vxrn": "2.7.1",
|
|
273
273
|
"web-streams-polyfill": "^4.3.0",
|
|
274
274
|
"ws": "^8.21.0",
|
|
275
275
|
"xxhashjs": "^0.2.2"
|
|
@@ -277,15 +277,15 @@
|
|
|
277
277
|
"peerDependencies": {
|
|
278
278
|
"@callstack/liquid-glass": ">=0.6.0",
|
|
279
279
|
"@react-native/babel-preset": "^0.87.1",
|
|
280
|
-
"@react-navigation/core": "8.0.0-alpha.
|
|
281
|
-
"@react-navigation/drawer": "8.0.0-alpha.
|
|
282
|
-
"@react-navigation/native": "8.0.0-alpha.
|
|
280
|
+
"@react-navigation/core": "8.0.0-alpha.41",
|
|
281
|
+
"@react-navigation/drawer": "8.0.0-alpha.58",
|
|
282
|
+
"@react-navigation/native": "8.0.0-alpha.51",
|
|
283
283
|
"react": "^19.2.3",
|
|
284
284
|
"react-dom": "^19.2.3",
|
|
285
285
|
"react-native": "^0.87.0",
|
|
286
286
|
"react-native-gesture-handler": ">=3.0.0",
|
|
287
287
|
"react-native-reanimated": ">=4.0.0",
|
|
288
|
-
"react-native-screens": ">=4.
|
|
288
|
+
"react-native-screens": ">=4.30.0",
|
|
289
289
|
"react-native-web": "^0.21.2",
|
|
290
290
|
"react-native-worklets": ">=0.12.2",
|
|
291
291
|
"sharp": "^0.35.5",
|
|
@@ -325,19 +325,19 @@
|
|
|
325
325
|
}
|
|
326
326
|
},
|
|
327
327
|
"devDependencies": {
|
|
328
|
-
"@tamagui/sheet": "3.0.
|
|
328
|
+
"@tamagui/sheet": "3.0.10",
|
|
329
329
|
"@callstack/liquid-glass": "^0.8.1",
|
|
330
330
|
"@react-native/babel-plugin-codegen": "0.87.1",
|
|
331
331
|
"@react-native/codegen": "^0.87.1",
|
|
332
|
-
"@react-navigation/core": "8.0.0-alpha.
|
|
333
|
-
"@react-navigation/drawer": "8.0.0-alpha.
|
|
334
|
-
"@react-navigation/native": "8.0.0-alpha.
|
|
335
|
-
"@tamagui/build": "3.0.
|
|
332
|
+
"@react-navigation/core": "8.0.0-alpha.41",
|
|
333
|
+
"@react-navigation/drawer": "8.0.0-alpha.58",
|
|
334
|
+
"@react-navigation/native": "8.0.0-alpha.51",
|
|
335
|
+
"@tamagui/build": "3.0.10",
|
|
336
336
|
"@types/node": "^24.10.0",
|
|
337
337
|
"@types/react-dom": "^19.2.2",
|
|
338
338
|
"@types/react-test-renderer": "^19.1.0",
|
|
339
339
|
"@types/xxhashjs": "^0.2.4",
|
|
340
|
-
"@vxrn/emitter": "2.
|
|
340
|
+
"@vxrn/emitter": "2.7.1",
|
|
341
341
|
"depcheck": "^1.4.7",
|
|
342
342
|
"esbuild": "^0.25.12",
|
|
343
343
|
"immer": "^10.1.1",
|
|
@@ -347,7 +347,7 @@
|
|
|
347
347
|
"react-native": "0.87.1",
|
|
348
348
|
"react-native-gesture-handler": "~3.3.0",
|
|
349
349
|
"react-native-reanimated": "~4.6.0",
|
|
350
|
-
"react-native-screens": "~4.
|
|
350
|
+
"react-native-screens": "~4.30.0",
|
|
351
351
|
"react-native-web": "^0.21.2",
|
|
352
352
|
"react-native-worklets": "~0.12.2",
|
|
353
353
|
"react-test-renderer": "^19.2.0",
|
|
@@ -356,7 +356,7 @@
|
|
|
356
356
|
"typescript": "7.0.2",
|
|
357
357
|
"vitest": "^4.1.0",
|
|
358
358
|
"yoga-layout": "^3.2.1",
|
|
359
|
-
"@tamagui/web": "3.0.
|
|
359
|
+
"@tamagui/web": "3.0.10"
|
|
360
360
|
},
|
|
361
361
|
"publishConfig": {
|
|
362
362
|
"access": "public"
|
|
@@ -513,7 +513,7 @@
|
|
|
513
513
|
}
|
|
514
514
|
}
|
|
515
515
|
},
|
|
516
|
-
"releaseSourceCommit": "
|
|
516
|
+
"releaseSourceCommit": "6ef95da2c405283333f006f28f09fff8591f2ae4",
|
|
517
517
|
"repository": {
|
|
518
518
|
"type": "git",
|
|
519
519
|
"url": "git+https://github.com/onejs/one.git",
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { HeaderHeightContext } from '@react-navigation/elements'
|
|
2
|
+
import { useContext } from 'react'
|
|
3
|
+
|
|
4
|
+
// native navigators and callers must read the provider's exported context.
|
|
5
|
+
export function useHeaderHeight(): number {
|
|
6
|
+
return useContext(HeaderHeightContext) ?? 0
|
|
7
|
+
}
|
|
@@ -233,14 +233,15 @@ export { wrappedMiddlewareFunction as default }
|
|
|
233
233
|
const pagePath = getPathFromRoute(r) || '/'
|
|
234
234
|
// Convert page path to loader asset pattern
|
|
235
235
|
// /ssr-page -> ssr-page
|
|
236
|
-
// /dynamic
|
|
236
|
+
// /dynamic/[id] -> dynamic_[id]
|
|
237
237
|
const cleanPath = pagePath.slice(1).replace(/\//g, '_')
|
|
238
|
+
const paramPattern = /\[(?:\.\.\.)?(\w+)\]/g
|
|
238
239
|
|
|
239
240
|
// Build regex pattern for the loader asset
|
|
240
|
-
// Replace
|
|
241
|
-
// The loader URL pattern uses the actual param value, not
|
|
241
|
+
// Replace [param] with capture groups for dynamic segments
|
|
242
|
+
// The loader URL pattern uses the actual param value, not [param]
|
|
242
243
|
// e.g., /dynamic/123 -> /assets/dynamic_123_12345_vxrn_loader.js
|
|
243
|
-
const loaderPattern = cleanPath.replace(
|
|
244
|
+
const loaderPattern = cleanPath.replace(paramPattern, '(?<$1>[^_]+)')
|
|
244
245
|
|
|
245
246
|
// Match the loader file pattern: {path}_{cacheKey}_vxrn_loader.js
|
|
246
247
|
// Also handle _refetch_ pattern for cache busting
|
|
@@ -248,12 +249,8 @@ export { wrappedMiddlewareFunction as default }
|
|
|
248
249
|
|
|
249
250
|
// Build destination with captured params
|
|
250
251
|
let dest = `${pagePath}?__loader=1`
|
|
251
|
-
const
|
|
252
|
-
|
|
253
|
-
for (const match of paramMatches) {
|
|
254
|
-
const paramName = match.slice(1) // remove leading :
|
|
255
|
-
dest += `&${paramName}=$${paramName}`
|
|
256
|
-
}
|
|
252
|
+
for (const [, paramName] of cleanPath.matchAll(paramPattern)) {
|
|
253
|
+
dest += `&${paramName}=$${paramName}`
|
|
257
254
|
}
|
|
258
255
|
|
|
259
256
|
return { src, dest }
|
|
@@ -94,11 +94,14 @@ export async function createSsrServerlessFunction(
|
|
|
94
94
|
headers: new Headers(req.headers || {}),
|
|
95
95
|
});
|
|
96
96
|
|
|
97
|
-
// Reconstruct the original path by replacing
|
|
98
|
-
// The pathname might be the rewritten path (e.g., /dynamic
|
|
97
|
+
// Reconstruct the original path by replacing [param] placeholders with actual values
|
|
98
|
+
// The pathname might be the rewritten path (e.g., /dynamic/[id] instead of /dynamic/123)
|
|
99
99
|
let originalPath = url.pathname;
|
|
100
100
|
for (const [key, value] of Object.entries(routeParams)) {
|
|
101
|
-
originalPath = originalPath.replace(
|
|
101
|
+
originalPath = originalPath.replace(
|
|
102
|
+
new RegExp(\`(\\\\[|%5B)(\\\\.\\\\.\\\\.)?$\{key}(\\\\]|%5D)\`, 'i'),
|
|
103
|
+
() => (Array.isArray(value) ? value.join('/') : value)
|
|
104
|
+
);
|
|
102
105
|
}
|
|
103
106
|
|
|
104
107
|
const host = url.hostname;
|