one
Version:
One is a new React Framework that makes Vite serve both native and web.
1,252 lines (1,247 loc) • 61.8 kB
JavaScript
"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(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
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_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_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_pLimit = require("../utils/pLimit.native.js");
var import_criticalCSSPlugin = require("../vite/plugins/criticalCSSPlugin.native.js");
const import_meta = {};
function _type_of(obj) {
"@swc/helpers - typeof";
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
}
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 GENERATED_CLOUDFLARE_WRANGLER_RULES = [{
type: "ESModule",
globs: ["./server/**/*.js"],
fallthrough: true
}, {
type: "ESModule",
globs: ["./api/**/*.js"],
fallthrough: true
}, {
type: "ESModule",
globs: ["./middlewares/**/*.js"],
fallthrough: true
}, {
type: "ESModule",
globs: ["./assets/**/*.js"],
fallthrough: true
}];
function isPlainObject(value) {
return !!value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && !Array.isArray(value);
}
function mergeJsonObjects(base, overrides) {
var merged = {
...base
};
var _iteratorNormalCompletion = true,
_didIteratorError = false,
_iteratorError = void 0;
try {
for (var _iterator = Object.entries(overrides)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var [key, value] = _step.value;
var baseValue = merged[key];
if (isPlainObject(baseValue) && isPlainObject(value)) {
merged[key] = mergeJsonObjects(baseValue, value);
} else {
merged[key] = value;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return merged;
}
function dedupeJsonValues(values) {
var seen = /* @__PURE__ */new Set();
return values.filter(function (value) {
var key = JSON.stringify(value);
if (seen.has(key)) return false;
seen.add(key);
return true;
});
}
function mergeCloudflareCompatibilityFlags(flags) {
var userFlags = Array.isArray(flags) ? flags.filter(function (flag) {
return typeof flag === "string";
}) : [];
return dedupeJsonValues(["nodejs_compat", ...userFlags]);
}
function mergeCloudflareRules(rules) {
var userRules = Array.isArray(rules) ? rules.filter(function (rule) {
return isPlainObject(rule);
}) : [];
return dedupeJsonValues([...GENERATED_CLOUDFLARE_WRANGLER_RULES, ...userRules]);
}
function parseJsonc(text) {
var out = "";
var i = 0;
var inString = false;
var quote = "";
while (i < text.length) {
var ch = text[i];
var next = text[i + 1];
if (inString) {
if (ch === "\\") {
out += ch + (next !== null && next !== void 0 ? next : "");
i += 2;
continue;
}
if (ch === quote) inString = false;
out += ch;
i++;
continue;
}
if (ch === '"' || ch === "'") {
inString = true;
quote = ch;
out += ch;
i++;
continue;
}
if (ch === "/" && next === "/") {
while (i < text.length && text[i] !== "\n") i++;
continue;
}
if (ch === "/" && next === "*") {
i += 2;
while (i < text.length - 1 && !(text[i] === "*" && text[i + 1] === "/")) i++;
i += 2;
continue;
}
out += ch;
i++;
}
return JSON.parse(out.replace(/,(\s*[}\]])/g, "$1"));
}
async function loadUserWranglerConfig(root) {
var candidateRoots = [... /* @__PURE__ */new Set([root, process.cwd()])];
var _iteratorNormalCompletion = true,
_didIteratorError = false,
_iteratorError = void 0;
try {
for (var _iterator = candidateRoots[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var candidateRoot = _step.value;
for (var _i = 0, _iter = ["wrangler.jsonc", "wrangler.json"]; _i < _iter.length; _i++) {
var fileName = _iter[_i];
var configPath = (0, import_path.join)(candidateRoot, fileName);
if (!(await import_fs_extra.default.pathExists(configPath))) {
continue;
}
var contents = await import_fs_extra.default.readFile(configPath, "utf-8");
var parsed = void 0;
try {
parsed = parseJsonc(contents);
} catch (err) {
throw new Error(`Failed to parse ${(0, import_path.relative)(process.cwd(), configPath)}: ${err.message}`);
}
if (!isPlainObject(parsed)) {
throw new Error(`Expected ${(0, import_path.relative)(process.cwd(), configPath)} to contain a top-level JSON object`);
}
return {
path: configPath,
config: parsed
};
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return null;
}
function createCloudflareWranglerConfig(projectName, userConfig) {
var generatedConfig = {
name: projectName,
main: "worker.js",
compatibility_date: "2024-12-05",
compatibility_flags: ["nodejs_compat"],
find_additional_modules: true,
rules: GENERATED_CLOUDFLARE_WRANGLER_RULES,
assets: {
directory: "client",
binding: "ASSETS",
run_worker_first: true
}
};
var mergedConfig = userConfig ? mergeJsonObjects(generatedConfig, userConfig) : generatedConfig;
mergedConfig.main = "worker.js";
mergedConfig.find_additional_modules = true;
mergedConfig.compatibility_flags = mergeCloudflareCompatibilityFlags(mergedConfig.compatibility_flags);
mergedConfig.rules = mergeCloudflareRules(mergedConfig.rules);
mergedConfig.assets = {
...(isPlainObject(mergedConfig.assets) ? mergedConfig.assets : {}),
directory: "client",
binding: "ASSETS",
run_worker_first: true
};
return mergedConfig;
}
async function getCloudflareProjectName(root) {
try {
var pkg = JSON.parse(await import_fs_extra.default.readFile((0, import_path.join)(root, "package.json"), "utf-8"));
if (pkg.name) {
return pkg.name.replace(/^@[^/]+\//, "");
}
} catch (unused) {}
return "one-app";
}
process.env.ONE_CACHE_KEY = constants.CACHE_KEY;
var BUILD_CONCURRENCY = process.env.ONE_BUILD_CONCURRENCY ? Math.max(1, parseInt(process.env.ONE_BUILD_CONCURRENCY, 10)) : Math.max(1, Math.min((0, import_os.cpus)().length, 8));
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;
}
process.on("uncaughtException", function (err) {
console.error((err === null || err === void 0 ? void 0 : err.message) || err);
});
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 === "undefined" ? "undefined" : _type_of(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] && _type_of(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 _ref, _ref1, _args_skipEnv, _securityScanOption_level;
var _oneOptions_web, _oneOptions_web1, _viteLoadedConfig_config_build, _viteLoadedConfig_config, _oneOptions_router, _oneOptions_build, _oneOptions_build_server, _oneOptions_build1, _oneOptions_build2, _oneOptions_web2, _oneOptions_build3;
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);
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 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_build = oneOptions.build) === null || _oneOptions_build === void 0 ? void 0 : _oneOptions_build.server) === false ? "esm" : (_ref1 = (_oneOptions_build1 = oneOptions.build) === null || _oneOptions_build1 === void 0 ? void 0 : (_oneOptions_build_server = _oneOptions_build1.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_build2 = oneOptions.build) === null || _oneOptions_build2 === void 0 ? void 0 : _oneOptions_build2.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 = await (0, import_vxrn.fillOptions)(vxrnOutput.options, {
mode: "prod"
});
var {
optimizeDeps
} = (0, import_vxrn.getOptimizeDeps)("build");
var {
rolldownOptions: _rolldownOptions,
...optimizeDepsNoRolldown
} = optimizeDeps;
var clonedWebBuildConfig = clonePluginHooks(vxrnOutput.webBuildConfig);
var apiBuildConfig = (0, import_vite.mergeConfig)(
// feels like this should build off the *server* build config not web
clonedWebBuildConfig, {
configFile: false,
appType: "custom",
optimizeDeps: optimizeDepsNoRolldown,
environments: {
client: {
optimizeDeps: {
rolldownOptions: _rolldownOptions
}
}
}
});
async function buildCustomRoutes(subFolder, routes) {
var _ref2;
var _oneOptions_build_api, _oneOptions_build4, _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_build4 = oneOptions.build) === null || _oneOptions_build4 === void 0 ? void 0 : (_oneOptions_build_api = _oneOptions_build4.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,
// plugins: [
// nodeExternals({
// exclude: optimizeDeps.include,
// }) as any,
// ],
define: vxrnOutput.processEnvDefines,
ssr: {
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: [
// otherwise rollup is leaving commonjs-only top level imports...
outputFormat === "esm" ? import_vxrn.rollupRemoveUnusedImportsPlugin : null].filter(Boolean),
// too many issues
// treeshake: {
// moduleSideEffects: false,
// },
// prevents it from shaking out the exports
preserveEntrySignatures: "strict",
input,
external: [],
output: {
entryFileNames: "[name]",
exports: "auto",
...(outputFormat === "esm" ? {
format: "esm",
esModule: true
} : {
format: "cjs",
// Preserve folder structure and use .cjs extension
entryFileNames: function (chunkInfo) {
var name = chunkInfo.name.replace(/\.js$/, ".cjs");
return name;
},
chunkFileNames: function (chunkInfo) {
var dir = import_path.default.dirname(chunkInfo.name);
var name = import_path.default.basename(chunkInfo.name, import_path.default.extname(chunkInfo.name));
return import_path.default.join(dir, `${name}-[hash].cjs`);
},
assetFileNames: function (assetInfo) {
var _assetInfo_name;
var name = (_assetInfo_name = assetInfo.name) !== null && _assetInfo_name !== void 0 ? _assetInfo_name : "";
var dir = import_path.default.dirname(name);
var baseName = import_path.default.basename(name, import_path.default.extname(name));
var ext = import_path.default.extname(name);
return import_path.default.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)(
// allow user merging api build config
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_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] = (0, import_path.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)((0, import_path.join)(import_meta.url, ".."));
var assets = [];
var builtRoutes = [];
var sitemapData = [];
var collectImportsCache = /* @__PURE__ */new Map();
var cssFileContentsCache = /* @__PURE__ */new Map();
var criticalCSSOutputPaths = (0, import_criticalCSSPlugin.getCriticalCSSOutputPaths)(vxrnOutput.clientManifest);
var limit = (0, import_pLimit.pLimit)(BUILD_CONCURRENCY);
var useWorkers = shouldUseWorkers(oneOptions);
var workerPool = useWorkers ? (0, import_workerPool.getWorkerPool)(BUILD_CONCURRENCY) : 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: ${BUILD_CONCURRENCY}`;
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;
if (chunk.type === "chunk" && chunk.facadeModuleId) {
clientChunksBySource.set(chunk.facadeModuleId, {
fileName: chunk.fileName,
imports: chunk.imports || []
});
}
}
} catch (err) {
_didIteratorError1 = true;
_iteratorError1 = err;
} finally {
try {
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
_iterator1.return();
}
} finally {
if (_didIteratorError1) {
throw _iteratorError1;
}
}
}
}
var outputEntries = [...vxrnOutput.serverOutput.entries()];
var layoutServerPaths = /* @__PURE__ */new Map();
var _iteratorNormalCompletion2 = true,
_didIteratorError2 = false,
_iteratorError2 = void 0;
try {
for (var _iterator2 = outputEntries[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var [, output] = _step2.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_path.relative)(process.cwd(), id).replace(`${routerRoot}/`, "");
var contextKey = `./${relativePath}`;
layoutServerPaths.set(contextKey, output.fileName);
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
var routeByPath = /* @__PURE__ */new Map();
var _iteratorNormalCompletion3 = true,
_didIteratorError3 = false,
_iteratorError3 = void 0;
try {
for (var _iterator3 = manifest.pageRoutes[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var route = _step3.value;
if (route.file) {
var routePath = `${routerRoot}${route.file.slice(1)}`;
routeByPath.set(routePath, route);
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
var _iteratorNormalCompletion4 = true,
_didIteratorError4 = false,
_iteratorError4 = void 0;
try {
for (var _iterator4 = outputEntries[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var [, output1] = _step4.value;
if (output1.type === "asset") {
assets.push(output1);
}
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
_iterator4.return();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
var moduleIdToServerChunk = /* @__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 [, output2] = _step5.value;
if (output2.type === "asset") continue;
var moduleIds = output2.moduleIds || (output2.facadeModuleId ? [output2.facadeModuleId] : []);
var _iteratorNormalCompletion6 = true,
_didIteratorError6 = false,
_iteratorError6 = void 0;
try {
for (var _iterator6 = moduleIds[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
var moduleId = _step6.value;
moduleIdToServerChunk.set(moduleId, output2.fileName);
}
} catch (err) {
_didIteratorError6 = true;
_iteratorError6 = err;
} finally {
try {
if (!_iteratorNormalCompletion6 && _iterator6.return != null) {
_iterator6.return();
}
} finally {
if (_didIteratorError6) {
throw _iteratorError6;
}
}
}
}
} catch (err) {
_didIteratorError5 = true;
_iteratorError5 = err;
} finally {
try {
if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
_iterator5.return();
}
} finally {
if (_didIteratorError5) {
throw _iteratorError5;
}
}
}
var _iteratorNormalCompletion7 = true,
_didIteratorError7 = false,
_iteratorError7 = void 0;
try {
var _loop1 = async function () {
var foundRoute = _step7.value;
var _ref2, _ref12;
var _vxrnOutput_buildArgs, _foundRoute_layouts, _oneOptions_web3, _oneOptions_web12, _exported_generateStaticParams;
if (!foundRoute.file) {
return "continue";
}
var routeModulePath = (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") {
return "continue";
}
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];
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 _iteratorNormalCompletion13 = true,
_didIteratorError13 = false,
_iteratorError13 = void 0;
try {
for (var _iterator13 = foundRoute.layouts[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {
var layout = _step13.value;
var serverPath = layoutServerPaths.get(layout.contextKey);
if (serverPath) {
layout.loaderServerPath = serverPath;
}
}
} catch (err) {
_didIteratorError13 = true;
_iteratorError13 = err;
} finally {
try {
if (!_iteratorNormalCompletion13 && _iterator13.return != null) {
_iterator13.return();
}
} finally {
if (_didIteratorError13) {
throw _iteratorError13;
}
}
}
}
function collectImports(entry2) {
var {
type = "js"
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
var {
imports = [],
css
} = entry2;
var cacheKey = `${entry2.file || imports.join(",")}:${type}`;
var cached = collectImportsCache.get(cacheKey);
if (cached) return cached;
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)}`;
}))];
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 (entry2) {
return [entry2.file, ...collectImports(entry2)];
});
var routePreloads = {};
var rootLayoutKey = `${routerRoot}/_layout.tsx`;
var rootLayoutEntry = vxrnOutput.clientManifest[rootLayoutKey];
if (rootLayoutEntry) {
routePreloads[`/${rootLayoutKey}`] = `/${rootLayoutEntry.file}`;
}
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 layout1 = _step14.value;
var clientKey = `${routerRoot}${layout1.contextKey.slice(1)}`;
var entry = vxrnOutput.clientManifest[clientKey];
if (entry) {
routePreloads[`/${clientKey}`] = `/${entry.file}`;
}
}
} catch (err) {
_didIteratorError14 = true;
_iteratorError14 = err;
} finally {
try {
if (!_iteratorNormalCompletion14 && _iterator14.return != null) {
_iterator14.return();
}
} finally {
if (_didIteratorError14) {
throw _iteratorError14;
}
}
}
}
if (clientChunk) {
var routeKey = `/${routerRoot}${foundRoute.file.slice(1)}`;
routePreloads[routeKey] = `/${clientChunk.fileName}`;
} else if (clientManifestEntry) {
var routeKey1 = `/${routerRoot}${foundRoute.file.slice(1)}`;
routePreloads[routeKey1] = `/${clientManifestEntry.file}`;
}
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 entry2 = vxrnOutput.clientManifest[file2];
return [entry2.file];
}
}
return [];
}();
var allPreloads = [... /* @__PURE__ */new Set([...preloadSetupFilePreloads,
// add the route entry js (like ./app/index.ts) - prefer direct chunk lookup
...(clientChunk ? [clientChunk.fileName] : clientManifestEntry ? [clientManifestEntry.file] : []),
// add the virtual entry
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,
// add the virtual entry (framework bootstrap)
vxrnOutput.clientManifest["virtual:one-entry"].file,
// add the route entry js (like ./app/index.ts) - prefer direct chunk lookup
...(clientChunk ? [clientChunk.fileName] : clientManifestEntry ? [clientManifestEntry.file] : []),
// add layout files (but not their deep imports)
...layoutEntries.map(function (entry2) {
return entry2.file;
})])].map(function (path2) {
return `/${path2}`;
}) : void 0;
var deferredPreloads = needsSeparatedPreloads ? [... /* @__PURE__ */new Set([...entryImports, ...layoutEntries.flatMap(function (entry2) {
return collectImports(entry2);
})])].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 (entry2) {
return collectImports(entry2, {
type: "css"
});
}).map(function (path2) {
return `/${path2}`;
}))];
var allCSS = [... /* @__PURE__ */new Set([...layoutCSS,
// css from page entry
...(clientManifestEntry ? collectImports(clientManifestEntry, {
type: "css"
}).map(function (path2) {
return `/${path2}`;
}) : []),
// root-level css (handles cssCodeSplit: false)
...Object.entries(vxrnOutput.clientManifest).filter(function (param) {
var [key] = param;
return key.endsWith(".css");
}).map(function (param) {
var [, entry2] = param;
return `/${entry2.file}`;
})])];
var hasCriticalCSS = allCSS.some(function (p2) {
return criticalCSSOutputPaths.has(p2);
});
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 = (0, import_path.join)(`${outDir}/server`, serverFileName);
var exported = void 0;
try {
exported = await import((0, import_toAbsolute.toAbsolute)(serverJsPath));
} catch (err) {
console.error(`Error importing page (original error)`, err);
throw new Error(`Error importing page: ${serverJsPath}`, {
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 = (_ref12 = await ((_exported_generateStaticParams = exported.generateStaticParams) === null || _exported_generateStaticParams === void 0 ? void 0 : _exported_generateStaticParams.call(exported))) !== null && _ref12 !== void 0 ? _ref12 : [{}];
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,
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
};
}).catch(function (err) {
console.warn(` \u26A0 skipping page ${path2}: ${err.message}`);
return null;
});
}
return limit(async function () {
console.info(` \u21A6 route ${path2}`);
try {
var built2 = await (0, import_one_server_only.runWithAsyncLocalContext)(async function () {
return await (0, import_buildPage.buildPage)(vxrnOutput.serverEntry, path2, relativeId1, params, foundRoute, clientManifestEntry, staticDir, clientDir, builtMiddlewares, serverJsPath, preloads2, allCSS, layoutCSS, routePreloads, allCSSContents, criticalPreloads, deferredPreloads, useAfterLCP, useAfterLCPAggressive);
});
return {
built: built2,
path: path2
};
} catch (err) {
console.warn(` \u26A0 skipping page ${path2}: ${err.message}`);
return null;
}
});
});
var results = (await Promise.all(pageBuilds)).filter(Boolean);
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 _iterator7 = manifest.pageRoutes[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) await _loop1();
} catch (err) {
_didIteratorError7 = true;
_iteratorError7 = err;
} finally {
try {
if (!_iteratorNormalCompletion7 && _iterator7.return != null) {
_iterator7.return();
}
} finally {
if (_didIteratorError7) {
throw _iteratorError7;
}
}
}
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.rm(staticDir, {
force: true,
recursive: true
});
var routeMap = {};
var routeToBuildInfo = {};
var pathToRoute = {};
var preloads = {};
var cssPreloads = {};
var loaders = {};
var _iteratorNormalCompletion8 = true,
_didIteratorError8 = false,
_iteratorError8 = void 0;
try {
for (var _iterator8 = builtRoutes[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
var route1 = _step8.value;
if (!route1.cleanPath.includes("*")) {
routeMap[route1.cleanPath] = route1.htmlPath;
}
var {
// dont include loaderData it can be huge
loaderData: _loaderData,
...rest
} = route1;
routeToBuildInfo[route1.routeFile] = rest;
var _iteratorNormalCompletion9 = true,
_didIteratorError9 = false,
_iteratorError9 = void 0;
try {
for (var _iterator9 = getCleanPaths([route1.path, route1.cleanPath])[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {
var p = _step9.value;
pathToRoute[p] = route1.routeFile;
}
} catch (err) {
_didIteratorError9 = true;
_iteratorError9 = err;
} finally {
try {
if (!_iteratorNormalCompletion9 && _iterator9.return != null) {
_iterator9.return();
}
} finally {
if (_didIteratorError9) {
throw _iteratorError9;
}
}
}
preloads[route1.preloadPath] = true;
cssPreloads[route1.cssPreloadPath] = true;
loaders[route1.loaderPath] = true;
}
} catch (err) {
_didIteratorError8 = true;
_iteratorError8 = err;
} finally {
try {
if (!_iteratorNormalCompletion8 && _iterator8.return != null) {
_iterator8.return();
}
} finally {
if (_didIteratorError8) {
throw _iteratorError8;
}
}
}
function createBuildManifestRoute(route3) {
var {
layouts,
...built
} = route3;
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 === route3.file;
});
if (built.middlewares && (buildInfo === null || buildInfo === void 0 ? void 0 : buildInfo.middlewares)) {
var _iteratorNormalCompletion13 = true,
_didIteratorError13 = false,
_iteratorError13 = void 0;
try {
for (var _iterator13 = built.middlewares.entries()[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {
var [index, mw] = _step13.value;
mw.contextKey = buildInfo.middlewares[index];
}
} catch (err) {
_didIteratorError13 = true;
_iteratorError13 = err;
} finally {
try {
if (!_iteratorNormalCompletion13 && _iterator13.return != null) {
_iterator13.return();
}
} finally {
if (_didIteratorError13) {
throw _iteratorError13;
}
}
}
}
if (buildInfo) {
built.loaderPath = buildInfo.loaderPath;
}
return built;
}
var buildInfoForWriting = {
outDir,
oneOptions,
routeToBuildInfo,
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 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_generateSi