salvia 0.2.1 → 0.2.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/lib/salvia/helpers/island.rb +22 -18
- data/lib/salvia/server/dev_server.rb +2 -2
- data/lib/salvia/ssr.rb +26 -0
- data/lib/salvia/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3f10f43f325ea1dc3a70812cacdee94dcf5cf73e2bff36c8b6587a013cd41053
|
|
4
|
+
data.tar.gz: 3c1d38a5a04521e07f8407bb54ebd156c99bf1bda4a29f5ead524391926ad40b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 497ef52428844aaadeeea4a106b9d856e8d1f372fc1855a6cca189418ad49afc31b324dea675250aa2abb5ba6ddfe9dd3d6ede1f83a56e79e21bf3f7b79cba3a
|
|
7
|
+
data.tar.gz: 56ef7534860e9a60f364004ead279e5a06032cef1f20285e42f5b05f62eb54147f08b54bbe55ae0dc483bc805a86670cc8a600164e95af659b56d84f565615ad
|
|
@@ -74,7 +74,9 @@ module Salvia
|
|
|
74
74
|
# @example ハイドレーションを無効化 (静的 HTML のみ)
|
|
75
75
|
# <%= island "StaticCard", title: "Hello", hydrate: false %>
|
|
76
76
|
#
|
|
77
|
+
# @deprecated Use Salvia::SSR.render in controller instead.
|
|
77
78
|
def island(name, props = {}, options = {})
|
|
79
|
+
warn "[DEPRECATION] `island` helper is deprecated. Please use `Salvia::SSR.render` in your controller (API Mode) instead."
|
|
78
80
|
tag_name = options.delete(:tag) || :div
|
|
79
81
|
|
|
80
82
|
# デフォルトの hydrate 値を決定
|
|
@@ -147,26 +149,28 @@ module Salvia
|
|
|
147
149
|
# @param options [Hash] オプション
|
|
148
150
|
# @option options [Boolean] :doctype <!DOCTYPE html> を付与するか (デフォルト: true)
|
|
149
151
|
# @return [String] 完全な HTML 文字列
|
|
150
|
-
def
|
|
151
|
-
|
|
152
|
-
html = Salvia::SSR.render(name, props)
|
|
153
|
-
|
|
154
|
-
# <head> がある場合、Import Map を自動注入
|
|
155
|
-
if html.include?("</head>")
|
|
156
|
-
import_map_html = salvia_import_map
|
|
157
|
-
html = html.sub("</head>", "#{import_map_html}</head>")
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
result = html
|
|
161
|
-
if options.fetch(:doctype, true)
|
|
162
|
-
result = "<!DOCTYPE html>\n" + result
|
|
163
|
-
end
|
|
164
|
-
|
|
152
|
+
def salvia_page(name, props = {}, options = {})
|
|
153
|
+
result = Salvia::SSR.render_page(name, props, options)
|
|
165
154
|
result.respond_to?(:html_safe) ? result.html_safe : result
|
|
166
155
|
end
|
|
167
|
-
|
|
168
|
-
#
|
|
169
|
-
|
|
156
|
+
|
|
157
|
+
# コンポーネントをレンダリングする (Turbo Streams / Partials用)
|
|
158
|
+
#
|
|
159
|
+
# HTMLフラグメントのみを返します (DOCTYPEやImport Mapは付与しません)。
|
|
160
|
+
#
|
|
161
|
+
# @param name [String] コンポーネント名 (例: "components/Card")
|
|
162
|
+
# @param props [Hash] プロパティ
|
|
163
|
+
# @return [String] HTML文字列
|
|
164
|
+
def salvia_component(name, props = {})
|
|
165
|
+
result = Salvia::SSR.render(name, props)
|
|
166
|
+
result.respond_to?(:html_safe) ? result.html_safe : result
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# @deprecated Use salvia_page instead.
|
|
170
|
+
def ssr(name, props = {}, options = {})
|
|
171
|
+
warn "[DEPRECATION] `ssr` helper is deprecated. Please use `salvia_page` instead."
|
|
172
|
+
salvia_page(name, props, options)
|
|
173
|
+
end
|
|
170
174
|
|
|
171
175
|
private
|
|
172
176
|
|
|
@@ -40,9 +40,9 @@ module Salvia
|
|
|
40
40
|
return serve_islands_js
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
# Remove
|
|
43
|
+
# Remove extension to find source (supports .js, .tsx, .ts, .jsx)
|
|
44
44
|
# Also handle requests without extension (from import map resolution)
|
|
45
|
-
base_name = path_info.sub(/\.js$/, "")
|
|
45
|
+
base_name = path_info.sub(/\.(js|tsx|ts|jsx)$/, "")
|
|
46
46
|
|
|
47
47
|
source_path = resolve_source_path(base_name)
|
|
48
48
|
|
data/lib/salvia/ssr.rb
CHANGED
|
@@ -89,6 +89,32 @@ module Salvia
|
|
|
89
89
|
current_adapter.render(component_name, props)
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
+
# ページコンポーネントをレンダリング (Import Map 注入 + DOCTYPE)
|
|
93
|
+
# @param component_name [String] コンポーネント名
|
|
94
|
+
# @param props [Hash] プロパティ
|
|
95
|
+
# @param options [Hash] オプション
|
|
96
|
+
# @return [String] 完全な HTML 文字列
|
|
97
|
+
def render_page(component_name, props = {}, options = {})
|
|
98
|
+
html = render(component_name, props)
|
|
99
|
+
|
|
100
|
+
# <head> がある場合、Import Map を自動注入
|
|
101
|
+
if html.include?("</head>")
|
|
102
|
+
map = Salvia::Core::ImportMap.generate
|
|
103
|
+
import_map_html = <<~HTML
|
|
104
|
+
<script type="importmap">
|
|
105
|
+
#{map.to_json}
|
|
106
|
+
</script>
|
|
107
|
+
HTML
|
|
108
|
+
html = html.sub("</head>", "#{import_map_html}</head>")
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
if options.fetch(:doctype, true)
|
|
112
|
+
html = "<!DOCTYPE html>\n" + html
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
html
|
|
116
|
+
end
|
|
117
|
+
|
|
92
118
|
# コンポーネントを登録
|
|
93
119
|
def register_component(name, code)
|
|
94
120
|
ensure_configured!
|
data/lib/salvia/version.rb
CHANGED