@rozenite/repack
Version:
Re.Pack bundler plugin for Rozenite.
71 lines (70 loc) • 2.05 kB
JavaScript
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
};