UNPKG

one

Version:

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

1 lines • 65.5 kB
{"version":3,"file":"build.js","names":["vxrnBuild","viteBuild"],"sources":["esm/cli/build.js"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport { cpus } from \"node:os\";\nimport Path, { join, posix, relative, resolve } from \"node:path\";\nimport { resolvePath } from \"@vxrn/resolve\";\nimport FSExtra from \"fs-extra\";\nimport MicroMatch from \"micromatch\";\nimport {\n  createBuilder,\n  mergeConfig,\n  normalizePath,\n  build as viteBuild\n} from \"vite\";\nimport {\n  getOptimizeDeps,\n  rollupRemoveUnusedImportsPlugin,\n  build as vxrnBuild\n} from \"vxrn\";\nimport * as constants from \"../constants\";\nimport { setServerGlobals } from \"../server/setServerGlobals\";\nimport { environmentGuardPlugin } from \"../vite/plugins/environmentGuardPlugin\";\nimport { writeBuildOutputPointer } from \"../utils/buildOutputPointer\";\nimport { getPathnameFromFilePath } from \"../utils/getPathnameFromFilePath\";\nimport { getRouterRootFromOneOptions } from \"../utils/getRouterRootFromOneOptions\";\nimport { isRolldown } from \"../utils/isRolldown\";\nimport { toAbsolute } from \"../utils/toAbsolute\";\nimport { buildVercelOutputDirectory } from \"../vercel/build/buildVercelOutputDirectory\";\nimport {\n  createCloudflareWranglerConfig,\n  getCloudflareProjectName,\n  isPlainObject,\n  loadUserWranglerConfig\n} from \"../vite/cloudflareWranglerConfig\";\nimport { getManifest } from \"../vite/getManifest\";\nimport { loadUserOneOptions } from \"../vite/loadConfig\";\nimport { runWithAsyncLocalContext } from \"../vite/one-server-only\";\nimport { buildPage, printBuildTimings } from \"./buildPage\";\nimport { checkNodeVersion } from \"./checkNodeVersion\";\nimport { getWorkerPool, terminateWorkerPool } from \"./workerPool\";\nimport { generateSitemap } from \"./generateSitemap\";\nimport { labelProcess } from \"./label-process\";\nimport { getRouteExports } from \"./serverRouteModules\";\nimport { pLimit } from \"../utils/pLimit\";\nimport { getCriticalCSSOutputPaths } from \"../vite/plugins/criticalCSSPlugin\";\nimport { absorbedPackageAliases } from \"../utils/absorbedPackages\";\nimport {\n  formatErrorSafely,\n  installPrepareStackTraceGuard\n} from \"./install-error-handlers\";\nconst { ensureDir, writeJSON } = FSExtra;\nfunction normalizeDeploy(deploy) {\n  if (!deploy) return void 0;\n  if (typeof deploy === \"string\") return { target: deploy };\n  return deploy;\n}\nconst CLOUDFLARE_DEPLOY_WRANGLER_RULES = [\n  { type: \"ESModule\", globs: [\"assets/**/*.js\", \"assets/**/*.mjs\"] }\n];\nfunction omitEmptyJsonValues(value) {\n  if (Array.isArray(value)) {\n    const items = value.map((item) => omitEmptyJsonValues(item)).filter((item) => item !== void 0);\n    return items.length > 0 ? items : void 0;\n  }\n  if (isPlainObject(value)) {\n    const entries = Object.entries(value).map(([key, item]) => [key, omitEmptyJsonValues(item)]).filter((entry) => entry[1] !== void 0);\n    return entries.length > 0 ? Object.fromEntries(entries) : void 0;\n  }\n  return value;\n}\nasync function finalizeCloudflareWranglerDeployConfig(configPath) {\n  const parsed = JSON.parse(await FSExtra.readFile(configPath, \"utf-8\"));\n  if (!isPlainObject(parsed)) {\n    throw new Error(\n      `Expected ${relative(process.cwd(), configPath)} to contain a JSON object`\n    );\n  }\n  parsed.rules = CLOUDFLARE_DEPLOY_WRANGLER_RULES;\n  const config = omitEmptyJsonValues(parsed);\n  if (!isPlainObject(config)) {\n    throw new Error(\n      `Expected ${relative(process.cwd(), configPath)} to contain deploy config`\n    );\n  }\n  await FSExtra.writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`);\n}\nprocess.env.ONE_CACHE_KEY = constants.CACHE_KEY;\nfunction shouldUseWorkers(oneOptions) {\n  if (process.env.ONE_BUILD_WORKERS === \"0\") return false;\n  if (process.env.ONE_BUILD_WORKERS === \"1\") return true;\n  return oneOptions?.build?.workers !== false;\n}\ninstallPrepareStackTraceGuard();\nlet buildErrorHandlersInstalled = false;\nfunction installBuildErrorHandlers() {\n  if (buildErrorHandlersInstalled) return;\n  buildErrorHandlersInstalled = true;\n  process.on(\"uncaughtException\", (err) => {\n    try {\n      process.stderr.write(`[one build] uncaught exception\n${formatErrorSafely(err)}\n`);\n    } catch {\n    }\n    process.exit(1);\n  });\n  process.on(\"unhandledRejection\", (reason) => {\n    try {\n      process.stderr.write(\n        `[one build] unhandled rejection\n${formatErrorSafely(reason)}\n`\n      );\n    } catch {\n    }\n    process.exit(1);\n  });\n}\nconst HOOK_KEYS = [\n  \"resolveId\",\n  \"load\",\n  \"transform\",\n  \"renderChunk\",\n  \"generateBundle\",\n  \"writeBundle\",\n  \"buildStart\",\n  \"buildEnd\",\n  \"moduleParsed\"\n];\nfunction clonePluginHooks(config) {\n  if (!config.plugins) return config;\n  return {\n    ...config,\n    plugins: config.plugins.map((p) => {\n      if (!p || typeof p !== \"object\") return p;\n      const cloned = { ...p };\n      for (const key of HOOK_KEYS) {\n        if (cloned[key] && typeof cloned[key] === \"object\" && \"handler\" in cloned[key]) {\n          cloned[key] = { ...cloned[key] };\n        }\n      }\n      return cloned;\n    })\n  };\n}\nasync function build(args) {\n  installBuildErrorHandlers();\n  process.env.IS_VXRN_CLI = \"true\";\n  if (!process.env.NODE_ENV) {\n    process.env.NODE_ENV = \"production\";\n  } else if (process.env.NODE_ENV !== \"production\") {\n    console.warn(\n      `\n \\u26A0\\uFE0F  Warning: NODE_ENV is set to \"${process.env.NODE_ENV}\" (builds default to \"production\")\n`\n    );\n  }\n  labelProcess(\"build\");\n  checkNodeVersion();\n  setServerGlobals();\n  const { oneOptions, config: viteLoadedConfig } = await loadUserOneOptions(\"build\");\n  const routerRoot = getRouterRootFromOneOptions(oneOptions);\n  const configuredBuildConcurrency = process.env.ONE_BUILD_CONCURRENCY ?? oneOptions.build?.concurrency;\n  const buildConcurrency = configuredBuildConcurrency === void 0 ? Math.max(1, Math.min(cpus().length, 8)) : Number(configuredBuildConcurrency);\n  if (!Number.isInteger(buildConcurrency) || buildConcurrency < 1) {\n    throw new Error(\n      `build.concurrency must be a positive integer, received ${JSON.stringify(\n        configuredBuildConcurrency\n      )}`\n    );\n  }\n  if (oneOptions.web?.defaultRenderMode) {\n    process.env.ONE_DEFAULT_RENDER_MODE = oneOptions.web.defaultRenderMode;\n  }\n  const deployConfig = normalizeDeploy(oneOptions.web?.deploy);\n  if (!process.env.ONE_SERVER_URL && deployConfig) {\n    const url = deployConfig.url ?? (deployConfig.target === \"cloudflare\" ? `https://${await getCloudflareProjectName(process.cwd())}.workers.dev` : void 0);\n    if (url) {\n      process.env.ONE_SERVER_URL = url;\n      console.info(`\n \\u2601\\uFE0F ONE_SERVER_URL: ${url}\n`);\n    }\n  }\n  const outDir = viteLoadedConfig?.config?.build?.outDir ?? \"dist\";\n  const manifest = getManifest({\n    routerRoot,\n    ignoredRouteFiles: oneOptions.router?.ignoredRouteFiles\n  });\n  const serverOutputFormat = oneOptions.build?.server === false ? \"esm\" : oneOptions.build?.server?.outputFormat ?? \"esm\";\n  const buildStartTime = performance.now();\n  const vxrnOutput = await vxrnBuild(\n    {\n      skipEnv: args.skipEnv ?? oneOptions.skipEnv,\n      server: oneOptions.server,\n      build: {\n        analyze: true,\n        server: oneOptions.build?.server === false ? false : {\n          outputFormat: serverOutputFormat\n        }\n      }\n    },\n    args\n  );\n  const bundleTime = performance.now() - buildStartTime;\n  console.info(`\n \\u23F1\\uFE0F vite bundle: ${(bundleTime / 1e3).toFixed(2)}s\n`);\n  if (!vxrnOutput || args.platform !== \"web\") {\n    return;\n  }\n  const { options } = vxrnOutput;\n  const { optimizeDeps } = getOptimizeDeps(\"build\");\n  const { rolldownOptions: _rolldownOptions, ...optimizeDepsNoRolldown } = optimizeDeps;\n  const serverOpts = oneOptions.build?.server;\n  const isUnified = typeof serverOpts === \"object\" && serverOpts !== null && serverOpts.unified === true;\n  let baseForApi = isUnified ? clonePluginHooks(vxrnOutput.serverBuildConfig ?? vxrnOutput.webBuildConfig) : clonePluginHooks(vxrnOutput.webBuildConfig);\n  if (isUnified) {\n    const clone = {\n      ...baseForApi,\n      build: baseForApi.build ? { ...baseForApi.build } : void 0,\n      plugins: baseForApi.plugins ? baseForApi.plugins.filter(\n        (p) => p && typeof p === \"object\" && p.name !== \"omit-api-routes\"\n      ) : void 0\n    };\n    if (clone.build && clone.build.rolldownOptions) {\n      const ro = { ...clone.build.rolldownOptions };\n      delete ro.input;\n      clone.build.rolldownOptions = ro;\n    }\n    if (clone.build) {\n      delete clone.build.outDir;\n    }\n    baseForApi = clone;\n  }\n  const apiBuildConfig = mergeConfig(baseForApi, {\n    configFile: false,\n    appType: \"custom\",\n    optimizeDeps: optimizeDepsNoRolldown,\n    environments: {\n      client: {\n        optimizeDeps: { rolldownOptions: _rolldownOptions }\n      }\n    }\n  });\n  async function buildCustomRoutes(subFolder, routes) {\n    const input = routes.reduce((entries, { page, file }) => {\n      entries[page.slice(1) + \".js\"] = join(routerRoot, file);\n      return entries;\n    }, {});\n    const outputFormat = oneOptions?.build?.api?.outputFormat ?? serverOutputFormat;\n    const treeshake = oneOptions?.build?.api?.treeshake;\n    const mergedConfig = mergeConfig(apiBuildConfig, {\n      appType: \"custom\",\n      configFile: false,\n      define: vxrnOutput.processEnvDefines,\n      ssr: isUnified ? {\n        // in unified mode let the base (serverBuildConfig) set ssr.noExternal\n        // — default is now ['react', 'react-dom'] instead of `true`, so\n        // rolldown can externalize the rest.\n        optimizeDeps: optimizeDepsNoRolldown\n      } : {\n        noExternal: true,\n        external: [\"react\", \"react-dom\"],\n        optimizeDeps: optimizeDepsNoRolldown\n      },\n      environments: {\n        ssr: {\n          optimizeDeps: { rolldownOptions: _rolldownOptions }\n        }\n      },\n      build: {\n        ssr: true,\n        emptyOutDir: false,\n        outDir: `${outDir}/${subFolder}`,\n        copyPublicDir: false,\n        minify: false,\n        rolldownOptions: {\n          treeshake: treeshake ?? {\n            moduleSideEffects: false\n          },\n          plugins: [\n            // otherwise rollup is leaving commonjs-only top level imports...\n            outputFormat === \"esm\" ? rollupRemoveUnusedImportsPlugin : null\n          ].filter(Boolean),\n          // too many issues\n          // treeshake: {\n          //   moduleSideEffects: false,\n          // },\n          // prevents it from shaking out the exports\n          preserveEntrySignatures: \"strict\",\n          input,\n          // in unified mode, inherit externals from serverBuildConfig (user\n          // ssr.external / rolldownOptions.external). the legacy path resets\n          // them to [] so per-route files bundle everything.\n          ...isUnified ? {} : { external: [] },\n          output: {\n            entryFileNames: \"[name]\",\n            exports: \"auto\",\n            ...outputFormat === \"esm\" ? {\n              format: \"esm\",\n              esModule: true\n            } : {\n              format: \"cjs\",\n              // Preserve folder structure and use .cjs extension\n              entryFileNames: (chunkInfo) => {\n                const name = chunkInfo.name.replace(/\\.js$/, \".cjs\");\n                return name;\n              },\n              chunkFileNames: (chunkInfo) => {\n                const chunkName = normalizePath(chunkInfo.name);\n                const dir = posix.dirname(chunkName);\n                const name = posix.basename(chunkName, posix.extname(chunkName));\n                return posix.join(dir, `${name}-[hash].cjs`);\n              },\n              assetFileNames: (assetInfo) => {\n                const assetName = normalizePath(assetInfo.name ?? \"\");\n                const dir = posix.dirname(assetName);\n                const baseName = posix.basename(assetName, posix.extname(assetName));\n                const ext = posix.extname(assetName);\n                return posix.join(dir, `${baseName}-[hash]${ext}`);\n              }\n            }\n          }\n        }\n      }\n    });\n    const userApiBuildConf = oneOptions.build?.api?.config;\n    const finalApiBuildConf = userApiBuildConf ? mergeConfig(mergedConfig, userApiBuildConf) : mergedConfig;\n    const output = await viteBuild(\n      // allow user merging api build config\n      finalApiBuildConf\n    );\n    return output;\n  }\n  const builtMiddlewares = {};\n  const apiPromise = manifest.apiRoutes.length ? (console.info(`\n \\u{1F528} build api routes\n`), buildCustomRoutes(\"api\", manifest.apiRoutes)) : Promise.resolve(null);\n  const middlewarePromise = manifest.middlewareRoutes.length ? (console.info(`\n \\u{1F528} build middlewares\n`), buildCustomRoutes(\"middlewares\", manifest.middlewareRoutes)) : Promise.resolve(null);\n  const [apiOutput, middlewareBuildInfo] = await Promise.all([\n    apiPromise,\n    middlewarePromise\n  ]);\n  if (middlewareBuildInfo) {\n    for (const middleware of manifest.middlewareRoutes) {\n      const absoluteRoot = resolve(process.cwd(), options.root);\n      const fullPath = normalizePath(join(absoluteRoot, routerRoot, middleware.file));\n      const outChunks = middlewareBuildInfo.output.filter((x) => x.type === \"chunk\");\n      const chunk = outChunks.find((x) => x.facadeModuleId === fullPath);\n      if (!chunk) throw new Error(`internal err finding middleware`);\n      builtMiddlewares[middleware.file] = posix.join(\n        outDir,\n        \"middlewares\",\n        chunk.fileName\n      );\n    }\n  }\n  globalThis[\"require\"] = createRequire(import.meta.dirname + \"/\");\n  const assets = [];\n  const builtRoutes = [];\n  const sitemapData = [];\n  const collectImportsCache = /* @__PURE__ */ new Map();\n  const collectImportsInFlight = /* @__PURE__ */ new Set();\n  const cssFileContentsCache = /* @__PURE__ */ new Map();\n  const criticalCSSOutputPaths = getCriticalCSSOutputPaths(vxrnOutput.clientManifest);\n  const limit = pLimit(buildConcurrency);\n  const useWorkers = shouldUseWorkers(oneOptions);\n  const workerPool = useWorkers ? getWorkerPool(buildConcurrency) : null;\n  if (workerPool) {\n    const serializableOptions = JSON.parse(\n      JSON.stringify(\n        oneOptions,\n        (_key, value) => typeof value === \"function\" ? void 0 : value\n      )\n    );\n    await workerPool.initialize(serializableOptions);\n  }\n  const staticStartTime = performance.now();\n  const modeLabel = useWorkers ? `workers: ${workerPool?.size}` : `concurrency: ${buildConcurrency}`;\n  console.info(`\n \\u{1F528} build static routes (${modeLabel})\n`);\n  const staticDir = join(`${outDir}/static`);\n  const clientDir = join(`${outDir}/client`);\n  await ensureDir(staticDir);\n  if (!vxrnOutput.serverOutput) {\n    throw new Error(`No server output`);\n  }\n  const clientChunksBySource = /* @__PURE__ */ new Map();\n  if (vxrnOutput.clientOutput) {\n    for (const chunk of vxrnOutput.clientOutput) {\n      if (chunk.type !== \"chunk\") continue;\n      const info = { fileName: chunk.fileName, imports: chunk.imports || [] };\n      for (const moduleId of chunk.moduleIds ?? []) {\n        clientChunksBySource.set(moduleId, info);\n      }\n    }\n    for (const chunk of vxrnOutput.clientOutput) {\n      if (chunk.type !== \"chunk\" || !chunk.facadeModuleId) continue;\n      clientChunksBySource.set(chunk.facadeModuleId, {\n        fileName: chunk.fileName,\n        imports: chunk.imports || []\n      });\n    }\n  }\n  const clientManifestByFile = /* @__PURE__ */ new Map();\n  for (const entry of Object.values(vxrnOutput.clientManifest)) {\n    if (entry.file) {\n      clientManifestByFile.set(entry.file, entry);\n    }\n  }\n  const outputEntries = [...vxrnOutput.serverOutput.entries()];\n  const layoutServerPaths = /* @__PURE__ */ new Map();\n  for (const [, output] of outputEntries) {\n    if (output.type === \"asset\") continue;\n    const id = output.facadeModuleId || \"\";\n    const file = Path.basename(id);\n    if (file.startsWith(\"_layout\") && id.includes(`/${routerRoot}/`)) {\n      const relativePath = normalizePath(relative(process.cwd(), id)).replace(\n        `${routerRoot}/`,\n        \"\"\n      );\n      const contextKey = `./${relativePath}`;\n      layoutServerPaths.set(contextKey, output.fileName);\n    }\n  }\n  const routeByPath = /* @__PURE__ */ new Map();\n  for (const route of manifest.pageRoutes) {\n    if (route.file) {\n      const routePath = `${routerRoot}${route.file.slice(1)}`;\n      routeByPath.set(routePath, route);\n    }\n  }\n  for (const [, output] of outputEntries) {\n    if (output.type === \"asset\") {\n      assets.push(output);\n    }\n  }\n  const moduleIdToServerChunk = /* @__PURE__ */ new Map();\n  for (const [, output] of outputEntries) {\n    if (output.type === \"asset\") continue;\n    const moduleIds = output.moduleIds || (output.facadeModuleId ? [output.facadeModuleId] : []);\n    for (const moduleId of moduleIds) {\n      moduleIdToServerChunk.set(moduleId, output.fileName);\n      if (moduleId.includes(\"?one-spa-build\")) {\n        moduleIdToServerChunk.set(\n          moduleId.slice(0, moduleId.indexOf(\"?\")),\n          output.fileName\n        );\n      }\n    }\n  }\n  for (const foundRoute of manifest.pageRoutes) {\n    let collectImports = function(entry, { type = \"js\" } = {}) {\n      const { imports = [], css } = entry;\n      const cacheKey = `${entry.file || imports.join(\",\")}:${type}`;\n      const cached = collectImportsCache.get(cacheKey);\n      if (cached) return cached;\n      if (collectImportsInFlight.has(cacheKey)) return [];\n      collectImportsInFlight.add(cacheKey);\n      const result = [\n        ...new Set(\n          [\n            ...type === \"js\" ? imports : css || [],\n            ...imports.flatMap((name) => {\n              const found = vxrnOutput.clientManifest[name];\n              if (!found) {\n                console.warn(`No found imports`, name, vxrnOutput.clientManifest);\n              }\n              return collectImports(found, { type });\n            })\n          ].flat().filter((x) => x && (type === \"css\" || x.endsWith(\".js\"))).map(\n            (x) => type === \"css\" ? x : x.startsWith(\"assets/\") ? x : `assets/${x.slice(1)}`\n          )\n        )\n      ];\n      collectImportsInFlight.delete(cacheKey);\n      collectImportsCache.set(cacheKey, result);\n      return result;\n    };\n    if (!foundRoute.file) {\n      continue;\n    }\n    const routeModulePath = normalizePath(\n      join(resolve(process.cwd(), options.root), routerRoot, foundRoute.file.slice(2))\n    );\n    const serverFileName = moduleIdToServerChunk.get(routeModulePath);\n    if (!serverFileName) {\n      if (foundRoute.type === \"spa\") {\n        throw new Error(\n          `[one] No build-only server chunk for SPA route: ${foundRoute.file}`\n        );\n      }\n      console.warn(`[one] No server chunk found for route: ${foundRoute.file}`);\n      continue;\n    }\n    const onlyBuild = vxrnOutput.buildArgs?.only;\n    if (onlyBuild) {\n      const relativeId2 = foundRoute.file.slice(1);\n      if (!MicroMatch.contains(relativeId2, onlyBuild)) {\n        continue;\n      }\n    }\n    const clientChunk = clientChunksBySource.get(routeModulePath);\n    const manifestKey = `${routerRoot}${foundRoute.file.slice(1)}`;\n    const clientManifestEntry = vxrnOutput.clientManifest[manifestKey] ?? (clientChunk ? clientManifestByFile.get(clientChunk.fileName) : void 0);\n    if (!clientChunk && foundRoute.type !== \"spa\" && foundRoute.type !== \"ssg\") {\n      console.warn(`No client chunk found for route: ${routeModulePath}`);\n      continue;\n    }\n    foundRoute.loaderServerPath = serverFileName;\n    const relativeId = foundRoute.file.replace(/^\\.\\//, \"/\");\n    if (foundRoute.layouts) {\n      for (const layout of foundRoute.layouts) {\n        const serverPath = layoutServerPaths.get(layout.contextKey);\n        if (serverPath) {\n          layout.loaderServerPath = serverPath;\n        }\n      }\n    }\n    const entryImports = collectImports(clientManifestEntry || {});\n    const layoutEntries = foundRoute.layouts?.flatMap((layout) => {\n      const clientKey = `${routerRoot}${layout.contextKey.slice(1)}`;\n      const found = vxrnOutput.clientManifest[clientKey];\n      return found ? found : [];\n    }) ?? [];\n    const layoutImports = layoutEntries.flatMap((entry) => {\n      return [entry.file, ...collectImports(entry)];\n    });\n    const routePreloads = {};\n    const rootLayoutKey = `${routerRoot}/_layout.tsx`;\n    const rootLayoutEntry = vxrnOutput.clientManifest[rootLayoutKey];\n    if (rootLayoutEntry) {\n      routePreloads[`/${rootLayoutKey}`] = `/${rootLayoutEntry.file}`;\n    }\n    if (foundRoute.layouts) {\n      for (const layout of foundRoute.layouts) {\n        const clientKey = `${routerRoot}${layout.contextKey.slice(1)}`;\n        const entry = vxrnOutput.clientManifest[clientKey];\n        if (entry) {\n          routePreloads[`/${clientKey}`] = `/${entry.file}`;\n        }\n      }\n    }\n    const routeChunkFile = clientChunk?.fileName ?? clientManifestEntry?.file;\n    if (routeChunkFile) {\n      routePreloads[`/${routerRoot}${foundRoute.file.slice(1)}`] = `/${routeChunkFile}`;\n    }\n    const preloadSetupFilePreloads = (() => {\n      if (!oneOptions.setupFile) return [];\n      const clientSetupFile = typeof oneOptions.setupFile === \"string\" ? oneOptions.setupFile : oneOptions.setupFile.client;\n      if (!clientSetupFile) return [];\n      const needle = clientSetupFile.replace(/^\\.\\//, \"\");\n      for (const file in vxrnOutput.clientManifest) {\n        if (file === needle) {\n          const entry = vxrnOutput.clientManifest[file];\n          return [\n            entry.file\n            // getting 404s for preloading the imports as well?\n            // ...(entry.imports as string[])\n          ];\n        }\n      }\n      return [];\n    })();\n    const allPreloads = [\n      .../* @__PURE__ */ new Set([\n        ...preloadSetupFilePreloads,\n        // add the route entry js (like ./app/index.ts) - prefer direct chunk lookup\n        ...clientChunk ? [clientChunk.fileName] : clientManifestEntry ? [clientManifestEntry.file] : [],\n        // add the virtual entry\n        vxrnOutput.clientManifest[\"virtual:one-entry\"].file,\n        ...entryImports,\n        ...layoutImports\n      ])\n    ].map((path) => `/${path}`);\n    const scriptLoadingMode = oneOptions.web?.experimental_scriptLoading;\n    const useDeferredLoading = scriptLoadingMode === \"defer-non-critical\";\n    const useAggressiveLCP = scriptLoadingMode === \"after-lcp-aggressive\";\n    const needsSeparatedPreloads = useDeferredLoading || useAggressiveLCP;\n    const criticalPreloads = needsSeparatedPreloads ? [\n      .../* @__PURE__ */ new Set([\n        ...preloadSetupFilePreloads,\n        // add the virtual entry (framework bootstrap)\n        vxrnOutput.clientManifest[\"virtual:one-entry\"].file,\n        // add the route entry js (like ./app/index.ts) - prefer direct chunk lookup\n        ...clientChunk ? [clientChunk.fileName] : clientManifestEntry ? [clientManifestEntry.file] : [],\n        // add layout files (but not their deep imports)\n        ...layoutEntries.map((entry) => entry.file)\n      ])\n    ].map((path) => `/${path}`) : void 0;\n    const deferredPreloads = needsSeparatedPreloads ? [\n      .../* @__PURE__ */ new Set([\n        ...entryImports,\n        ...layoutEntries.flatMap((entry) => collectImports(entry))\n      ])\n    ].filter((path) => !criticalPreloads.includes(`/${path}`)).map((path) => `/${path}`) : void 0;\n    const preloads2 = needsSeparatedPreloads ? [...criticalPreloads, ...deferredPreloads] : allPreloads;\n    const allEntries = [clientManifestEntry, ...layoutEntries].filter(Boolean);\n    const layoutCSS = [\n      ...new Set(\n        layoutEntries.flatMap((entry) => collectImports(entry, { type: \"css\" })).map((path) => `/${path}`)\n      )\n    ];\n    const allCSS = [\n      .../* @__PURE__ */ new Set([\n        ...layoutCSS,\n        // css from page entry\n        ...clientManifestEntry ? collectImports(clientManifestEntry, { type: \"css\" }).map((path) => `/${path}`) : [],\n        // root-level css for cssCodeSplit: false (vite emits a single\n        // top-level `style.css` entry whose `src` equals `style.css`). when\n        // cssCodeSplit is true (default), the manifest also contains a\n        // per-component css entry for every chunk that ships any css — those\n        // are owned by their JS chunk and must NOT be injected globally, or\n        // every SSG page ends up preloading every css chunk in the project\n        // (the prod /download was loading 23 stylesheets with editor/IDE\n        // chunks despite being a marketing route).\n        ...Object.entries(vxrnOutput.clientManifest).filter(([key, entry]) => {\n          if (!key.endsWith(\".css\")) return false;\n          const src = entry.src;\n          return src === \"style.css\";\n        }).map(([, entry]) => `/${entry.file}`)\n      ])\n    ];\n    const hasCriticalCSS = allCSS.some((p) => criticalCSSOutputPaths.has(p));\n    const needsCSSContents = oneOptions.web?.inlineLayoutCSS || hasCriticalCSS;\n    let allCSSContents;\n    if (needsCSSContents) {\n      allCSSContents = await Promise.all(\n        allCSS.map(async (cssPath) => {\n          if (!oneOptions.web?.inlineLayoutCSS && !criticalCSSOutputPaths.has(cssPath)) {\n            return \"\";\n          }\n          const cached = cssFileContentsCache.get(cssPath);\n          if (cached !== void 0) return cached;\n          const filePath = join(clientDir, cssPath);\n          try {\n            const content = await FSExtra.readFile(filePath, \"utf-8\");\n            cssFileContentsCache.set(cssPath, content);\n            return content;\n          } catch (err) {\n            console.warn(`[one] Warning: Could not read CSS file ${filePath}`);\n            cssFileContentsCache.set(cssPath, \"\");\n            return \"\";\n          }\n        })\n      );\n    }\n    if (process.env.DEBUG) {\n      console.info(\"[one] building routes\", {\n        foundRoute,\n        layoutEntries,\n        allEntries,\n        allCSS\n      });\n    }\n    const serverJsPath = posix.join(outDir, \"server\", serverFileName);\n    let exported;\n    try {\n      exported = await getRouteExports(\n        vxrnOutput.serverEntry,\n        routerRoot,\n        foundRoute.file\n      );\n    } catch (err) {\n      console.error(`Error importing page (original error)`, err);\n      throw new Error(`Error importing page: ${foundRoute.file}`, {\n        cause: err\n      });\n    }\n    foundRoute.hasLoader = typeof exported.loader === \"function\";\n    const isDynamic = !!Object.keys(foundRoute.routeKeys).length;\n    if (foundRoute.type === \"ssg\" && isDynamic && !foundRoute.page.includes(\"+not-found\") && !foundRoute.page.includes(\"_sitemap\") && !exported.generateStaticParams) {\n      throw new Error(`[one] Error: Missing generateStaticParams\n\n  Route ${foundRoute.page} of type ${foundRoute.type} must export generateStaticParams so build can complete.\n\n  See docs on generateStaticParams:\n    https://onestack.dev/docs/routing-exports#generatestaticparams\n\n`);\n    }\n    const paramsList = await exported.generateStaticParams?.() ?? [{}];\n    console.info(`\n [build] page ${relativeId} (with ${paramsList.length} routes)\n`);\n    if (process.env.DEBUG) {\n      console.info(`paramsList`, JSON.stringify(paramsList, null, 2));\n    }\n    const routeSitemapExport = exported.sitemap;\n    const isAfterLCPMode = scriptLoadingMode === \"after-lcp\" || scriptLoadingMode === \"after-lcp-aggressive\";\n    const useAfterLCP = foundRoute.type === \"ssg\" && isAfterLCPMode;\n    const useAfterLCPAggressive = foundRoute.type === \"ssg\" && scriptLoadingMode === \"after-lcp-aggressive\";\n    const shouldCollectSitemap = foundRoute.type !== \"api\" && foundRoute.type !== \"layout\" && !foundRoute.isNotFound && !foundRoute.page.includes(\"+not-found\") && !foundRoute.page.includes(\"_sitemap\");\n    const pageBuilds = paramsList.map((params) => {\n      const path = getPathnameFromFilePath(relativeId, params, foundRoute.type === \"ssg\");\n      if (workerPool) {\n        console.info(`  \\u21A6 route ${path}`);\n        return workerPool.buildPage({\n          serverEntry: vxrnOutput.serverEntry,\n          routerRoot,\n          path,\n          relativeId,\n          params,\n          foundRoute,\n          clientManifestEntry,\n          staticDir,\n          clientDir,\n          builtMiddlewares,\n          serverJsPath,\n          preloads: preloads2,\n          allCSS,\n          layoutCSS,\n          routePreloads,\n          allCSSContents,\n          criticalPreloads,\n          deferredPreloads,\n          useAfterLCP,\n          useAfterLCPAggressive\n        }).then((built) => ({ built, path }));\n      }\n      return limit(async () => {\n        console.info(`  \\u21A6 route ${path}`);\n        const built = await runWithAsyncLocalContext(async () => {\n          return await buildPage(\n            vxrnOutput.serverEntry,\n            routerRoot,\n            path,\n            relativeId,\n            params,\n            foundRoute,\n            clientManifestEntry,\n            staticDir,\n            clientDir,\n            builtMiddlewares,\n            serverJsPath,\n            preloads2,\n            allCSS,\n            layoutCSS,\n            routePreloads,\n            allCSSContents,\n            criticalPreloads,\n            deferredPreloads,\n            useAfterLCP,\n            useAfterLCPAggressive\n          );\n        });\n        return { built, path };\n      });\n    });\n    const results = await Promise.all(pageBuilds);\n    for (const { built, path } of results) {\n      builtRoutes.push(built);\n      if (shouldCollectSitemap) {\n        sitemapData.push({\n          path,\n          routeExport: routeSitemapExport\n        });\n      }\n    }\n  }\n  if (workerPool) {\n    await terminateWorkerPool();\n  }\n  const staticTime = performance.now() - staticStartTime;\n  console.info(\n    `\n \\u23F1\\uFE0F static routes: ${(staticTime / 1e3).toFixed(2)}s (${builtRoutes.length} pages)\n`\n  );\n  printBuildTimings();\n  await moveAllFiles(staticDir, clientDir);\n  await FSExtra.remove(staticDir);\n  const routeMap = {};\n  const routeToBuildInfo = {};\n  const pathToRoute = {};\n  const preloads = {};\n  const cssPreloads = {};\n  const loaders = {};\n  let cssContentsByPath;\n  for (const route of builtRoutes) {\n    if (!route.cleanPath.includes(\"*\")) {\n      routeMap[route.cleanPath] = route.htmlPath;\n    }\n    const {\n      // dont include loaderData it can be huge\n      loaderData: _loaderData,\n      cssContents,\n      ...rest\n    } = route;\n    if (cssContents) {\n      const contentsByPath = cssContentsByPath ||= {};\n      route.css.forEach((cssPath, index) => {\n        const content = cssContents[index];\n        if (content) contentsByPath[cssPath] = content;\n      });\n    }\n    routeToBuildInfo[route.routeFile] = rest;\n    for (const p of getCleanPaths([route.path, route.cleanPath])) {\n      pathToRoute[p] = route.routeFile;\n    }\n    preloads[route.preloadPath] = true;\n    cssPreloads[route.cssPreloadPath] = true;\n    loaders[route.loaderPath] = true;\n  }\n  function createBuildManifestRoute(route) {\n    const { layouts, ...built } = route;\n    if (layouts?.length) {\n      ;\n      built.layouts = layouts.map((layout) => ({\n        contextKey: layout.contextKey,\n        loaderServerPath: layout.loaderServerPath\n      }));\n    }\n    const buildInfo = builtRoutes.find((x) => x.routeFile === route.file);\n    if (built.middlewares) {\n      for (const [index, mw] of built.middlewares.entries()) {\n        const viaBuildInfo = buildInfo?.middlewares?.[index];\n        if (viaBuildInfo) {\n          mw.contextKey = viaBuildInfo;\n          continue;\n        }\n        const viaMiddlewareMap = builtMiddlewares[mw.contextKey];\n        if (viaMiddlewareMap) {\n          mw.contextKey = viaMiddlewareMap;\n        }\n      }\n    }\n    if (buildInfo) {\n      built.loaderPath = buildInfo.loaderPath;\n    }\n    return built;\n  }\n  const buildInfoForWriting = {\n    outDir,\n    oneOptions,\n    routeToBuildInfo,\n    cssContentsByPath,\n    pathToRoute,\n    manifest: {\n      pageRoutes: manifest.pageRoutes.map(createBuildManifestRoute),\n      apiRoutes: manifest.apiRoutes.map(createBuildManifestRoute),\n      allRoutes: manifest.allRoutes.map(createBuildManifestRoute)\n    },\n    routeMap,\n    constants: JSON.parse(JSON.stringify({ ...constants })),\n    preloads,\n    cssPreloads,\n    loaders,\n    useRolldown: await isRolldown()\n  };\n  await writeJSON(toAbsolute(`${outDir}/buildInfo.json`), buildInfoForWriting);\n  await writeBuildOutputPointer(outDir);\n  await FSExtra.writeFile(\n    join(clientDir, \"version.json\"),\n    JSON.stringify({ version: constants.CACHE_KEY })\n  );\n  console.info(`\n \\u{1F6E1} skew protection: emitted version.json\n`);\n  const sitemapConfig = oneOptions.web?.sitemap;\n  if (sitemapConfig) {\n    const sitemapOptions = typeof sitemapConfig === \"boolean\" ? {} : sitemapConfig;\n    const sitemapXml = generateSitemap(sitemapData, sitemapOptions);\n    const sitemapPath = join(clientDir, \"sitemap.xml\");\n    await FSExtra.writeFile(sitemapPath, sitemapXml);\n    console.info(`\n \\u{1F4C4} generated sitemap.xml (${sitemapData.length} URLs)\n`);\n  }\n  const postBuildLogs = [];\n  const platform = deployConfig?.target;\n  if (platform) {\n    postBuildLogs.push(`[one.build] platform ${platform}`);\n  }\n  switch (platform) {\n    case \"vercel\": {\n      const vercelJsonPath = join(options.root, \"vercel.json\");\n      if (FSExtra.existsSync(vercelJsonPath)) {\n        try {\n          const vercelConfig = JSON.parse(FSExtra.readFileSync(vercelJsonPath, \"utf-8\"));\n          if (!vercelConfig.cleanUrls) {\n            console.warn(`\n \\u26A0\\uFE0F  Warning: Your vercel.json is missing \"cleanUrls\": true`);\n            console.warn(`    Without this, direct navigation to SSG pages will 404.`);\n            console.warn(`    Add \"cleanUrls\": true to your vercel.json to fix this.\n`);\n          }\n        } catch {\n        }\n      }\n      await buildVercelOutputDirectory({\n        apiOutput,\n        buildInfoForWriting,\n        clientDir,\n        oneOptionsRoot: options.root,\n        postBuildLogs\n      });\n      break;\n    }\n    case \"cloudflare\": {\n      const workerSrcDir = join(options.root, outDir);\n      const getWorkerSourceImportPath = (routeFile) => {\n        const importPath = normalizePath(\n          relative(workerSrcDir, join(options.root, routerRoot, routeFile))\n        );\n        return importPath.startsWith(\".\") ? importPath : `./${importPath}`;\n      };\n      const apiRouteMap = [];\n      const middlewareRouteMap = [];\n      for (const route of buildInfoForWriting.manifest.apiRoutes) {\n        if (route.file) {\n          const importPath = getWorkerSourceImportPath(route.file);\n          apiRouteMap.push(`  '${route.page}': () => import('${importPath}')`);\n        }\n      }\n      for (const [sourceFile, builtPath] of Object.entries(builtMiddlewares)) {\n        const importPath = getWorkerSourceImportPath(sourceFile);\n        middlewareRouteMap.push(`  '${builtPath}': () => import('${importPath}')`);\n      }\n      const workerSrcPath = join(options.root, outDir, \"_worker-src.js\");\n      const workerCode = `// Polyfill MessageChannel for React SSR (not available in Cloudflare Workers by default)\nif (typeof MessageChannel === 'undefined') {\n  globalThis.MessageChannel = class MessageChannel {\n    constructor() {\n      this.port1 = { postMessage: () => {}, onmessage: null, close: () => {} }\n      this.port2 = { postMessage: () => {}, onmessage: null, close: () => {} }\n    }\n  }\n}\n\nimport { serve, setFetchStaticHtml, withRange } from 'one/serve-worker'\n\n// Lazy import map - modules load on-demand when route is matched\nconst lazyRoutes = {\n  serverEntry: () => import('./server/_virtual_one-entry.js'),\n  api: {\n${apiRouteMap.join(\",\\n\")}\n  },\n  middlewares: {\n${middlewareRouteMap.join(\",\\n\")}\n  }\n}\n\nconst buildInfo = ${JSON.stringify(buildInfoForWriting)}\n\nlet server\n\nexport default {\n  async fetch(request, env, ctx) {\n    if (!server) {\n      server = await serve(buildInfo, lazyRoutes)\n    }\n\n    // set up static HTML fetcher for this request (uses ASSETS binding)\n    if (env.ASSETS) {\n      setFetchStaticHtml(async (path) => {\n        try {\n          const url = new URL(request.url)\n          url.pathname = path\n          const assetResponse = await env.ASSETS.fetch(new Request(url))\n          if (assetResponse && assetResponse.ok) {\n            return await assetResponse.text()\n          }\n        } catch (e) {\n          // asset not found\n        }\n        return null\n      })\n    }\n\n    try {\n      const response = await server.fetch(request, env, ctx)\n\n      // no route matched or 404 \\u2192 try static assets\n      if (!response || response.status === 404) {\n        if (env.ASSETS) {\n          try {\n            const assetResponse = await env.ASSETS.fetch(request)\n            if (assetResponse && assetResponse.status !== 404) {\n              return await withRange(request, assetResponse)\n            }\n          } catch (e) {\n            // asset not found, continue with original response\n          }\n        }\n      }\n\n      return response\n    } finally {\n      setFetchStaticHtml(null)\n    }\n  }\n}\n`;\n      await FSExtra.writeFile(workerSrcPath, workerCode);\n      const projectName = await getCloudflareProjectName(options.root);\n      const userWranglerConfig = await loadUserWranglerConfig(options.root);\n      const wranglerInputConfig = createCloudflareWranglerConfig(\n        projectName,\n        userWranglerConfig?.config\n      );\n      wranglerInputConfig.main = normalizePath(\n        relative(join(options.root, outDir), workerSrcPath)\n      );\n      const wranglerInputPath = join(options.root, outDir, \"_wrangler.input.jsonc\");\n      await FSExtra.writeFile(\n        wranglerInputPath,\n        `${JSON.stringify(wranglerInputConfig, null, 2)}\n`\n      );\n      const ssrExternal = viteLoadedConfig?.config?.ssr?.external;\n      const workerExternals = Array.isArray(ssrExternal) ? ssrExternal : [];\n      console.info(\"\\n [cloudflare] Bundling worker...\");\n      const { cloudflare } = await import(\"@cloudflare/vite-plugin\");\n      const builder = await createBuilder({\n        root: options.root,\n        mode: \"production\",\n        logLevel: \"warn\",\n        configFile: false,\n        define: {\n          \"process.env.NODE_ENV\": JSON.stringify(\"production\"),\n          \"process.env.VITE_ENVIRONMENT\": JSON.stringify(\"ssr\"),\n          \"process.env.ONE_CACHE_KEY\": JSON.stringify(constants.CACHE_KEY)\n        },\n        plugins: [\n          // the cloudflare worker IS a server, but this build runs with\n          // configFile:false so the user vite.config (where the user-level\n          // `one()` plugin registers environmentGuardPlugin via vite.config)\n          // doesn't apply. register the guard plugin directly here so\n          // `import 'server-only'` resolves to an empty module in the\n          // worker bundle instead of inlining the package's throwing\n          // index.js — which would crash the deployed worker on the first\n          // /api request that loads any server-only-importing module.\n          environmentGuardPlugin(oneOptions.environmentGuards),\n          cloudflare({\n            configPath: wranglerInputPath,\n            viteEnvironment: { name: \"worker\" }\n          })\n        ],\n        resolve: {\n          alias: [\n            // rolldown can't parse react-native's Flow syntax; alias to react-native-web for ssr\n            {\n              find: /^react-native\\/Libraries\\/.*/,\n              replacement: resolvePath(\"@vxrn/vite-plugin-metro/empty\", options.root)\n            },\n            {\n              // react native 0.87 removed @react-native/assets-registry, but libraries\n              // like react-native-svg still import its registry\n              find: /^(react-native\\/asset-registry|@react-native\\/assets-registry\\/registry)$/,\n              replacement: \"react-native-web/dist/modules/AssetRegistry\"\n            },\n            {\n              find: \"react-native/package.json\",\n              replacement: \"react-native-web/package.json\"\n            },\n            {\n              find: \"react-native\",\n              replacement: \"react-native-web\"\n            },\n            ...Object.entries(absorbedPackageAliases(options.root, \"web\")).map(\n              ([find, replacement]) => ({ find, replacement })\n            )\n          ],\n          // the aliases name react-native-web by package, so it resolves from\n          // the app root only once something imports react-native: an app\n          // with no react-native imports needs no react-native-web.\n          dedupe: [\"react-native-web\"]\n        },\n        build: {\n          outDir,\n          emptyOutDir: false,\n          rolldownOptions: {\n            // packages the app keeps out of its ssr bundle (native bindings\n            // used only by build-time loaders) stay out of the worker too\n            external: workerExternals,\n            // Match the main web build behavior so RN packages that import\n            // native-only symbols from react-native can still bundle against\n            // the react-native-web alias in the worker graph.\n            shimMissingExports: true,\n            // cloudflare's module worker can contain circular shared chunks\n            // when one package is used by both browser-facing SSR code and API\n            // routes. preserve source import order so a dependent chunk cannot\n            // evaluate against partially initialized exports.\n            output: {\n              strictExecutionOrder: true\n            }\n          }\n        }\n      });\n      const workerEnv = builder.environments.worker;\n      if (!workerEnv) {\n        throw new Error('[one] plugin did not register \"worker\" environment');\n      }\n      await builder.build(workerEnv);\n      await FSExtra.remove(workerSrcPath);\n      await FSExtra.remove(wranglerInputPath);\n      await finalizeCloudflareWranglerDeployConfig(\n        join(options.root, outDir, \"worker\", \"wrangler.json\")\n      );\n      if (userWranglerConfig) {\n        console.info(\n          ` [cloudflare] Merging ${relative(options.root, userWranglerConfig.path)} into ${outDir}/worker/wrangler.json`\n        );\n      }\n      postBuildLogs.push(`Cloudflare worker bundled at ${outDir}/worker/index.js`);\n      postBuildLogs.push(`To deploy: wrangler deploy`);\n      break;\n    }\n  }\n  const securityScanOption = oneOptions.build?.securityScan;\n  const securityScanLevel = securityScanOption === false ? null : securityScanOption === true || securityScanOption === void 0 ? \"warn\" : typeof securityScanOption === \"string\" ? securityScanOption : securityScanOption.level ?? \"warn\";\n  const securitySafePatterns = typeof securityScanOption === \"object\" && securityScanOption !== null ? securityScanOption.safePatterns : void 0;\n  if (securityScanLevel) {\n    const { runSecurityScan } = await import(\"./securityScan\");\n    const passed = await runSecurityScan(\n      clientDir,\n      securityScanLevel,\n      securitySafePatterns\n    );\n    if (!passed) {\n      process.exit(1);\n    }\n  }\n  if (postBuildLogs.length) {\n    console.info(`\n\n`);\n    postBuildLogs.forEach((log) => {\n      console.info(`  \\xB7 ${log}`);\n    });\n  }\n  console.info(`\n \\u{1F49B} build complete\n`);\n}\nconst TRAILING_INDEX_REGEX = /\\/index(\\.(web))?/;\nfunction getCleanPaths(possiblePaths) {\n  return Array.from(\n    new Set(\n      Array.from(new Set(possiblePaths)).flatMap((p) => {\n        const paths = [p];\n        if (p.match(TRAILING_INDEX_REGEX)) {\n          const pathWithTrailingIndexRemoved = p.replace(TRAILING_INDEX_REGEX, \"\");\n          paths.push(pathWithTrailingIndexRemoved);\n          paths.push(pathWithTrailingIndexRemoved + \"/\");\n        }\n        return paths;\n      })\n    )\n  );\n}\nasync function moveAllFiles(src, dest) {\n  try {\n    await FSExtra.copy(src, dest, { overwrite: true, errorOnExist: false });\n  } catch (err) {\n    console.error(\"Error moving files:\", err);\n  }\n}\nexport {\n  build\n};\n//# sourceMappingURL=build.js.map\n"],"mappings":"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"}