UNPKG

@rozenite/repack

Version:
71 lines (70 loc) 2.05 kB
import { initializeRozenite } from "@rozenite/middleware"; import fs from "node:fs"; import { createRequire } from "node:module"; import semver from "semver"; import { logger } from "@rozenite/tools"; const REQUIRED_REPACK_VERSION = "5.2"; const require2 = createRequire(import.meta.url); const getRepackPackageJsonPath = (projectRoot) => { try { return require2.resolve("@callstack/repack/package.json", { paths: [projectRoot] }); } catch { return null; } }; const assertSupportedRePackVersion = (projectRoot) => { const packageJsonPath = getRepackPackageJsonPath(projectRoot); if (!packageJsonPath) { logger.error( `Re.Pack is not installed in the project. Please install it to continue using Rozenite.` ); process.exit(1); } const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")); const repackVersion = packageJson.version; if (semver.satisfies(repackVersion, `>=${REQUIRED_REPACK_VERSION}`)) { return; } logger.error( `Rozenite requires Re.Pack ${REQUIRED_REPACK_VERSION} or higher. Current version: ${repackVersion} Please upgrade your Re.Pack version to continue using Rozenite.` ); process.exit(1); }; const patchConfig = (config, rozeniteConfig) => { return { ...config, devServer: { ...config.devServer, setupMiddlewares: (middlewares) => { const { middleware: rozeniteMiddleware } = initializeRozenite(rozeniteConfig); middlewares.unshift(rozeniteMiddleware); return middlewares; } } }; }; const withRozenite = (config, rozeniteConfig = {}) => { assertSupportedRePackVersion(process.cwd()); if (!rozeniteConfig.enabled) { return config; } return async (env) => { let resolvedConfig; if (typeof config === "function") { resolvedConfig = await config(env); } else { resolvedConfig = config; } return patchConfig(resolvedConfig, { projectRoot: env.context ?? process.cwd(), ...rozeniteConfig }); }; }; export { withRozenite };