UNPKG

one

Version:

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

1,401 lines • 58.2 kB
"use strict";

var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
	for (var name in all) __defProp(target, name, {
		get: all[name],
		enumerable: true
	});
};
var __copyProps = (to, from, except, desc) => {
	if (from && typeof from === "object" || typeof from === "function") {
		for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
			get: () => from[key],
			enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
		});
	}
	return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
	value: mod,
	enumerable: true
}) : target, mod));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var build_exports = {};
__export(build_exports, { build: () => build });
module.exports = __toCommonJS(build_exports);
var import_module = require("module");
var import_os = require("os");
var import_path = __toESM(require("path"), 1);
var import_resolve = require("@vxrn/resolve");
var import_fs_extra = __toESM(require("fs-extra"), 1);
var import_micromatch = __toESM(require("micromatch"), 1);
var import_vite = require("vite");
var import_vxrn = require("vxrn");
var constants = __toESM(require("../constants.native.js"), 1);
var import_setServerGlobals = require("../server/setServerGlobals.native.js");
var import_environmentGuardPlugin = require("../vite/plugins/environmentGuardPlugin.native.js");
var import_buildOutputPointer = require("../utils/buildOutputPointer.native.js");
var import_getPathnameFromFilePath = require("../utils/getPathnameFromFilePath.native.js");
var import_getRouterRootFromOneOptions = require("../utils/getRouterRootFromOneOptions.native.js");
var import_isRolldown = require("../utils/isRolldown.native.js");
var import_toAbsolute = require("../utils/toAbsolute.native.js");
var import_buildVercelOutputDirectory = require("../vercel/build/buildVercelOutputDirectory.native.js");
var import_cloudflareWranglerConfig = require("../vite/cloudflareWranglerConfig.native.js");
var import_getManifest = require("../vite/getManifest.native.js");
var import_loadConfig = require("../vite/loadConfig.native.js");
var import_one_server_only = require("../vite/one-server-only.native.js");
var import_buildPage = require("./buildPage.native.js");
var import_checkNodeVersion = require("./checkNodeVersion.native.js");
var import_workerPool = require("./workerPool.native.js");
var import_generateSitemap = require("./generateSitemap.native.js");
var import_label_process = require("./label-process.native.js");
var import_serverRouteModules = require("./serverRouteModules.native.js");
var import_pLimit = require("../utils/pLimit.native.js");
var import_criticalCSSPlugin = require("../vite/plugins/criticalCSSPlugin.native.js");
var import_absorbedPackages = require("../utils/absorbedPackages.native.js");
var import_install_error_handlers = require("./install-error-handlers.native.js");
const import_meta = {};
var { ensureDir, writeJSON } = import_fs_extra.default;
function normalizeDeploy(deploy) {
	if (!deploy) return void 0;
	if (typeof deploy === "string") return { target: deploy };
	return deploy;
}
var CLOUDFLARE_DEPLOY_WRANGLER_RULES = [{
	type: "ESModule",
	globs: ["assets/**/*.js", "assets/**/*.mjs"]
}];
function omitEmptyJsonValues(value) {
	if (Array.isArray(value)) {
		var items = value.map(function(item) {
			return omitEmptyJsonValues(item);
		}).filter(function(item) {
			return item !== void 0;
		});
		return items.length > 0 ? items : void 0;
	}
	if ((0, import_cloudflareWranglerConfig.isPlainObject)(value)) {
		var entries = Object.entries(value).map(function(param) {
			var [key, item] = param;
			return [key, omitEmptyJsonValues(item)];
		}).filter(function(entry) {
			return entry[1] !== void 0;
		});
		return entries.length > 0 ? Object.fromEntries(entries) : void 0;
	}
	return value;
}
async function finalizeCloudflareWranglerDeployConfig(configPath) {
	var parsed = JSON.parse(await import_fs_extra.default.readFile(configPath, "utf-8"));
	if (!(0, import_cloudflareWranglerConfig.isPlainObject)(parsed)) {
		throw new Error(`Expected ${(0, import_path.relative)(process.cwd(), configPath)} to contain a JSON object`);
	}
	parsed.rules = CLOUDFLARE_DEPLOY_WRANGLER_RULES;
	var config = omitEmptyJsonValues(parsed);
	if (!(0, import_cloudflareWranglerConfig.isPlainObject)(config)) {
		throw new Error(`Expected ${(0, import_path.relative)(process.cwd(), configPath)} to contain deploy config`);
	}
	await import_fs_extra.default.writeFile(configPath, `${JSON.stringify(config, null, 2)}
`);
}
process.env.ONE_CACHE_KEY = constants.CACHE_KEY;
function shouldUseWorkers(oneOptions) {
	var _oneOptions_build;
	if (process.env.ONE_BUILD_WORKERS === "0") return false;
	if (process.env.ONE_BUILD_WORKERS === "1") return true;
	return (oneOptions === null || oneOptions === void 0 ? void 0 : (_oneOptions_build = oneOptions.build) === null || _oneOptions_build === void 0 ? void 0 : _oneOptions_build.workers) !== false;
}
(0, import_install_error_handlers.installPrepareStackTraceGuard)();
var buildErrorHandlersInstalled = false;
function installBuildErrorHandlers() {
	if (buildErrorHandlersInstalled) return;
	buildErrorHandlersInstalled = true;
	process.on("uncaughtException", function(err) {
		try {
			process.stderr.write(`[one build] uncaught exception
${(0, import_install_error_handlers.formatErrorSafely)(err)}
`);
		} catch (unused) {}
		process.exit(1);
	});
	process.on("unhandledRejection", function(reason) {
		try {
			process.stderr.write(`[one build] unhandled rejection
${(0, import_install_error_handlers.formatErrorSafely)(reason)}
`);
		} catch (unused) {}
		process.exit(1);
	});
}
var HOOK_KEYS = [
	"resolveId",
	"load",
	"transform",
	"renderChunk",
	"generateBundle",
	"writeBundle",
	"buildStart",
	"buildEnd",
	"moduleParsed"
];
function clonePluginHooks(config) {
	if (!config.plugins) return config;
	return {
		...config,
		plugins: config.plugins.map(function(p) {
			if (!p || typeof p !== "object") return p;
			var cloned = { ...p };
			var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
			try {
				for (var _iterator = HOOK_KEYS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
					var key = _step.value;
					if (cloned[key] && typeof cloned[key] === "object" && "handler" in cloned[key]) {
						cloned[key] = { ...cloned[key] };
					}
				}
			} catch (err) {
				_didIteratorError = true;
				_iteratorError = err;
			} finally {
				try {
					if (!_iteratorNormalCompletion && _iterator.return != null) {
						_iterator.return();
					}
				} finally {
					if (_didIteratorError) {
						throw _iteratorError;
					}
				}
			}
			return cloned;
		})
	};
}
async function build(args) {
	var _process_env_ONE_BUILD_CONCURRENCY, _ref, _ref1, _args_skipEnv, _vxrnOutput_serverBuildConfig, _securityScanOption_level;
	var _oneOptions_build, _oneOptions_web, _oneOptions_web1, _viteLoadedConfig_config_build, _viteLoadedConfig_config, _oneOptions_router, _oneOptions_build1, _oneOptions_build_server, _oneOptions_build2, _oneOptions_build3, _oneOptions_build4, _oneOptions_web2, _oneOptions_build5;
	installBuildErrorHandlers();
	process.env.IS_VXRN_CLI = "true";
	if (!process.env.NODE_ENV) {
		process.env.NODE_ENV = "production";
	} else if (process.env.NODE_ENV !== "production") {
		console.warn(`
 \u26A0\uFE0F  Warning: NODE_ENV is set to "${process.env.NODE_ENV}" (builds default to "production")
`);
	}
	(0, import_label_process.labelProcess)("build");
	(0, import_checkNodeVersion.checkNodeVersion)();
	(0, import_setServerGlobals.setServerGlobals)();
	var { oneOptions, config: viteLoadedConfig } = await (0, import_loadConfig.loadUserOneOptions)("build");
	var routerRoot = (0, import_getRouterRootFromOneOptions.getRouterRootFromOneOptions)(oneOptions);
	var configuredBuildConcurrency = (_process_env_ONE_BUILD_CONCURRENCY = process.env.ONE_BUILD_CONCURRENCY) !== null && _process_env_ONE_BUILD_CONCURRENCY !== void 0 ? _process_env_ONE_BUILD_CONCURRENCY : (_oneOptions_build = oneOptions.build) === null || _oneOptions_build === void 0 ? void 0 : _oneOptions_build.concurrency;
	var buildConcurrency = configuredBuildConcurrency === void 0 ? Math.max(1, Math.min((0, import_os.cpus)().length, 8)) : Number(configuredBuildConcurrency);
	if (!Number.isInteger(buildConcurrency) || buildConcurrency < 1) {
		throw new Error(`build.concurrency must be a positive integer, received ${JSON.stringify(configuredBuildConcurrency)}`);
	}
	if ((_oneOptions_web = oneOptions.web) === null || _oneOptions_web === void 0 ? void 0 : _oneOptions_web.defaultRenderMode) {
		process.env.ONE_DEFAULT_RENDER_MODE = oneOptions.web.defaultRenderMode;
	}
	var deployConfig = normalizeDeploy((_oneOptions_web1 = oneOptions.web) === null || _oneOptions_web1 === void 0 ? void 0 : _oneOptions_web1.deploy);
	if (!process.env.ONE_SERVER_URL && deployConfig) {
		var _deployConfig_url;
		var url = (_deployConfig_url = deployConfig.url) !== null && _deployConfig_url !== void 0 ? _deployConfig_url : deployConfig.target === "cloudflare" ? `https://${await (0, import_cloudflareWranglerConfig.getCloudflareProjectName)(process.cwd())}.workers.dev` : void 0;
		if (url) {
			process.env.ONE_SERVER_URL = url;
			console.info(`
 \u2601\uFE0F ONE_SERVER_URL: ${url}
`);
		}
	}
	var outDir = (_ref = viteLoadedConfig === null || viteLoadedConfig === void 0 ? void 0 : (_viteLoadedConfig_config = viteLoadedConfig.config) === null || _viteLoadedConfig_config === void 0 ? void 0 : (_viteLoadedConfig_config_build = _viteLoadedConfig_config.build) === null || _viteLoadedConfig_config_build === void 0 ? void 0 : _viteLoadedConfig_config_build.outDir) !== null && _ref !== void 0 ? _ref : "dist";
	var manifest = (0, import_getManifest.getManifest)({
		routerRoot,
		ignoredRouteFiles: (_oneOptions_router = oneOptions.router) === null || _oneOptions_router === void 0 ? void 0 : _oneOptions_router.ignoredRouteFiles
	});
	var serverOutputFormat = ((_oneOptions_build1 = oneOptions.build) === null || _oneOptions_build1 === void 0 ? void 0 : _oneOptions_build1.server) === false ? "esm" : (_ref1 = (_oneOptions_build2 = oneOptions.build) === null || _oneOptions_build2 === void 0 ? void 0 : (_oneOptions_build_server = _oneOptions_build2.server) === null || _oneOptions_build_server === void 0 ? void 0 : _oneOptions_build_server.outputFormat) !== null && _ref1 !== void 0 ? _ref1 : "esm";
	var buildStartTime = performance.now();
	var vxrnOutput = await (0, import_vxrn.build)({
		skipEnv: (_args_skipEnv = args.skipEnv) !== null && _args_skipEnv !== void 0 ? _args_skipEnv : oneOptions.skipEnv,
		server: oneOptions.server,
		build: {
			analyze: true,
			server: ((_oneOptions_build3 = oneOptions.build) === null || _oneOptions_build3 === void 0 ? void 0 : _oneOptions_build3.server) === false ? false : { outputFormat: serverOutputFormat }
		}
	}, args);
	var bundleTime = performance.now() - buildStartTime;
	console.info(`
 \u23F1\uFE0F vite bundle: ${(bundleTime / 1e3).toFixed(2)}s
`);
	if (!vxrnOutput || args.platform !== "web") {
		return;
	}
	var { options } = vxrnOutput;
	var { optimizeDeps } = (0, import_vxrn.getOptimizeDeps)("build");
	var { rolldownOptions: _rolldownOptions, ...optimizeDepsNoRolldown } = optimizeDeps;
	var serverOpts = (_oneOptions_build4 = oneOptions.build) === null || _oneOptions_build4 === void 0 ? void 0 : _oneOptions_build4.server;
	var isUnified = typeof serverOpts === "object" && serverOpts !== null && serverOpts.unified === true;
	var baseForApi = isUnified ? clonePluginHooks((_vxrnOutput_serverBuildConfig = vxrnOutput.serverBuildConfig) !== null && _vxrnOutput_serverBuildConfig !== void 0 ? _vxrnOutput_serverBuildConfig : vxrnOutput.webBuildConfig) : clonePluginHooks(vxrnOutput.webBuildConfig);
	if (isUnified) {
		var clone = {
			...baseForApi,
			build: baseForApi.build ? { ...baseForApi.build } : void 0,
			plugins: baseForApi.plugins ? baseForApi.plugins.filter(function(p) {
				return p && typeof p === "object" && p.name !== "omit-api-routes";
			}) : void 0
		};
		if (clone.build && clone.build.rolldownOptions) {
			var ro = { ...clone.build.rolldownOptions };
			delete ro.input;
			clone.build.rolldownOptions = ro;
		}
		if (clone.build) {
			delete clone.build.outDir;
		}
		baseForApi = clone;
	}
	var apiBuildConfig = (0, import_vite.mergeConfig)(baseForApi, {
		configFile: false,
		appType: "custom",
		optimizeDeps: optimizeDepsNoRolldown,
		environments: { client: { optimizeDeps: { rolldownOptions: _rolldownOptions } } }
	});
	async function buildCustomRoutes(subFolder, routes) {
		var _ref2;
		var _oneOptions_build_api, _oneOptions_build6, _oneOptions_build_api1, _oneOptions_build12, _oneOptions_build_api2, _oneOptions_build22;
		var input = routes.reduce(function(entries, param) {
			var { page, file: file2 } = param;
			entries[page.slice(1) + ".js"] = (0, import_path.join)(routerRoot, file2);
			return entries;
		}, {});
		var outputFormat = (_ref2 = oneOptions === null || oneOptions === void 0 ? void 0 : (_oneOptions_build6 = oneOptions.build) === null || _oneOptions_build6 === void 0 ? void 0 : (_oneOptions_build_api = _oneOptions_build6.api) === null || _oneOptions_build_api === void 0 ? void 0 : _oneOptions_build_api.outputFormat) !== null && _ref2 !== void 0 ? _ref2 : serverOutputFormat;
		var treeshake = oneOptions === null || oneOptions === void 0 ? void 0 : (_oneOptions_build12 = oneOptions.build) === null || _oneOptions_build12 === void 0 ? void 0 : (_oneOptions_build_api1 = _oneOptions_build12.api) === null || _oneOptions_build_api1 === void 0 ? void 0 : _oneOptions_build_api1.treeshake;
		var mergedConfig = (0, import_vite.mergeConfig)(apiBuildConfig, {
			appType: "custom",
			configFile: false,
			define: vxrnOutput.processEnvDefines,
			ssr: isUnified ? { optimizeDeps: optimizeDepsNoRolldown } : {
				noExternal: true,
				external: ["react", "react-dom"],
				optimizeDeps: optimizeDepsNoRolldown
			},
			environments: { ssr: { optimizeDeps: { rolldownOptions: _rolldownOptions } } },
			build: {
				ssr: true,
				emptyOutDir: false,
				outDir: `${outDir}/${subFolder}`,
				copyPublicDir: false,
				minify: false,
				rolldownOptions: {
					treeshake: treeshake !== null && treeshake !== void 0 ? treeshake : { moduleSideEffects: false },
					plugins: [outputFormat === "esm" ? import_vxrn.rollupRemoveUnusedImportsPlugin : null].filter(Boolean),
					preserveEntrySignatures: "strict",
					input,
					...isUnified ? {} : { external: [] },
					output: {
						entryFileNames: "[name]",
						exports: "auto",
						...outputFormat === "esm" ? {
							format: "esm",
							esModule: true
						} : {
							format: "cjs",
							entryFileNames: function entryFileNames(chunkInfo) {
								var name = chunkInfo.name.replace(/\.js$/, ".cjs");
								return name;
							},
							chunkFileNames: function chunkFileNames(chunkInfo) {
								var chunkName = (0, import_vite.normalizePath)(chunkInfo.name);
								var dir = import_path.posix.dirname(chunkName);
								var name = import_path.posix.basename(chunkName, import_path.posix.extname(chunkName));
								return import_path.posix.join(dir, `${name}-[hash].cjs`);
							},
							assetFileNames: function assetFileNames(assetInfo) {
								var _assetInfo_name;
								var assetName = (0, import_vite.normalizePath)((_assetInfo_name = assetInfo.name) !== null && _assetInfo_name !== void 0 ? _assetInfo_name : "");
								var dir = import_path.posix.dirname(assetName);
								var baseName = import_path.posix.basename(assetName, import_path.posix.extname(assetName));
								var ext = import_path.posix.extname(assetName);
								return import_path.posix.join(dir, `${baseName}-[hash]${ext}`);
							}
						}
					}
				}
			}
		});
		var userApiBuildConf = (_oneOptions_build22 = oneOptions.build) === null || _oneOptions_build22 === void 0 ? void 0 : (_oneOptions_build_api2 = _oneOptions_build22.api) === null || _oneOptions_build_api2 === void 0 ? void 0 : _oneOptions_build_api2.config;
		var finalApiBuildConf = userApiBuildConf ? (0, import_vite.mergeConfig)(mergedConfig, userApiBuildConf) : mergedConfig;
		var output3 = await (0, import_vite.build)(finalApiBuildConf);
		return output3;
	}
	var builtMiddlewares = {};
	var apiPromise = manifest.apiRoutes.length ? (console.info(`
 \u{1F528} build api routes
`), buildCustomRoutes("api", manifest.apiRoutes)) : Promise.resolve(null);
	var middlewarePromise = manifest.middlewareRoutes.length ? (console.info(`
 \u{1F528} build middlewares
`), buildCustomRoutes("middlewares", manifest.middlewareRoutes)) : Promise.resolve(null);
	var [apiOutput, middlewareBuildInfo] = await Promise.all([apiPromise, middlewarePromise]);
	if (middlewareBuildInfo) {
		var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
		try {
			var _loop = function() {
				var middleware = _step.value;
				var absoluteRoot = (0, import_path.resolve)(process.cwd(), options.root);
				var fullPath = (0, import_vite.normalizePath)((0, import_path.join)(absoluteRoot, routerRoot, middleware.file));
				var outChunks = middlewareBuildInfo.output.filter(function(x) {
					return x.type === "chunk";
				});
				var chunk2 = outChunks.find(function(x) {
					return x.facadeModuleId === fullPath;
				});
				if (!chunk2) throw new Error(`internal err finding middleware`);
				builtMiddlewares[middleware.file] = import_path.posix.join(outDir, "middlewares", chunk2.fileName);
			};
			for (var _iterator = manifest.middlewareRoutes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop();
		} catch (err) {
			_didIteratorError = true;
			_iteratorError = err;
		} finally {
			try {
				if (!_iteratorNormalCompletion && _iterator.return != null) {
					_iterator.return();
				}
			} finally {
				if (_didIteratorError) {
					throw _iteratorError;
				}
			}
		}
	}
	globalThis["require"] = (0, import_module.createRequire)(import_meta.dirname + "/");
	var assets = [];
	var builtRoutes = [];
	var sitemapData = [];
	var collectImportsCache = /* @__PURE__ */ new Map();
	var collectImportsInFlight = /* @__PURE__ */ new Set();
	var cssFileContentsCache = /* @__PURE__ */ new Map();
	var criticalCSSOutputPaths = (0, import_criticalCSSPlugin.getCriticalCSSOutputPaths)(vxrnOutput.clientManifest);
	var limit = (0, import_pLimit.pLimit)(buildConcurrency);
	var useWorkers = shouldUseWorkers(oneOptions);
	var workerPool = useWorkers ? (0, import_workerPool.getWorkerPool)(buildConcurrency) : null;
	if (workerPool) {
		var serializableOptions = JSON.parse(JSON.stringify(oneOptions, function(_key, value) {
			return typeof value === "function" ? void 0 : value;
		}));
		await workerPool.initialize(serializableOptions);
	}
	var staticStartTime = performance.now();
	var modeLabel = useWorkers ? `workers: ${workerPool === null || workerPool === void 0 ? void 0 : workerPool.size}` : `concurrency: ${buildConcurrency}`;
	console.info(`
 \u{1F528} build static routes (${modeLabel})
`);
	var staticDir = (0, import_path.join)(`${outDir}/static`);
	var clientDir = (0, import_path.join)(`${outDir}/client`);
	await ensureDir(staticDir);
	if (!vxrnOutput.serverOutput) {
		throw new Error(`No server output`);
	}
	var clientChunksBySource = /* @__PURE__ */ new Map();
	if (vxrnOutput.clientOutput) {
		var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
		try {
			for (var _iterator1 = vxrnOutput.clientOutput[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
				var chunk = _step1.value;
				var _chunk_moduleIds;
				if (chunk.type !== "chunk") continue;
				var info = {
					fileName: chunk.fileName,
					imports: chunk.imports || []
				};
				var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
				try {
					for (var _iterator2 = ((_chunk_moduleIds = chunk.moduleIds) !== null && _chunk_moduleIds !== void 0 ? _chunk_moduleIds : [])[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
						var moduleId = _step2.value;
						clientChunksBySource.set(moduleId, info);
					}
				} catch (err) {
					_didIteratorError2 = true;
					_iteratorError2 = err;
				} finally {
					try {
						if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
							_iterator2.return();
						}
					} finally {
						if (_didIteratorError2) {
							throw _iteratorError2;
						}
					}
				}
			}
		} catch (err) {
			_didIteratorError1 = true;
			_iteratorError1 = err;
		} finally {
			try {
				if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
					_iterator1.return();
				}
			} finally {
				if (_didIteratorError1) {
					throw _iteratorError1;
				}
			}
		}
		var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;
		try {
			for (var _iterator3 = vxrnOutput.clientOutput[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
				var chunk1 = _step3.value;
				if (chunk1.type !== "chunk" || !chunk1.facadeModuleId) continue;
				clientChunksBySource.set(chunk1.facadeModuleId, {
					fileName: chunk1.fileName,
					imports: chunk1.imports || []
				});
			}
		} catch (err) {
			_didIteratorError3 = true;
			_iteratorError3 = err;
		} finally {
			try {
				if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
					_iterator3.return();
				}
			} finally {
				if (_didIteratorError3) {
					throw _iteratorError3;
				}
			}
		}
	}
	var clientManifestByFile = /* @__PURE__ */ new Map();
	var _iteratorNormalCompletion4 = true, _didIteratorError4 = false, _iteratorError4 = void 0;
	try {
		for (var _iterator4 = Object.values(vxrnOutput.clientManifest)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
			var entry = _step4.value;
			if (entry.file) {
				clientManifestByFile.set(entry.file, entry);
			}
		}
	} catch (err) {
		_didIteratorError4 = true;
		_iteratorError4 = err;
	} finally {
		try {
			if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
				_iterator4.return();
			}
		} finally {
			if (_didIteratorError4) {
				throw _iteratorError4;
			}
		}
	}
	var outputEntries = [...vxrnOutput.serverOutput.entries()];
	var layoutServerPaths = /* @__PURE__ */ new Map();
	var _iteratorNormalCompletion5 = true, _didIteratorError5 = false, _iteratorError5 = void 0;
	try {
		for (var _iterator5 = outputEntries[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
			var [, output] = _step5.value;
			if (output.type === "asset") continue;
			var id = output.facadeModuleId || "";
			var file = import_path.default.basename(id);
			if (file.startsWith("_layout") && id.includes(`/${routerRoot}/`)) {
				var relativePath = (0, import_vite.normalizePath)((0, import_path.relative)(process.cwd(), id)).replace(`${routerRoot}/`, "");
				var contextKey = `./${relativePath}`;
				layoutServerPaths.set(contextKey, output.fileName);
			}
		}
	} catch (err) {
		_didIteratorError5 = true;
		_iteratorError5 = err;
	} finally {
		try {
			if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
				_iterator5.return();
			}
		} finally {
			if (_didIteratorError5) {
				throw _iteratorError5;
			}
		}
	}
	var routeByPath = /* @__PURE__ */ new Map();
	var _iteratorNormalCompletion6 = true, _didIteratorError6 = false, _iteratorError6 = void 0;
	try {
		for (var _iterator6 = manifest.pageRoutes[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
			var route = _step6.value;
			if (route.file) {
				var routePath = `${routerRoot}${route.file.slice(1)}`;
				routeByPath.set(routePath, route);
			}
		}
	} catch (err) {
		_didIteratorError6 = true;
		_iteratorError6 = err;
	} finally {
		try {
			if (!_iteratorNormalCompletion6 && _iterator6.return != null) {
				_iterator6.return();
			}
		} finally {
			if (_didIteratorError6) {
				throw _iteratorError6;
			}
		}
	}
	var _iteratorNormalCompletion7 = true, _didIteratorError7 = false, _iteratorError7 = void 0;
	try {
		for (var _iterator7 = outputEntries[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
			var [, output1] = _step7.value;
			if (output1.type === "asset") {
				assets.push(output1);
			}
		}
	} catch (err) {
		_didIteratorError7 = true;
		_iteratorError7 = err;
	} finally {
		try {
			if (!_iteratorNormalCompletion7 && _iterator7.return != null) {
				_iterator7.return();
			}
		} finally {
			if (_didIteratorError7) {
				throw _iteratorError7;
			}
		}
	}
	var moduleIdToServerChunk = /* @__PURE__ */ new Map();
	var _iteratorNormalCompletion8 = true, _didIteratorError8 = false, _iteratorError8 = void 0;
	try {
		for (var _iterator8 = outputEntries[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
			var [, output2] = _step8.value;
			if (output2.type === "asset") continue;
			var moduleIds = output2.moduleIds || (output2.facadeModuleId ? [output2.facadeModuleId] : []);
			var _iteratorNormalCompletion9 = true, _didIteratorError9 = false, _iteratorError9 = void 0;
			try {
				for (var _iterator9 = moduleIds[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {
					var moduleId1 = _step9.value;
					moduleIdToServerChunk.set(moduleId1, output2.fileName);
					if (moduleId1.includes("?one-spa-build")) {
						moduleIdToServerChunk.set(moduleId1.slice(0, moduleId1.indexOf("?")), output2.fileName);
					}
				}
			} catch (err) {
				_didIteratorError9 = true;
				_iteratorError9 = err;
			} finally {
				try {
					if (!_iteratorNormalCompletion9 && _iterator9.return != null) {
						_iterator9.return();
					}
				} finally {
					if (_didIteratorError9) {
						throw _iteratorError9;
					}
				}
			}
		}
	} catch (err) {
		_didIteratorError8 = true;
		_iteratorError8 = err;
	} finally {
		try {
			if (!_iteratorNormalCompletion8 && _iterator8.return != null) {
				_iterator8.return();
			}
		} finally {
			if (_didIteratorError8) {
				throw _iteratorError8;
			}
		}
	}
	var _iteratorNormalCompletion10 = true, _didIteratorError10 = false, _iteratorError10 = void 0;
	try {
		var _loop1 = async function() {
			var foundRoute = _step10.value;
			var _vxrnOutput_clientManifest_manifestKey, _ref2, _ref12, _ref22;
			var _vxrnOutput_buildArgs, _foundRoute_layouts, _oneOptions_web3, _oneOptions_web12, _exported_generateStaticParams;
			if (!foundRoute.file) {
				return "continue";
			}
			var routeModulePath = (0, import_vite.normalizePath)((0, import_path.join)((0, import_path.resolve)(process.cwd(), options.root), routerRoot, foundRoute.file.slice(2)));
			var serverFileName = moduleIdToServerChunk.get(routeModulePath);
			if (!serverFileName) {
				if (foundRoute.type === "spa") {
					throw new Error(`[one] No build-only server chunk for SPA route: ${foundRoute.file}`);
				}
				console.warn(`[one] No server chunk found for route: ${foundRoute.file}`);
				return "continue";
			}
			var onlyBuild = (_vxrnOutput_buildArgs = vxrnOutput.buildArgs) === null || _vxrnOutput_buildArgs === void 0 ? void 0 : _vxrnOutput_buildArgs.only;
			if (onlyBuild) {
				var relativeId = foundRoute.file.slice(1);
				if (!import_micromatch.default.contains(relativeId, onlyBuild)) {
					return "continue";
				}
			}
			var clientChunk = clientChunksBySource.get(routeModulePath);
			var manifestKey = `${routerRoot}${foundRoute.file.slice(1)}`;
			var clientManifestEntry = (_vxrnOutput_clientManifest_manifestKey = vxrnOutput.clientManifest[manifestKey]) !== null && _vxrnOutput_clientManifest_manifestKey !== void 0 ? _vxrnOutput_clientManifest_manifestKey : clientChunk ? clientManifestByFile.get(clientChunk.fileName) : void 0;
			if (!clientChunk && foundRoute.type !== "spa" && foundRoute.type !== "ssg") {
				console.warn(`No client chunk found for route: ${routeModulePath}`);
				return "continue";
			}
			foundRoute.loaderServerPath = serverFileName;
			var relativeId1 = foundRoute.file.replace(/^\.\//, "/");
			if (foundRoute.layouts) {
				var _iteratorNormalCompletion14 = true, _didIteratorError14 = false, _iteratorError14 = void 0;
				try {
					for (var _iterator14 = foundRoute.layouts[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {
						var layout = _step14.value;
						var serverPath = layoutServerPaths.get(layout.contextKey);
						if (serverPath) {
							layout.loaderServerPath = serverPath;
						}
					}
				} catch (err) {
					_didIteratorError14 = true;
					_iteratorError14 = err;
				} finally {
					try {
						if (!_iteratorNormalCompletion14 && _iterator14.return != null) {
							_iterator14.return();
						}
					} finally {
						if (_didIteratorError14) {
							throw _iteratorError14;
						}
					}
				}
			}
			function collectImports(entry3) {
				var { type = "js" } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
				var { imports = [], css } = entry3;
				var cacheKey = `${entry3.file || imports.join(",")}:${type}`;
				var cached = collectImportsCache.get(cacheKey);
				if (cached) return cached;
				if (collectImportsInFlight.has(cacheKey)) return [];
				collectImportsInFlight.add(cacheKey);
				var result = [...new Set([...type === "js" ? imports : css || [], ...imports.flatMap(function(name) {
					var found = vxrnOutput.clientManifest[name];
					if (!found) {
						console.warn(`No found imports`, name, vxrnOutput.clientManifest);
					}
					return collectImports(found, { type });
				})].flat().filter(function(x) {
					return x && (type === "css" || x.endsWith(".js"));
				}).map(function(x) {
					return type === "css" ? x : x.startsWith("assets/") ? x : `assets/${x.slice(1)}`;
				}))];
				collectImportsInFlight.delete(cacheKey);
				collectImportsCache.set(cacheKey, result);
				return result;
			}
			var entryImports = collectImports(clientManifestEntry || {});
			var layoutEntries = (_ref2 = (_foundRoute_layouts = foundRoute.layouts) === null || _foundRoute_layouts === void 0 ? void 0 : _foundRoute_layouts.flatMap(function(layout2) {
				var clientKey2 = `${routerRoot}${layout2.contextKey.slice(1)}`;
				var found = vxrnOutput.clientManifest[clientKey2];
				return found ? found : [];
			})) !== null && _ref2 !== void 0 ? _ref2 : [];
			var layoutImports = layoutEntries.flatMap(function(entry3) {
				return [entry3.file, ...collectImports(entry3)];
			});
			var routePreloads = {};
			var rootLayoutKey = `${routerRoot}/_layout.tsx`;
			var rootLayoutEntry = vxrnOutput.clientManifest[rootLayoutKey];
			if (rootLayoutEntry) {
				routePreloads[`/${rootLayoutKey}`] = `/${rootLayoutEntry.file}`;
			}
			if (foundRoute.layouts) {
				var _iteratorNormalCompletion15 = true, _didIteratorError15 = false, _iteratorError15 = void 0;
				try {
					for (var _iterator15 = foundRoute.layouts[Symbol.iterator](), _step15; !(_iteratorNormalCompletion15 = (_step15 = _iterator15.next()).done); _iteratorNormalCompletion15 = true) {
						var layout1 = _step15.value;
						var clientKey = `${routerRoot}${layout1.contextKey.slice(1)}`;
						var entry2 = vxrnOutput.clientManifest[clientKey];
						if (entry2) {
							routePreloads[`/${clientKey}`] = `/${entry2.file}`;
						}
					}
				} catch (err) {
					_didIteratorError15 = true;
					_iteratorError15 = err;
				} finally {
					try {
						if (!_iteratorNormalCompletion15 && _iterator15.return != null) {
							_iterator15.return();
						}
					} finally {
						if (_didIteratorError15) {
							throw _iteratorError15;
						}
					}
				}
			}
			var routeChunkFile = (_ref12 = clientChunk === null || clientChunk === void 0 ? void 0 : clientChunk.fileName) !== null && _ref12 !== void 0 ? _ref12 : clientManifestEntry === null || clientManifestEntry === void 0 ? void 0 : clientManifestEntry.file;
			if (routeChunkFile) {
				routePreloads[`/${routerRoot}${foundRoute.file.slice(1)}`] = `/${routeChunkFile}`;
			}
			var preloadSetupFilePreloads = (function() {
				if (!oneOptions.setupFile) return [];
				var clientSetupFile = typeof oneOptions.setupFile === "string" ? oneOptions.setupFile : oneOptions.setupFile.client;
				if (!clientSetupFile) return [];
				var needle = clientSetupFile.replace(/^\.\//, "");
				for (var file2 in vxrnOutput.clientManifest) {
					if (file2 === needle) {
						var entry3 = vxrnOutput.clientManifest[file2];
						return [entry3.file];
					}
				}
				return [];
			})();
			var allPreloads = [.../* @__PURE__ */ new Set([
				...preloadSetupFilePreloads,
				...clientChunk ? [clientChunk.fileName] : clientManifestEntry ? [clientManifestEntry.file] : [],
				vxrnOutput.clientManifest["virtual:one-entry"].file,
				...entryImports,
				...layoutImports
			])].map(function(path2) {
				return `/${path2}`;
			});
			var scriptLoadingMode = (_oneOptions_web3 = oneOptions.web) === null || _oneOptions_web3 === void 0 ? void 0 : _oneOptions_web3.experimental_scriptLoading;
			var useDeferredLoading = scriptLoadingMode === "defer-non-critical";
			var useAggressiveLCP = scriptLoadingMode === "after-lcp-aggressive";
			var needsSeparatedPreloads = useDeferredLoading || useAggressiveLCP;
			var criticalPreloads = needsSeparatedPreloads ? [.../* @__PURE__ */ new Set([
				...preloadSetupFilePreloads,
				vxrnOutput.clientManifest["virtual:one-entry"].file,
				...clientChunk ? [clientChunk.fileName] : clientManifestEntry ? [clientManifestEntry.file] : [],
				...layoutEntries.map(function(entry3) {
					return entry3.file;
				})
			])].map(function(path2) {
				return `/${path2}`;
			}) : void 0;
			var deferredPreloads = needsSeparatedPreloads ? [.../* @__PURE__ */ new Set([...entryImports, ...layoutEntries.flatMap(function(entry3) {
				return collectImports(entry3);
			})])].filter(function(path2) {
				return !criticalPreloads.includes(`/${path2}`);
			}).map(function(path2) {
				return `/${path2}`;
			}) : void 0;
			var preloads2 = needsSeparatedPreloads ? [...criticalPreloads, ...deferredPreloads] : allPreloads;
			var allEntries = [clientManifestEntry, ...layoutEntries].filter(Boolean);
			var layoutCSS = [...new Set(layoutEntries.flatMap(function(entry3) {
				return collectImports(entry3, { type: "css" });
			}).map(function(path2) {
				return `/${path2}`;
			}))];
			var allCSS = [.../* @__PURE__ */ new Set([
				...layoutCSS,
				...clientManifestEntry ? collectImports(clientManifestEntry, { type: "css" }).map(function(path2) {
					return `/${path2}`;
				}) : [],
				...Object.entries(vxrnOutput.clientManifest).filter(function(param) {
					var [key, entry3] = param;
					if (!key.endsWith(".css")) return false;
					var src = entry3.src;
					return src === "style.css";
				}).map(function(param) {
					var [, entry3] = param;
					return `/${entry3.file}`;
				})
			])];
			var hasCriticalCSS = allCSS.some(function(p) {
				return criticalCSSOutputPaths.has(p);
			});
			var needsCSSContents = ((_oneOptions_web12 = oneOptions.web) === null || _oneOptions_web12 === void 0 ? void 0 : _oneOptions_web12.inlineLayoutCSS) || hasCriticalCSS;
			var allCSSContents = void 0;
			if (needsCSSContents) {
				allCSSContents = await Promise.all(allCSS.map(async function(cssPath) {
					var _oneOptions_web4;
					if (!((_oneOptions_web4 = oneOptions.web) === null || _oneOptions_web4 === void 0 ? void 0 : _oneOptions_web4.inlineLayoutCSS) && !criticalCSSOutputPaths.has(cssPath)) {
						return "";
					}
					var cached = cssFileContentsCache.get(cssPath);
					if (cached !== void 0) return cached;
					var filePath = (0, import_path.join)(clientDir, cssPath);
					try {
						var content = await import_fs_extra.default.readFile(filePath, "utf-8");
						cssFileContentsCache.set(cssPath, content);
						return content;
					} catch (err) {
						console.warn(`[one] Warning: Could not read CSS file ${filePath}`);
						cssFileContentsCache.set(cssPath, "");
						return "";
					}
				}));
			}
			if (process.env.DEBUG) {
				console.info("[one] building routes", {
					foundRoute,
					layoutEntries,
					allEntries,
					allCSS
				});
			}
			var serverJsPath = import_path.posix.join(outDir, "server", serverFileName);
			var exported = void 0;
			try {
				exported = await (0, import_serverRouteModules.getRouteExports)(vxrnOutput.serverEntry, routerRoot, foundRoute.file);
			} catch (err) {
				console.error(`Error importing page (original error)`, err);
				throw new Error(`Error importing page: ${foundRoute.file}`, { cause: err });
			}
			foundRoute.hasLoader = typeof exported.loader === "function";
			var isDynamic = !!Object.keys(foundRoute.routeKeys).length;
			if (foundRoute.type === "ssg" && isDynamic && !foundRoute.page.includes("+not-found") && !foundRoute.page.includes("_sitemap") && !exported.generateStaticParams) {
				throw new Error(`[one] Error: Missing generateStaticParams

  Route ${foundRoute.page} of type ${foundRoute.type} must export generateStaticParams so build can complete.

  See docs on generateStaticParams:
    https://onestack.dev/docs/routing-exports#generatestaticparams

`);
			}
			var paramsList = (_ref22 = await ((_exported_generateStaticParams = exported.generateStaticParams) === null || _exported_generateStaticParams === void 0 ? void 0 : _exported_generateStaticParams.call(exported))) !== null && _ref22 !== void 0 ? _ref22 : [{}];
			console.info(`
 [build] page ${relativeId1} (with ${paramsList.length} routes)
`);
			if (process.env.DEBUG) {
				console.info(`paramsList`, JSON.stringify(paramsList, null, 2));
			}
			var routeSitemapExport = exported.sitemap;
			var isAfterLCPMode = scriptLoadingMode === "after-lcp" || scriptLoadingMode === "after-lcp-aggressive";
			var useAfterLCP = foundRoute.type === "ssg" && isAfterLCPMode;
			var useAfterLCPAggressive = foundRoute.type === "ssg" && scriptLoadingMode === "after-lcp-aggressive";
			var shouldCollectSitemap = foundRoute.type !== "api" && foundRoute.type !== "layout" && !foundRoute.isNotFound && !foundRoute.page.includes("+not-found") && !foundRoute.page.includes("_sitemap");
			var pageBuilds = paramsList.map(function(params) {
				var path2 = (0, import_getPathnameFromFilePath.getPathnameFromFilePath)(relativeId1, params, foundRoute.type === "ssg");
				if (workerPool) {
					console.info(`  \u21A6 route ${path2}`);
					return workerPool.buildPage({
						serverEntry: vxrnOutput.serverEntry,
						routerRoot,
						path: path2,
						relativeId: relativeId1,
						params,
						foundRoute,
						clientManifestEntry,
						staticDir,
						clientDir,
						builtMiddlewares,
						serverJsPath,
						preloads: preloads2,
						allCSS,
						layoutCSS,
						routePreloads,
						allCSSContents,
						criticalPreloads,
						deferredPreloads,
						useAfterLCP,
						useAfterLCPAggressive
					}).then(function(built2) {
						return {
							built: built2,
							path: path2
						};
					});
				}
				return limit(async function() {
					console.info(`  \u21A6 route ${path2}`);
					var built2 = await (0, import_one_server_only.runWithAsyncLocalContext)(async function() {
						return await (0, import_buildPage.buildPage)(vxrnOutput.serverEntry, routerRoot, path2, relativeId1, params, foundRoute, clientManifestEntry, staticDir, clientDir, builtMiddlewares, serverJsPath, preloads2, allCSS, layoutCSS, routePreloads, allCSSContents, criticalPreloads, deferredPreloads, useAfterLCP, useAfterLCPAggressive);
					});
					return {
						built: built2,
						path: path2
					};
				});
			});
			var results = await Promise.all(pageBuilds);
			var _iteratorNormalCompletion22 = true, _didIteratorError22 = false, _iteratorError22 = void 0;
			try {
				for (var _iterator22 = results[Symbol.iterator](), _step22; !(_iteratorNormalCompletion22 = (_step22 = _iterator22.next()).done); _iteratorNormalCompletion22 = true) {
					var { built, path } = _step22.value;
					builtRoutes.push(built);
					if (shouldCollectSitemap) {
						sitemapData.push({
							path,
							routeExport: routeSitemapExport
						});
					}
				}
			} catch (err) {
				_didIteratorError22 = true;
				_iteratorError22 = err;
			} finally {
				try {
					if (!_iteratorNormalCompletion22 && _iterator22.return != null) {
						_iterator22.return();
					}
				} finally {
					if (_didIteratorError22) {
						throw _iteratorError22;
					}
				}
			}
		};
		for (var _iterator10 = manifest.pageRoutes[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) await _loop1();
	} catch (err) {
		_didIteratorError10 = true;
		_iteratorError10 = err;
	} finally {
		try {
			if (!_iteratorNormalCompletion10 && _iterator10.return != null) {
				_iterator10.return();
			}
		} finally {
			if (_didIteratorError10) {
				throw _iteratorError10;
			}
		}
	}
	if (workerPool) {
		await (0, import_workerPool.terminateWorkerPool)();
	}
	var staticTime = performance.now() - staticStartTime;
	console.info(`
 \u23F1\uFE0F static routes: ${(staticTime / 1e3).toFixed(2)}s (${builtRoutes.length} pages)
`);
	(0, import_buildPage.printBuildTimings)();
	await moveAllFiles(staticDir, clientDir);
	await import_fs_extra.default.remove(staticDir);
	var routeMap = {};
	var routeToBuildInfo = {};
	var pathToRoute = {};
	var preloads = {};
	var cssPreloads = {};
	var loaders = {};
	var cssContentsByPath;
	var _iteratorNormalCompletion11 = true, _didIteratorError11 = false, _iteratorError11 = void 0;
	try {
		var _loop2 = function() {
			var route2 = _step11.value;
			if (!route2.cleanPath.includes("*")) {
				routeMap[route2.cleanPath] = route2.htmlPath;
			}
			var { loaderData: _loaderData, cssContents, ...rest } = route2;
			if (cssContents) {
				var contentsByPath = cssContentsByPath || (cssContentsByPath = {});
				route2.css.forEach(function(cssPath, index) {
					var content = cssContents[index];
					if (content) contentsByPath[cssPath] = content;
				});
			}
			routeToBuildInfo[route2.routeFile] = rest;
			var _iteratorNormalCompletion14 = true, _didIteratorError14 = false, _iteratorError14 = void 0;
			try {
				for (var _iterator14 = getCleanPaths([route2.path, route2.cleanPath])[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {
					var p = _step14.value;
					pathToRoute[p] = route2.routeFile;
				}
			} catch (err) {
				_didIteratorError14 = true;
				_iteratorError14 = err;
			} finally {
				try {
					if (!_iteratorNormalCompletion14 && _iterator14.return != null) {
						_iterator14.return();
					}
				} finally {
					if (_didIteratorError14) {
						throw _iteratorError14;
					}
				}
			}
			preloads[route2.preloadPath] = true;
			cssPreloads[route2.cssPreloadPath] = true;
			loaders[route2.loaderPath] = true;
		};
		for (var _iterator11 = builtRoutes[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) _loop2();
	} catch (err) {
		_didIteratorError11 = true;
		_iteratorError11 = err;
	} finally {
		try {
			if (!_iteratorNormalCompletion11 && _iterator11.return != null) {
				_iterator11.return();
			}
		} finally {
			if (_didIteratorError11) {
				throw _iteratorError11;
			}
		}
	}
	function createBuildManifestRoute(route2) {
		var { layouts, ...built } = route2;
		if (layouts === null || layouts === void 0 ? void 0 : layouts.length) {
			;
			built.layouts = layouts.map(function(layout) {
				return {
					contextKey: layout.contextKey,
					loaderServerPath: layout.loaderServerPath
				};
			});
		}
		var buildInfo = builtRoutes.find(function(x) {
			return x.routeFile === route2.file;
		});
		if (built.middlewares) {
			var _iteratorNormalCompletion14 = true, _didIteratorError14 = false, _iteratorError14 = void 0;
			try {
				for (var _iterator14 = built.middlewares.entries()[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {
					var [index, mw] = _step14.value;
					var _buildInfo_middlewares;
					var viaBuildInfo = buildInfo === null || buildInfo === void 0 ? void 0 : (_buildInfo_middlewares = buildInfo.middlewares) === null || _buildInfo_middlewares === void 0 ? void 0 : _buildInfo_middlewares[index];
					if (viaBuildInfo) {
						mw.contextKey = viaBuildInfo;
						continue;
					}
					var viaMiddlewareMap = builtMiddlewares[mw.contextKey];
					if (viaMiddlewareMap) {
						mw.contextKey = viaMiddlewareMap;
					}
				}
			} catch (err) {
				_didIteratorError14 = true;
				_iteratorError14 = err;
			} finally {
				try {
					if (!_iteratorNormalCompletion14 && _iterator14.return != null) {
						_iterator14.return();
					}
				} finally {
					if (_didIteratorError14) {
						throw _iteratorError14;
					}
				}
			}
		}
		if (buildInfo) {
			built.loaderPath = buildInfo.loaderPath;
		}
		return built;
	}
	var buildInfoForWriting = {
		outDir,
		oneOptions,
		routeToBuildInfo,
		cssContentsByPath,
		pathToRoute,
		manifest: {
			pageRoutes: manifest.pageRoutes.map(createBuildManifestRoute),
			apiRoutes: manifest.apiRoutes.map(createBuildManifestRoute),
			allRoutes: manifest.allRoutes.map(createBuildManifestRoute)
		},
		routeMap,
		constants: JSON.parse(JSON.stringify({ ...constants })),
		preloads,
		cssPreloads,
		loaders,
		useRolldown: await (0, import_isRolldown.isRolldown)()
	};
	await writeJSON((0, import_toAbsolute.toAbsolute)(`${outDir}/buildInfo.json`), buildInfoForWriting);
	await (0, import_buildOutputPointer.writeBuildOutputPointer)(outDir);
	await import_fs_extra.default.writeFile((0, import_path.join)(clientDir, "version.json"), JSON.stringify({ version: constants.CACHE_KEY }));
	console.info(`
 \u{1F6E1} skew protection: emitted version.json
`);
	var sitemapConfig = (_oneOptions_web2 = oneOptions.web) === null || _oneOptions_web2 === void 0 ? void 0 : _oneOptions_web2.sitemap;
	if (sitemapConfig) {
		var sitemapOptions = typeof sitemapConfig === "boolean" ? {} : sitemapConfig;
		var sitemapXml = (0, import_generateSitemap.generateSitemap)(sitemapData, sitemapOptions);
		var sitemapPath = (0, import_path.join)(clientDir, "sitemap.xml");
		await import_fs_extra.default.writeFile(sitemapPath, sitemapXml);
		console.info(`
 \u{1F4C4} generated sitemap.xml (${sitemapData.length} URLs)
`);
	}
	var postBuildLogs = [];
	var platform = deployConfig === null || deployConfig === void 0 ? void 0 : deployConfig.target;
	if (platform) {
		postBuildLogs.push(`[one.build] platform ${platform}`);
	}
	switch (platform) {
		case "vercel": {
			var vercelJsonPath = (0, import_path.join)(options.root, "vercel.json");
			if (import_fs_extra.default.existsSync(vercelJsonPath)) {
				try {
					var vercelConfig = JSON.parse(import_fs_extra.default.readFileSync(vercelJsonPath, "utf-8"));
					if (!vercelConfig.cleanUrls) {
						console.warn(`
 \u26A0\uFE0F  Warning: Your vercel.json is missing "cleanUrls": true`);
						console.warn(`    Without this, direct navigation to SSG pages will 404.`);
						console.warn(`    Add "cleanUrls": true to your vercel.json to fix this.
`);
					}
				} catch (unused) {}
			}
			await (0, import_buildVercelOutputDirectory.buildVercelOutputDirectory)({
				apiOutput,
				buildInfoForWriting,
				clientDir,
				oneOptionsRoot: options.root,
				postBuildLogs
			});
			break;
		}
		case "cloudflare": {
			var _viteLoadedConfig_config_ssr, _viteLoadedConfig_config1;
			var workerSrcDir = (0, import_path.join)(options.root, outDir);
			var getWorkerSourceImportPath = function getWorkerSourceImportPath2(routeFile) {
				var importPath2 = (0, import_vite.normalizePath)((0, import_path.relative)(workerSrcDir, (0, import_path.join)(options.root, routerRoot, routeFile)));
				return importPath2.startsWith(".") ? importPath2 : `./${importPath2}`;
			};
			var apiRouteMap = [];
			var middlewareRouteMap = [];
			var _iteratorNormalCompletion12 = true, _didIteratorError12 = false, _iteratorError12 = void 0;
			try {
				for (var _iterator12 = buildInfoForWriting.manifest.apiRoutes[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {
					var route1 = _step12.value;
					if (route1.file) {
						var importPath = getWorkerSourceImportPath(route1.file);
						apiRouteMap.push(`  '${route1.page}': () => import('${importPath}')`);
					}
				}
			} catch (err) {
				_didIteratorError12 = true;
				_iteratorError12 = err;
			} finally {
				try {
					if (!_iteratorNormalCompletion12 && _iterator12.return != null) {
						_iterator12.return();
					}
				} finally {
					if (_didIteratorError12) {
						throw _iteratorError12;
					}
				}
			}
			var _iteratorNormalCompletion13 = true, _didIteratorError13 = false, _iteratorError13 = void 0;
			try {
				for (var _iterator13 = Object.entries(builtMiddlewares)[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {
					var [sourceFile, builtPath] = _step13.value;
					var importPath1 = getWorkerSourceImportPath(sourceFile);
					middlewareRouteMap.push(`  '${builtPath}': () => import('${importPath1}')`);
				}
			} catch (err) {
				_didIteratorError13 = true;
				_iteratorError13 = err;
			} finally {
				try {
					if (!_iteratorNormalCompletion13 && _iterator13.return != null) {
						_iterator13.return();
					}
				} finally {
					if (_didIteratorError13) {
						throw _iteratorError13;
					}
				}
			}
			var workerSrcPath = (0, import_path.join)(options.root, outDir, "_worker-src.js");
			var workerCode = `// Polyfill MessageChannel for React SSR (not available in Cloudflare Workers by default)
if (typeof MessageChannel === 'undefined') {
  globalThis.MessageChannel = class MessageChannel {
    constructor() {
      this.port1 = { postMessage: () => {}, onmessage: null, close: () => {} }
      this.port2 = { postMessage: () => {}, onmessage: null, close: () => {} }
    }
  }
}

import { serve, setFetchStaticHtml, withRange } from 'one/serve-worker'

// Lazy import map - modules load on-demand when route is matched
const lazyRoutes = {
  serverEntry: () => import('./server/_virtual_one-entry.js'),
  api: {
${apiRouteMap.join(",\n")}
  },
  middlewares: {
${middlewareRouteMap.join(",\n")}
  }
}

const buildInfo = ${JSON.stringify(buildInfoForWriting)}

let server

export default {
  async fetch(request, env, ctx) {
    if (!server) {
      server = await serve(buildInfo, lazyRoutes)
    }

    // set up static HTML fetcher for this request (uses ASSETS binding)
    if (env.ASSETS) {
      setFetchStaticHtml(async (path) => {
        try {
          const url = new URL(request.url)
          url.pathname = path
          const assetResponse = await env.ASSETS.fetch(new Request(url))
          if (assetResponse && assetResponse.ok) {
            return await assetResponse.text()
          }
        } catch (e) {
          // asset not found
        }
        return null
      })
    }

    try {
      const response = await server.fetch(request, env, ctx)

      // no route matched or 404 \u2192 try static assets
      if (!response || response.status === 404) {
        if (env.ASSETS) {
          try {
            const assetResponse = await env.ASSETS.fetch(request)
            if (assetResponse && assetResponse.status !== 404) {
              return await withRange(request, assetResponse)
            }
          } catch (e) {
            // asset not found, continue with original response
          }
        }
      }

      return response
    } finally {
      setFetchStaticHtml(null)
    }
  }
}
`;
			await import_fs_extra.default.writeFile(workerSrcPath, workerCode);
			var projectName = await (0, import_cloudflareWranglerConfig.getCloudflareProjectName)(options.root);
			var userWranglerConfig = await (0, import_cloudflareWranglerConfig.loadUserWranglerConfig)(options.root);
			var wranglerInputConfig = (0, import_cloudflareWranglerConfig.createCloudflareWranglerConfig)(projectName, userWranglerConfig === null || userWranglerConfig === void 0 ? void 0 : userWranglerConfig.config);
			wranglerInputConfig.main = (0, import_vite.normalizePath)((0, import_path.relative)((0, import_path.join)(options.root, outDir), workerSrcPath));
			var wranglerInputPath = (0, import_path.join)(options.root, outDir, "_wrangler.input.jsonc");
			await import_fs_extra.default.writeFile(wranglerInputPath, `${JSON.stringify(wranglerInputConfig, null, 2)}
`);
			var ssrExternal = viteLoadedConfig === null || viteLoadedConfig === void 0 ? void 0 : (_viteLoadedConfig_config1 = viteLoadedConfig.config) === null || _viteLoadedConfig_config1 === void 0 ? void 0 : (_viteLoadedConfig_config_ssr = _viteLoadedConfig_config1.ssr) === null || _viteLoadedConfig_config_ssr === void 0 ? void 0 : _viteLoadedConfig_config_ssr.external;
			var workerExternals = Array.isArray(ssrExternal) ? ssrExternal : [];
			console.info("\n [cloudflare] Bundling worker...");
			var { cloudflare } = await import("@cloudflare/vite-plugin");
			var builder = await (0, import_vite.createBuilder)({
				root: options.root,
				mode: "production",
				logLevel: "warn",
				configFile: false,
				define: {
					"process.env.NODE_ENV": JSON.stringify("production"),
					"process.env.VITE_ENVIRONMENT": JSON.stringify("ssr"),
					"process.env.ONE_CACHE_KEY": JSON.stringify(constants.CACHE_KEY)
				},
				plugins: [(0, import_environmentGuardPlugin.environmentGuardPlugin)(oneOptions.environmentGuards), cloudflare({
					configPath: wranglerInputPath,
					viteEnvironment: { name: "worker" }
				})],
				resolve: {
					alias: [
						{
							find: /^react-native\/Libraries\/.*/,
							replacement: (0, import_resolve.resolvePath)("@vxrn/vite-plugin-metro/empty", options.root)
						},
						{
							find: /^(react-native\/asset-registry|@react-native\/assets-registry\/registry)$/,
							replacement: "react-native-web/dist/modules/AssetRegistry"
						},
						{
							find: "react-native/package.json",
							replacement: "react-native-web/package.json"
						},
						{
							find: "react-native",
							replacement: "react-native-web"
						},
						...Object.entries((0, import_absorbedPackages.absorbedPackageAliases)(options.root, "web")).map(function(param) {
							var [find, replacement] = param;
							return {
								find,
								replacement
							};
						})
					],
					dedupe: ["react-native-web"]
				},
				build: {
					outDir,
					emptyOutDir: false,
					rolldownOptions: {
						external: workerExternals,
						shimMissingExports: true,
						output: { strictExecutionOrder: true }
					}
				}
			});
			var workerEnv = builder.environments.worker;
			if (!workerEnv) {
				throw new Error("[one] plugin did not register \"worker\" environment");
			}
			await builder.build(workerEnv);
			await import_fs_extra.default.remove(workerSrcPath);
			await import_fs_extra.default.remove(wranglerInputPath);
			await finalizeCloudflareWranglerDeployConfig((0, import_path.join)(options.root, outDir, "worker", "wrangler.json"));
			if (userWranglerConfig) {
				console.info(` [cloudflare] Merging ${(0, import_path.relative)(options.root, userWranglerConfig.path)} into ${outDir}/worker/wrangler.json`);
			}
			postBuildLogs.push(`Cloudflare worker bundled at ${outDir}/worker/index.js`);
			postBuildLogs.push(`To deploy: wrangler deploy`);
			break;
		}
	}
	var securityScanOption = (_oneOptions_build5 = oneOptions.build) === null || _oneOptions_build5 === void 0 ? void 0 : _oneOptions_build5.securityScan;
	var securityScanLevel = securityScanOption === false ? null : securityScanOption === true || securityScanOption === void 0 ? "warn" : typeof securityScanOption === "string" ? securityScanOption : (_securityScanOption_level = securityScanOption.level) !== null && _securityScanOption_level !== void 0 ? _securityScanOption_level : "warn";
	var securitySafePatterns = typeof securityScanOption === "object" && securityScanOption !== null ? securityScanOption.safePatterns : void 0;
	if (securityScanLevel) {
		var { runSecurityScan } = await import("./securityScan.native.js");
		var passed = await runSecurityScan(clientDir, securityScanLevel, securitySafePatterns);
		if (!passed) {
			process.exit(1);
		}
	}
	if (postBuildLogs.length) {
		console.info(`

`);
		postBuildLogs.forEach(function(log) {
			console.info(`  \xB7 ${log}`);
		});
	}
	console.info(`
 \u{1F49B} build complete
`);
}
var TRAILING_INDEX_REGEX = /\/index(\.(web))?/;
function getCleanPaths(possiblePaths) {
	return Array.from(new Set(Array.from(new Set(possiblePaths)).flatMap(function(p) {
		var paths = [p];
		if (p.match(TRAILING_INDEX_REGEX)) {
			var pathWithTrailingIndexRemoved = p.replace(TRAILING_INDEX_REGEX, "");
			paths.push(pathWithTrailingIndexRemoved);
			paths.push(pathWithTrailingIndexRemoved + "/");
		}
		return paths;
	})));
}
async function moveAllFiles(src, dest) {
	try {
		await import_fs_extra.default.copy(src, dest, {
			overwrite: true,
			errorOnExist: false
		});
	} catch (err) {
		console.error("Error moving files:", err);
	}
}

//# sourceMappingURL=build.native.js.map