Class: ReactOnRailsPro::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/react_on_rails_pro/configuration.rb

Overview

rubocop:disable Metrics/ClassLength

Constant Summary collapse

DEFAULT_RENDERER_URL =
"http://localhost:3800"
DEFAULT_RENDERER_METHOD =
"ExecJS"
DEFAULT_RENDERER_FALLBACK_EXEC_JS =
true
DEFAULT_RENDERER_HTTP_POOL_SIZE =
10
DEFAULT_RENDERER_HTTP_POOL_TIMEOUT =
5
DEFAULT_RENDERER_HTTP_POOL_WARN_TIMEOUT =
0.25
DEFAULT_SSR_TIMEOUT =
5
DEFAULT_PRERENDER_CACHING =
false
DEFAULT_TRACING =
false
DEFAULT_DEPENDENCY_GLOBS =
[].freeze
DEFAULT_EXCLUDED_DEPENDENCY_GLOBS =
[].freeze
DEFAULT_REMOTE_BUNDLE_CACHE_ADAPTER =
nil
DEFAULT_RENDERER_REQUEST_RETRY_LIMIT =
5
DEFAULT_THROW_JS_ERRORS =
true
DEFAULT_RENDERING_RETURNS_PROMISES =
false
DEFAULT_PROFILE_SERVER_RENDERING_JS_CODE =
false
DEFAULT_RAISE_NON_SHELL_SERVER_RENDERING_ERRORS =
false
DEFAULT_ENABLE_RSC_SUPPORT =
false
DEFAULT_RSC_PAYLOAD_GENERATION_URL_PATH =
"rsc_payload/"
DEFAULT_RSC_BUNDLE_JS_FILE =
"rsc-bundle.js"
DEFAULT_REACT_CLIENT_MANIFEST_FILE =
"react-client-manifest.json"
DEFAULT_REACT_SERVER_CLIENT_MANIFEST_FILE =
"react-server-client-manifest.json"
DEFAULT_CONCURRENT_COMPONENT_STREAMING_BUFFER_SIZE =
64

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(renderer_url: nil, renderer_password: nil, server_renderer: nil, renderer_use_fallback_exec_js: nil, prerender_caching: nil, renderer_http_pool_size: nil, renderer_http_pool_timeout: nil, renderer_http_pool_warn_timeout: nil, tracing: nil, dependency_globs: nil, excluded_dependency_globs: nil, rendering_returns_promises: nil, remote_bundle_cache_adapter: nil, ssr_pre_hook_js: nil, assets_to_copy: nil, renderer_request_retry_limit: nil, throw_js_errors: nil, ssr_timeout: nil, profile_server_rendering_js_code: nil, raise_non_shell_server_rendering_errors: nil, enable_rsc_support: nil, rsc_payload_generation_url_path: nil, rsc_bundle_js_file: nil, react_client_manifest_file: nil, react_server_client_manifest_file: nil, concurrent_component_streaming_buffer_size: DEFAULT_CONCURRENT_COMPONENT_STREAMING_BUFFER_SIZE) ⇒ Configuration

rubocop:disable Metrics/AbcSize



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/react_on_rails_pro/configuration.rb', line 94

def initialize(renderer_url: nil, renderer_password: nil, server_renderer: nil, # rubocop:disable Metrics/AbcSize
               renderer_use_fallback_exec_js: nil, prerender_caching: nil,
               renderer_http_pool_size: nil, renderer_http_pool_timeout: nil,
               renderer_http_pool_warn_timeout: nil, tracing: nil,
               dependency_globs: nil, excluded_dependency_globs: nil, rendering_returns_promises: nil,
               remote_bundle_cache_adapter: nil, ssr_pre_hook_js: nil, assets_to_copy: nil,
               renderer_request_retry_limit: nil, throw_js_errors: nil, ssr_timeout: nil,
               profile_server_rendering_js_code: nil, raise_non_shell_server_rendering_errors: nil,
               enable_rsc_support: nil, rsc_payload_generation_url_path: nil,
               rsc_bundle_js_file: nil, react_client_manifest_file: nil,
               react_server_client_manifest_file: nil,
               concurrent_component_streaming_buffer_size: DEFAULT_CONCURRENT_COMPONENT_STREAMING_BUFFER_SIZE)
  self.renderer_url = renderer_url
  self.renderer_password = renderer_password
  self.server_renderer = server_renderer
  self.renderer_use_fallback_exec_js = renderer_use_fallback_exec_js
  self.prerender_caching = prerender_caching
  self.renderer_http_pool_size = renderer_http_pool_size
  self.renderer_http_pool_timeout = renderer_http_pool_timeout
  self.renderer_http_pool_warn_timeout = renderer_http_pool_warn_timeout
  self.tracing = tracing
  self.rendering_returns_promises = server_renderer == "NodeRenderer" ? rendering_returns_promises : false
  self.dependency_globs = dependency_globs
  self.excluded_dependency_globs = excluded_dependency_globs
  self.remote_bundle_cache_adapter = remote_bundle_cache_adapter
  self.ssr_pre_hook_js = ssr_pre_hook_js
  self.assets_to_copy = assets_to_copy
  self.renderer_request_retry_limit = renderer_request_retry_limit
  self.throw_js_errors = throw_js_errors
  self.ssr_timeout = ssr_timeout
  self.profile_server_rendering_js_code = profile_server_rendering_js_code
  self.raise_non_shell_server_rendering_errors = raise_non_shell_server_rendering_errors
  self.enable_rsc_support = enable_rsc_support
  self.rsc_payload_generation_url_path = rsc_payload_generation_url_path
  self.rsc_bundle_js_file = rsc_bundle_js_file
  self.react_client_manifest_file = react_client_manifest_file
  self.react_server_client_manifest_file = react_server_client_manifest_file
  self.concurrent_component_streaming_buffer_size = concurrent_component_streaming_buffer_size
end

Instance Attribute Details

#assets_to_copyObject

Returns the value of attribute assets_to_copy.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def assets_to_copy
  @assets_to_copy
end

#concurrent_component_streaming_buffer_sizeObject

Returns the value of attribute concurrent_component_streaming_buffer_size.



75
76
77
# File 'lib/react_on_rails_pro/configuration.rb', line 75

def concurrent_component_streaming_buffer_size
  @concurrent_component_streaming_buffer_size
end

#dependency_globsObject

Returns the value of attribute dependency_globs.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def dependency_globs
  @dependency_globs
end

#enable_rsc_supportObject

Returns the value of attribute enable_rsc_support.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def enable_rsc_support
  @enable_rsc_support
end

#excluded_dependency_globsObject

Returns the value of attribute excluded_dependency_globs.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def excluded_dependency_globs
  @excluded_dependency_globs
end

#prerender_cachingObject

Returns the value of attribute prerender_caching.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def prerender_caching
  @prerender_caching
end

#profile_server_rendering_js_codeObject

Returns the value of attribute profile_server_rendering_js_code.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def profile_server_rendering_js_code
  @profile_server_rendering_js_code
end

#raise_non_shell_server_rendering_errorsObject

Returns the value of attribute raise_non_shell_server_rendering_errors.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def raise_non_shell_server_rendering_errors
  @raise_non_shell_server_rendering_errors
end

#react_client_manifest_fileObject

Returns the value of attribute react_client_manifest_file.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def react_client_manifest_file
  @react_client_manifest_file
end

#react_server_client_manifest_fileObject

Returns the value of attribute react_server_client_manifest_file.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def react_server_client_manifest_file
  @react_server_client_manifest_file
end

#remote_bundle_cache_adapterObject

Returns the value of attribute remote_bundle_cache_adapter.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def remote_bundle_cache_adapter
  @remote_bundle_cache_adapter
end

#renderer_http_pool_sizeObject

Returns the value of attribute renderer_http_pool_size.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def renderer_http_pool_size
  @renderer_http_pool_size
end

#renderer_http_pool_timeoutObject

Returns the value of attribute renderer_http_pool_timeout.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def renderer_http_pool_timeout
  @renderer_http_pool_timeout
end

#renderer_http_pool_warn_timeoutObject

Returns the value of attribute renderer_http_pool_warn_timeout.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def renderer_http_pool_warn_timeout
  @renderer_http_pool_warn_timeout
end

#renderer_passwordObject

Returns the value of attribute renderer_password.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def renderer_password
  @renderer_password
end

#renderer_request_retry_limitObject

Returns the value of attribute renderer_request_retry_limit.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def renderer_request_retry_limit
  @renderer_request_retry_limit
end

#renderer_urlObject

Returns the value of attribute renderer_url.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def renderer_url
  @renderer_url
end

#renderer_use_fallback_exec_jsObject

Returns the value of attribute renderer_use_fallback_exec_js.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def renderer_use_fallback_exec_js
  @renderer_use_fallback_exec_js
end

#rendering_returns_promisesObject

Returns the value of attribute rendering_returns_promises.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def rendering_returns_promises
  @rendering_returns_promises
end

#rsc_bundle_js_fileObject

Returns the value of attribute rsc_bundle_js_file.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def rsc_bundle_js_file
  @rsc_bundle_js_file
end

#rsc_payload_generation_url_pathObject

Returns the value of attribute rsc_payload_generation_url_path.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def rsc_payload_generation_url_path
  @rsc_payload_generation_url_path
end

#server_rendererObject

Returns the value of attribute server_renderer.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def server_renderer
  @server_renderer
end

#ssr_pre_hook_jsObject

Returns the value of attribute ssr_pre_hook_js.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def ssr_pre_hook_js
  @ssr_pre_hook_js
end

#ssr_timeoutObject

Returns the value of attribute ssr_timeout.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def ssr_timeout
  @ssr_timeout
end

#throw_js_errorsObject

Returns the value of attribute throw_js_errors.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def throw_js_errors
  @throw_js_errors
end

#tracingObject

Returns the value of attribute tracing.



65
66
67
# File 'lib/react_on_rails_pro/configuration.rb', line 65

def tracing
  @tracing
end

Instance Method Details

#check_react_on_rails_support_for_rscObject



144
145
146
147
148
149
150
151
152
153
# File 'lib/react_on_rails_pro/configuration.rb', line 144

def check_react_on_rails_support_for_rsc
  return unless enable_rsc_support

  return if ReactOnRails::Utils.respond_to?(:rsc_support_enabled?)

  raise ReactOnRailsPro::Error, <<~MSG
    React Server Components (RSC) support requires react_on_rails version 15.0.0 or higher.
    Please upgrade your react_on_rails gem to enable this feature.
  MSG
end

#node_renderer?Boolean

Returns:

  • (Boolean)


183
184
185
# File 'lib/react_on_rails_pro/configuration.rb', line 183

def node_renderer?
  ReactOnRailsPro.configuration.server_renderer == "NodeRenderer"
end

#setup_config_valuesObject



134
135
136
137
138
139
140
141
142
# File 'lib/react_on_rails_pro/configuration.rb', line 134

def setup_config_values
  configure_default_url_if_not_provided
  validate_url
  validate_remote_bundle_cache_adapter
  setup_renderer_password
  setup_assets_to_copy
  setup_execjs_profiler_if_needed
  check_react_on_rails_support_for_rsc
end

#setup_execjs_profiler_if_neededObject



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/react_on_rails_pro/configuration.rb', line 155

def setup_execjs_profiler_if_needed
  return unless profile_server_rendering_js_code && server_renderer == "ExecJS"

  if ExecJS.runtime == ExecJS::Runtimes::Node
    ExecJS.runtime = ExecJS::ExternalRuntime.new(
      name: "Node.js (V8)",
      command: ["node --prof"],
      runner_path: "#{ExecJS.root}/support/node_runner.js",
      encoding: "UTF-8"
    )
  elsif ExecJS.runtime == ExecJS::Runtimes::V8
    ExecJS.runtime = ExecJS::ExternalRuntime.new(
      name: "V8",
      command: ["d8 --prof"],
      runner_path: "#{ExecJS.root}/support/v8_runner.js",
      encoding: "UTF-8"
    )
  else
    current_runtime = ExecJS.runtime.name
    message = <<~MSG
      You have set `profile_server_rendering_js_code` to true, but the current execjs runtime is #{current_runtime}.
      ExecJS profiler only supports Node.js (V8) or V8 runtimes.
      You can set the runtime by setting the `EXECJS_RUNTIME` environment variable to either `Node` or `V8`.
    MSG
    raise ReactOnRailsPro::Error, message
  end
end