turbo-rails 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.github/workflows/ci.yml +24 -0
- data/.gitignore +2 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +147 -0
- data/MIT-LICENSE +20 -0
- data/README.md +66 -0
- data/Rakefile +11 -0
- data/app/assets/javascripts/turbo.js +3161 -0
- data/app/channels/turbo/streams/broadcasts.rb +66 -0
- data/app/channels/turbo/streams/stream_name.rb +24 -0
- data/app/channels/turbo/streams_channel.rb +17 -0
- data/app/controllers/turbo/frames/frame_request.rb +24 -0
- data/app/controllers/turbo/native/navigation.rb +49 -0
- data/app/controllers/turbo/native/navigation_controller.rb +13 -0
- data/app/controllers/turbo/streams/turbo_streams_tag_builder.rb +22 -0
- data/app/helpers/turbo/drive_helper.rb +16 -0
- data/app/helpers/turbo/frames_helper.rb +23 -0
- data/app/helpers/turbo/includes_helper.rb +5 -0
- data/app/helpers/turbo/streams/action_helper.rb +25 -0
- data/app/helpers/turbo/streams_helper.rb +22 -0
- data/app/javascript/turbo/cable.js +16 -0
- data/app/javascript/turbo/cable_stream_source_element.js +27 -0
- data/app/javascript/turbo/index.js +3 -0
- data/app/jobs/turbo/streams/action_broadcast_job.rb +6 -0
- data/app/jobs/turbo/streams/broadcast_job.rb +7 -0
- data/app/models/concerns/turbo/broadcastable.rb +236 -0
- data/app/models/turbo/streams/tag_builder.rb +127 -0
- data/config/routes.rb +6 -0
- data/lib/install/turbo.rb +11 -0
- data/lib/tasks/turbo_tasks.rake +6 -0
- data/lib/turbo-rails.rb +17 -0
- data/lib/turbo/engine.rb +65 -0
- data/lib/turbo/test_assertions.rb +22 -0
- data/lib/turbo/version.rb +3 -0
- data/package.json +42 -0
- data/rollup.config.js +23 -0
- data/test/drive/drive_helper_test.rb +8 -0
- data/test/dummy/.babelrc +18 -0
- data/test/dummy/.gitignore +3 -0
- data/test/dummy/.postcssrc.yml +3 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +2 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/assets/stylesheets/scaffold.css +80 -0
- data/test/dummy/app/channels/application_cable/channel.rb +4 -0
- data/test/dummy/app/channels/application_cable/connection.rb +4 -0
- data/test/dummy/app/controllers/application_controller.rb +2 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/controllers/messages_controller.rb +12 -0
- data/test/dummy/app/controllers/trays_controller.rb +17 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/javascript/packs/application.js +0 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailboxes/application_mailbox.rb +2 -0
- data/test/dummy/app/mailboxes/messages_mailbox.rb +4 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/application_record.rb +3 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/models/message.rb +29 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/app/views/messages/_message.html.erb +1 -0
- data/test/dummy/app/views/messages/_message.turbo_stream.erb +1 -0
- data/test/dummy/app/views/messages/show.turbo_stream.erb +9 -0
- data/test/dummy/app/views/trays/index.html.erb +3 -0
- data/test/dummy/app/views/trays/show.html.erb +3 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +36 -0
- data/test/dummy/bin/update +31 -0
- data/test/dummy/bin/yarn +11 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/config/application.rb +22 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +10 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +34 -0
- data/test/dummy/config/environments/production.rb +96 -0
- data/test/dummy/config/environments/test.rb +38 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/test/dummy/config/initializers/assets.rb +14 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/content_security_policy.rb +22 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +33 -0
- data/test/dummy/config/puma.rb +34 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/config/webpack/development.js +3 -0
- data/test/dummy/config/webpack/environment.js +3 -0
- data/test/dummy/config/webpack/production.js +3 -0
- data/test/dummy/config/webpack/test.js +3 -0
- data/test/dummy/config/webpacker.yml +65 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/test/dummy/public/apple-touch-icon.png +0 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/frames/frame_request_controller_test.rb +21 -0
- data/test/frames/frames_helper_test.rb +15 -0
- data/test/native/navigation_controller_test.rb +42 -0
- data/test/streams/broadcastable_test.rb +80 -0
- data/test/streams/streams_channel_test.rb +105 -0
- data/test/streams/streams_controller_test.rb +29 -0
- data/test/turbo_test.rb +10 -0
- data/turbo-rails.gemspec +16 -0
- data/yarn.lock +282 -0
- metadata +254 -0
@@ -0,0 +1,66 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
<style>
|
7
|
+
.rails-default-error-page {
|
8
|
+
background-color: #EFEFEF;
|
9
|
+
color: #2E2F30;
|
10
|
+
text-align: center;
|
11
|
+
font-family: arial, sans-serif;
|
12
|
+
margin: 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
.rails-default-error-page div.dialog {
|
16
|
+
width: 95%;
|
17
|
+
max-width: 33em;
|
18
|
+
margin: 4em auto 0;
|
19
|
+
}
|
20
|
+
|
21
|
+
.rails-default-error-page div.dialog > div {
|
22
|
+
border: 1px solid #CCC;
|
23
|
+
border-right-color: #999;
|
24
|
+
border-left-color: #999;
|
25
|
+
border-bottom-color: #BBB;
|
26
|
+
border-top: #B00100 solid 4px;
|
27
|
+
border-top-left-radius: 9px;
|
28
|
+
border-top-right-radius: 9px;
|
29
|
+
background-color: white;
|
30
|
+
padding: 7px 12% 0;
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
32
|
+
}
|
33
|
+
|
34
|
+
.rails-default-error-page h1 {
|
35
|
+
font-size: 100%;
|
36
|
+
color: #730E15;
|
37
|
+
line-height: 1.5em;
|
38
|
+
}
|
39
|
+
|
40
|
+
.rails-default-error-page div.dialog > p {
|
41
|
+
margin: 0 0 1em;
|
42
|
+
padding: 1em;
|
43
|
+
background-color: #F7F7F7;
|
44
|
+
border: 1px solid #CCC;
|
45
|
+
border-right-color: #999;
|
46
|
+
border-left-color: #999;
|
47
|
+
border-bottom-color: #999;
|
48
|
+
border-bottom-left-radius: 4px;
|
49
|
+
border-bottom-right-radius: 4px;
|
50
|
+
border-top-color: #DADADA;
|
51
|
+
color: #666;
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
53
|
+
}
|
54
|
+
</style>
|
55
|
+
</head>
|
56
|
+
|
57
|
+
<body class="rails-default-error-page">
|
58
|
+
<!-- This file lives in public/500.html -->
|
59
|
+
<div class="dialog">
|
60
|
+
<div>
|
61
|
+
<h1>We're sorry, but something went wrong.</h1>
|
62
|
+
</div>
|
63
|
+
<p>If you are the application owner check the logs for more information.</p>
|
64
|
+
</div>
|
65
|
+
</body>
|
66
|
+
</html>
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "turbo_test"
|
2
|
+
|
3
|
+
class Turbo::FrameRequestControllerTest < ActionDispatch::IntegrationTest
|
4
|
+
test "frame requests are rendered without a layout" do
|
5
|
+
get tray_path(id: 1)
|
6
|
+
assert_select "title", count: 1
|
7
|
+
|
8
|
+
get tray_path(id: 1), headers: { "Turbo-Frame" => "true" }
|
9
|
+
assert_select "title", count: 0
|
10
|
+
end
|
11
|
+
|
12
|
+
test "frame requests get a unique etag" do
|
13
|
+
get tray_path(id: 1)
|
14
|
+
etag_without_frame = @response.headers["ETag"]
|
15
|
+
|
16
|
+
get tray_path(id: 1), headers: { "Turbo-Frame" => "true" }
|
17
|
+
etag_with_frame = @response.headers["ETag"]
|
18
|
+
|
19
|
+
assert_not_equal etag_with_frame, etag_without_frame
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "turbo_test"
|
2
|
+
|
3
|
+
class Turbo::FramesHelperTest < ActionView::TestCase
|
4
|
+
test "frame with src" do
|
5
|
+
assert_dom_equal %(<turbo-frame src="/trays/1" id="tray"></turbo-frame>), turbo_frame_tag("tray", src: "/trays/1")
|
6
|
+
end
|
7
|
+
|
8
|
+
test "frame with src and target" do
|
9
|
+
assert_dom_equal %(<turbo-frame src="/trays/1" id="tray" target="_top"></turbo-frame>), turbo_frame_tag("tray", src: "/trays/1", target: "_top")
|
10
|
+
end
|
11
|
+
|
12
|
+
test "block style" do
|
13
|
+
assert_dom_equal(%(<turbo-frame id="tray"><p>tray!</p></turbo-frame>), turbo_frame_tag("tray") { tag.p("tray!") })
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "turbo_test"
|
2
|
+
|
3
|
+
class Turbo::Native::NavigationControllerTest < ActionDispatch::IntegrationTest
|
4
|
+
test "recede, resume, or refresh when native or redirect when not" do
|
5
|
+
%w[ recede resume refresh ].each do |action|
|
6
|
+
post trays_path, params: { return_to: "#{action}_or_redirect" }
|
7
|
+
assert_redirected_to tray_path(id: 1)
|
8
|
+
|
9
|
+
post trays_path, params: { return_to: "#{action}_or_redirect" }, headers: header_for_turbo_native_app
|
10
|
+
assert_redirected_to send("turbo_#{action}_historical_location_url")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
test "recede, resume, or refresh when native or redirect back when not" do
|
15
|
+
%w[ recede resume refresh ].each do |action|
|
16
|
+
post trays_path, params: { return_to: "#{action}_or_redirect_back" }
|
17
|
+
assert_redirected_to tray_path(id: 5)
|
18
|
+
|
19
|
+
post trays_path, params: { return_to: "#{action}_or_redirect_back" }, headers: header_for_referer
|
20
|
+
assert_redirected_to "/past_place"
|
21
|
+
|
22
|
+
post trays_path, params: { return_to: "#{action}_or_redirect_back" }, headers: header_for_turbo_native_app.merge(header_for_referer)
|
23
|
+
assert_redirected_to send("turbo_#{action}_historical_location_url")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
test "historical location url sends text/html" do
|
28
|
+
get turbo_refresh_historical_location_url
|
29
|
+
|
30
|
+
assert_response :ok
|
31
|
+
assert_equal "text/html; charset=utf-8", response.content_type
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def header_for_turbo_native_app
|
36
|
+
{ "HTTP_USER_AGENT" => "MyApp iOS/3.0 Turbo Native (build 13; iPad Air 2); iOS 9.3" }
|
37
|
+
end
|
38
|
+
|
39
|
+
def header_for_referer
|
40
|
+
{ "HTTP_REFERER" => "/past_place" }
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require "turbo_test"
|
2
|
+
require "action_cable"
|
3
|
+
|
4
|
+
class Turbo::BroadcastableTest < ActionCable::Channel::TestCase
|
5
|
+
include ActiveJob::TestHelper, Turbo::Streams::ActionHelper
|
6
|
+
|
7
|
+
setup { @message = Message.new(record_id: 1, content: "Hello!") }
|
8
|
+
|
9
|
+
test "broadcasting remove to stream now" do
|
10
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("remove", target: "message_1") do
|
11
|
+
@message.broadcast_remove_to "stream"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
test "broadcasting remove now" do
|
16
|
+
assert_broadcast_on @message.to_param, turbo_stream_action_tag("remove", target: "message_1") do
|
17
|
+
@message.broadcast_remove
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
test "broadcasting replace to stream now" do
|
22
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("replace", target: "message_1", template: "<p>Hello!</p>") do
|
23
|
+
@message.broadcast_replace_to "stream"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
test "broadcasting replace now" do
|
28
|
+
assert_broadcast_on @message.to_param, turbo_stream_action_tag("replace", target: "message_1", template: "<p>Hello!</p>") do
|
29
|
+
@message.broadcast_replace
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
test "broadcasting append to stream now" do
|
34
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("append", target: "messages", template: "<p>Hello!</p>") do
|
35
|
+
@message.broadcast_append_to "stream"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
test "broadcasting append to stream with custom target now" do
|
40
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("append", target: "board_messages", template: "<p>Hello!</p>") do
|
41
|
+
@message.broadcast_append_to "stream", target: "board_messages"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
test "broadcasting append now" do
|
46
|
+
assert_broadcast_on @message.to_param, turbo_stream_action_tag("append", target: "messages", template: "<p>Hello!</p>") do
|
47
|
+
@message.broadcast_append
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
test "broadcasting prepend to stream now" do
|
52
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("prepend", target: "messages", template: "<p>Hello!</p>") do
|
53
|
+
@message.broadcast_prepend_to "stream"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
test "broadcasting prepend to stream with custom target now" do
|
58
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("prepend", target: "board_messages", template: "<p>Hello!</p>") do
|
59
|
+
@message.broadcast_prepend_to "stream", target: "board_messages"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
test "broadcasting prepend now" do
|
64
|
+
assert_broadcast_on @message.to_param, turbo_stream_action_tag("prepend", target: "messages", template: "<p>Hello!</p>") do
|
65
|
+
@message.broadcast_prepend
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
test "broadcasting action to stream now" do
|
70
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("prepend", target: "messages", template: "<p>Hello!</p>") do
|
71
|
+
@message.broadcast_action_to "stream", action: "prepend"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
test "broadcasting action now" do
|
76
|
+
assert_broadcast_on @message.to_param, turbo_stream_action_tag("prepend", target: "messages", template: "<p>Hello!</p>") do
|
77
|
+
@message.broadcast_action "prepend"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require "turbo_test"
|
2
|
+
require "action_cable"
|
3
|
+
|
4
|
+
class Turbo::StreamsChannelTest < ActionCable::Channel::TestCase
|
5
|
+
include ActiveJob::TestHelper, Turbo::Streams::ActionHelper
|
6
|
+
|
7
|
+
test "verified stream name" do
|
8
|
+
assert_equal "stream", Turbo::StreamsChannel.verified_stream_name(Turbo::StreamsChannel.signed_stream_name("stream"))
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
test "broadcasting remove now" do
|
13
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("remove", target: "message_1") do
|
14
|
+
Turbo::StreamsChannel.broadcast_remove_to "stream", target: "message_1"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
test "broadcasting remove now with record" do
|
19
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("remove", target: "message_1") do
|
20
|
+
Turbo::StreamsChannel.broadcast_remove_to "stream", target: Message.new(record_id: 1, content: "hello!")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
test "broadcasting replace now" do
|
25
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("replace", target: "message_1", template: "<p>hello!</p>") do
|
26
|
+
Turbo::StreamsChannel.broadcast_replace_to "stream", target: "message_1", partial: "messages/message", locals: { message: "hello!" }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
test "broadcasting append now" do
|
31
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("append", target: "messages", template: "<p>hello!</p>") do
|
32
|
+
Turbo::StreamsChannel.broadcast_append_to "stream", target: "messages", partial: "messages/message", locals: { message: "hello!" }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
test "broadcasting prepend now" do
|
37
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("prepend", target: "messages", template: "<p>hello!</p>") do
|
38
|
+
Turbo::StreamsChannel.broadcast_prepend_to "stream", target: "messages", partial: "messages/message", locals: { message: "hello!" }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
test "broadcasting action now" do
|
43
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("prepend", target: "messages", template: "<p>hello!</p>") do
|
44
|
+
Turbo::StreamsChannel.broadcast_action_to "stream", action: "prepend", target: "messages", partial: "messages/message", locals: { message: "hello!" }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
test "broadcasting replace later" do
|
50
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("replace", target: "message_1", template: "<p>hello!</p>") do
|
51
|
+
perform_enqueued_jobs do
|
52
|
+
Turbo::StreamsChannel.broadcast_replace_later_to \
|
53
|
+
"stream", target: "message_1", partial: "messages/message", locals: { message: "hello!" }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
test "broadcasting append later" do
|
59
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("append", target: "messages", template: "<p>hello!</p>") do
|
60
|
+
perform_enqueued_jobs do
|
61
|
+
Turbo::StreamsChannel.broadcast_append_later_to \
|
62
|
+
"stream", target: "messages", partial: "messages/message", locals: { message: "hello!" }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
test "broadcasting prepend later" do
|
68
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("prepend", target: "messages", template: "<p>hello!</p>") do
|
69
|
+
perform_enqueued_jobs do
|
70
|
+
Turbo::StreamsChannel.broadcast_prepend_later_to \
|
71
|
+
"stream", target: "messages", partial: "messages/message", locals: { message: "hello!" }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
test "broadcasting action later" do
|
77
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("prepend", target: "messages", template: "<p>hello!</p>") do
|
78
|
+
perform_enqueued_jobs do
|
79
|
+
Turbo::StreamsChannel.broadcast_action_later_to \
|
80
|
+
"stream", action: "prepend", target: "messages", partial: "messages/message", locals: { message: "hello!" }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
test "broadcasting render now" do
|
87
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("replace", target: "message_1", template: "Goodbye!") do
|
88
|
+
Turbo::StreamsChannel.broadcast_render_to "stream", partial: "messages/message"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
test "broadcasting render later" do
|
93
|
+
assert_broadcast_on "stream", turbo_stream_action_tag("replace", target: "message_1", template: "Goodbye!") do
|
94
|
+
perform_enqueued_jobs do
|
95
|
+
Turbo::StreamsChannel.broadcast_render_later_to "stream", partial: "messages/message"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
test "broadcasting update now" do
|
101
|
+
assert_broadcast_on "stream", %(direct) do
|
102
|
+
Turbo::StreamsChannel.broadcast_stream_to "stream", content: "direct"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "turbo_test"
|
2
|
+
|
3
|
+
class Turbo::StreamsControllerTest < ActionDispatch::IntegrationTest
|
4
|
+
test "create with respond to" do
|
5
|
+
post messages_path
|
6
|
+
assert_redirected_to message_path(id: 1)
|
7
|
+
|
8
|
+
post messages_path, as: :turbo_stream
|
9
|
+
assert_response :ok
|
10
|
+
assert_turbo_stream action: :append, target: "messages" do |selected|
|
11
|
+
assert_equal "<template>message_1</template>", selected.children.to_html
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
test "show all turbo actions" do
|
16
|
+
get message_path(id: 1), as: :turbo_stream
|
17
|
+
assert_equal <<-STREAM, @response.body
|
18
|
+
<turbo-stream action="remove" target="message_1"></turbo-stream>
|
19
|
+
<turbo-stream action="replace" target="message_1"><template><p>My message</p></template></turbo-stream>
|
20
|
+
<turbo-stream action="replace" target="message_1"><template>Something else</template></turbo-stream>
|
21
|
+
<turbo-stream action="replace" target="message_5"><template>Something fifth</template></turbo-stream>
|
22
|
+
<turbo-stream action="replace" target="message_5"><template><p>OLLA!</p></template></turbo-stream>
|
23
|
+
<turbo-stream action="append" target="messages"><template><p>My message</p></template></turbo-stream>
|
24
|
+
<turbo-stream action="append" target="messages"><template><p>OLLA!</p></template></turbo-stream>
|
25
|
+
<turbo-stream action="prepend" target="messages"><template><p>My message</p></template></turbo-stream>
|
26
|
+
<turbo-stream action="prepend" target="messages"><template><p>OLLA!</p></template></turbo-stream>
|
27
|
+
STREAM
|
28
|
+
end
|
29
|
+
end
|
data/test/turbo_test.rb
ADDED
data/turbo-rails.gemspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative "lib/turbo/version"
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "turbo-rails"
|
5
|
+
s.version = Turbo::VERSION
|
6
|
+
s.authors = [ "Sam Stephenson", "Javan Mahkmali", "David Heinemeier Hansson" ]
|
7
|
+
s.email = "david@loudthinking.com"
|
8
|
+
s.summary = "The speed of a single-page web application without having to write any JavaScript."
|
9
|
+
s.homepage = "https://github.com/hotwired/turbo-rails"
|
10
|
+
s.license = "MIT"
|
11
|
+
|
12
|
+
s.add_dependency "rails", ">= 6.0.0"
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- test/*`.split("\n")
|
16
|
+
end
|
data/yarn.lock
ADDED
@@ -0,0 +1,282 @@
|
|
1
|
+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
2
|
+
# yarn lockfile v1
|
3
|
+
|
4
|
+
|
5
|
+
"@babel/code-frame@^7.10.4":
|
6
|
+
version "7.12.11"
|
7
|
+
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
|
8
|
+
integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
|
9
|
+
dependencies:
|
10
|
+
"@babel/highlight" "^7.10.4"
|
11
|
+
|
12
|
+
"@babel/helper-validator-identifier@^7.10.4":
|
13
|
+
version "7.12.11"
|
14
|
+
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
|
15
|
+
integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
|
16
|
+
|
17
|
+
"@babel/highlight@^7.10.4":
|
18
|
+
version "7.10.4"
|
19
|
+
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
|
20
|
+
integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
|
21
|
+
dependencies:
|
22
|
+
"@babel/helper-validator-identifier" "^7.10.4"
|
23
|
+
chalk "^2.0.0"
|
24
|
+
js-tokens "^4.0.0"
|
25
|
+
|
26
|
+
"@hotwired/turbo@git+ssh://git@github.com:hotwired/turbo#dev-builds/99d8a70":
|
27
|
+
version "7.0.0-beta.1"
|
28
|
+
resolved "git+ssh://git@github.com:hotwired/turbo#947298e9e053b4f355469a3df40e915e536dce5a"
|
29
|
+
|
30
|
+
"@rails/actioncable@^6.1.0":
|
31
|
+
version "6.1.0"
|
32
|
+
resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-6.1.0.tgz#f336f25450b1bc43b99bc60557a70b6e6bb1d3d2"
|
33
|
+
integrity sha512-eDgy+vcKN9RIzxmMBfSAe77rTj2cp6kJALiVQyKrW2O9EK2MdostOmP+99At/Dit3ur5+77NVnruxD7y14ZYFA==
|
34
|
+
|
35
|
+
"@rollup/plugin-node-resolve@^11.0.1":
|
36
|
+
version "11.0.1"
|
37
|
+
resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.0.1.tgz#d3765eec4bccf960801439a999382aed2dca959b"
|
38
|
+
integrity sha512-ltlsj/4Bhwwhb+Nb5xCz/6vieuEj2/BAkkqVIKmZwC7pIdl8srmgmglE4S0jFlZa32K4qvdQ6NHdmpRKD/LwoQ==
|
39
|
+
dependencies:
|
40
|
+
"@rollup/pluginutils" "^3.1.0"
|
41
|
+
"@types/resolve" "1.17.1"
|
42
|
+
builtin-modules "^3.1.0"
|
43
|
+
deepmerge "^4.2.2"
|
44
|
+
is-module "^1.0.0"
|
45
|
+
resolve "^1.19.0"
|
46
|
+
|
47
|
+
"@rollup/pluginutils@^3.1.0":
|
48
|
+
version "3.1.0"
|
49
|
+
resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
|
50
|
+
integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
|
51
|
+
dependencies:
|
52
|
+
"@types/estree" "0.0.39"
|
53
|
+
estree-walker "^1.0.1"
|
54
|
+
picomatch "^2.2.2"
|
55
|
+
|
56
|
+
"@types/estree@0.0.39":
|
57
|
+
version "0.0.39"
|
58
|
+
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
|
59
|
+
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
|
60
|
+
|
61
|
+
"@types/node@*":
|
62
|
+
version "14.14.14"
|
63
|
+
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae"
|
64
|
+
integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ==
|
65
|
+
|
66
|
+
"@types/resolve@1.17.1":
|
67
|
+
version "1.17.1"
|
68
|
+
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
|
69
|
+
integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==
|
70
|
+
dependencies:
|
71
|
+
"@types/node" "*"
|
72
|
+
|
73
|
+
ansi-styles@^3.2.1:
|
74
|
+
version "3.2.1"
|
75
|
+
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
76
|
+
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
|
77
|
+
dependencies:
|
78
|
+
color-convert "^1.9.0"
|
79
|
+
|
80
|
+
buffer-from@^1.0.0:
|
81
|
+
version "1.1.1"
|
82
|
+
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
83
|
+
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
84
|
+
|
85
|
+
builtin-modules@^3.1.0:
|
86
|
+
version "3.1.0"
|
87
|
+
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484"
|
88
|
+
integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==
|
89
|
+
|
90
|
+
chalk@^2.0.0:
|
91
|
+
version "2.4.2"
|
92
|
+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
93
|
+
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
94
|
+
dependencies:
|
95
|
+
ansi-styles "^3.2.1"
|
96
|
+
escape-string-regexp "^1.0.5"
|
97
|
+
supports-color "^5.3.0"
|
98
|
+
|
99
|
+
color-convert@^1.9.0:
|
100
|
+
version "1.9.3"
|
101
|
+
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
102
|
+
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
|
103
|
+
dependencies:
|
104
|
+
color-name "1.1.3"
|
105
|
+
|
106
|
+
color-name@1.1.3:
|
107
|
+
version "1.1.3"
|
108
|
+
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
109
|
+
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
|
110
|
+
|
111
|
+
commander@^2.20.0:
|
112
|
+
version "2.20.3"
|
113
|
+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
114
|
+
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
115
|
+
|
116
|
+
deepmerge@^4.2.2:
|
117
|
+
version "4.2.2"
|
118
|
+
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
|
119
|
+
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
|
120
|
+
|
121
|
+
escape-string-regexp@^1.0.5:
|
122
|
+
version "1.0.5"
|
123
|
+
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
124
|
+
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
125
|
+
|
126
|
+
estree-walker@^1.0.1:
|
127
|
+
version "1.0.1"
|
128
|
+
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
|
129
|
+
integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
|
130
|
+
|
131
|
+
fsevents@~2.1.2:
|
132
|
+
version "2.1.3"
|
133
|
+
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
|
134
|
+
integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
|
135
|
+
|
136
|
+
function-bind@^1.1.1:
|
137
|
+
version "1.1.1"
|
138
|
+
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
139
|
+
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
140
|
+
|
141
|
+
has-flag@^3.0.0:
|
142
|
+
version "3.0.0"
|
143
|
+
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
144
|
+
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
145
|
+
|
146
|
+
has-flag@^4.0.0:
|
147
|
+
version "4.0.0"
|
148
|
+
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
149
|
+
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
150
|
+
|
151
|
+
has@^1.0.3:
|
152
|
+
version "1.0.3"
|
153
|
+
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
154
|
+
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
155
|
+
dependencies:
|
156
|
+
function-bind "^1.1.1"
|
157
|
+
|
158
|
+
is-core-module@^2.1.0:
|
159
|
+
version "2.2.0"
|
160
|
+
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
|
161
|
+
integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
|
162
|
+
dependencies:
|
163
|
+
has "^1.0.3"
|
164
|
+
|
165
|
+
is-module@^1.0.0:
|
166
|
+
version "1.0.0"
|
167
|
+
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
|
168
|
+
integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
|
169
|
+
|
170
|
+
jest-worker@^26.2.1:
|
171
|
+
version "26.6.2"
|
172
|
+
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
|
173
|
+
integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
|
174
|
+
dependencies:
|
175
|
+
"@types/node" "*"
|
176
|
+
merge-stream "^2.0.0"
|
177
|
+
supports-color "^7.0.0"
|
178
|
+
|
179
|
+
js-tokens@^4.0.0:
|
180
|
+
version "4.0.0"
|
181
|
+
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
182
|
+
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
183
|
+
|
184
|
+
merge-stream@^2.0.0:
|
185
|
+
version "2.0.0"
|
186
|
+
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
|
187
|
+
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
|
188
|
+
|
189
|
+
path-parse@^1.0.6:
|
190
|
+
version "1.0.6"
|
191
|
+
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
192
|
+
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
193
|
+
|
194
|
+
picomatch@^2.2.2:
|
195
|
+
version "2.2.2"
|
196
|
+
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
197
|
+
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
|
198
|
+
|
199
|
+
randombytes@^2.1.0:
|
200
|
+
version "2.1.0"
|
201
|
+
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
202
|
+
integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
|
203
|
+
dependencies:
|
204
|
+
safe-buffer "^5.1.0"
|
205
|
+
|
206
|
+
resolve@^1.19.0:
|
207
|
+
version "1.19.0"
|
208
|
+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c"
|
209
|
+
integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==
|
210
|
+
dependencies:
|
211
|
+
is-core-module "^2.1.0"
|
212
|
+
path-parse "^1.0.6"
|
213
|
+
|
214
|
+
rollup-plugin-terser@^7.0.2:
|
215
|
+
version "7.0.2"
|
216
|
+
resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
|
217
|
+
integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==
|
218
|
+
dependencies:
|
219
|
+
"@babel/code-frame" "^7.10.4"
|
220
|
+
jest-worker "^26.2.1"
|
221
|
+
serialize-javascript "^4.0.0"
|
222
|
+
terser "^5.0.0"
|
223
|
+
|
224
|
+
rollup@^2.35.1:
|
225
|
+
version "2.35.1"
|
226
|
+
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.35.1.tgz#e6bc8d10893556a638066f89e8c97f422d03968c"
|
227
|
+
integrity sha512-q5KxEyWpprAIcainhVy6HfRttD9kutQpHbeqDTWnqAFNJotiojetK6uqmcydNMymBEtC4I8bCYR+J3mTMqeaUA==
|
228
|
+
optionalDependencies:
|
229
|
+
fsevents "~2.1.2"
|
230
|
+
|
231
|
+
safe-buffer@^5.1.0:
|
232
|
+
version "5.2.1"
|
233
|
+
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
234
|
+
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
235
|
+
|
236
|
+
serialize-javascript@^4.0.0:
|
237
|
+
version "4.0.0"
|
238
|
+
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
|
239
|
+
integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
|
240
|
+
dependencies:
|
241
|
+
randombytes "^2.1.0"
|
242
|
+
|
243
|
+
source-map-support@~0.5.19:
|
244
|
+
version "0.5.19"
|
245
|
+
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
|
246
|
+
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
|
247
|
+
dependencies:
|
248
|
+
buffer-from "^1.0.0"
|
249
|
+
source-map "^0.6.0"
|
250
|
+
|
251
|
+
source-map@^0.6.0:
|
252
|
+
version "0.6.1"
|
253
|
+
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
254
|
+
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
255
|
+
|
256
|
+
source-map@~0.7.2:
|
257
|
+
version "0.7.3"
|
258
|
+
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
|
259
|
+
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
|
260
|
+
|
261
|
+
supports-color@^5.3.0:
|
262
|
+
version "5.5.0"
|
263
|
+
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
264
|
+
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
265
|
+
dependencies:
|
266
|
+
has-flag "^3.0.0"
|
267
|
+
|
268
|
+
supports-color@^7.0.0:
|
269
|
+
version "7.2.0"
|
270
|
+
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
|
271
|
+
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
|
272
|
+
dependencies:
|
273
|
+
has-flag "^4.0.0"
|
274
|
+
|
275
|
+
terser@^5.0.0:
|
276
|
+
version "5.5.1"
|
277
|
+
resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289"
|
278
|
+
integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==
|
279
|
+
dependencies:
|
280
|
+
commander "^2.20.0"
|
281
|
+
source-map "~0.7.2"
|
282
|
+
source-map-support "~0.5.19"
|