svelte-on-rails 22.5.6 → 23.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ab6d571ef0c95edbc34868a44322a5fd65ce530ec4bf9d25abae20bb3f07cb6d
4
- data.tar.gz: 875903772b806d6be74e66057cfb75c14d12e127a7024ab240be4d8e9b52f8c6
3
+ metadata.gz: 3940962e167ef99d7a0d4c96d0d55efb4beed16497825830840c668bfa06b46d
4
+ data.tar.gz: 26a6cc1b3e604da9877eea62a2f8a9fd48dcba6dffcde1b988f6d65fe6b8261c
5
5
  SHA512:
6
- metadata.gz: 0bf76f5cc03cd13af95609c0a3e5d1ae7c5d6e9b899cad7f0fea2da9636a12cd8e015bf6e8f7fb5475d55a82f33ad3362123ee57c81e30b9cbecfb2f669586e5
7
- data.tar.gz: 585f3cefa671842756b103dbafded674e47c217db31954044e42731dbe1648a293210b0b156ef8de842a74c24891a929c871121fd3d3da9e1d4b06d9032b0312
6
+ metadata.gz: fe829b60ff8c1fb774a7c426b10f2b4736016a4e0b022daf47d76751a6f0ec27e4f46cac9960315c0c57bf3f1e35236b210184bd4bd1dea9193d314b10b04c73
7
+ data.tar.gz: 97e54fe0b02be5a342861e47f52d5eacb9442060af0e98b3ae152c52d3f66f708e7b7874aae4467bd7672c4f19f1ed39841bfb6c847375241bd5e1e03a4fa56f
@@ -16,7 +16,6 @@ require "svelte_on_rails/lib/view_helper_support"
16
16
  require "svelte_on_rails/lib/to_svelte_schema"
17
17
  require "svelte_on_rails/lib/to_svelte_values"
18
18
  require "svelte_on_rails/lib/to_svelte_support"
19
- require "svelte_on_rails/lib/to_svelte_translations"
20
19
  require "svelte_on_rails/lib/cache_warmer"
21
20
  require "svelte_on_rails/lib/boot_context"
22
21
 
@@ -13,13 +13,11 @@ module SvelteOnRails
13
13
 
14
14
  tsv = SvelteOnRails::Lib::ToSvelteValues
15
15
  tsl = SvelteOnRails::Lib::ToSvelteSchema.instance
16
- tnl = SvelteOnRails::Lib::ToSvelteTranslations.instance
17
16
 
18
17
  values = tsv.extract_values(self, attributes, associations)
19
18
  models, schema = tsl.extract_schema(self.class, attributes, associations, cache_key)
20
- translations = tnl.all_cached_translations(I18n.locale, :to_svelte_props, models, self.class)
21
19
 
22
- values.merge(schema).merge(translations)
20
+ values.merge(schema)
23
21
  end
24
22
 
25
23
  end
@@ -36,12 +34,10 @@ module SvelteOnRails
36
34
  cache_key = (I18n.locale.to_s + self.name + attributes.to_s + associations.to_s).hash
37
35
 
38
36
  tsl = SvelteOnRails::Lib::ToSvelteSchema.instance
39
- tnl = SvelteOnRails::Lib::ToSvelteTranslations.instance
40
37
 
41
38
  models, schema = tsl.extract_schema(self, attributes, associations, cache_key)
42
- translations = tnl.all_cached_translations(I18n.locale, :to_svelte_props, models, self)
43
39
 
44
- schema.merge(translations)
40
+ schema
45
41
 
46
42
  end
47
43
  end
@@ -58,14 +54,12 @@ module SvelteOnRails
58
54
 
59
55
  cl = SvelteOnRails::Lib::ToSvelteValues
60
56
  tsl = SvelteOnRails::Lib::ToSvelteSchema.instance
61
- tnl = SvelteOnRails::Lib::ToSvelteTranslations.instance
62
57
 
63
58
  data = cl.extract_values(self, attributes, associations)
64
59
 
65
60
  models, schema = tsl.extract_schema(self.klass, attributes, associations, cache_key)
66
- translations = tnl.all_cached_translations(I18n.locale, :to_svelte_props, models, self.klass)
67
61
 
68
- { 'data' => data }.merge(schema).merge(translations)
62
+ { 'data' => data }.merge(schema)
69
63
  end
70
64
  end
71
65
 
@@ -223,8 +223,6 @@ module SvelteOnRails
223
223
  extra_component_paths: { optional: :array },
224
224
  skip_ssr_header: { optional: :string },
225
225
  cache_warmer: { optional: :boolean },
226
- to_svelte_props: { optional: :hash },
227
- global_props: { optional: :hash },
228
226
 
229
227
  ssr: { options_required: [:auto, true, false] },
230
228
  watch_changes: { options_optional: [true, false] },
@@ -37,7 +37,7 @@ module SvelteOnRails
37
37
 
38
38
  puts cmd
39
39
 
40
- if stderr.present?
40
+ unless status.success?
41
41
  raise "ERROR #{cmd} => #{stderr}"
42
42
  end
43
43
 
@@ -140,9 +140,6 @@ module SvelteOnRails
140
140
  }
141
141
  )
142
142
 
143
- tnl = SvelteOnRails::Lib::ToSvelteTranslations.instance
144
- _tnl = tnl.cached_translations(I18n.locale, :to_svelte_props, nil)
145
- svelte_props[:_translations] = _tnl if _tnl
146
143
  svelte_props[:test] = 'hello'
147
144
 
148
145
  ht_opts[:class] = "svelte-component #{ht_opts[:class]}"
@@ -13,8 +13,6 @@ module SvelteOnRails
13
13
  :node_bin,
14
14
  :initialized_by
15
15
 
16
- # methods
17
-
18
16
  def self.instance(caller: nil)
19
17
 
20
18
  @instance ||= new(caller: caller)
@@ -54,6 +52,7 @@ module SvelteOnRails
54
52
  at_exit do
55
53
  shutdown(caller: 'at_exit')
56
54
  File.delete(restart_marker_file) if File.exist?(restart_marker_file)
55
+ FileUtils.remove(flock_file) if File.exist?(flock_file)
57
56
  end
58
57
  else
59
58
  SvelteOnRails::Lib::Utils.ssr_server_log("SSR Server NOT used => @ssr_server #{@ssr_server}")
@@ -184,46 +183,59 @@ module SvelteOnRails
184
183
  restart_after_failure: false
185
184
  )
186
185
 
187
- SvelteOnRails::Lib::Utils.ssr_server_log("SOR start_node_server! called", ssr_logfile_only: !restart_after_failure)
186
+ # when multiple workers defined: ensure only the first start the node instance
187
+ if ssr_socket_exists?
188
+ SvelteOnRails::Lib::Utils.ssr_server_log("SOR start_node_server! => Exit because socket-file already exists", ssr_logfile_only: !restart_after_failure)
189
+ return
190
+ end
191
+ with_ssr_client_flock do
192
+ if ssr_socket_exists?
193
+ SvelteOnRails::Lib::Utils.ssr_server_log("SOR start_node_server! => Exit because concurrency process detected by flock-file", ssr_logfile_only: !restart_after_failure)
194
+ return
195
+ end
188
196
 
189
- start = Time.now
197
+ SvelteOnRails::Lib::Utils.ssr_server_log("SOR start_node_server! called", ssr_logfile_only: !restart_after_failure)
198
+
199
+ start = Time.now
200
+
201
+ @node_server_output = {}
202
+ Thread.new do
203
+ stdout, stderr, status = Open3.capture3(
204
+ start_node_server_command(started_by),
205
+ chdir: Rails.root
206
+ )
207
+ @node_server_output = {
208
+ stdout: stdout,
209
+ stderr: stderr,
210
+ status: status
211
+ }
212
+ end
213
+ SvelteOnRails::Lib::Utils.ssr_server_log("Node Version: #{Configuration.instance.node_version_test}, package version: #{Configuration.instance.npm_package_version_test}")
214
+ SvelteOnRails::Lib::Utils.ssr_server_log("Start running Svelte-SSR-Server... (#{started_by})")
190
215
 
191
- @node_server_output = {}
192
- Thread.new do
193
- stdout, stderr, status = Open3.capture3(
194
- start_node_server_command(started_by),
195
- chdir: Rails.root
196
- )
197
- @node_server_output = {
198
- stdout: stdout,
199
- stderr: stderr,
200
- status: status
201
- }
202
- end
203
- SvelteOnRails::Lib::Utils.ssr_server_log("Node Version: #{Configuration.instance.node_version_test}, package version: #{Configuration.instance.npm_package_version_test}")
204
- SvelteOnRails::Lib::Utils.ssr_server_log("Start running Svelte-SSR-Server... (#{started_by})")
216
+ until node_server_pid do
217
+ sleep 0.12
218
+ SvelteOnRails::Lib::Utils.ssr_server_log("Waiting for node server process-id")
219
+ start_server_timeout!(start)
220
+ end
205
221
 
206
- until node_server_pid do
207
- sleep 0.12
208
- SvelteOnRails::Lib::Utils.ssr_server_log("Waiting for node server process-id")
209
- start_server_timeout!(start)
210
- end
222
+ until File.socket?(socket_path) do
223
+ sleep 0.1
224
+ SvelteOnRails::Lib::Utils.ssr_server_log("Waiting for socket to be created")
225
+ start_server_timeout!(start)
226
+ end
227
+ SvelteOnRails::Lib::Utils.ssr_server_log("Socket created: #{socket_path}")
211
228
 
212
- until File.exist?(socket_path) do
213
- sleep 0.1
214
- SvelteOnRails::Lib::Utils.ssr_server_log("Waiting for socket to be created")
215
- start_server_timeout!(start)
216
- end
217
- SvelteOnRails::Lib::Utils.ssr_server_log("Socket created: #{socket_path}")
229
+ until ping? do
230
+ SvelteOnRails::Lib::Utils.ssr_server_log("Waiting for successful server-response")
231
+ start_server_timeout!(start)
232
+ sleep 0.1
233
+ end
234
+ SvelteOnRails::Lib::Utils.ssr_server_log("Server responded successfully")
218
235
 
219
- until ping? do
220
- SvelteOnRails::Lib::Utils.ssr_server_log("Waiting for successful server-response")
221
- start_server_timeout!(start)
222
- sleep 0.1
236
+ cleanup_leftover_processes
223
237
  end
224
- SvelteOnRails::Lib::Utils.ssr_server_log("Server responded successfully")
225
-
226
- cleanup_leftover_processes
238
+ cleanup_flock_file_later
227
239
  end
228
240
 
229
241
  def restart_my_server(tag = nil)
@@ -314,6 +326,37 @@ module SvelteOnRails
314
326
 
315
327
  private
316
328
 
329
+ def ssr_socket_exists?
330
+ File.socket?(socket_path)
331
+ end
332
+
333
+ def with_ssr_client_flock
334
+ File.open(flock_file, File::RDWR | File::CREAT, 0o644) do |file|
335
+ file.flock(File::LOCK_EX)
336
+ yield
337
+ ensure
338
+ file.flock(File::LOCK_UN) if file
339
+ end
340
+ end
341
+
342
+ def flock_file
343
+ File.join(File.dirname(socket_path), "ssr-client-flock")
344
+ end
345
+
346
+ def cleanup_flock_file_later
347
+ path = flock_file
348
+
349
+ Thread.new do
350
+ sleep 3
351
+ FileUtils.rm_f(path)
352
+ rescue => e
353
+ SvelteOnRails::Lib::Utils.ssr_server_log(
354
+ "Could not remove flock file #{path}: #{e.class}: #{e.message}",
355
+ ssr_logfile_only: true
356
+ )
357
+ end
358
+ end
359
+
317
360
  def restart_marker_file
318
361
  Rails.root.join("tmp", "ssr_server_last_restart")
319
362
  end
@@ -464,6 +507,8 @@ module SvelteOnRails
464
507
 
465
508
  # enable communication by rake task for admin purposes
466
509
  def self.install_control_listener
510
+ return if @installed
511
+ @installed = true
467
512
 
468
513
  path = socket_path.to_s
469
514
  FileUtils.mkdir_p(File.dirname(path))
@@ -476,7 +521,7 @@ module SvelteOnRails
476
521
  loop do
477
522
  client = server.accept
478
523
  begin
479
- request = client.gets&.strip.to_sym
524
+ request = client.gets&.strip&.to_sym
480
525
  client_instance = SsrClient.instance(caller: 'rake task (manual)')
481
526
 
482
527
  response = case request
@@ -69,24 +69,6 @@ turbo_stream:
69
69
  # html-id of any element that must exist for being able to receive actions (turbo streams can only work this way)
70
70
  channel: 'public'
71
71
 
72
- to_svelte_props:
73
- translations:
74
- helpers:
75
- submit:
76
- - create
77
- - update
78
- - submit
79
- # Theese keys must match with the keys in config/locales.
80
- # If set, the key _translations will be added by the to_svelte helper to the props
81
-
82
- global_props:
83
- translations:
84
- any:
85
- - translations
86
- # Theese keys must match with the keys in config/locales.
87
- # If set, the key _translations will be added by the svelte view helper to the props of any component
88
-
89
-
90
72
  action_cable:
91
73
  # if you want to use it
92
74
  channel: "svelte_on_rails_channel"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: svelte-on-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 22.5.6
4
+ version: 23.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Sedlmair
@@ -92,7 +92,6 @@ files:
92
92
  - lib/svelte_on_rails/lib/metrics.rb
93
93
  - lib/svelte_on_rails/lib/to_svelte_schema.rb
94
94
  - lib/svelte_on_rails/lib/to_svelte_support.rb
95
- - lib/svelte_on_rails/lib/to_svelte_translations.rb
96
95
  - lib/svelte_on_rails/lib/to_svelte_values.rb
97
96
  - lib/svelte_on_rails/lib/utils.rb
98
97
  - lib/svelte_on_rails/lib/view_helper_support.rb
@@ -1,97 +0,0 @@
1
- module SvelteOnRails
2
- module Lib
3
- class ToSvelteTranslations
4
- def self.instance
5
- @instance ||= new
6
- if SvelteOnRails::Configuration.instance.watch_changes?
7
- @cached_translations = {}
8
- @all_cached_translations = {}
9
- end
10
- @instance
11
- end
12
-
13
- def initialize
14
- @config = SvelteOnRails::Configuration.instance
15
- @cached_translations = {}
16
- @all_cached_translations = {}
17
- end
18
-
19
- def all_cached_translations(language_key, config_key, models, own_model)
20
- k = "#{language_key}-#{config_key}-#{models}".hash
21
- @all_cached_translations[k] ||=
22
- models.each_with_object({}) do |model, memo|
23
- k = own_model == model ? "_translations" : "_#{model.name.underscore}_translations"
24
- memo[k] = cached_translations(language_key, config_key, model)
25
- end
26
- end
27
-
28
- def cached_translations(language_key, config_key, model)
29
- k = "#{language_key}-#{config_key}-#{model.class.name}".hash
30
- @cached_translations[k] ||= begin
31
- config = @config.configs[config_key]
32
- if config
33
- source = config[:translations]
34
- if source
35
- calc(source, language_key, model)
36
- end
37
- end
38
- end
39
- end
40
-
41
- private
42
-
43
- def calc(source, lang, model)
44
- # Transform model for interpolation (human name)
45
- interpolation_kwargs = model && {
46
- model: model.model_name.human(locale: lang)
47
- }
48
-
49
- translate_at = lambda do |full_path|
50
- i18n_key = full_path.join('.')
51
- if interpolation_kwargs
52
- I18n.t(i18n_key, **interpolation_kwargs, locale: lang)
53
- else
54
- I18n.t(i18n_key, locale: lang)
55
- end
56
- end
57
-
58
- set_nested = lambda do |memo, segments, value|
59
- current = memo
60
- segments[0..-2].each do |segment|
61
- current[segment] ||= {}
62
- current = current[segment]
63
- end
64
- current[segments.last] = value
65
- end
66
-
67
- walk = lambda do |node, path|
68
- case node
69
- when Hash
70
- node.each_with_object({}) do |(key, value), memo|
71
- key_str = key.to_s
72
- memo[key_str] = walk.call(value, path + [key_str])
73
- end
74
- when Array
75
- node.each_with_object({}) do |entry, memo|
76
- unless entry.is_a?(String) || entry.is_a?(Symbol)
77
- raise ArgumentError, "Invalid translation selector at #{path.join('.')}: array entries must be String/Symbol keys"
78
- end
79
-
80
- segments = entry.to_s.split('.').reject(&:empty?)
81
- if segments.empty?
82
- raise ArgumentError, "Invalid translation selector at #{path.join('.')}: empty key path"
83
- end
84
-
85
- translated = translate_at.call(path + segments)
86
- set_nested.call(memo, segments, translated)
87
- end
88
- else
89
- raise ArgumentError, "Invalid translations config at #{path.join('.')}: only Hash and Array are allowed (old value-based syntax is not supported)"
90
- end
91
- end
92
-
93
- walk.call(source, [])
94
- end
95
- end
96
- end
97
- end