shopify-cli 1.6.0 → 1.9.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.
Files changed (206) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +15 -2
  3. data/CHANGELOG.md +21 -0
  4. data/Gemfile +12 -12
  5. data/Gemfile.lock +14 -14
  6. data/Rakefile +32 -30
  7. data/bin/load_shopify.rb +6 -6
  8. data/bin/shopify +2 -2
  9. data/dev.yml +3 -0
  10. data/ext/shopify-cli/extconf.rb +7 -7
  11. data/lib/docgen/markdown.rb +12 -12
  12. data/lib/graphql/extension_create.graphql +17 -2
  13. data/lib/graphql/fetch_specifications.graphql +14 -0
  14. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  15. data/lib/project_types/extension/cli.rb +56 -55
  16. data/lib/project_types/extension/commands/build.rb +3 -3
  17. data/lib/project_types/extension/commands/create.rb +17 -10
  18. data/lib/project_types/extension/commands/extension_command.rb +14 -7
  19. data/lib/project_types/extension/commands/push.rb +10 -10
  20. data/lib/project_types/extension/commands/register.rb +22 -32
  21. data/lib/project_types/extension/commands/serve.rb +1 -7
  22. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  23. data/lib/project_types/extension/extension_project.rb +22 -7
  24. data/lib/project_types/extension/extension_project_keys.rb +5 -4
  25. data/lib/project_types/extension/features/argo.rb +26 -42
  26. data/lib/project_types/extension/features/argo_config.rb +5 -5
  27. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  28. data/lib/project_types/extension/features/argo_renderer_package.rb +47 -0
  29. data/lib/project_types/extension/features/argo_serve.rb +69 -0
  30. data/lib/project_types/extension/features/argo_setup.rb +3 -3
  31. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  32. data/lib/project_types/extension/forms/create.rb +28 -34
  33. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  34. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  35. data/lib/project_types/extension/forms/questions/ask_type.rb +47 -0
  36. data/lib/project_types/extension/messages/message_loading.rb +3 -1
  37. data/lib/project_types/extension/messages/messages.rb +55 -55
  38. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  39. data/lib/project_types/extension/models/registration.rb +1 -0
  40. data/lib/project_types/extension/models/specification.rb +6 -2
  41. data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +1 -1
  42. data/lib/project_types/extension/models/specification_handlers/default.rb +10 -2
  43. data/lib/project_types/extension/models/specifications.rb +14 -3
  44. data/lib/project_types/extension/models/version.rb +1 -1
  45. data/lib/project_types/extension/tasks/configure_features.rb +7 -5
  46. data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
  47. data/lib/project_types/extension/tasks/converters/registration_converter.rb +8 -6
  48. data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
  49. data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
  50. data/lib/project_types/extension/tasks/create_extension.rb +4 -4
  51. data/lib/project_types/extension/tasks/fetch_specifications.rb +8 -28
  52. data/lib/project_types/extension/tasks/get_app.rb +4 -4
  53. data/lib/project_types/extension/tasks/get_apps.rb +3 -3
  54. data/lib/project_types/extension/tasks/update_draft.rb +4 -4
  55. data/lib/project_types/extension/tasks/user_errors.rb +4 -4
  56. data/lib/project_types/node/cli.rb +19 -19
  57. data/lib/project_types/node/commands/connect.rb +3 -3
  58. data/lib/project_types/node/commands/create.rb +40 -38
  59. data/lib/project_types/node/commands/deploy.rb +4 -4
  60. data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
  61. data/lib/project_types/node/commands/generate.rb +2 -24
  62. data/lib/project_types/node/commands/open.rb +2 -2
  63. data/lib/project_types/node/commands/populate.rb +6 -6
  64. data/lib/project_types/node/commands/populate/customer.rb +5 -5
  65. data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
  66. data/lib/project_types/node/commands/populate/product.rb +5 -5
  67. data/lib/project_types/node/commands/serve.rb +9 -9
  68. data/lib/project_types/node/commands/tunnel.rb +7 -7
  69. data/lib/project_types/node/forms/create.rb +17 -8
  70. data/lib/project_types/node/messages/messages.rb +8 -7
  71. data/lib/project_types/rails/cli.rb +21 -21
  72. data/lib/project_types/rails/commands/connect.rb +3 -3
  73. data/lib/project_types/rails/commands/create.rb +51 -48
  74. data/lib/project_types/rails/commands/deploy.rb +4 -4
  75. data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
  76. data/lib/project_types/rails/commands/generate.rb +7 -7
  77. data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
  78. data/lib/project_types/rails/commands/open.rb +2 -2
  79. data/lib/project_types/rails/commands/populate.rb +6 -6
  80. data/lib/project_types/rails/commands/populate/customer.rb +5 -5
  81. data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
  82. data/lib/project_types/rails/commands/populate/product.rb +5 -5
  83. data/lib/project_types/rails/commands/serve.rb +11 -11
  84. data/lib/project_types/rails/commands/tunnel.rb +7 -7
  85. data/lib/project_types/rails/forms/create.rb +34 -24
  86. data/lib/project_types/rails/gem.rb +23 -23
  87. data/lib/project_types/rails/messages/messages.rb +9 -8
  88. data/lib/project_types/rails/ruby.rb +2 -2
  89. data/lib/project_types/script/cli.rb +36 -40
  90. data/lib/project_types/script/commands/create.rb +9 -13
  91. data/lib/project_types/script/commands/push.rb +6 -5
  92. data/lib/project_types/script/config/extension_points.yml +25 -10
  93. data/lib/project_types/script/errors.rb +1 -19
  94. data/lib/project_types/script/forms/create.rb +7 -18
  95. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +7 -5
  96. data/lib/project_types/script/graphql/script_service_proxy.graphql +1 -2
  97. data/lib/project_types/script/layers/application/build_script.rb +6 -8
  98. data/lib/project_types/script/layers/application/create_script.rb +34 -24
  99. data/lib/project_types/script/layers/application/extension_points.rb +3 -2
  100. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  101. data/lib/project_types/script/layers/application/push_script.rb +10 -15
  102. data/lib/project_types/script/layers/domain/config_ui.rb +16 -0
  103. data/lib/project_types/script/layers/domain/errors.rb +16 -0
  104. data/lib/project_types/script/layers/domain/extension_point.rb +60 -45
  105. data/lib/project_types/script/layers/domain/metadata.rb +18 -25
  106. data/lib/project_types/script/layers/domain/push_package.rb +9 -5
  107. data/lib/project_types/script/layers/domain/script_project.rb +38 -0
  108. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +39 -10
  109. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +9 -44
  110. data/lib/project_types/script/layers/infrastructure/errors.rb +50 -19
  111. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +2 -2
  112. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +16 -21
  113. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +4 -4
  114. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +2 -2
  115. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +179 -0
  116. data/lib/project_types/script/layers/infrastructure/script_service.rb +35 -78
  117. data/lib/project_types/script/messages/messages.rb +33 -57
  118. data/lib/project_types/script/ui/error_handler.rb +116 -88
  119. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  120. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  121. data/lib/project_types/theme/cli.rb +19 -19
  122. data/lib/project_types/theme/commands/connect.rb +12 -12
  123. data/lib/project_types/theme/commands/create.rb +11 -11
  124. data/lib/project_types/theme/commands/deploy.rb +8 -8
  125. data/lib/project_types/theme/commands/generate.rb +3 -3
  126. data/lib/project_types/theme/commands/generate/env.rb +15 -15
  127. data/lib/project_types/theme/commands/push.rb +15 -15
  128. data/lib/project_types/theme/commands/serve.rb +5 -5
  129. data/lib/project_types/theme/forms/connect.rb +4 -4
  130. data/lib/project_types/theme/forms/create.rb +5 -5
  131. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +22 -22
  132. data/lib/project_types/theme/themekit.rb +15 -15
  133. data/lib/rubygems_plugin.rb +3 -3
  134. data/lib/shopify-cli/admin_api.rb +11 -11
  135. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  136. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  137. data/lib/shopify-cli/api.rb +10 -10
  138. data/lib/shopify-cli/command.rb +1 -1
  139. data/lib/shopify-cli/commands.rb +9 -9
  140. data/lib/shopify-cli/commands/config.rb +28 -52
  141. data/lib/shopify-cli/commands/connect.rb +10 -10
  142. data/lib/shopify-cli/commands/create.rb +5 -5
  143. data/lib/shopify-cli/commands/help.rb +6 -6
  144. data/lib/shopify-cli/commands/logout.rb +3 -3
  145. data/lib/shopify-cli/commands/system.rb +32 -32
  146. data/lib/shopify-cli/commands/version.rb +2 -2
  147. data/lib/shopify-cli/context.rb +51 -23
  148. data/lib/shopify-cli/core.rb +4 -4
  149. data/lib/shopify-cli/core/entry_point.rb +5 -5
  150. data/lib/shopify-cli/core/executor.rb +1 -1
  151. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  152. data/lib/shopify-cli/core/monorail.rb +16 -16
  153. data/lib/shopify-cli/db.rb +2 -2
  154. data/lib/shopify-cli/feature.rb +1 -1
  155. data/lib/shopify-cli/form.rb +1 -1
  156. data/lib/shopify-cli/git.rb +17 -17
  157. data/lib/shopify-cli/helpers.rb +1 -1
  158. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  159. data/lib/shopify-cli/heroku.rb +28 -28
  160. data/lib/shopify-cli/http_request.rb +2 -2
  161. data/lib/shopify-cli/js_deps.rb +12 -12
  162. data/lib/shopify-cli/js_system.rb +7 -7
  163. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  164. data/lib/shopify-cli/messages/messages.rb +7 -16
  165. data/lib/shopify-cli/method_object.rb +1 -1
  166. data/lib/shopify-cli/oauth.rb +27 -27
  167. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  168. data/lib/shopify-cli/options.rb +3 -3
  169. data/lib/shopify-cli/packager.rb +25 -25
  170. data/lib/shopify-cli/partners_api.rb +16 -16
  171. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  172. data/lib/shopify-cli/process_supervision.rb +7 -7
  173. data/lib/shopify-cli/project.rb +16 -16
  174. data/lib/shopify-cli/project_type.rb +3 -3
  175. data/lib/shopify-cli/resolve_constant.rb +1 -1
  176. data/lib/shopify-cli/resources.rb +1 -1
  177. data/lib/shopify-cli/resources/env_file.rb +10 -10
  178. data/lib/shopify-cli/result.rb +11 -11
  179. data/lib/shopify-cli/shopifolk.rb +6 -9
  180. data/lib/shopify-cli/sub_command.rb +1 -1
  181. data/lib/shopify-cli/task.rb +3 -3
  182. data/lib/shopify-cli/tasks.rb +7 -7
  183. data/lib/shopify-cli/tasks/create_api_client.rb +5 -5
  184. data/lib/shopify-cli/tasks/ensure_dev_store.rb +12 -12
  185. data/lib/shopify-cli/tasks/ensure_env.rb +15 -15
  186. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  187. data/lib/shopify-cli/tasks/select_org_and_shop.rb +19 -19
  188. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  189. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  190. data/lib/shopify-cli/tunnel.rb +30 -30
  191. data/lib/shopify-cli/version.rb +1 -1
  192. data/lib/shopify_cli.rb +56 -54
  193. data/shopify-cli.gemspec +6 -6
  194. data/vendor/deps/smart_properties/REVISION +1 -1
  195. data/vendor/deps/smart_properties/lib/smart_properties/property.rb +7 -1
  196. data/vendor/deps/smart_properties/lib/smart_properties/version.rb +1 -1
  197. data/vendor/gen/template/bin/update-deps +9 -9
  198. metadata +15 -11
  199. data/lib/project_types/extension/forms/register.rb +0 -47
  200. data/lib/project_types/script/commands/disable.rb +0 -25
  201. data/lib/project_types/script/commands/enable.rb +0 -78
  202. data/lib/project_types/script/graphql/shop_script_delete.graphql +0 -14
  203. data/lib/project_types/script/graphql/shop_script_update_or_create.graphql +0 -28
  204. data/lib/project_types/script/layers/application/disable_script.rb +0 -21
  205. data/lib/project_types/script/layers/application/enable_script.rb +0 -23
  206. data/lib/project_types/script/script_project.rb +0 -63
@@ -2,28 +2,43 @@ discount:
2
2
  deprecated: true
3
3
  assemblyscript:
4
4
  package: "@shopify/extension-point-as-discount"
5
- sdk-version: "^7.0.0"
6
- toolchain-version: "^4.0.0"
5
+ sdk-version: "^9.0.0"
6
+ toolchain-version: "^5.0.0"
7
7
  unit_limit_per_order:
8
+ beta: true
8
9
  assemblyscript:
9
10
  package: "@shopify/extension-point-as-unit-limit-per-order"
10
- sdk-version: "^7.0.0"
11
- toolchain-version: "^4.0.0"
11
+ sdk-version: "^9.0.0"
12
+ toolchain-version: "^5.0.0"
12
13
  payment_filter:
13
14
  assemblyscript:
14
15
  package: "@shopify/extension-point-as-payment-filter"
15
- sdk-version: "^7.0.0"
16
- toolchain-version: "^4.0.0"
16
+ sdk-version: "^9.0.0"
17
+ toolchain-version: "^5.0.0"
17
18
  rust:
18
19
  beta: true
19
20
  package: "https://github.com/Shopify/scripts-apis-rs"
20
21
  shipping_filter:
21
22
  assemblyscript:
22
23
  package: "@shopify/extension-point-as-shipping-filter"
23
- sdk-version: "^7.0.0"
24
- toolchain-version: "^4.0.0"
24
+ sdk-version: "^9.0.0"
25
+ toolchain-version: "^5.0.0"
25
26
  tax_filter:
27
+ beta: true
26
28
  assemblyscript:
27
29
  package: "@shopify/extension-point-as-tax-filter"
28
- sdk-version: "^7.0.0"
29
- toolchain-version: "^4.0.0"
30
+ sdk-version: "^9.0.0"
31
+ toolchain-version: "^5.0.0"
32
+ payment_methods:
33
+ domain: 'checkout'
34
+ assemblyscript:
35
+ package: "@shopify/scripts-checkout-apis"
36
+ toolchain-version: "^5.0.0"
37
+ sdk-version: "^9.0.0"
38
+ shipping_methods:
39
+ domain: 'checkout'
40
+ assemblyscript:
41
+ package: "@shopify/scripts-checkout-apis"
42
+ sdk-version: "^9.0.0"
43
+ toolchain-version: "^5.0.0"
44
+
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Script
4
4
  module Errors
5
- class InvalidContextError < ScriptProjectError; end
6
5
  class InvalidScriptNameError < ScriptProjectError; end
6
+
7
7
  class NoExistingAppsError < ScriptProjectError; end
8
8
  class NoExistingOrganizationsError < ScriptProjectError; end
9
9
 
@@ -15,7 +15,6 @@ module Script
15
15
  end
16
16
  end
17
17
 
18
- class ScriptProjectAlreadyExistsError < ScriptProjectError; end
19
18
  class InvalidConfigProps < ScriptProjectError; end
20
19
 
21
20
  class InvalidConfigYAMLError < ScriptProjectError
@@ -25,22 +24,5 @@ module Script
25
24
  @config_file = config_file
26
25
  end
27
26
  end
28
-
29
- class InvalidLanguageError < ScriptProjectError
30
- attr_reader :language, :extension_point_type
31
- def initialize(language, extension_point_type)
32
- super()
33
- @language = language
34
- @extension_point_type = extension_point_type
35
- end
36
- end
37
-
38
- class DeprecatedEPError < ScriptProjectError
39
- attr_reader :ep
40
- def initialize(ep)
41
- super()
42
- @ep = ep
43
- end
44
- end
45
27
  end
46
28
  end
@@ -3,11 +3,10 @@
3
3
  module Script
4
4
  module Forms
5
5
  class Create < ShopifyCli::Form
6
- flag_arguments :extension_point, :name, :language, :description
6
+ flag_arguments :extension_point, :name, :language
7
7
 
8
8
  def ask
9
9
  self.name = valid_name
10
- self.description ||= ask_description
11
10
  self.extension_point ||= ask_extension_point
12
11
  self.language = ask_language
13
12
  end
@@ -16,39 +15,29 @@ module Script
16
15
 
17
16
  def ask_extension_point
18
17
  CLI::UI::Prompt.ask(
19
- @ctx.message('script.forms.create.select_extension_point'),
20
- options: Layers::Application::ExtensionPoints.non_deprecated_types
18
+ @ctx.message("script.forms.create.select_extension_point"),
19
+ options: Layers::Application::ExtensionPoints.available_types
21
20
  )
22
21
  end
23
22
 
24
23
  def ask_name
25
- CLI::UI::Prompt.ask(@ctx.message('script.forms.create.script_name'))
26
- end
27
-
28
- def ask_description
29
- CLI::UI::Prompt.ask(@ctx.message('script.forms.create.description'))
24
+ CLI::UI::Prompt.ask(@ctx.message("script.forms.create.script_name"))
30
25
  end
31
26
 
32
27
  def valid_name
33
- n = (name || ask_name).downcase.gsub(' ', '_')
28
+ n = (name || ask_name).downcase.gsub(" ", "_")
34
29
  return n if n.match?(/^[0-9A-Za-z_-]*$/)
35
30
  raise Errors::InvalidScriptNameError
36
31
  end
37
32
 
38
33
  def ask_language
39
- if language
40
- if Layers::Application::ExtensionPoints.supported_language?(type: extension_point, language: language)
41
- return language.downcase
42
- else
43
- raise Errors::InvalidLanguageError.new(language, extension_point)
44
- end
45
- end
34
+ return language.downcase if language
46
35
 
47
36
  all_languages = Layers::Application::ExtensionPoints.languages(type: extension_point)
48
37
  return all_languages.first if all_languages.count == 1
49
38
 
50
39
  CLI::UI::Prompt.ask(
51
- ctx.message('script.forms.create.select_language'),
40
+ ctx.message("script.forms.create.select_language"),
52
41
  options: all_languages
53
42
  )
54
43
  end
@@ -1,24 +1,26 @@
1
1
  mutation AppScriptUpdateOrCreate(
2
2
  $extensionPointName: ExtensionPointName!,
3
3
  $title: String,
4
- $description: String,
4
+ $configUi: String,
5
5
  $sourceCode: String,
6
6
  $language: String,
7
7
  $force: Boolean,
8
8
  $schemaMajorVersion: String,
9
9
  $schemaMinorVersion: String,
10
- $useMsgpack: Boolean
10
+ $useMsgpack: Boolean,
11
+ $uuid: String
11
12
  ) {
12
13
  appScriptUpdateOrCreate(
13
14
  extensionPointName: $extensionPointName
14
15
  title: $title
15
- description: $description
16
+ configUi: $configUi
16
17
  sourceCode: $sourceCode
17
18
  language: $language
18
19
  force: $force
19
20
  schemaMajorVersion: $schemaMajorVersion
20
21
  schemaMinorVersion: $schemaMinorVersion
21
- useMsgpack: $useMsgpack
22
+ useMsgpack: $useMsgpack,
23
+ uuid: $uuid
22
24
  ) {
23
25
  userErrors {
24
26
  field
@@ -26,11 +28,11 @@ mutation AppScriptUpdateOrCreate(
26
28
  tag
27
29
  }
28
30
  appScript {
31
+ uuid
29
32
  appKey
30
33
  configSchema
31
34
  extensionPointName
32
35
  title
33
- description
34
36
  }
35
37
  }
36
38
  }
@@ -1,7 +1,6 @@
1
- query ProxyRequest($api_key: String, $shop_domain: String, $query: String!, $variables: String) {
1
+ query ProxyRequest($api_key: String, $query: String!, $variables: String) {
2
2
  scriptServiceProxy(
3
3
  apiKey: $api_key
4
- shopDomain: $shop_domain
5
4
  query: $query
6
5
  variables: $variables
7
6
  )
@@ -5,19 +5,17 @@ module Script
5
5
  module Application
6
6
  class BuildScript
7
7
  class << self
8
- def call(ctx:, task_runner:, script_name:, description:, extension_point_type:)
9
- CLI::UI::Frame.open(ctx.message('script.application.building')) do
8
+ def call(ctx:, task_runner:, script_project:)
9
+ CLI::UI::Frame.open(ctx.message("script.application.building")) do
10
10
  begin
11
- UI::StrictSpinner.spin(ctx.message('script.application.building_script')) do |spinner|
11
+ UI::StrictSpinner.spin(ctx.message("script.application.building_script")) do |spinner|
12
12
  Infrastructure::PushPackageRepository.new(ctx: ctx).create_push_package(
13
- extension_point_type: extension_point_type,
14
- script_name: script_name,
15
- description: description,
13
+ script_project: script_project,
16
14
  script_content: task_runner.build,
17
15
  compiled_type: task_runner.compiled_type,
18
- metadata: task_runner.metadata
16
+ metadata: task_runner.metadata,
19
17
  )
20
- spinner.update_title(ctx.message('script.application.built'))
18
+ spinner.update_title(ctx.message("script.application.built"))
21
19
  end
22
20
  rescue StandardError => e
23
21
  CLI::UI::Frame.with_frame_color_override(:red) do
@@ -7,32 +7,27 @@ module Script
7
7
  module Application
8
8
  class CreateScript
9
9
  class << self
10
- def call(ctx:, language:, script_name:, extension_point_type:, description:)
11
- extension_point = ExtensionPoints.get(type: extension_point_type)
12
- project = setup_project(ctx, language, script_name, extension_point, description)
13
- project_creator = Infrastructure::ProjectCreator
14
- .for(ctx, language, extension_point, script_name, project.directory)
15
- install_dependencies(ctx, language, script_name, project_creator)
16
- bootstrap(ctx, project_creator)
17
- project
10
+ def call(ctx:, language:, script_name:, extension_point_type:, no_config_ui:)
11
+ raise Infrastructure::Errors::ScriptProjectAlreadyExistsError, script_name if ctx.dir_exist?(script_name)
12
+
13
+ in_new_directory_context(ctx, script_name) do
14
+ extension_point = ExtensionPoints.get(type: extension_point_type)
15
+ project = Infrastructure::ScriptProjectRepository.new(ctx: ctx).create(
16
+ script_name: script_name,
17
+ extension_point_type: extension_point_type,
18
+ language: language,
19
+ no_config_ui: no_config_ui
20
+ )
21
+ project_creator = Infrastructure::ProjectCreator
22
+ .for(ctx, language, extension_point, script_name, project.id)
23
+ install_dependencies(ctx, language, script_name, project_creator)
24
+ bootstrap(ctx, project_creator)
25
+ project
26
+ end
18
27
  end
19
28
 
20
29
  private
21
30
 
22
- def setup_project(ctx, language, script_name, extension_point, description)
23
- ScriptProject.create(ctx, script_name)
24
- ScriptProject.write(
25
- ctx,
26
- project_type: :script,
27
- organization_id: nil, # TODO: can you provide this at creation
28
- extension_point_type: extension_point.type,
29
- script_name: script_name,
30
- language: language,
31
- description: description
32
- )
33
- ScriptProject.current
34
- end
35
-
36
31
  def install_dependencies(ctx, language, script_name, project_creator)
37
32
  task_runner = Infrastructure::TaskRunner.for(ctx, language, script_name)
38
33
  project_creator.setup_dependencies
@@ -40,9 +35,24 @@ module Script
40
35
  end
41
36
 
42
37
  def bootstrap(ctx, project_creator)
43
- UI::StrictSpinner.spin(ctx.message('script.create.creating')) do |spinner|
38
+ UI::StrictSpinner.spin(ctx.message("script.create.creating")) do |spinner|
44
39
  project_creator.bootstrap
45
- spinner.update_title(ctx.message('script.create.created'))
40
+ spinner.update_title(ctx.message("script.create.created"))
41
+ end
42
+ end
43
+
44
+ def in_new_directory_context(ctx, directory)
45
+ initial_directory = ctx.root
46
+ begin
47
+ ctx.mkdir_p(directory)
48
+ ctx.chdir(directory)
49
+ yield
50
+ rescue
51
+ ctx.chdir(initial_directory)
52
+ ctx.rm_r(directory)
53
+ raise
54
+ ensure
55
+ ctx.chdir(initial_directory)
46
56
  end
47
57
  end
48
58
  end
@@ -12,9 +12,10 @@ module Script
12
12
  Infrastructure::ExtensionPointRepository.new.extension_point_types
13
13
  end
14
14
 
15
- def self.non_deprecated_types
15
+ def self.available_types
16
16
  Infrastructure::ExtensionPointRepository.new.extension_points.select do |ep|
17
- !ep.deprecated?
17
+ next false if ep.deprecated?
18
+ !ep.beta? || ShopifyCli::Feature.enabled?(:scripts_beta_extension_points)
18
19
  end.map(&:type)
19
20
  end
20
21
 
@@ -3,14 +3,14 @@ module Script
3
3
  module Application
4
4
  class ProjectDependencies
5
5
  def self.install(ctx:, task_runner:)
6
- CLI::UI::Frame.open(ctx.message('script.project_deps.checking_with_npm')) do
6
+ CLI::UI::Frame.open(ctx.message("script.project_deps.checking_with_npm")) do
7
7
  begin
8
8
  if task_runner.dependencies_installed?
9
- ctx.puts(ctx.message('script.project_deps.none_required'))
9
+ ctx.puts(ctx.message("script.project_deps.none_required"))
10
10
  else
11
- UI::StrictSpinner.spin(ctx.message('script.project_deps.installing')) do |spinner|
11
+ UI::StrictSpinner.spin(ctx.message("script.project_deps.installing")) do |spinner|
12
12
  task_runner.install_dependencies
13
- spinner.update_title(ctx.message('script.project_deps.installed'))
13
+ spinner.update_title(ctx.message("script.project_deps.installed"))
14
14
  end
15
15
  end
16
16
  true
@@ -6,27 +6,22 @@ module Script
6
6
  class PushScript
7
7
  class << self
8
8
  def call(ctx:, force:)
9
- script_project = ScriptProject.current
9
+ script_project_repo = Infrastructure::ScriptProjectRepository.new(ctx: ctx)
10
+ script_project = script_project_repo.get
10
11
  task_runner = Infrastructure::TaskRunner.for(ctx, script_project.language, script_project.script_name)
12
+
11
13
  ProjectDependencies.install(ctx: ctx, task_runner: task_runner)
12
- BuildScript.call(
13
- ctx: ctx,
14
- task_runner: task_runner,
15
- extension_point_type: script_project.extension_point_type,
16
- script_name: script_project.script_name,
17
- description: script_project.description
18
- )
14
+ BuildScript.call(ctx: ctx, task_runner: task_runner, script_project: script_project)
19
15
 
20
- UI::PrintingSpinner.spin(ctx, ctx.message('script.application.pushing')) do |p_ctx, spinner|
16
+ UI::PrintingSpinner.spin(ctx, ctx.message("script.application.pushing")) do |p_ctx, spinner|
21
17
  package = Infrastructure::PushPackageRepository.new(ctx: p_ctx).get_push_package(
22
- extension_point_type: script_project.extension_point_type,
23
- script_name: script_project.script_name,
24
- description: script_project.description,
18
+ script_project: script_project,
25
19
  compiled_type: task_runner.compiled_type,
26
- metadata: task_runner.metadata
20
+ metadata: task_runner.metadata,
27
21
  )
28
- package.push(Infrastructure::ScriptService.new(ctx: p_ctx), script_project.api_key, force)
29
- spinner.update_title(p_ctx.message('script.application.pushed'))
22
+ uuid = package.push(Infrastructure::ScriptService.new(ctx: p_ctx), script_project.api_key, force)
23
+ script_project_repo.update_env(uuid: uuid)
24
+ spinner.update_title(p_ctx.message("script.application.pushed"))
30
25
  end
31
26
  end
32
27
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Script
4
+ module Layers
5
+ module Domain
6
+ class ConfigUi
7
+ attr_reader :filename, :content
8
+
9
+ def initialize(filename:, content:)
10
+ @filename = filename
11
+ @content = content
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -14,6 +14,22 @@ module Script
14
14
  end
15
15
  end
16
16
 
17
+ class InvalidConfigUiDefinitionError < ScriptProjectError
18
+ attr_reader :filename
19
+ def initialize(filename)
20
+ super()
21
+ @filename = filename
22
+ end
23
+ end
24
+
25
+ class MissingSpecifiedConfigUiDefinitionError < ScriptProjectError
26
+ attr_reader :filename
27
+ def initialize(filename)
28
+ super()
29
+ @filename = filename
30
+ end
31
+ end
32
+
17
33
  class ScriptNotFoundError < ScriptProjectError
18
34
  attr_reader :script_name, :extension_point_type
19
35
  def initialize(extension_point_type, script_name)
@@ -4,79 +4,94 @@ module Script
4
4
  module Layers
5
5
  module Domain
6
6
  class ExtensionPoint
7
- attr_reader :type, :deprecated, :sdks
7
+ attr_reader :type, :beta, :deprecated, :sdks, :domain
8
8
 
9
9
  def initialize(type, config)
10
10
  @type = type
11
+ @beta = config["beta"] || false
11
12
  @deprecated = config["deprecated"] || false
13
+ @domain = config["domain"] || nil
12
14
  @sdks = ExtensionPointSDKs.new(config)
13
15
  end
14
16
 
17
+ def beta?
18
+ @beta
19
+ end
20
+
15
21
  def deprecated?
16
22
  @deprecated
17
23
  end
18
- end
19
24
 
20
- class ExtensionPointSDKs
21
- def initialize(config)
22
- @config = config
25
+ def dasherize_type
26
+ @type.gsub("_", "-")
23
27
  end
24
28
 
25
- def all
26
- [assemblyscript, rust].compact
27
- end
29
+ class ExtensionPointSDKs
30
+ def initialize(config)
31
+ @config = config
32
+ end
28
33
 
29
- def assemblyscript
30
- @assemblyscript ||= new_sdk(ExtensionPointAssemblyScriptSDK)
31
- end
34
+ def all
35
+ [assemblyscript, rust].compact
36
+ end
32
37
 
33
- def rust
34
- @rust ||= new_sdk(ExtensionPointRustSDK)
35
- end
38
+ def assemblyscript
39
+ @assemblyscript ||= new_sdk(ExtensionPointAssemblyScriptSDK)
40
+ end
41
+
42
+ def rust
43
+ @rust ||= new_sdk(ExtensionPointRustSDK)
44
+ end
36
45
 
37
- private
46
+ private
38
47
 
39
- def new_sdk(klass)
40
- config = @config[klass.language]
41
- return nil if config.nil?
42
- klass.new(config)
48
+ def new_sdk(klass)
49
+ config = @config[klass.language]
50
+ return nil if config.nil?
51
+ klass.new(config)
52
+ end
43
53
  end
44
- end
45
54
 
46
- class ExtensionPointSDK
47
- attr_reader :beta, :package
55
+ class ExtensionPointSDK
56
+ attr_reader :version, :beta, :package
48
57
 
49
- def initialize(config)
50
- @beta = config["beta"] || false
51
- @package = config["package"]
52
- end
58
+ def initialize(config)
59
+ @beta = config["beta"] || false
60
+ @package = config["package"]
61
+ @version = config["package-version"]
62
+ end
53
63
 
54
- def beta?
55
- @beta
56
- end
64
+ def beta?
65
+ @beta
66
+ end
67
+
68
+ def versioned?
69
+ @version
70
+ end
57
71
 
58
- def self.language
59
- raise NotImplementedError
72
+ def self.language
73
+ raise NotImplementedError
74
+ end
60
75
  end
61
- end
62
76
 
63
- class ExtensionPointAssemblyScriptSDK < ExtensionPointSDK
64
- attr_reader :sdk_version, :toolchain_version
77
+ class ExtensionPointAssemblyScriptSDK < ExtensionPointSDK
78
+ attr_reader :sdk_version, :toolchain_version
65
79
 
66
- def initialize(config)
67
- super
68
- @sdk_version = config["sdk-version"]
69
- @toolchain_version = config["toolchain-version"]
70
- end
80
+ def initialize(config)
81
+ super
82
+ @sdk_version = config["sdk-version"]
83
+ @toolchain_version = config["toolchain-version"]
84
+ end
71
85
 
72
- def self.language
73
- "assemblyscript"
86
+ def self.language
87
+ "assemblyscript"
88
+ end
74
89
  end
75
- end
76
90
 
77
- class ExtensionPointRustSDK < ExtensionPointSDK
78
- def self.language
79
- "rust"
91
+ class ExtensionPointRustSDK < ExtensionPointSDK
92
+ def self.language
93
+ "rust"
94
+ end
80
95
  end
81
96
  end
82
97
  end