universal_renderer 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +15 -28
- data/lib/universal_renderer/renderable.rb +4 -4
- data/lib/universal_renderer/ssr/helpers.rb +3 -5
- data/lib/universal_renderer/ssr/placeholders.rb +2 -2
- data/lib/universal_renderer/version.rb +1 -1
- metadata +13 -7
- data/config/routes.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 551cd8e80275fa95b8c3f66672f4a4262a25f5f0038fe4c45375b9bc852fbabe
|
4
|
+
data.tar.gz: bad53819a7dfdbdb10fbe1d3317e3877fcb05dc4fc2663ed5954e4975d3bd5b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0eecc4335c6c69929077c77db58fd22e7dbc9db04eeb78efa16826e2b8a35425c270990c96141adf842db4a5d725eacda04f277edbab60f7df41b0580a9b1252
|
7
|
+
data.tar.gz: 4df736ee5b781353f2543f00badc3efbdecd1eebb66a2e6405ff8136599a0f1136ef2fc52dc2d27732cbf7c84bf15a3eb904d3303e7367e1b7c8923fdf0d176c
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# UniversalRenderer
|
2
2
|
|
3
|
+
[](https://github.com/thaske/universal_renderer/actions/workflows/ci.yml)
|
4
|
+
|
3
5
|
[](https://rubygems.org/gems/universal_renderer) [](https://www.npmjs.com/package/universal-renderer)
|
4
6
|
|
5
7
|
A streamlined solution for integrating Server-Side Rendering (SSR) into Rails applications.
|
@@ -10,22 +12,12 @@ UniversalRenderer helps you forward rendering requests to external SSR services,
|
|
10
12
|
|
11
13
|
## Features
|
12
14
|
|
13
|
-
- **
|
15
|
+
- **Streaming SSR** support
|
14
16
|
- **Configurable SSR server endpoint** and timeouts
|
15
17
|
- **Simple API** for passing data between Rails and your SSR service
|
16
18
|
- **Automatic fallback** to client-side rendering if SSR fails
|
17
19
|
- **View helpers** for easy integration into your layouts
|
18
20
|
|
19
|
-
## Requirements
|
20
|
-
|
21
|
-
> **Heads-up ⚠️** The JavaScript side of UniversalRenderer is **Bun-native**.
|
22
|
-
>
|
23
|
-
> • You **must** run the SSR server with **Bun ≥ 1.2**.
|
24
|
-
>
|
25
|
-
> • The exported helpers call Bun's built-in HTTP router and `Response` implementation; they **will not boot under Node, Deno, or Cloudflare Workers**.
|
26
|
-
>
|
27
|
-
> • The Ruby gem is runtime-agnostic and continues to work on every platform – only the SSR service requires Bun.
|
28
|
-
|
29
21
|
## Installation
|
30
22
|
|
31
23
|
1. Add to your Gemfile:
|
@@ -91,13 +83,13 @@ end
|
|
91
83
|
```erb
|
92
84
|
<%# "ssr/index" %>
|
93
85
|
|
94
|
-
<%# Inject SSR snippets using the provided helpers
|
95
|
-
|
96
|
-
|
86
|
+
<%# Inject SSR snippets using the provided helpers %>
|
87
|
+
<%# When streaming is enabled these render HTML placeholders %>
|
88
|
+
<%# Otherwise they output the sanitised HTML returned by the SSR service %>
|
97
89
|
|
98
|
-
|
90
|
+
<%= content_for :head do %>
|
99
91
|
<%= ssr_head %>
|
100
|
-
|
92
|
+
<% end %>
|
101
93
|
|
102
94
|
<div id="root">
|
103
95
|
<%= ssr_body %>
|
@@ -143,7 +135,7 @@ To set up the SSR server for your Rails application:
|
|
143
135
|
query_data.forEach(({ key, data }) => queryClient.setQueryData(key, data));
|
144
136
|
const state = dehydrate(queryClient);
|
145
137
|
|
146
|
-
const
|
138
|
+
const app = sheet.collectStyles(
|
147
139
|
<HelmetProvider context={helmetContext}>
|
148
140
|
<Metadata url={url} />
|
149
141
|
<QueryClientProvider client={queryClient}>
|
@@ -155,7 +147,7 @@ To set up the SSR server for your Rails application:
|
|
155
147
|
</HelmetProvider>,
|
156
148
|
);
|
157
149
|
|
158
|
-
return {
|
150
|
+
return { app, helmetContext, sheet, queryClient };
|
159
151
|
}
|
160
152
|
```
|
161
153
|
|
@@ -196,18 +188,10 @@ To set up the SSR server for your Rails application:
|
|
196
188
|
import { head, transform } from "@/ssr/utils";
|
197
189
|
import { renderToString } from "react-dom/server.node";
|
198
190
|
import { createServer } from "universal-renderer";
|
199
|
-
import { createServer as createViteServer } from "vite";
|
200
|
-
|
201
|
-
const vite = await createViteServer({
|
202
|
-
server: { middlewareMode: true },
|
203
|
-
appType: "custom",
|
204
|
-
});
|
205
|
-
|
206
|
-
await createServer({
|
207
|
-
port: 3001,
|
208
|
-
middleware: vite.middlewares,
|
209
191
|
|
192
|
+
const app = await createServer({
|
210
193
|
setup: (await import("@/ssr/setup")).default,
|
194
|
+
|
211
195
|
render: ({ app, helmet, sheet }) => {
|
212
196
|
const root = renderToString(app);
|
213
197
|
const styles = sheet.getStyleTags();
|
@@ -216,11 +200,14 @@ To set up the SSR server for your Rails application:
|
|
216
200
|
body: `${root}\n${styles}`,
|
217
201
|
};
|
218
202
|
},
|
203
|
+
|
219
204
|
cleanup: ({ sheet, queryClient }) => {
|
220
205
|
sheet?.seal();
|
221
206
|
queryClient?.clear();
|
222
207
|
},
|
223
208
|
});
|
209
|
+
|
210
|
+
app.listen(3001);
|
224
211
|
```
|
225
212
|
|
226
213
|
5. Build the SSR bundle:
|
@@ -39,12 +39,12 @@ module UniversalRenderer
|
|
39
39
|
self.class.try(:ssr_streaming_preference)
|
40
40
|
end
|
41
41
|
|
42
|
-
def render(
|
42
|
+
def render(*, **)
|
43
43
|
return super unless self.class.enable_ssr
|
44
44
|
return super unless request.format.html?
|
45
45
|
|
46
46
|
if ssr_streaming?
|
47
|
-
success = render_ssr_stream(
|
47
|
+
success = render_ssr_stream(*, **)
|
48
48
|
super unless success
|
49
49
|
else
|
50
50
|
fetch_ssr
|
@@ -54,8 +54,8 @@ module UniversalRenderer
|
|
54
54
|
|
55
55
|
private
|
56
56
|
|
57
|
-
def render_ssr_stream(
|
58
|
-
full_layout = render_to_string(
|
57
|
+
def render_ssr_stream(*, **)
|
58
|
+
full_layout = render_to_string(*, **)
|
59
59
|
current_props = @universal_renderer_props.dup
|
60
60
|
|
61
61
|
streaming_succeeded =
|
@@ -7,7 +7,7 @@ module UniversalRenderer
|
|
7
7
|
# @return [String] The HTML-safe string "<!-- SSR_HEAD -->".
|
8
8
|
def ssr_head
|
9
9
|
if ssr_streaming?
|
10
|
-
Placeholders::HEAD
|
10
|
+
Placeholders::HEAD
|
11
11
|
elsif @ssr && @ssr.head.present?
|
12
12
|
sanitize_ssr(@ssr.head)
|
13
13
|
else
|
@@ -21,7 +21,7 @@ module UniversalRenderer
|
|
21
21
|
# @return [String] The HTML-safe string "<!-- SSR_BODY -->".
|
22
22
|
def ssr_body
|
23
23
|
if ssr_streaming?
|
24
|
-
Placeholders::BODY
|
24
|
+
Placeholders::BODY
|
25
25
|
elsif @ssr && @ssr.body.present?
|
26
26
|
sanitize_ssr(@ssr.body)
|
27
27
|
else
|
@@ -49,9 +49,7 @@ module UniversalRenderer
|
|
49
49
|
# - If `ssr_streaming_preference` is `nil` (not set), streaming is disabled.
|
50
50
|
# @return [Boolean, nil] The value of `ssr_streaming_preference` (true, false, or nil).
|
51
51
|
# In conditional contexts, `nil` will behave as `false`.
|
52
|
-
|
53
|
-
controller.ssr_streaming?
|
54
|
-
end
|
52
|
+
delegate :ssr_streaming?, to: :controller
|
55
53
|
end
|
56
54
|
end
|
57
55
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: universal_renderer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thaske
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: loofah
|
@@ -27,16 +27,22 @@ dependencies:
|
|
27
27
|
name: rails
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
|
-
- - "
|
30
|
+
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '7.1'
|
33
|
+
- - "<"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '9.0'
|
33
36
|
type: :runtime
|
34
37
|
prerelease: false
|
35
38
|
version_requirements: !ruby/object:Gem::Requirement
|
36
39
|
requirements:
|
37
|
-
- - "
|
40
|
+
- - ">="
|
38
41
|
- !ruby/object:Gem::Version
|
39
42
|
version: '7.1'
|
43
|
+
- - "<"
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '9.0'
|
40
46
|
description: Provides helper methods and configuration to forward rendering requests
|
41
47
|
from a Rails app to an external SSR server and return the response.
|
42
48
|
email:
|
@@ -48,7 +54,6 @@ files:
|
|
48
54
|
- MIT-LICENSE
|
49
55
|
- README.md
|
50
56
|
- Rakefile
|
51
|
-
- config/routes.rb
|
52
57
|
- lib/generators/universal_renderer/install_generator.rb
|
53
58
|
- lib/generators/universal_renderer/templates/initializer.rb
|
54
59
|
- lib/tasks/universal_renderer_tasks.rake
|
@@ -73,6 +78,7 @@ metadata:
|
|
73
78
|
allowed_push_host: https://rubygems.org
|
74
79
|
homepage_uri: https://github.com/thaske/universal_renderer
|
75
80
|
changelog_uri: https://github.com/thaske/universal_renderer/blob/main/CHANGELOG.md
|
81
|
+
rubygems_mfa_required: 'true'
|
76
82
|
rdoc_options: []
|
77
83
|
require_paths:
|
78
84
|
- lib
|
@@ -80,14 +86,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
86
|
requirements:
|
81
87
|
- - ">="
|
82
88
|
- !ruby/object:Gem::Version
|
83
|
-
version: 3.
|
89
|
+
version: 3.2.0
|
84
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
91
|
requirements:
|
86
92
|
- - ">="
|
87
93
|
- !ruby/object:Gem::Version
|
88
94
|
version: '0'
|
89
95
|
requirements: []
|
90
|
-
rubygems_version: 3.6.
|
96
|
+
rubygems_version: 3.6.9
|
91
97
|
specification_version: 4
|
92
98
|
summary: Facilitates Server-Side Rendering (SSR) in Rails applications.
|
93
99
|
test_files: []
|
data/config/routes.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
Rails.application.routes.draw {}
|