shopify-cli 1.9.0 → 1.13.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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.github/PULL_REQUEST_TEMPLATE.md +1 -0
  3. data/.github/workflows/build.yml +28 -0
  4. data/.github/workflows/release.yml +2 -4
  5. data/CHANGELOG.md +27 -0
  6. data/Gemfile.lock +1 -1
  7. data/README.md +2 -1
  8. data/lib/project_types/extension/cli.rb +7 -1
  9. data/lib/project_types/extension/commands/serve.rb +69 -1
  10. data/lib/project_types/extension/commands/tunnel.rb +3 -1
  11. data/lib/project_types/extension/extension_project.rb +1 -0
  12. data/lib/project_types/extension/features/argo.rb +18 -49
  13. data/lib/project_types/extension/features/argo_runtime.rb +81 -0
  14. data/lib/project_types/extension/features/argo_serve.rb +35 -27
  15. data/lib/project_types/extension/features/argo_serve_options.rb +41 -0
  16. data/lib/project_types/extension/features/argo_setup.rb +1 -1
  17. data/lib/project_types/extension/messages/messages.rb +5 -4
  18. data/lib/project_types/extension/models/npm_package.rb +14 -0
  19. data/lib/project_types/extension/models/specification.rb +3 -2
  20. data/lib/project_types/extension/models/specification_handlers/checkout_argo_extension.rb +18 -0
  21. data/lib/project_types/extension/models/specification_handlers/default.rb +33 -3
  22. data/lib/project_types/extension/models/version.rb +1 -1
  23. data/lib/project_types/extension/tasks/choose_next_available_port.rb +36 -0
  24. data/lib/project_types/extension/tasks/configure_features.rb +2 -0
  25. data/lib/project_types/extension/tasks/find_npm_packages.rb +106 -0
  26. data/lib/project_types/node/messages/messages.rb +4 -4
  27. data/lib/project_types/rails/messages/messages.rb +4 -4
  28. data/lib/project_types/script/cli.rb +17 -12
  29. data/lib/project_types/script/commands/push.rb +1 -1
  30. data/lib/project_types/script/config/extension_points.yml +2 -3
  31. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +5 -2
  32. data/lib/project_types/script/graphql/get_app_scripts.graphql +6 -0
  33. data/lib/project_types/script/layers/application/create_script.rb +2 -2
  34. data/lib/project_types/script/layers/application/push_script.rb +6 -3
  35. data/lib/project_types/script/layers/domain/errors.rb +0 -2
  36. data/lib/project_types/script/layers/domain/push_package.rb +4 -0
  37. data/lib/project_types/script/layers/domain/script_project.rb +21 -1
  38. data/lib/project_types/script/layers/infrastructure/command_runner.rb +19 -0
  39. data/lib/project_types/script/layers/infrastructure/errors.rb +30 -3
  40. data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_project_creator.rb +97 -0
  41. data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_task_runner.rb +103 -0
  42. data/lib/project_types/script/layers/infrastructure/languages/project_creator.rb +26 -0
  43. data/lib/project_types/script/layers/infrastructure/languages/rust_project_creator.rb +73 -0
  44. data/lib/project_types/script/layers/infrastructure/languages/rust_task_runner.rb +60 -0
  45. data/lib/project_types/script/layers/infrastructure/languages/task_runner.rb +21 -0
  46. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +6 -5
  47. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +61 -34
  48. data/lib/project_types/script/layers/infrastructure/script_service.rb +14 -2
  49. data/lib/project_types/script/messages/messages.rb +20 -3
  50. data/lib/project_types/script/tasks/ensure_env.rb +85 -0
  51. data/lib/project_types/script/ui/error_handler.rb +25 -6
  52. data/lib/shopify-cli/admin_api.rb +7 -4
  53. data/lib/shopify-cli/js_system.rb +2 -2
  54. data/lib/shopify-cli/messages/messages.rb +51 -45
  55. data/lib/shopify-cli/method_object.rb +4 -4
  56. data/lib/shopify-cli/oauth.rb +9 -3
  57. data/lib/shopify-cli/packager.rb +1 -1
  58. data/lib/shopify-cli/partners_api.rb +7 -4
  59. data/lib/shopify-cli/partners_api/organizations.rb +3 -3
  60. data/lib/shopify-cli/resolve_constant.rb +1 -1
  61. data/lib/shopify-cli/resources/env_file.rb +2 -2
  62. data/lib/shopify-cli/shopifolk.rb +1 -1
  63. data/lib/shopify-cli/tasks/select_org_and_shop.rb +6 -4
  64. data/lib/shopify-cli/transform_data_structure.rb +1 -1
  65. data/lib/shopify-cli/tunnel.rb +22 -1
  66. data/lib/shopify-cli/version.rb +1 -1
  67. data/lib/shopify_cli.rb +0 -1
  68. data/vendor/deps/smart_properties/REVISION +1 -1
  69. data/vendor/deps/smart_properties/lib/smart_properties/property.rb +7 -1
  70. data/vendor/deps/smart_properties/lib/smart_properties/version.rb +1 -1
  71. metadata +19 -11
  72. data/.travis.yml +0 -14
  73. data/lib/project_types/extension/features/argo_renderer_package.rb +0 -32
  74. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +0 -100
  75. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +0 -95
  76. data/lib/project_types/script/layers/infrastructure/project_creator.rb +0 -24
  77. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +0 -72
  78. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +0 -59
  79. data/lib/project_types/script/layers/infrastructure/task_runner.rb +0 -19
@@ -99,7 +99,7 @@ module ShopifyCli
99
99
  raise <<~MESSAGE
100
100
 
101
101
  Could not find program #{program} which is required to build the package.
102
- You can install it by running `#{installation_cmd}`.
102
+ You can install it by running #{installation_cmd}.
103
103
 
104
104
  MESSAGE
105
105
  end
@@ -59,11 +59,14 @@ module ShopifyCli
59
59
 
60
60
  private
61
61
 
62
- def authenticated_req(ctx)
63
- yield
62
+ def authenticated_req(ctx, &block)
63
+ CLI::Kit::Util
64
+ .begin(&block)
65
+ .retry_after(API::APIRequestUnauthorizedError, retries: 1) do
66
+ authenticate(ctx)
67
+ end
64
68
  rescue API::APIRequestUnauthorizedError
65
- authenticate(ctx)
66
- retry
69
+ ctx.abort(ctx.message("core.api.error.failed_auth"))
67
70
  rescue API::APIRequestNotFoundError
68
71
  ctx.puts(ctx.message("core.partners_api.error.account_not_found", ShopifyCli::TOOL_NAME))
69
72
  end
@@ -4,7 +4,7 @@ module ShopifyCli
4
4
  class << self
5
5
  def fetch_all(ctx)
6
6
  resp = PartnersAPI.query(ctx, "all_organizations")
7
- (resp.dig("data", "organizations", "nodes") || []).map do |org|
7
+ (resp&.dig("data", "organizations", "nodes") || []).map do |org|
8
8
  org["stores"] = (org.dig("stores", "nodes") || [])
9
9
  org
10
10
  end
@@ -12,7 +12,7 @@ module ShopifyCli
12
12
 
13
13
  def fetch(ctx, id:)
14
14
  resp = PartnersAPI.query(ctx, "find_organization", id: id)
15
- org = resp.dig("data", "organizations", "nodes").first
15
+ org = resp&.dig("data", "organizations", "nodes")&.first
16
16
  return nil if org.nil?
17
17
  org["stores"] = (org.dig("stores", "nodes") || [])
18
18
  org
@@ -20,7 +20,7 @@ module ShopifyCli
20
20
 
21
21
  def fetch_with_app(ctx)
22
22
  resp = PartnersAPI.query(ctx, "all_orgs_with_apps")
23
- (resp.dig("data", "organizations", "nodes") || []).map do |org|
23
+ (resp&.dig("data", "organizations", "nodes") || []).map do |org|
24
24
  org["stores"] = (org.dig("stores", "nodes") || [])
25
25
  org["apps"] = (org.dig("apps", "nodes") || [])
26
26
  org
@@ -11,7 +11,7 @@
11
11
  module ShopifyCli
12
12
  class ResolveConstant
13
13
  include ShopifyCli::MethodObject
14
- property! :namespace, accepts: ->(ns) { ns.respond_to?(:const_get) }, default: Kernel
14
+ property! :namespace, accepts: ->(ns) { ns.respond_to?(:const_get) }, default: -> { Kernel }
15
15
 
16
16
  def call(name)
17
17
  name
@@ -22,7 +22,7 @@ module ShopifyCli
22
22
  def parse(directory)
23
23
  File.read(File.join(directory, FILENAME))
24
24
  .gsub("\r\n", "\n").split("\n").each_with_object({}) do |line, output|
25
- match = /\A([A-Za-z_0-9]+)=(.*)\z/.match(line)
25
+ match = /\A([A-Za-z_0-9]+)\s*=\s*(.*)\z/.match(line)
26
26
  if match
27
27
  key = match[1]
28
28
  output[key] = case match[2]
@@ -57,7 +57,7 @@ module ShopifyCli
57
57
  property :shop
58
58
  property :scopes
59
59
  property :host
60
- property :extra, default: {}
60
+ property :extra, default: -> { {} }
61
61
 
62
62
  def to_h
63
63
  out = {}
@@ -33,7 +33,7 @@ module ShopifyCli
33
33
  end
34
34
 
35
35
  def acting_as_shopify_organization?
36
- !!@acting_as_shopify_organization || (Project.has_current? && Project.current.config["shopify_organization"])
36
+ !!(@acting_as_shopify_organization || (Project.has_current? && Project.current.config["shopify_organization"]))
37
37
  end
38
38
 
39
39
  def reset
@@ -35,14 +35,16 @@ module ShopifyCli
35
35
  @organization ||= if !organization_id.nil?
36
36
  org = ShopifyCli::PartnersAPI::Organizations.fetch(ctx, id: organization_id)
37
37
  if org.nil?
38
- ctx.puts(ctx.message("core.tasks.select_org_and_shop.error.authentication_issue", ShopifyCli::TOOL_NAME))
38
+ ctx.puts(ctx.message("core.tasks.select_org_and_shop.authentication_issue", ShopifyCli::TOOL_NAME))
39
39
  ctx.abort(ctx.message("core.tasks.select_org_and_shop.error.organization_not_found"))
40
40
  end
41
41
  org
42
42
  elsif organizations.count == 0
43
- ctx.puts(ctx.message("core.tasks.select_org_and_shop.error.partners_notice"))
44
- ctx.puts(ctx.message("core.tasks.select_org_and_shop.authentication_issue", ShopifyCli::TOOL_NAME))
45
- ctx.abort(ctx.message("core.tasks.select_org_and_shop.error.no_organizations"))
43
+ if Shopifolk.acting_as_shopify_organization?
44
+ ctx.abort(ctx.message("core.tasks.select_org_and_shop.error.shopifolk_notice", ShopifyCli::TOOL_NAME))
45
+ else
46
+ ctx.abort(ctx.message("core.tasks.select_org_and_shop.error.no_organizations"))
47
+ end
46
48
  elsif organizations.count == 1
47
49
  org = organizations.first
48
50
  ctx.puts(ctx.message("core.tasks.select_org_and_shop.organization", org["businessName"], org["id"]))
@@ -42,7 +42,7 @@ module ShopifyCli
42
42
  property! :symbolize_keys, accepts: [true, false], default: false, reader: :symbolize_keys?
43
43
  property! :associative_array_container,
44
44
  accepts: ->(c) { c.respond_to?(:new) && c.method_defined?(:[]=) },
45
- default: Hash
45
+ default: -> { Hash }
46
46
 
47
47
  def call(object)
48
48
  case object
@@ -2,6 +2,7 @@ require "json"
2
2
  require "fileutils"
3
3
  require "shopify_cli"
4
4
  require "forwardable"
5
+ require "uri"
5
6
 
6
7
  module ShopifyCli
7
8
  ##
@@ -11,7 +12,7 @@ module ShopifyCli
11
12
  class Tunnel
12
13
  extend SingleForwardable
13
14
 
14
- def_delegators :new, :start, :stop, :auth, :stats, :urls
15
+ def_delegators :new, :start, :stop, :auth, :stats, :urls, :running_on?
15
16
 
16
17
  class FetchUrlError < RuntimeError; end
17
18
  class NgrokError < RuntimeError; end
@@ -26,6 +27,7 @@ module ShopifyCli
26
27
 
27
28
  NGROK_TUNNELS_URI = URI.parse("http://localhost:4040/api/tunnels")
28
29
  TUNNELS_FIELD = "tunnels"
30
+ TUNNEL_ADDRESS_KEY_PATH = ["config", "addr"]
29
31
  PUBLIC_URL_FIELD = "public_url"
30
32
 
31
33
  ##
@@ -120,6 +122,25 @@ module ShopifyCli
120
122
  []
121
123
  end
122
124
 
125
+ ##
126
+ # Returns Boolean if a tunnel is running on a given port
127
+ #
128
+ # #### Parameters
129
+ #
130
+ # * `port` - port to check
131
+ #
132
+ # #### Returns
133
+ #
134
+ # * true / false
135
+ #
136
+ def running_on?(port)
137
+ extract_port = ->(tunnel) { URI(tunnel.dig(*TUNNEL_ADDRESS_KEY_PATH)).port }
138
+ matches_port = ->(occupied_port) { occupied_port == port }
139
+ stats.fetch(TUNNELS_FIELD, []).map(&extract_port).any?(&matches_port)
140
+ rescue
141
+ false
142
+ end
143
+
123
144
  private
124
145
 
125
146
  def install(ctx)
@@ -1,3 +1,3 @@
1
1
  module ShopifyCli
2
- VERSION = "1.9.0"
2
+ VERSION = "1.13.0"
3
3
  end
data/lib/shopify_cli.rb CHANGED
@@ -110,7 +110,6 @@ module ShopifyCli
110
110
  autoload :JsSystem, "shopify-cli/js_system"
111
111
  autoload :MethodObject, "shopify-cli/method_object"
112
112
  autoload :LazyDelegator, "shopify-cli/lazy_delegator"
113
- autoload :Log, "shopify-cli/log"
114
113
  autoload :OAuth, "shopify-cli/oauth"
115
114
  autoload :Options, "shopify-cli/options"
116
115
  autoload :PartnersAPI, "shopify-cli/partners_api"
@@ -1 +1 @@
1
- 691028e47d022a29405b7f0ccc8683c9d062c502
1
+ cfe83ef361e68ba7c471af75144f2b85cf1e1ec6
@@ -1,6 +1,7 @@
1
1
  module SmartProperties
2
2
  class Property
3
3
  MODULE_REFERENCE = :"@_smart_properties_method_scope"
4
+ ALLOWED_DEFAULT_CLASSES = [Proc, Numeric, String, Range, TrueClass, FalseClass, NilClass, Symbol, Module].freeze
4
5
 
5
6
  attr_reader :name
6
7
  attr_reader :converter
@@ -27,6 +28,11 @@ module SmartProperties
27
28
 
28
29
  @instance_variable_name = :"@#{name}"
29
30
 
31
+ unless ALLOWED_DEFAULT_CLASSES.any? { |cls| @default.is_a?(cls) }
32
+ raise ConfigurationError, "Default attribute value #{@default.inspect} cannot be specified as literal, "\
33
+ "use the syntax `default: -> { ... }` instead."
34
+ end
35
+
30
36
  unless attrs.empty?
31
37
  raise ConfigurationError, "SmartProperties do not support the following configuration options: #{attrs.keys.map { |m| m.to_s }.sort.join(', ')}."
32
38
  end
@@ -66,7 +72,7 @@ module SmartProperties
66
72
  end
67
73
 
68
74
  def default(scope)
69
- @default.kind_of?(Proc) ? scope.instance_exec(&@default) : @default
75
+ @default.kind_of?(Proc) ? scope.instance_exec(&@default) : @default.dup
70
76
  end
71
77
 
72
78
  def accepts?(value, scope)
@@ -1,3 +1,3 @@
1
1
  module SmartProperties
2
- VERSION = "1.14.0"
2
+ VERSION = "1.15.0"
3
3
  end
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: 1.9.0
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-27 00:00:00.000000000 Z
11
+ date: 2021-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -77,6 +77,7 @@ files:
77
77
  - ".github/ISSUE_TEMPLATE.md"
78
78
  - ".github/PULL_REQUEST_TEMPLATE.md"
79
79
  - ".github/probots.yml"
80
+ - ".github/workflows/build.yml"
80
81
  - ".github/workflows/release.yml"
81
82
  - ".github/workflows/triage.yml"
82
83
  - ".gitignore"
@@ -85,7 +86,6 @@ files:
85
86
  - ".ruby-version"
86
87
  - ".tmp/.gitkeep"
87
88
  - ".tmp/sv/.gitkeep"
88
- - ".travis.yml"
89
89
  - CHANGELOG.md
90
90
  - Gemfile
91
91
  - Gemfile.lock
@@ -144,8 +144,9 @@ files:
144
144
  - lib/project_types/extension/features/argo.rb
145
145
  - lib/project_types/extension/features/argo_config.rb
146
146
  - lib/project_types/extension/features/argo_dependencies.rb
147
- - lib/project_types/extension/features/argo_renderer_package.rb
147
+ - lib/project_types/extension/features/argo_runtime.rb
148
148
  - lib/project_types/extension/features/argo_serve.rb
149
+ - lib/project_types/extension/features/argo_serve_options.rb
149
150
  - lib/project_types/extension/features/argo_setup.rb
150
151
  - lib/project_types/extension/features/argo_setup_step.rb
151
152
  - lib/project_types/extension/features/argo_setup_steps.rb
@@ -157,13 +158,16 @@ files:
157
158
  - lib/project_types/extension/messages/messages.rb
158
159
  - lib/project_types/extension/models/app.rb
159
160
  - lib/project_types/extension/models/lazy_specification_handler.rb
161
+ - lib/project_types/extension/models/npm_package.rb
160
162
  - lib/project_types/extension/models/registration.rb
161
163
  - lib/project_types/extension/models/specification.rb
164
+ - lib/project_types/extension/models/specification_handlers/checkout_argo_extension.rb
162
165
  - lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb
163
166
  - lib/project_types/extension/models/specification_handlers/default.rb
164
167
  - lib/project_types/extension/models/specifications.rb
165
168
  - lib/project_types/extension/models/validation_error.rb
166
169
  - lib/project_types/extension/models/version.rb
170
+ - lib/project_types/extension/tasks/choose_next_available_port.rb
167
171
  - lib/project_types/extension/tasks/configure_features.rb
168
172
  - lib/project_types/extension/tasks/converters/app_converter.rb
169
173
  - lib/project_types/extension/tasks/converters/registration_converter.rb
@@ -171,6 +175,7 @@ files:
171
175
  - lib/project_types/extension/tasks/converters/version_converter.rb
172
176
  - lib/project_types/extension/tasks/create_extension.rb
173
177
  - lib/project_types/extension/tasks/fetch_specifications.rb
178
+ - lib/project_types/extension/tasks/find_npm_packages.rb
174
179
  - lib/project_types/extension/tasks/get_app.rb
175
180
  - lib/project_types/extension/tasks/get_apps.rb
176
181
  - lib/project_types/extension/tasks/update_draft.rb
@@ -215,6 +220,7 @@ files:
215
220
  - lib/project_types/script/errors.rb
216
221
  - lib/project_types/script/forms/create.rb
217
222
  - lib/project_types/script/graphql/app_script_update_or_create.graphql
223
+ - lib/project_types/script/graphql/get_app_scripts.graphql
218
224
  - lib/project_types/script/graphql/script_service_proxy.graphql
219
225
  - lib/project_types/script/layers/application/build_script.rb
220
226
  - lib/project_types/script/layers/application/create_script.rb
@@ -227,18 +233,20 @@ files:
227
233
  - lib/project_types/script/layers/domain/metadata.rb
228
234
  - lib/project_types/script/layers/domain/push_package.rb
229
235
  - lib/project_types/script/layers/domain/script_project.rb
230
- - lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb
231
- - lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb
236
+ - lib/project_types/script/layers/infrastructure/command_runner.rb
232
237
  - lib/project_types/script/layers/infrastructure/errors.rb
233
238
  - lib/project_types/script/layers/infrastructure/extension_point_repository.rb
234
- - lib/project_types/script/layers/infrastructure/project_creator.rb
239
+ - lib/project_types/script/layers/infrastructure/languages/assemblyscript_project_creator.rb
240
+ - lib/project_types/script/layers/infrastructure/languages/assemblyscript_task_runner.rb
241
+ - lib/project_types/script/layers/infrastructure/languages/project_creator.rb
242
+ - lib/project_types/script/layers/infrastructure/languages/rust_project_creator.rb
243
+ - lib/project_types/script/layers/infrastructure/languages/rust_task_runner.rb
244
+ - lib/project_types/script/layers/infrastructure/languages/task_runner.rb
235
245
  - lib/project_types/script/layers/infrastructure/push_package_repository.rb
236
- - lib/project_types/script/layers/infrastructure/rust_project_creator.rb
237
- - lib/project_types/script/layers/infrastructure/rust_task_runner.rb
238
246
  - lib/project_types/script/layers/infrastructure/script_project_repository.rb
239
247
  - lib/project_types/script/layers/infrastructure/script_service.rb
240
- - lib/project_types/script/layers/infrastructure/task_runner.rb
241
248
  - lib/project_types/script/messages/messages.rb
249
+ - lib/project_types/script/tasks/ensure_env.rb
242
250
  - lib/project_types/script/ui/error_handler.rb
243
251
  - lib/project_types/script/ui/printing_spinner.rb
244
252
  - lib/project_types/script/ui/strict_spinner.rb
@@ -463,7 +471,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
463
471
  - !ruby/object:Gem::Version
464
472
  version: '0'
465
473
  requirements: []
466
- rubygems_version: 3.0.3
474
+ rubygems_version: 3.2.17
467
475
  signing_key:
468
476
  specification_version: 4
469
477
  summary: Shopify CLI helps you build Shopify apps faster.
data/.travis.yml DELETED
@@ -1,14 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 3.0.0
4
- - 2.5.8
5
- - 2.6.6
6
- - 2.7.1
7
- before_install:
8
- - gem install bundler -v '1.17.3'
9
- cache:
10
- bundler: true
11
- install:
12
- - bundle install
13
- script:
14
- - bundle exec rake
@@ -1,32 +0,0 @@
1
- module Extension
2
- module Features
3
- class ArgoRendererPackage
4
- include SmartProperties
5
-
6
- ARGO_CHECKOUT = "@shopify/argo-checkout"
7
- ARGO_ADMIN = "@shopify/argo-admin"
8
-
9
- PACKAGE_NAMES = [
10
- ARGO_CHECKOUT,
11
- ARGO_ADMIN,
12
- ].freeze
13
- MINIMUM_ARGO_VERSION = "0.9.3".freeze
14
-
15
- property! :package_name, accepts: PACKAGE_NAMES
16
- property! :version, accepts: String
17
-
18
- def checkout?
19
- package_name == ARGO_CHECKOUT
20
- end
21
-
22
- def admin?
23
- package_name == ARGO_ADMIN
24
- end
25
-
26
- def supports_uuid_flag?
27
- return false if checkout?
28
- Gem::Version.new(version) > Gem::Version.new(MINIMUM_ARGO_VERSION)
29
- end
30
- end
31
- end
32
- end
@@ -1,100 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Script
4
- module Layers
5
- module Infrastructure
6
- class AssemblyScriptProjectCreator
7
- include SmartProperties
8
- property! :ctx, accepts: ShopifyCli::Context
9
- property! :extension_point, accepts: Domain::ExtensionPoint
10
- property! :script_name, accepts: String
11
- property! :path_to_project, accepts: String
12
-
13
- BOOTSTRAP = "npx --no-install shopify-scripts-toolchain-as bootstrap --from %{extension_point} --dest %{base}"
14
- BUILD = "shopify-scripts-toolchain-as build --src src/shopify_main.ts " \
15
- "--binary build/%{script_name}.wasm --metadata build/metadata.json"
16
- MIN_NODE_VERSION = "14.5.0"
17
- ASC_ARGS = "-- --lib node_modules --optimize --use Date="
18
-
19
- def setup_dependencies
20
- write_npmrc
21
- write_package_json
22
- end
23
-
24
- def bootstrap
25
- out, status = ctx.capture2e(bootstap_command)
26
- raise Domain::Errors::ServiceFailureError, out unless status.success?
27
- end
28
-
29
- private
30
-
31
- def write_npmrc
32
- ctx.system(
33
- "npm", "--userconfig", "./.npmrc", "config", "set", "@shopify:registry", "https://registry.npmjs.com"
34
- )
35
- ctx.system(
36
- "npm", "--userconfig", "./.npmrc", "config", "set", "engine-strict", "true"
37
- )
38
- end
39
-
40
- def extension_point_version
41
- if extension_point.sdks.assemblyscript.versioned?
42
- return extension_point.sdks.assemblyscript.version
43
- end
44
-
45
- out, status = ctx.capture2e("npm show #{extension_point.sdks.assemblyscript.package} version --json")
46
- raise Domain::Errors::ServiceFailureError, out unless status.success?
47
- "^#{JSON.parse(out)}"
48
- end
49
-
50
- def write_package_json
51
- package_json = <<~HERE
52
- {
53
- "name": "#{script_name}",
54
- "version": "1.0.0",
55
- "devDependencies": {
56
- "@shopify/scripts-sdk-as": "#{extension_point.sdks.assemblyscript.sdk_version}",
57
- "@shopify/scripts-toolchain-as": "#{extension_point.sdks.assemblyscript.toolchain_version}",
58
- "#{extension_point.sdks.assemblyscript.package}": "#{extension_point_version}",
59
- "@as-pect/cli": "^6.0.0",
60
- "assemblyscript": "^0.18.13"
61
- },
62
- "scripts": {
63
- "test": "asp --summary --verbose",
64
- "build": "#{build_command}"
65
- },
66
- "engines": {
67
- "node": ">=#{MIN_NODE_VERSION}"
68
- }
69
- }
70
- HERE
71
- ctx.write("package.json", package_json)
72
- end
73
-
74
- def bootstap_command
75
- type = extension_point.dasherize_type
76
- base_command = format(BOOTSTRAP, extension_point: type, base: path_to_project)
77
- domain = extension_point.domain
78
-
79
- if domain.nil?
80
- base_command
81
- else
82
- "#{base_command} --domain #{domain}"
83
- end
84
- end
85
-
86
- def build_command
87
- type = extension_point.dasherize_type
88
- base_command = format(BUILD, script_name: script_name)
89
- domain = extension_point.domain
90
-
91
- if domain.nil?
92
- "#{base_command} #{ASC_ARGS}"
93
- else
94
- "#{base_command} --domain #{domain} --ep #{type} #{ASC_ARGS}"
95
- end
96
- end
97
- end
98
- end
99
- end
100
- end