Skip to content
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions packages/react-native/scripts/cocoapods/__tests__/codegen-test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,18 @@ def testCheckAndGenerateEmptyThirdPartyProvider_whenHeaderMissingAndCodegenMissi
assert_equal(FileMock.exist_invocation_params, [
@base_path + "/" + @prefix + "/React/Fabric/" + @third_party_provider_header
])
assert_equal(DirMock.exist_invocation_params, [
@base_path + "/"+ @prefix + "/../react-native-codegen",
@base_path + "/"+ @prefix + "/../@react-native/codegen",
])
assert_equal(Pod::UI.collected_messages, [])
assert_equal($collected_commands, [])
assert_equal(FileMock.open_files.length, 0)
assert_equal(Pod::Executable.executed_commands.length, 0)
assert_equal(Pod::Executable.executed_commands, [
{
"arguments"=> [
"-p",
"require.resolve('@react-native/codegen/package.json', {paths: ['#{@base_path + "/"+ @prefix}']})"
],
"command"=>"node"
}
])
end

def testCheckAndGenerateEmptyThirdPartyProvider_whenImplementationMissingAndCodegenrepoExists_dontBuildCodegen()
Expand Down Expand Up @@ -130,7 +134,7 @@ def testCheckAndGenerateEmptyThirdPartyProvider_whenImplementationMissingAndCode
assert_equal(FileMock.open_files_with_mode[@prefix + "/React/Fabric/tmpSchemaList.txt"], nil)
assert_equal(FileMock.open_files[0].collected_write, ["[]"])
assert_equal(FileMock.open_files[0].fsync_invocation_count, 1)
assert_equal(Pod::Executable.executed_commands[0], {
assert_equal(Pod::Executable.executed_commands[1], {
"command" => "node",
"arguments" => [
@base_path + "/" + @prefix + "/scripts/generate-provider-cli.js",
Expand All @@ -145,7 +149,7 @@ def testCheckAndGenerateEmptyThirdPartyProvider_whenImplementationMissingAndCode

def testCheckAndGenerateEmptyThirdPartyProvider_whenBothMissing_buildCodegen()
# Arrange
codegen_cli_path = @base_path + "/" + @prefix + "/../@react-native/codegen"
codegen_cli_path = @base_path + "/" + @prefix + "/../react-native-codegen"
DirMock.mocked_existing_dirs([
codegen_cli_path,
])
Expand All @@ -160,18 +164,17 @@ def testCheckAndGenerateEmptyThirdPartyProvider_whenBothMissing_buildCodegen()
@base_path + "/" + @prefix + "/React/Fabric/" + @tmp_schema_list_file
])
assert_equal(DirMock.exist_invocation_params, [
@base_path + "/" + @prefix + "/../react-native-codegen",
codegen_cli_path,
codegen_cli_path + "/lib",
])
assert_equal(Pod::UI.collected_messages, [
"[Codegen] building #{codegen_cli_path}.",
"[Codegen] generating an empty RCTThirdPartyFabricComponentsProvider"
])
assert_equal($collected_commands, ["~/app/ios/../../../@react-native/codegen/scripts/oss/build.sh"])
assert_equal($collected_commands, ["~/app/ios/../../../react-native-codegen/scripts/oss/build.sh"])
assert_equal(FileMock.open_files[0].collected_write, ["[]"])
assert_equal(FileMock.open_files[0].fsync_invocation_count, 1)
assert_equal(Pod::Executable.executed_commands[0], {
assert_equal(Pod::Executable.executed_commands[1], {
"command" => "node",
"arguments" => [
@base_path + "/" + @prefix + "/scripts/generate-provider-cli.js",
Expand All @@ -185,7 +188,7 @@ def testCheckAndGenerateEmptyThirdPartyProvider_whenBothMissing_buildCodegen()
def testCheckAndGenerateEmptyThirdPartyProvider_withAbsoluteReactNativePath_buildCodegen()
# Arrange
rn_path = 'packages/react-native'
codegen_cli_path = rn_path + "/../@react-native/codegen"
codegen_cli_path = rn_path + "/../react-native-codegen"
DirMock.mocked_existing_dirs([
@base_path + "/" + codegen_cli_path,
])
Expand All @@ -201,18 +204,17 @@ def testCheckAndGenerateEmptyThirdPartyProvider_withAbsoluteReactNativePath_buil
@base_path + "/" + rn_path + "/React/Fabric/" + @tmp_schema_list_file
])
assert_equal(DirMock.exist_invocation_params, [
@base_path + "/" + rn_path + "/../react-native-codegen",
@base_path + "/" + codegen_cli_path,
@base_path + "/" + codegen_cli_path + "/lib",
])
assert_equal(Pod::UI.collected_messages, [
"[Codegen] building #{@base_path + "/" + codegen_cli_path}.",
"[Codegen] generating an empty RCTThirdPartyFabricComponentsProvider"
])
assert_equal($collected_commands, [@base_path + "/" + rn_path + "/../@react-native/codegen/scripts/oss/build.sh"])
assert_equal($collected_commands, [@base_path + "/" + rn_path + "/../react-native-codegen/scripts/oss/build.sh"])
assert_equal(FileMock.open_files[0].collected_write, ["[]"])
assert_equal(FileMock.open_files[0].fsync_invocation_count, 1)
assert_equal(Pod::Executable.executed_commands[0], {
assert_equal(Pod::Executable.executed_commands[1], {
"command" => "node",
"arguments" => [
@base_path + "/" + rn_path + "/scripts/generate-provider-cli.js",
Expand Down
31 changes: 17 additions & 14 deletions packages/react-native/scripts/cocoapods/codegen.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,26 @@
# - dir_manager: a class that implements the `Dir` interface. Defaults to `Dir`, the Dependency can be injected for testing purposes.
# @throws an error if it could not find the codegen folder.
def build_codegen!(react_native_path, relative_installation_root, dir_manager: Dir)
codegen_repo_path = "#{basePath(react_native_path, relative_installation_root)}/../react-native-codegen";
codegen_npm_path = "#{basePath(react_native_path, relative_installation_root)}/../@react-native/codegen";
codegen_cli_path = ""
react_native_relpath = "#{relative_installation_root}/#{react_native_path}"
codegen_json_path = Pod::Executable.execute_command('node', [
'-p',
"require.resolve('@react-native/codegen/package.json', {paths: ['#{react_native_relpath}']})"
])
if codegen_json_path.is_a? String
codegen_json_path = codegen_json_path.strip
codegen_path = Pathname.new(codegen_json_path).parent.relative_path_from(Pathname.pwd)
else
# This should only happen under testing
codegen_path = "#{react_native_relpath}/../react-native-codegen"
end

if dir_manager.exist?(codegen_repo_path)
codegen_cli_path = codegen_repo_path
elsif dir_manager.exist?(codegen_npm_path)
codegen_cli_path = codegen_npm_path
else
raise "[codegen] Could not find react-native-codegen."
end
raise "[Codegen] Could not find react-native-codegen" unless dir_manager.exist?(codegen_path)

if !dir_manager.exist?("#{codegen_cli_path}/lib")
Pod::UI.puts "[Codegen] building #{codegen_cli_path}."
system("#{codegen_cli_path}/scripts/oss/build.sh")
end
if !dir_manager.exist?("#{codegen_path}/lib")
Pod::UI.puts "[Codegen] building #{codegen_path}."
system("#{codegen_path}/scripts/oss/build.sh")
end
end

# It generates an empty `ThirdPartyProvider`, required by Fabric to load the components
#
Expand Down