react-native-builder-bob
Version:
CLI to build JavaScript files for React Native libraries
60 lines (59 loc) • 3.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = build;
var _kleur = _interopRequireDefault(require("kleur"));
var _patchCodegenAndroidPackage = require("./patches/patchCodegenAndroidPackage");
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _path = _interopRequireDefault(require("path"));
var _del = _interopRequireDefault(require("del"));
var _removeCodegenAppLevelCode = require("./patches/removeCodegenAppLevelCode");
var _spawn = require("../../utils/spawn");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
async function build({
root,
report
}) {
const packageJsonPath = _path.default.resolve(root, 'package.json');
const packageJson = await _fsExtra.default.readJson(packageJsonPath);
const codegenIosPath = packageJson.codegenConfig?.outputDir?.ios;
if (codegenIosPath != null) {
report.info(`Cleaning up previous iOS codegen native code at ${_kleur.default.blue(_path.default.relative(root, codegenIosPath))}`);
await (0, _del.default)([codegenIosPath]);
}
const codegenAndroidPath = packageJson.codegenConfig?.outputDir?.android;
if (codegenAndroidPath != null) {
report.info(`Cleaning up previous Android codegen native code at ${_kleur.default.blue(_path.default.relative(root, codegenAndroidPath))}`);
await (0, _del.default)([codegenAndroidPath]);
}
const codegenType = packageJson.codegenConfig?.type;
if (codegenType === undefined) {
throw new Error("Couldn't find the 'type' value in 'codegenConfig'. Please check your package.json's 'codegenConfig' property and make sure 'type' is defined. https://reactnative.dev/docs/the-new-architecture/using-codegen#configuring-codegen");
}
try {
const codegenCLISupportsSource = await (0, _removeCodegenAppLevelCode.getCodegenCLISourceSupport)();
await (0, _spawn.spawn)('npx', ['@react-native-community/cli', 'codegen', ...(codegenCLISupportsSource ? ['--source', 'library'] : [])]);
if (codegenType === 'modules' || codegenType === 'all') {
await (0, _patchCodegenAndroidPackage.patchCodegenAndroidPackage)(root, packageJson, report);
}
if (!codegenCLISupportsSource) {
await (0, _removeCodegenAppLevelCode.removeCodegenAppLevelCode)(root, packageJson);
}
report.success('Generated native code with codegen');
} catch (e) {
if (e != null && typeof e === 'object') {
if ('stdout' in e && e.stdout != null) {
report.error(`Errors found while running codegen:\n\n${e.stdout.toString()}`);
} else if ('message' in e && typeof e.message === 'string') {
if (e.message.includes("Error: Cannot find module '@react-native-community/cli/package.json'")) {
report.error("You don't have `@react-native-community/cli` in your root package's dev dependencies. Please install it and make sure it uses the same version as your application.");
}
}
}
throw new Error('Failed to run codegen.', {
cause: e
});
}
}
//# sourceMappingURL=index.js.map