From 0e372500716db37ba25ab05f204646cb7d30c0c2 Mon Sep 17 00:00:00 2001 From: Kevin Gozali Date: Tue, 11 Apr 2023 16:14:44 -0700 Subject: [PATCH] rn_codegen: define a method to convert package.json codegenConfig into Buck format (#36868) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36868 Given a codegenConfig definition in a library's package.json, convert it into Buck specific codegen format, as defined by the kwargs of rn_codegen(). Reference: https://reactnative.dev/docs/next/new-architecture-library-intro#configure-codegen Changelog: [Internal] Reviewed By: cortinico, mdvacca Differential Revision: D44857743 fbshipit-source-id: 0f4a3069b6c9abc7a4931257716a53c3074aa5d3 --- tools/build_defs/oss/rn_codegen_defs.bzl | 29 ++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tools/build_defs/oss/rn_codegen_defs.bzl b/tools/build_defs/oss/rn_codegen_defs.bzl index ced719349d44..62713fcd2c37 100644 --- a/tools/build_defs/oss/rn_codegen_defs.bzl +++ b/tools/build_defs/oss/rn_codegen_defs.bzl @@ -99,3 +99,32 @@ def rn_codegen( schema_target = ":codegen_rn_components_schema_{}".format(component_spec_name), library_labels = library_labels, ) + +# Given the codegenConfig defined inside package.json, convert it to the Buck specific configs. +# Specification: https://reactnative.dev/docs/next/new-architecture-library-intro#configure-codegen +def buck_codegen_config_from_package_codegen_config(package_codegen_config): + configs = {} + + name = package_codegen_config["name"] + android_package_name = "com.facebook.fbreact.specs" + if "android" in package_codegen_config: + android_config = package_codegen_config["android"] + if "javaPackageName" in android_config: + # Note: assume Kotlin will use the same package name + android_package_name = android_config["javaPackageName"] + + codegen_type = package_codegen_config["type"] + if codegen_type == "modules" or codegen_type == "all": + configs["codegen_modules"] = True + configs["native_module_spec_name"] = name + configs["android_package_name"] = android_package_name + + if codegen_type == "components" or codegen_type == "all": + configs["codegen_components"] = True + configs["native_component_spec_name"] = name + configs["android_package_name"] = android_package_name + + js_srcs_dir = package_codegen_config["jsSrcsDir"] + configs["codegen_src_prefix"] = (js_srcs_dir + "/") if js_srcs_dir else "" + + return configs