turbo_boost-commands 0.0.18 → 0.1.1
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.
Potentially problematic release.
This version of turbo_boost-commands might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +21 -25
- data/app/assets/builds/@turbo-boost/commands.js +1 -1
- data/app/assets/builds/@turbo-boost/commands.js.map +4 -4
- data/app/controllers/concerns/turbo_boost/commands/controller.rb +1 -1
- data/app/javascript/drivers/form.js +0 -3
- data/app/javascript/drivers/window.js +0 -6
- data/app/javascript/index.js +27 -31
- data/app/javascript/state/index.js +17 -35
- data/app/javascript/state/observable.js +2 -3
- data/app/javascript/turbo.js +1 -8
- data/app/javascript/urls.js +1 -1
- data/app/javascript/version.js +1 -0
- data/lib/turbo_boost/commands/command.rb +3 -5
- data/lib/turbo_boost/commands/controller_pack.rb +5 -8
- data/lib/turbo_boost/commands/engine.rb +11 -2
- data/lib/turbo_boost/commands/errors.rb +2 -0
- data/lib/turbo_boost/commands/runner.rb +41 -38
- data/lib/turbo_boost/commands/state.rb +78 -0
- data/lib/turbo_boost/commands/version.rb +1 -1
- metadata +21 -12
- data/app/assets/builds/@turbo-boost/commands.metafile.json +0 -1
- data/app/javascript/meta.js +0 -19
- data/lib/turbo_boost/errors.rb +0 -6
- data/lib/turbo_boost/state/errors.rb +0 -6
- data/lib/turbo_boost/state/manager.rb +0 -162
- data/lib/turbo_boost/state/provisional_state.rb +0 -31
- data/lib/turbo_boost/state.rb +0 -137
@@ -77,17 +77,15 @@ class TurboBoost::Commands::Command
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
attr_reader :controller, :
|
81
|
-
|
82
|
-
alias_method :state, :state_manager
|
80
|
+
attr_reader :controller, :state, :params, :turbo_streams
|
83
81
|
alias_method :streams, :turbo_streams
|
84
82
|
|
85
83
|
delegate :css_id_selector, to: :"self.class"
|
86
84
|
delegate :dom_id, to: :"controller.view_context"
|
87
85
|
|
88
|
-
def initialize(controller,
|
86
|
+
def initialize(controller, state, params = {})
|
89
87
|
@controller = controller
|
90
|
-
@
|
88
|
+
@state = state
|
91
89
|
@params = params
|
92
90
|
@turbo_streams = Set.new
|
93
91
|
end
|
@@ -1,29 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "../state/manager"
|
4
3
|
require_relative "runner"
|
5
4
|
|
6
5
|
class TurboBoost::Commands::ControllerPack
|
7
6
|
include TurboBoost::Commands::AttributeHydration
|
8
7
|
|
9
|
-
attr_reader :
|
10
|
-
alias_method :state, :state_manager
|
8
|
+
attr_reader :runner, :command
|
11
9
|
|
12
10
|
delegate(
|
13
11
|
:command_aborted?,
|
14
12
|
:command_errored?,
|
15
|
-
:command_performing?,
|
16
13
|
:command_performed?,
|
14
|
+
:command_performing?,
|
17
15
|
:command_requested?,
|
18
16
|
:command_succeeded?,
|
19
|
-
:
|
17
|
+
:controller,
|
18
|
+
:state,
|
20
19
|
to: :runner
|
21
20
|
)
|
22
21
|
|
23
22
|
def initialize(controller)
|
24
|
-
@
|
25
|
-
@state_manager = TurboBoost::State::Manager.new(controller)
|
26
|
-
@runner = TurboBoost::Commands::Runner.new(controller, state_manager)
|
23
|
+
@runner = TurboBoost::Commands::Runner.new(controller)
|
27
24
|
@command = runner.command_instance
|
28
25
|
end
|
29
26
|
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
require "turbo-rails"
|
4
4
|
require "turbo_boost/streams"
|
5
|
+
require "universalid"
|
5
6
|
require_relative "version"
|
6
7
|
require_relative "http_status_codes"
|
7
|
-
require_relative "../errors"
|
8
8
|
require_relative "errors"
|
9
9
|
require_relative "patches"
|
10
10
|
require_relative "command"
|
@@ -19,13 +19,14 @@ module TurboBoost::Commands
|
|
19
19
|
|
20
20
|
class Engine < ::Rails::Engine
|
21
21
|
config.turbo_boost_commands = ActiveSupport::OrderedOptions.new
|
22
|
-
config.turbo_boost_commands[:max_cookie_size] = ActionDispatch::Cookies::MAX_COOKIE_SIZE / 3
|
23
22
|
config.turbo_boost_commands[:validate_client_token] = false
|
24
23
|
|
25
24
|
# must opt-in to state overrides
|
26
25
|
config.turbo_boost_commands[:apply_client_state_overrides] = false
|
27
26
|
config.turbo_boost_commands[:apply_server_state_overrides] = false
|
28
27
|
|
28
|
+
config.turbo_boost_commands.precompile_assets = true
|
29
|
+
|
29
30
|
initializer "turbo_boost_commands.configuration" do
|
30
31
|
Mime::Type.register "text/vnd.turbo-boost.html", :turbo_boost
|
31
32
|
|
@@ -40,5 +41,13 @@ module TurboBoost::Commands
|
|
40
41
|
ActionView::Helpers::TagHelper::TagBuilder.prepend TurboBoost::Commands::Patches::ActionViewHelpersTagHelperTagBuilderPatch
|
41
42
|
end
|
42
43
|
end
|
44
|
+
|
45
|
+
initializer "turbo_boost_commands.asset" do
|
46
|
+
config.after_initialize do |app|
|
47
|
+
if app.config.respond_to?(:assets) && app.config.turbo_boost_commands.precompile_assets
|
48
|
+
app.config.assets.precompile += %w[@turbo-boost/commands.js]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
43
52
|
end
|
44
53
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "sanitizer"
|
4
|
+
require_relative "state"
|
4
5
|
|
5
6
|
class TurboBoost::Commands::Runner
|
6
7
|
SUPPORTED_MEDIA_TYPES = {
|
@@ -9,22 +10,18 @@ class TurboBoost::Commands::Runner
|
|
9
10
|
"text/vnd.turbo-stream.html" => true
|
10
11
|
}.freeze
|
11
12
|
|
12
|
-
attr_reader :controller
|
13
|
+
attr_reader :controller
|
13
14
|
|
14
|
-
def initialize(controller
|
15
|
+
def initialize(controller)
|
15
16
|
@controller = controller
|
16
|
-
@state_manager = state_manager
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
data: {busy: false, state: state_manager.payload}
|
26
|
-
}
|
27
|
-
controller.view_context.tag("meta", options).html_safe
|
19
|
+
def state
|
20
|
+
@state ||= begin
|
21
|
+
sgid = command_params[:signed_state]
|
22
|
+
value = TurboBoost::Commands::State.from_sgid_param(sgid) if sgid
|
23
|
+
value || TurboBoost::Commands::State.new
|
24
|
+
end
|
28
25
|
end
|
29
26
|
|
30
27
|
def command_requested?
|
@@ -48,15 +45,15 @@ class TurboBoost::Commands::Runner
|
|
48
45
|
|
49
46
|
# validate csrf token
|
50
47
|
unless valid_client_token?
|
51
|
-
raise TurboBoost::InvalidTokenError,
|
52
|
-
"
|
48
|
+
raise TurboBoost::Commands::InvalidTokenError,
|
49
|
+
"Token mismatch! The token: #{client_token}` does not match the expected value of `#{server_token}`."
|
53
50
|
end
|
54
51
|
|
55
52
|
true
|
56
53
|
end
|
57
54
|
|
58
55
|
def command_params
|
59
|
-
return ActionController::Parameters.new if controller.params
|
56
|
+
return ActionController::Parameters.new if controller.params.keys.none?(/\A(tbc|turbo_boost_command)\z/o)
|
60
57
|
@command_params ||= begin
|
61
58
|
payload = parsed_command_params.deep_transform_keys(&:underscore)
|
62
59
|
ActionController::Parameters.new(payload).permit!
|
@@ -86,7 +83,7 @@ class TurboBoost::Commands::Runner
|
|
86
83
|
end
|
87
84
|
|
88
85
|
def command_instance
|
89
|
-
@command_instance ||= command_class&.new(controller,
|
86
|
+
@command_instance ||= command_class&.new(controller, state, command_params).tap do |instance|
|
90
87
|
instance&.add_observer self, :handle_command_event
|
91
88
|
end
|
92
89
|
end
|
@@ -126,6 +123,7 @@ class TurboBoost::Commands::Runner
|
|
126
123
|
return if command_errored?
|
127
124
|
return if command_performing?
|
128
125
|
return if command_performed?
|
126
|
+
state.resolve command_params[:client_state]
|
129
127
|
command_instance.perform_with_callbacks command_method_name
|
130
128
|
end
|
131
129
|
|
@@ -148,8 +146,8 @@ class TurboBoost::Commands::Runner
|
|
148
146
|
append_error_to_response error
|
149
147
|
end
|
150
148
|
|
151
|
-
|
152
|
-
|
149
|
+
append_command_token_to_response_body
|
150
|
+
append_command_state_to_response_body
|
153
151
|
end
|
154
152
|
|
155
153
|
def update_response
|
@@ -159,8 +157,8 @@ class TurboBoost::Commands::Runner
|
|
159
157
|
return if controller_action_prevented?
|
160
158
|
|
161
159
|
append_to_response_headers
|
162
|
-
|
163
|
-
|
160
|
+
append_command_token_to_response_body
|
161
|
+
append_command_state_to_response_body
|
164
162
|
append_success_to_response if command_succeeded?
|
165
163
|
rescue => error
|
166
164
|
Rails.logger.error "TurboBoost::Commands::Runner failed to update the response! #{error.message}"
|
@@ -181,11 +179,6 @@ class TurboBoost::Commands::Runner
|
|
181
179
|
ActiveSupport::MessageVerifier.new Rails.application.secret_key_base, digest: "SHA256"
|
182
180
|
end
|
183
181
|
|
184
|
-
# Same implementation as ActionController::Base but with public visibility
|
185
|
-
def cookies
|
186
|
-
controller.request.cookie_jar
|
187
|
-
end
|
188
|
-
|
189
182
|
def handle_command_event(*args)
|
190
183
|
event = args.shift
|
191
184
|
options = args.extract_options!
|
@@ -198,31 +191,36 @@ class TurboBoost::Commands::Runner
|
|
198
191
|
private
|
199
192
|
|
200
193
|
def parsed_command_params
|
201
|
-
@parsed_command_params ||= JSON.parse(controller.params[:turbo_boost_command])
|
194
|
+
@parsed_command_params ||= JSON.parse(controller.params[:tbc] || controller.params[:turbo_boost_command])
|
202
195
|
end
|
203
196
|
|
204
197
|
def content_sanitizer
|
205
198
|
TurboBoost::Commands::Sanitizer.instance
|
206
199
|
end
|
207
200
|
|
201
|
+
# TODO: revisit command token validation
|
208
202
|
def new_token
|
209
|
-
@new_token ||= SecureRandom.
|
203
|
+
@new_token ||= SecureRandom.alphanumeric(13)
|
210
204
|
end
|
211
205
|
|
206
|
+
# TODO: revisit command token validation
|
212
207
|
def server_token
|
213
|
-
|
208
|
+
nil
|
214
209
|
end
|
215
210
|
|
211
|
+
# TODO: revisit command token validation
|
216
212
|
def client_token
|
217
|
-
|
213
|
+
command_params[:token].to_s
|
218
214
|
end
|
219
215
|
|
216
|
+
# TODO: revisit command token validation
|
220
217
|
def valid_client_token?
|
221
|
-
return true unless Rails.configuration.turbo_boost_commands.validate_client_token
|
222
|
-
return false unless client_token.present?
|
223
|
-
return false unless message_verifier.valid_message?(client_token)
|
224
|
-
unmasked_client_token = message_verifier.verify(client_token)
|
225
|
-
unmasked_client_token == server_token
|
218
|
+
# return true unless Rails.configuration.turbo_boost_commands.validate_client_token
|
219
|
+
# return false unless client_token.present?
|
220
|
+
# return false unless message_verifier.valid_message?(client_token)
|
221
|
+
# unmasked_client_token = message_verifier.verify(client_token)
|
222
|
+
# unmasked_client_token == server_token
|
223
|
+
true
|
226
224
|
end
|
227
225
|
|
228
226
|
def should_redirect?
|
@@ -258,11 +256,16 @@ class TurboBoost::Commands::Runner
|
|
258
256
|
command_instance.turbo_streams.each { |stream| append_to_response_body stream }
|
259
257
|
end
|
260
258
|
|
261
|
-
def
|
262
|
-
|
263
|
-
|
259
|
+
def append_command_token_to_response_body
|
260
|
+
append_to_response_body turbo_stream.invoke("TurboBoost.Commands.token=", args: [new_token], camelize: false)
|
261
|
+
rescue => error
|
262
|
+
Rails.logger.error "TurboBoost::Commands::Runner failed to append the Command token to the response! #{error.message}"
|
263
|
+
end
|
264
|
+
|
265
|
+
def append_command_state_to_response_body
|
266
|
+
append_to_response_body turbo_stream.invoke("TurboBoost.State.initialize", args: [state.to_json, state.to_sgid_param], camelize: false)
|
264
267
|
rescue => error
|
265
|
-
Rails.logger.error "TurboBoost::Commands::Runner failed to append the
|
268
|
+
Rails.logger.error "TurboBoost::Commands::Runner failed to append the Command state to the response! #{error.message}"
|
266
269
|
end
|
267
270
|
|
268
271
|
def append_success_event_to_response_body
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class TurboBoost::Commands::State
|
4
|
+
include Enumerable
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def from_sgid_param(sgid)
|
8
|
+
new URI::UID.from_sgid(sgid, for: name)&.decode
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :resolver
|
12
|
+
|
13
|
+
def assign_resolver(&block)
|
14
|
+
@resolver = block
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(store = nil, provisional: false)
|
19
|
+
@store = store || ActiveSupport::Cache::MemoryStore.new(expires_in: 1.day, size: 2.kilobytes)
|
20
|
+
@store.cleanup
|
21
|
+
@provisional = provisional
|
22
|
+
end
|
23
|
+
|
24
|
+
delegate :to_json, to: :to_h
|
25
|
+
delegate_missing_to :store
|
26
|
+
|
27
|
+
def each
|
28
|
+
data.keys.each do |key|
|
29
|
+
yield key, self[key]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Provisional state is for the current request/response and is exposed as `State#now`
|
34
|
+
# Standard state is preserved across multiple requests
|
35
|
+
def provisional?
|
36
|
+
!!@provisional
|
37
|
+
end
|
38
|
+
|
39
|
+
# TODO: implement state resolution
|
40
|
+
def resolve(client_state)
|
41
|
+
# return unless self.class.resolver
|
42
|
+
# self.class.resolver.call self, client_state
|
43
|
+
end
|
44
|
+
|
45
|
+
def now
|
46
|
+
return nil if provisional? # provisional state cannot hold child provisional state
|
47
|
+
@now ||= self.class.new(provisional: true)
|
48
|
+
end
|
49
|
+
|
50
|
+
def cache_key
|
51
|
+
"TurboBoost::Commands::State/#{Digest::SHA2.base64digest(to_json)}"
|
52
|
+
end
|
53
|
+
|
54
|
+
def read(...)
|
55
|
+
now&.read(...) || store.read(...)
|
56
|
+
end
|
57
|
+
|
58
|
+
def [](...)
|
59
|
+
read(...)
|
60
|
+
end
|
61
|
+
|
62
|
+
def []=(...)
|
63
|
+
write(...)
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_sgid_param
|
67
|
+
store.cleanup
|
68
|
+
URI::UID.build(store, include_blank: false).to_sgid_param for: self.class.name, expires_in: 1.week
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
attr_reader :store
|
74
|
+
|
75
|
+
def data
|
76
|
+
store.instance_variable_get(:@data) || {}
|
77
|
+
end
|
78
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turbo_boost-commands
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nate Hopkins (hopsoft)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02-
|
11
|
+
date: 2024-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -44,14 +44,28 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.1.8
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.1.8
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: universalid
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.1.7
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.1.7
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: capybara
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -344,7 +358,6 @@ files:
|
|
344
358
|
- README.md
|
345
359
|
- app/assets/builds/@turbo-boost/commands.js
|
346
360
|
- app/assets/builds/@turbo-boost/commands.js.map
|
347
|
-
- app/assets/builds/@turbo-boost/commands.metafile.json
|
348
361
|
- app/assets/images/apple-touch-icon.png
|
349
362
|
- app/assets/images/favicon-16x16.png
|
350
363
|
- app/assets/images/favicon-32x32.png
|
@@ -369,7 +382,6 @@ files:
|
|
369
382
|
- app/javascript/index.js
|
370
383
|
- app/javascript/lifecycle.js
|
371
384
|
- app/javascript/logger.js
|
372
|
-
- app/javascript/meta.js
|
373
385
|
- app/javascript/renderer.js
|
374
386
|
- app/javascript/schema.js
|
375
387
|
- app/javascript/state/index.js
|
@@ -377,6 +389,7 @@ files:
|
|
377
389
|
- app/javascript/turbo.js
|
378
390
|
- app/javascript/urls.js
|
379
391
|
- app/javascript/uuids.js
|
392
|
+
- app/javascript/version.js
|
380
393
|
- lib/turbo_boost/commands.rb
|
381
394
|
- lib/turbo_boost/commands/attribute_hydration.rb
|
382
395
|
- lib/turbo_boost/commands/attribute_set.rb
|
@@ -390,12 +403,8 @@ files:
|
|
390
403
|
- lib/turbo_boost/commands/patches/action_view_helpers_tag_helper_tag_builder_patch.rb
|
391
404
|
- lib/turbo_boost/commands/runner.rb
|
392
405
|
- lib/turbo_boost/commands/sanitizer.rb
|
406
|
+
- lib/turbo_boost/commands/state.rb
|
393
407
|
- lib/turbo_boost/commands/version.rb
|
394
|
-
- lib/turbo_boost/errors.rb
|
395
|
-
- lib/turbo_boost/state.rb
|
396
|
-
- lib/turbo_boost/state/errors.rb
|
397
|
-
- lib/turbo_boost/state/manager.rb
|
398
|
-
- lib/turbo_boost/state/provisional_state.rb
|
399
408
|
homepage: https://github.com/hopsoft/turbo_boost-commands
|
400
409
|
licenses:
|
401
410
|
- MIT
|
@@ -411,7 +420,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
411
420
|
requirements:
|
412
421
|
- - ">="
|
413
422
|
- !ruby/object:Gem::Version
|
414
|
-
version:
|
423
|
+
version: '3.0'
|
415
424
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
416
425
|
requirements:
|
417
426
|
- - ">="
|
@@ -1 +0,0 @@
|
|
1
|
-
{"inputs":{"app/javascript/meta.js":{"bytes":337,"imports":[],"format":"esm"},"app/javascript/events.js":{"bytes":783,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"app/javascript/state/observable.js":{"bytes":920,"imports":[{"path":"app/javascript/meta.js","kind":"import-statement","original":"../meta"},{"path":"app/javascript/events.js","kind":"import-statement","original":"../events"}],"format":"esm"},"app/javascript/state/index.js":{"bytes":1835,"imports":[{"path":"app/javascript/meta.js","kind":"import-statement","original":"../meta"},{"path":"app/javascript/state/observable.js","kind":"import-statement","original":"./observable"},{"path":"app/javascript/events.js","kind":"import-statement","original":"../events"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"app/javascript/renderer.js":{"bytes":475,"imports":[],"format":"esm"},"app/javascript/activity.js":{"bytes":279,"imports":[],"format":"esm"},"app/javascript/lifecycle.js":{"bytes":610,"imports":[{"path":"app/javascript/activity.js","kind":"import-statement","original":"./activity"},{"path":"app/javascript/events.js","kind":"import-statement","original":"./events"}],"format":"esm"},"app/javascript/turbo.js":{"bytes":1952,"imports":[{"path":"app/javascript/meta.js","kind":"import-statement","original":"./meta"},{"path":"app/javascript/state/index.js","kind":"import-statement","original":"./state"},{"path":"app/javascript/renderer.js","kind":"import-statement","original":"./renderer"},{"path":"app/javascript/events.js","kind":"import-statement","original":"./events"},{"path":"app/javascript/lifecycle.js","kind":"import-statement","original":"./lifecycle"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"app/javascript/schema.js":{"bytes":226,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"app/javascript/confirmation.js":{"bytes":947,"imports":[{"path":"app/javascript/events.js","kind":"import-statement","original":"./events"},{"path":"app/javascript/schema.js","kind":"import-statement","original":"./schema"}],"format":"esm"},"app/javascript/delegates.js":{"bytes":923,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"app/javascript/elements.js":{"bytes":1451,"imports":[{"path":"app/javascript/schema.js","kind":"import-statement","original":"./schema"},{"path":"app/javascript/lifecycle.js","kind":"import-statement","original":"./lifecycle"}],"format":"esm"},"app/javascript/drivers/form.js":{"bytes":384,"imports":[{"path":"app/javascript/meta.js","kind":"import-statement","original":"../meta"}],"format":"esm"},"app/javascript/urls.js":{"bytes":240,"imports":[],"format":"esm"},"app/javascript/drivers/frame.js":{"bytes":218,"imports":[{"path":"app/javascript/urls.js","kind":"import-statement","original":"../urls"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"app/javascript/drivers/method.js":{"bytes":265,"imports":[{"path":"app/javascript/urls.js","kind":"import-statement","original":"../urls"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"app/javascript/drivers/window.js":{"bytes":2033,"imports":[{"path":"app/javascript/meta.js","kind":"import-statement","original":"../meta"},{"path":"app/javascript/state/index.js","kind":"import-statement","original":"../state"},{"path":"app/javascript/events.js","kind":"import-statement","original":"../events"},{"path":"app/javascript/lifecycle.js","kind":"import-statement","original":"../lifecycle"},{"path":"app/javascript/urls.js","kind":"import-statement","original":"../urls"},{"path":"app/javascript/renderer.js","kind":"import-statement","original":"../renderer"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"app/javascript/drivers/index.js":{"bytes":2044,"imports":[{"path":"app/javascript/elements.js","kind":"import-statement","original":"../elements"},{"path":"app/javascript/drivers/form.js","kind":"import-statement","original":"./form"},{"path":"app/javascript/drivers/frame.js","kind":"import-statement","original":"./frame"},{"path":"app/javascript/drivers/method.js","kind":"import-statement","original":"./method"},{"path":"app/javascript/drivers/window.js","kind":"import-statement","original":"./window"}],"format":"esm"},"app/javascript/logger.js":{"bytes":729,"imports":[{"path":"app/javascript/events.js","kind":"import-statement","original":"./events"}],"format":"esm"},"app/javascript/uuids.js":{"bytes":202,"imports":[],"format":"esm"},"app/javascript/index.js":{"bytes":3558,"imports":[{"path":"app/javascript/turbo.js","kind":"import-statement","original":"./turbo"},{"path":"app/javascript/schema.js","kind":"import-statement","original":"./schema"},{"path":"app/javascript/events.js","kind":"import-statement","original":"./events"},{"path":"app/javascript/activity.js","kind":"import-statement","original":"./activity"},{"path":"app/javascript/confirmation.js","kind":"import-statement","original":"./confirmation"},{"path":"app/javascript/delegates.js","kind":"import-statement","original":"./delegates"},{"path":"app/javascript/drivers/index.js","kind":"import-statement","original":"./drivers"},{"path":"app/javascript/meta.js","kind":"import-statement","original":"./meta"},{"path":"app/javascript/elements.js","kind":"import-statement","original":"./elements"},{"path":"app/javascript/lifecycle.js","kind":"import-statement","original":"./lifecycle"},{"path":"app/javascript/logger.js","kind":"import-statement","original":"./logger"},{"path":"app/javascript/state/index.js","kind":"import-statement","original":"./state"},{"path":"app/javascript/urls.js","kind":"import-statement","original":"./urls"},{"path":"app/javascript/uuids.js","kind":"import-statement","original":"./uuids"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"app/assets/builds/@turbo-boost/commands.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":37542},"app/assets/builds/@turbo-boost/commands.js":{"imports":[],"exports":["default"],"entryPoint":"app/javascript/index.js","inputs":{"app/javascript/meta.js":{"bytesInOutput":252},"app/javascript/events.js":{"bytesInOutput":500},"app/javascript/state/observable.js":{"bytesInOutput":405},"app/javascript/state/index.js":{"bytesInOutput":762},"app/javascript/renderer.js":{"bytesInOutput":263},"app/javascript/activity.js":{"bytesInOutput":173},"app/javascript/lifecycle.js":{"bytesInOutput":294},"app/javascript/turbo.js":{"bytesInOutput":1024},"app/javascript/schema.js":{"bytesInOutput":166},"app/javascript/confirmation.js":{"bytesInOutput":424},"app/javascript/delegates.js":{"bytesInOutput":473},"app/javascript/elements.js":{"bytesInOutput":782},"app/javascript/drivers/form.js":{"bytesInOutput":246},"app/javascript/urls.js":{"bytesInOutput":166},"app/javascript/drivers/frame.js":{"bytesInOutput":96},"app/javascript/drivers/method.js":{"bytesInOutput":130},"app/javascript/drivers/window.js":{"bytesInOutput":1298},"app/javascript/drivers/index.js":{"bytesInOutput":991},"app/javascript/logger.js":{"bytesInOutput":399},"app/javascript/uuids.js":{"bytesInOutput":159},"app/javascript/index.js":{"bytesInOutput":1686}},"bytes":11186}}}
|
data/app/javascript/meta.js
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
class Meta {
|
2
|
-
get element() {
|
3
|
-
return document.querySelector('meta[name="turbo-boost"]')
|
4
|
-
}
|
5
|
-
|
6
|
-
get token() {
|
7
|
-
return this.element.getAttribute('content')
|
8
|
-
}
|
9
|
-
|
10
|
-
get busy() {
|
11
|
-
return this.element.dataset.busy === 'true'
|
12
|
-
}
|
13
|
-
|
14
|
-
set busy(value) {
|
15
|
-
return (this.element.dataset.busy = !!value)
|
16
|
-
}
|
17
|
-
}
|
18
|
-
|
19
|
-
export default new Meta()
|
data/lib/turbo_boost/errors.rb
DELETED