svelte-on-rails 17.2.0 → 17.2.2

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: c7867513236366b778e446d0e305acb37a243b3e2a0ea63f333d0736d9909a7f
4
- data.tar.gz: 5dfe1bf3789597b2b33d56fc102ccce99c0fe905776b8e7531a78a0f0a6a13c5
3
+ metadata.gz: 70e08415bf5e97d6c2e699732dfbf7eed1786ea048bcd1d1dfc270c9efb0ca66
4
+ data.tar.gz: 046e91b485de6bdef1f8b40c15d4d3aea40f4f4ba31f6766e73b9da91b71fd39
5
5
  SHA512:
6
- metadata.gz: d2f4b058bf0c061780eb8f6c6ef6e5a3464931586e2f886b29bdcdbc078e34e7f3aa3fea8ccdd363a9f4749d1db2aa2d9fdc6aea14fe61190294ce953dfbcc73
7
- data.tar.gz: f4d1796be38b2bd89bd6184bffce10f0103a0afd74aef9cf1f9a0ba0639b56a4575e6db5ff43bec1222004e057436a98628b1a5a0b0546a24bbd2db3009599ef
6
+ metadata.gz: 64a9ec0fe3b58cc8e428f442e43a215c878e2b02202e0d76ee163c3c90a8022bc618a0866a692b66c9574911ec3c2e6a13c53767e0a84311bc3b0a3a02a68fca
7
+ data.tar.gz: 1b9201b4eb287cf2b3f7f22204b61b1d50584912854a80da0a869a7681b698644d684b90f1a1fec71330c843b13858491b5b924c62dbb0ad893c6e1cd14b78ef
@@ -5,7 +5,7 @@ module SvelteOnRails
5
5
  class InstallGenerator < Rails::Generators::Base
6
6
 
7
7
  class_option :force, type: :boolean, default: false, desc: "Do not ask for overwriting files"
8
- # class_option :svelte_ssr_server, type: :boolean, default: false, desc: "Do not ask for overwriting files"
8
+ class_option :package_set, type: :string, default: '', desc: "Force installation of specific package"
9
9
 
10
10
  require 'svelte_on_rails/installer/utils'
11
11
  require 'svelte_on_rails/installer/haml'
@@ -23,15 +23,16 @@ module SvelteOnRails
23
23
  @sandboxes_dir = Rails.root.join('tmp', 'svelte-on-rails-installer-sandbox-tests')
24
24
  FileUtils.rm_rf(@sandboxes_dir) if @sandboxes_dir.exist?
25
25
 
26
- if @gem_utils.vite_rails_in_gemfile?
26
+ nvi = [
27
+ 'config/svelte_on_rails.yml',
28
+ 'config/vite.json',
29
+ 'vite.config.ts',
30
+ 'vite-ssr.config.ts',
31
+ ].find { |f| Rails.root.join(f).exist? }
32
+ if nvi
33
+ @non_virgin_indicator = "#{nvi} found"
34
+ elsif @gem_utils.vite_rails_in_gemfile?
27
35
  @non_virgin_indicator = 'vite_rails found in Gemfile'
28
- else
29
- nvi = [
30
- 'config/vite.json',
31
- 'vite.config.ts',
32
- 'vite-ssr.config.ts',
33
- ].find { |f| Rails.root.join(f).exist? }
34
- @non_virgin_indicator = "#{nvi} found" if nvi
35
36
  end
36
37
 
37
38
  @installation_type = if options[:force]
@@ -43,7 +44,7 @@ module SvelteOnRails
43
44
  end
44
45
  end
45
46
 
46
- def installer_note
47
+ def print_header
47
48
  puts
48
49
  puts '=' * 80
49
50
  puts ' ▶︎▶︎▶︎ INSTALLING SVELTE-ON-RAILS'
@@ -54,6 +55,9 @@ module SvelteOnRails
54
55
  elsif @installation_type == :careful
55
56
  puts " • Careful installation (#{@non_virgin_indicator})"
56
57
  end
58
+ if @package_set
59
+ puts " • Package set: #{@package_set}"
60
+ end
57
61
  puts '=' * 80
58
62
  end
59
63
 
@@ -89,60 +93,78 @@ module SvelteOnRails
89
93
  vite = @npm_utils.inspect_package('vite')
90
94
  vite_plugin_svelte = @npm_utils.inspect_package('@sveltejs/vite-plugin-svelte')
91
95
 
92
- if svelte && vite && vite_plugin_svelte
93
- say "✓ required npm packages are already installed", :green
94
- return
96
+ if svelte && vite && vite_plugin_svelte && !@installation_type == :force
97
+ if @package_set
98
+ say "Packages are already installed but force to #{@package_set}", :yellow
99
+ else
100
+ say "✓ required npm packages are already installed", :green
101
+ return
102
+ end
95
103
  end
96
104
 
97
- always_required_packages = [
98
- '@csedl/svelte-on-rails@latest',
99
- 'typescript@latest',
100
- '@types/node@latest'
101
- ]
102
-
103
105
  candidate_sets = [
104
- [
105
- ('svelte@latest' unless svelte),
106
- ('vite@latest' unless vite),
107
- ('@sveltejs/vite-plugin-svelte@latest' unless vite_plugin_svelte)
108
- ].compact + always_required_packages,
109
- [
110
- 'svelte@latest',
111
- 'vite@latest',
112
- '@sveltejs/vite-plugin-svelte@latest'
113
- ] + always_required_packages,
114
- [
115
- 'svelte@~5.55.4',
116
- 'vite@~8.0.8',
117
- '@sveltejs/vite-plugin-svelte@~7.0.0',
118
- '@csedl/svelte-on-rails@latest',
119
- 'typescript@~6.0.2',
120
- '@types/node@~25.6.0'
121
- ]
106
+ {
107
+ key: :minimal,
108
+ title: 'Install missing packages only',
109
+ set: [
110
+ ('svelte@latest' unless svelte),
111
+ ('vite@latest' unless vite),
112
+ ('@sveltejs/vite-plugin-svelte@latest' unless vite_plugin_svelte),
113
+ '@csedl/svelte-on-rails@latest',
114
+ 'typescript@latest',
115
+ '@types/node@latest'
116
+ ].compact
117
+ },
118
+ {
119
+ key: :latest,
120
+ title: 'Force latest package versions',
121
+ set: [
122
+ 'svelte@latest',
123
+ 'vite@latest',
124
+ '@sveltejs/vite-plugin-svelte@latest',
125
+ '@csedl/svelte-on-rails@latest',
126
+ 'typescript@latest',
127
+ '@types/node@latest'
128
+ ]
129
+ },
130
+ {
131
+ key: :pinned,
132
+ title: 'Use pinned compatible versions',
133
+ set: [
134
+ 'svelte@~5.55.4',
135
+ 'vite@~8.0.8',
136
+ '@sveltejs/vite-plugin-svelte@~7.0.0',
137
+ '@csedl/svelte-on-rails@latest',
138
+ 'typescript@~6.0.2',
139
+ '@types/node@~25.6.0'
140
+ ]
141
+ }
122
142
  ]
123
143
 
124
144
  # test install
125
145
 
126
146
  failed_packages = []
127
- i = 0
128
- passing_set = candidate_sets.find do |packages_to_try|
129
- i += 1
130
- tit = if i == 1
131
- "Checking npm dependencies in isolated sandbox"
132
- else
133
- "FALLBACK #{i}"
134
- end
147
+ puts "[Sandbox test] Running dependency checks in a isolated Sandbox within App-root/tmp"
148
+ set_keys = candidate_sets.map { |s| s[:key] }
149
+ if @package_set && !set_keys.include?(@package_set)
150
+ raise Thor::Error, "Invalid value for --package-set option: #{@package_set}, valid options are: #{set_keys.join(', ')}"
151
+ end
152
+ index = 0
153
+ passing_set = candidate_sets.find do |set_to_try|
154
+ title_suffix = (index == 0) ? ' (default)' : " (FALLBACK)"
155
+ index += 1
156
+ next if @package_set && set_to_try[:key] != @package_set
135
157
  r = SvelteOnRails::Installer::NpmSandbox.dry_run(
136
- packages_to_try,
158
+ set_to_try[:set],
137
159
  project_root: Rails.root.to_s,
138
160
  sandboxes_root: @sandboxes_dir,
139
- title: tit
161
+ title: set_to_try[:title] + title_suffix
140
162
  )
141
163
  @tmpdirs.push(r[:tmpdir])
142
- if r[:success]
164
+ if r[:success] || @package_set && set_to_try[:key] == @package_set
143
165
  true
144
166
  else
145
- failed_packages.push(packages_to_try)
167
+ failed_packages.push(set_to_try)
146
168
  false
147
169
  end
148
170
  end
@@ -154,7 +176,7 @@ module SvelteOnRails
154
176
  say "ERROR: Unable to fix dependency issues", :red
155
177
  say "Tried to test-installation within a TempDir, outside the project.", :red
156
178
  say "Theese attemtpts failed to install required packages:", :red
157
- say " • #{failed_packages.map { |p| p.join(' + ') }.join("\n • ")}", :red
179
+ say " • #{failed_packages[:set].map { |p| p.join(' + ') }.join("\n • ")}", :red
158
180
  say "Installer cannot continue.", :red
159
181
  say "You must install theese packages and resolve dependency issues manually.", :red
160
182
  say "After resolved it, you can run this command again.", :red
@@ -166,16 +188,20 @@ module SvelteOnRails
166
188
 
167
189
  if passing_set.any?
168
190
  say "Ready to install:", :yellow unless svelte
169
- say " • " + passing_set.join("\n • "), :yellow if passing_set.any?
191
+ say " • " + passing_set[:set].join("\n • "), :yellow if passing_set.any?
170
192
  loop do
171
- break if @installation_type == :virgin
172
- say "Continue? (Y/n)", :yellow unless svelte
173
- input = STDIN.gets
174
- answer = input.strip.downcase
175
- if answer == "n" || answer == "no"
176
- say "Installation aborted.", :red
177
- exit(0)
178
- elsif answer == "y" || answer == "yes"
193
+ break if @installation_type == :force
194
+ if !svelte || @package_set
195
+ say "Continue? (Y/n)", :yellow
196
+ input = STDIN.gets
197
+ answer = input.strip.downcase
198
+ if answer == "n" || answer == "no"
199
+ say "Installation aborted.", :red
200
+ exit(0)
201
+ elsif answer == "y" || answer == "yes"
202
+ break
203
+ end
204
+ else
179
205
  break
180
206
  end
181
207
  end
@@ -183,7 +209,7 @@ module SvelteOnRails
183
209
 
184
210
  # install packages
185
211
 
186
- passing_set.each do |package|
212
+ passing_set[:set].each do |package|
187
213
 
188
214
  stdout, stderr, status = Open3.capture3("npm install #{package}", chdir: Rails.root)
189
215
 
@@ -197,11 +223,11 @@ module SvelteOnRails
197
223
  say "#{package} ✓", :green
198
224
  else
199
225
  puts "#{package} ✗"
200
- puts '-'*80
226
+ puts '-' * 80
201
227
  puts stdout
202
- puts '-'*80
228
+ puts '-' * 80
203
229
  warn stderr unless stderr.to_s.strip.empty?
204
- puts '-'*80
230
+ puts '-' * 80
205
231
  end
206
232
  end
207
233
 
@@ -230,7 +256,7 @@ module SvelteOnRails
230
256
  def initial_questions
231
257
 
232
258
  @vite_source_code_dir = SvelteOnRails::Lib::Utils.vite_source_code_dir
233
- if @vite_source_code_dir != 'app/frontend'
259
+ if @vite_source_code_dir != 'app/frontend' && @installation_type == :careful
234
260
  say "WARNING: The Vite source code directory is «#{@vite_source_code_dir}», instead of the usual «app/frontend», in config/vite.json.", :yellow
235
261
  q = " Do you want to continue with «#{@vite_source_code_dir}»?"
236
262
  exit(0) unless @utils.ask_yn(q)
@@ -291,15 +317,24 @@ module SvelteOnRails
291
317
  # end
292
318
 
293
319
  def validate_raw_options!(args)
294
- # Get option names from class_options, excluding inherited Thor/Rails options
295
- valid_options = self.class.class_options.keys.map { |opt| "--#{opt.to_s.tr('_', '-')}" }
296
- rails_internal_options = %w[--skip-namespace --skip-collision-check --pretend --quiet --force]
297
- options_array = args.find { |arg| arg.is_a?(Array) && arg.any? { |a| a.start_with?('--') } } || []
298
- passed_options = options_array.select { |arg| arg.start_with?('--') }
299
- unknown_options = passed_options - valid_options - rails_internal_options
300
- unless unknown_options.empty?
301
- valid_display = valid_options.map { |opt| opt.gsub(/^--/, '') }.join(', ')
302
- raise Thor::Error, "Unknown options: #{unknown_options.join(', ')}. Valid options are: #{valid_display}\nNothing done."
320
+ args.each do |arg|
321
+ if arg.present? && arg.is_a?(Array)
322
+ arg.each do |opt|
323
+
324
+ if opt.start_with?('--package-set=')
325
+ val = opt.split('=')[1]
326
+ if val.present? && val.is_a?(String)
327
+ @package_set = val.to_sym
328
+ else
329
+ raise Thor::Error, "Invalid value for --package-set option: #{val}"
330
+ end
331
+
332
+ elsif ['--force'].include?(opt)
333
+ else
334
+ raise Thor::Error, "Unknown option: #{opt}, valid options are: --force, --package-set=*"
335
+ end
336
+ end
337
+ end
303
338
  end
304
339
 
305
340
  end
@@ -37,7 +37,7 @@ module SvelteOnRails
37
37
  @tmpdir.mkpath
38
38
  @utils = Utils
39
39
 
40
- puts "[Sandbox test] #{title}: #{@tmpdir} (#{packages.length} packages)"
40
+ puts "[Sandbox test] #{title}: #{@tmpdir.to_s[(Rails.root.to_s.length+1)..-1]} (#{packages.length} packages)"
41
41
  copy_package_files
42
42
  end
43
43
 
@@ -97,7 +97,7 @@ module SvelteOnRails
97
97
  end
98
98
 
99
99
  def test_package(pkg)
100
- cmd = ["npm", "install", "--dry-run", "--ignore-scripts", pkg]
100
+ cmd = ["npm", "install", pkg]
101
101
  stdout, stderr, status = Open3.capture3(*cmd, chdir: @tmpdir)
102
102
 
103
103
  [status.success?, (stderr.to_s.strip.empty? ? stdout.to_s : stderr.to_s).strip]
@@ -110,11 +110,6 @@ module SvelteOnRails
110
110
 
111
111
  @utils.edit_vite_config_ts(File.join(@tmpdir, "vite.config.ts"))
112
112
 
113
- @packages.each do |pkg|
114
- cmd = ["npm", "install", pkg]
115
- stdout, stderr, status = Open3.capture3(*cmd, chdir: @tmpdir)
116
- end
117
-
118
113
  config_dir = File.join(@tmpdir, "config")
119
114
  FileUtils.mkdir_p(config_dir)
120
115
  File.write(
@@ -147,7 +142,6 @@ module SvelteOnRails
147
142
  JS
148
143
  )
149
144
 
150
- Open3.capture3("npm", "install", "--ignore-scripts", "--no-audit", "--no-fund", chdir: @tmpdir)
151
145
  _stdout, stderr, status = Open3.capture3("npx", "vite", "build", chdir: @tmpdir)
152
146
 
153
147
  status.success? ? { success: true } : { success: false, error: stderr.to_s.strip }
@@ -195,7 +195,7 @@ module SvelteOnRails
195
195
  to_create = paths.dup.reject { |p| File.exist?(p[2]) }
196
196
  continue = nil
197
197
 
198
- if existing.present? && !dry_run
198
+ if existing.present? && !dry_run && ask_for_overwrite
199
199
  index = 0
200
200
  begin
201
201
  if index == 0
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: 17.2.0
4
+ version: 17.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Sedlmair