shopify-cli 2.8.0 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/Gemfile.lock +1 -1
  4. data/RELEASING.md +4 -3
  5. data/ext/javy/javy.rb +1 -1
  6. data/lib/project_types/extension/commands/push.rb +2 -2
  7. data/lib/project_types/extension/messages/messages.rb +1 -1
  8. data/lib/project_types/extension/models/development_server.rb +2 -4
  9. data/lib/project_types/rails/gem.rb +1 -2
  10. data/lib/project_types/script/cli.rb +5 -0
  11. data/lib/project_types/script/commands/connect.rb +1 -1
  12. data/lib/project_types/script/commands/create.rb +8 -2
  13. data/lib/project_types/script/commands/push.rb +35 -12
  14. data/lib/project_types/script/layers/application/connect_app.rb +11 -5
  15. data/lib/project_types/script/layers/application/extension_points.rb +50 -26
  16. data/lib/project_types/script/layers/application/push_script.rb +5 -2
  17. data/lib/project_types/script/layers/domain/extension_point.rb +14 -0
  18. data/lib/project_types/script/layers/infrastructure/errors.rb +2 -0
  19. data/lib/project_types/script/loaders/project.rb +44 -0
  20. data/lib/project_types/script/loaders/specification_handler.rb +22 -0
  21. data/lib/project_types/script/messages/messages.rb +15 -1
  22. data/lib/project_types/script/ui/error_handler.rb +5 -0
  23. data/lib/project_types/theme/commands/pull.rb +39 -16
  24. data/lib/project_types/theme/commands/push.rb +56 -26
  25. data/lib/project_types/theme/commands/serve.rb +5 -0
  26. data/lib/project_types/theme/messages/messages.rb +29 -18
  27. data/lib/shopify_cli/commands/login.rb +10 -4
  28. data/lib/shopify_cli/constants.rb +1 -0
  29. data/lib/shopify_cli/context.rb +66 -12
  30. data/lib/shopify_cli/environment.rb +15 -4
  31. data/lib/shopify_cli/identity_auth.rb +1 -0
  32. data/lib/shopify_cli/messages/messages.rb +3 -1
  33. data/lib/shopify_cli/resources/env_file.rb +5 -1
  34. data/lib/shopify_cli/theme/dev_server/hot-reload.js +19 -1
  35. data/lib/shopify_cli/theme/dev_server/hot_reload.rb +18 -2
  36. data/lib/shopify_cli/theme/dev_server/proxy.rb +1 -0
  37. data/lib/shopify_cli/theme/dev_server/reload_mode.rb +34 -0
  38. data/lib/shopify_cli/theme/dev_server.rb +6 -21
  39. data/lib/shopify_cli/theme/theme.rb +26 -4
  40. data/lib/shopify_cli/version.rb +1 -1
  41. data/lib/shopify_cli.rb +4 -0
  42. metadata +5 -2
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShopifyCLI
4
+ module Theme
5
+ module DevServer
6
+ class ReloadMode
7
+ MODES = [:"hot-reload", :"full-page", :off]
8
+
9
+ class << self
10
+ def default
11
+ :"hot-reload"
12
+ end
13
+
14
+ def get!(mode)
15
+ MODES.find { |m| m == mode.to_sym } || raise_error(mode)
16
+ end
17
+
18
+ private
19
+
20
+ def raise_error(invalid_mode)
21
+ error_message = ShopifyCLI::Context.message("theme.serve.reload_mode_is_not_valid", invalid_mode)
22
+ help_message = ShopifyCLI::Context.message("theme.serve.try_a_valid_reload_mode", valid_modes)
23
+
24
+ ShopifyCLI::Context.abort(error_message, help_message)
25
+ end
26
+
27
+ def valid_modes
28
+ MODES.map { |v| "`#{v}`" }.join(", ")
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -6,6 +6,7 @@ require_relative "syncer"
6
6
  require_relative "dev_server/cdn_fonts"
7
7
  require_relative "dev_server/hot_reload"
8
8
  require_relative "dev_server/header_hash"
9
+ require_relative "dev_server/reload_mode"
9
10
  require_relative "dev_server/local_assets"
10
11
  require_relative "dev_server/proxy"
11
12
  require_relative "dev_server/sse"
@@ -25,7 +26,7 @@ module ShopifyCLI
25
26
  class << self
26
27
  attr_accessor :ctx
27
28
 
28
- def start(ctx, root, host: "127.0.0.1", port: 9292, poll: false)
29
+ def start(ctx, root, host: "127.0.0.1", port: 9292, poll: false, mode: ReloadMode.default)
29
30
  @ctx = ctx
30
31
  theme = DevelopmentTheme.new(ctx, root: root)
31
32
  ignore_filter = IgnoreFilter.from_path(root)
@@ -36,7 +37,7 @@ module ShopifyCLI
36
37
  @app = Proxy.new(ctx, theme: theme, syncer: @syncer)
37
38
  @app = CdnFonts.new(@app, theme: theme)
38
39
  @app = LocalAssets.new(ctx, @app, theme: theme)
39
- @app = HotReload.new(ctx, @app, theme: theme, watcher: watcher, ignore_filter: ignore_filter)
40
+ @app = HotReload.new(ctx, @app, theme: theme, watcher: watcher, mode: mode, ignore_filter: ignore_filter)
40
41
  stopped = false
41
42
  address = "http://#{host}:#{port}"
42
43
 
@@ -83,7 +84,9 @@ module ShopifyCLI
83
84
  ShopifyCLI::API::APIRequestUnauthorizedError
84
85
  raise ShopifyCLI::Abort, @ctx.message("theme.serve.ensure_user", theme.shop)
85
86
  rescue Errno::EADDRINUSE
86
- abort_address_already_in_use(address)
87
+ error_message = @ctx.message("theme.serve.address_already_in_use", address)
88
+ help_message = @ctx.message("theme.serve.try_port_option")
89
+ @ctx.abort(error_message, help_message)
87
90
  rescue Errno::EADDRNOTAVAIL
88
91
  raise AddressBindingError, "Error binding to the address #{host}."
89
92
  end
@@ -94,24 +97,6 @@ module ShopifyCLI
94
97
  @syncer.shutdown
95
98
  WebServer.shutdown
96
99
  end
97
-
98
- private
99
-
100
- def abort_address_already_in_use(address)
101
- open_frame(@ctx.message("theme.serve.already_in_use_error"), color: :red) do
102
- @ctx.puts(@ctx.message("theme.serve.address_already_in_use", address))
103
- end
104
-
105
- open_frame(@ctx.message("theme.serve.try_this"), color: :green) do
106
- @ctx.puts(@ctx.message("theme.serve.try_port_option"))
107
- end
108
-
109
- raise ShopifyCLI::AbortSilent
110
- end
111
-
112
- def open_frame(title, color:, &block)
113
- CLI::UI::Frame.open(title, color: CLI::UI.resolve_color(color), timing: false, &block)
114
- end
115
100
  end
116
101
  end
117
102
  end
@@ -173,15 +173,37 @@ module ShopifyCLI
173
173
  end
174
174
 
175
175
  def live(ctx, root: nil)
176
- _status, body = fetch_themes(ctx)
176
+ find(ctx, root) { |attrs| attrs["role"] == "main" }
177
+ end
177
178
 
178
- body["themes"]
179
- .find { |theme_attrs| theme_attrs["role"] == "main" }
180
- .tap { |theme_attrs| break new(ctx, root: root, **allowed_attrs(theme_attrs)) }
179
+ def development(ctx, root: nil)
180
+ find(ctx, root) { |attrs| attrs["role"] == "development" }
181
+ end
182
+
183
+ # Finds a Theme by its identifier
184
+ #
185
+ # #### Parameters
186
+ # * `ctx` - current running context of your command
187
+ # * `root` - theme root
188
+ # * `identifier` - theme ID or theme name
189
+ def find_by_identifier(ctx, root: nil, identifier:)
190
+ find(ctx, root) do |attrs|
191
+ attrs.slice("name", "id").values.map(&:to_s).include?(identifier)
192
+ end
181
193
  end
182
194
 
183
195
  private
184
196
 
197
+ def find(ctx, root, &block)
198
+ _status, body = fetch_themes(ctx)
199
+
200
+ body["themes"]
201
+ .find(&block)
202
+ .tap do |attrs|
203
+ break new(ctx, root: root, **allowed_attrs(attrs)) if attrs
204
+ end
205
+ end
206
+
185
207
  def allowed_attrs(attrs)
186
208
  attrs.slice("id", "name", "role").transform_keys(&:to_sym)
187
209
  end
@@ -1,3 +1,3 @@
1
1
  module ShopifyCLI
2
- VERSION = "2.8.0"
2
+ VERSION = "2.9.0"
3
3
  end
data/lib/shopify_cli.rb CHANGED
@@ -139,6 +139,10 @@ module ShopifyCLI
139
139
  require "shopify_cli/messages/messages"
140
140
  Context.load_messages(ShopifyCLI::Messages::MESSAGES)
141
141
 
142
+ # cli-ui utilities for capturing the output close the stream while capturing.
143
+ # By setting the value here we persist the tty value for the whole lifetime of the process.
144
+ Environment.interactive = $stdin.tty?
145
+
142
146
  def self.cache_dir
143
147
  cache_dir = if Environment.test?
144
148
  TEMP_DIR
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shopify-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-06 00:00:00.000000000 Z
11
+ date: 2022-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -322,6 +322,8 @@ files:
322
322
  - lib/project_types/script/layers/infrastructure/script_service.rb
323
323
  - lib/project_types/script/layers/infrastructure/script_uploader.rb
324
324
  - lib/project_types/script/layers/infrastructure/service_locator.rb
325
+ - lib/project_types/script/loaders/project.rb
326
+ - lib/project_types/script/loaders/specification_handler.rb
325
327
  - lib/project_types/script/messages/messages.rb
326
328
  - lib/project_types/script/ui/error_handler.rb
327
329
  - lib/project_types/script/ui/printing_spinner.rb
@@ -464,6 +466,7 @@ files:
464
466
  - lib/shopify_cli/theme/dev_server/local_assets.rb
465
467
  - lib/shopify_cli/theme/dev_server/proxy.rb
466
468
  - lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
469
+ - lib/shopify_cli/theme/dev_server/reload_mode.rb
467
470
  - lib/shopify_cli/theme/dev_server/sse.rb
468
471
  - lib/shopify_cli/theme/dev_server/watcher.rb
469
472
  - lib/shopify_cli/theme/dev_server/web_server.rb