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
@@ -14,39 +14,32 @@ module Script
14
14
 
15
15
  class << self
16
16
  def create_from_json(ctx, metadata_json)
17
+ err_tag = nil
17
18
  metadata_hash = JSON.parse(metadata_json)
18
- schema_versions = metadata_hash["schemaVersions"]
19
- if schema_versions.nil?
20
- err_msg = "script.error.metadata_schema_versions_missing"
21
- raise ::Script::Layers::Domain::Errors::MetadataValidationError, ctx.message(err_msg)
22
- end
23
- # Scripts may be attached to more than one EP in the future but not right now
24
- unless schema_versions.count == 1
25
- err_msg = "script.error.metadata_schema_versions_single_key"
26
- raise ::Script::Layers::Domain::Errors::MetadataValidationError, ctx.message(err_msg)
27
- end
28
19
 
29
- _, version = schema_versions.first
20
+ use_msgpack = !!metadata_hash.dig("flags", "use_msgpack")
21
+ schema_versions = metadata_hash["schemaVersions"] || {}
22
+
23
+ version = schema_versions.values.first || {}
30
24
  schema_major_version = version["major"]
31
25
  schema_minor_version = version["minor"]
32
- if schema_major_version.nil?
33
- err_msg = "script.error.metadata_schema_versions_missing_major"
34
- raise ::Script::Layers::Domain::Errors::MetadataValidationError, ctx.message(err_msg)
35
- end
36
26
 
37
- if schema_minor_version.nil?
38
- err_msg = "script.error.metadata_schema_versions_missing_minor"
39
- raise ::Script::Layers::Domain::Errors::MetadataValidationError, ctx.message(err_msg)
27
+ if schema_versions.empty?
28
+ err_tag = "script.error.metadata_schema_versions_missing"
29
+ elsif schema_versions.count != 1
30
+ # Scripts may be attached to more than one EP in the future but not right now
31
+ err_tag = "script.error.metadata_schema_versions_single_key"
32
+ elsif schema_major_version.nil?
33
+ err_tag = "script.error.metadata_schema_versions_missing_major"
34
+ elsif schema_minor_version.nil?
35
+ err_tag = "script.error.metadata_schema_versions_missing_minor"
40
36
  end
41
37
 
42
- use_msgpack = !!metadata_hash.dig("flags", "use_msgpack")
43
-
44
38
  Metadata.new(schema_major_version, schema_minor_version, use_msgpack)
45
- rescue ::Script::Layers::Domain::Errors::MetadataValidationError
46
- raise
47
- rescue
48
- err_msg = "script.error.metadata_validation_cause"
49
- raise ::Script::Layers::Domain::Errors::MetadataValidationError, ctx.message(err_msg)
39
+ rescue JSON::ParserError
40
+ err_tag = "script.error.metadata_validation_cause"
41
+ ensure
42
+ raise Errors::MetadataValidationError, ctx.message(err_tag) if err_tag
50
43
  end
51
44
  end
52
45
  end
@@ -5,41 +5,45 @@ module Script
5
5
  module Domain
6
6
  class PushPackage
7
7
  attr_reader :id,
8
+ :uuid,
8
9
  :extension_point_type,
9
10
  :script_name,
10
- :description,
11
+ :config_ui,
11
12
  :script_content,
12
13
  :compiled_type,
13
14
  :metadata
14
15
 
15
16
  def initialize(
16
17
  id:,
18
+ uuid:,
17
19
  extension_point_type:,
18
20
  script_name:,
19
- description:,
20
21
  script_content:,
21
22
  compiled_type:,
22
- metadata:
23
+ metadata:,
24
+ config_ui:
23
25
  )
24
26
  @id = id
27
+ @uuid = uuid
25
28
  @extension_point_type = extension_point_type
26
29
  @script_name = script_name
27
- @description = description
28
30
  @script_content = script_content
29
31
  @compiled_type = compiled_type
30
32
  @metadata = metadata
33
+ @config_ui = config_ui
31
34
  end
32
35
 
33
36
  def push(script_service, api_key, force)
34
37
  script_service.push(
38
+ uuid: @uuid,
35
39
  extension_point_type: @extension_point_type,
36
40
  script_name: @script_name,
37
- description: @description,
38
41
  script_content: @script_content,
39
42
  compiled_type: @compiled_type,
40
43
  api_key: api_key,
41
44
  force: force,
42
45
  metadata: @metadata,
46
+ config_ui: @config_ui,
43
47
  )
44
48
  end
45
49
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Script
4
+ module Layers
5
+ module Domain
6
+ class ScriptProject
7
+ include SmartProperties
8
+
9
+ property! :id, accepts: String
10
+ property :env, accepts: ShopifyCli::Resources::EnvFile
11
+
12
+ property! :extension_point_type, accepts: String
13
+ property! :script_name, accepts: String
14
+ property! :language, accepts: String
15
+
16
+ property :config_ui, accepts: ConfigUi
17
+
18
+ def initialize(*)
19
+ super
20
+
21
+ ShopifyCli::Core::Monorail.metadata = {
22
+ "script_name" => script_name,
23
+ "extension_point_type" => extension_point_type,
24
+ "language" => language,
25
+ }
26
+ end
27
+
28
+ def api_key
29
+ env&.api_key
30
+ end
31
+
32
+ def uuid
33
+ env&.extra&.[]("UUID")
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -11,7 +11,10 @@ module Script
11
11
  property! :path_to_project, accepts: String
12
12
 
13
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"
14
16
  MIN_NODE_VERSION = "14.5.0"
17
+ ASC_ARGS = "-- --lib node_modules --optimize --use Date="
15
18
 
16
19
  def setup_dependencies
17
20
  write_npmrc
@@ -19,8 +22,7 @@ module Script
19
22
  end
20
23
 
21
24
  def bootstrap
22
- type = extension_point.type.gsub('_', '-')
23
- out, status = ctx.capture2e(format(BOOTSTRAP, extension_point: type, base: path_to_project))
25
+ out, status = ctx.capture2e(bootstap_command)
24
26
  raise Domain::Errors::ServiceFailureError, out unless status.success?
25
27
  end
26
28
 
@@ -28,17 +30,21 @@ module Script
28
30
 
29
31
  def write_npmrc
30
32
  ctx.system(
31
- 'npm', '--userconfig', './.npmrc', 'config', 'set', '@shopify:registry', 'https://registry.npmjs.com'
33
+ "npm", "--userconfig", "./.npmrc", "config", "set", "@shopify:registry", "https://registry.npmjs.com"
32
34
  )
33
35
  ctx.system(
34
- 'npm', '--userconfig', './.npmrc', 'config', 'set', 'engine-strict', 'true'
36
+ "npm", "--userconfig", "./.npmrc", "config", "set", "engine-strict", "true"
35
37
  )
36
38
  end
37
39
 
38
40
  def extension_point_version
41
+ if extension_point.sdks.assemblyscript.versioned?
42
+ return extension_point.sdks.assemblyscript.version
43
+ end
44
+
39
45
  out, status = ctx.capture2e("npm show #{extension_point.sdks.assemblyscript.package} version --json")
40
46
  raise Domain::Errors::ServiceFailureError, out unless status.success?
41
- JSON.parse(out)
47
+ "^#{JSON.parse(out)}"
42
48
  end
43
49
 
44
50
  def write_package_json
@@ -49,14 +55,13 @@ module Script
49
55
  "devDependencies": {
50
56
  "@shopify/scripts-sdk-as": "#{extension_point.sdks.assemblyscript.sdk_version}",
51
57
  "@shopify/scripts-toolchain-as": "#{extension_point.sdks.assemblyscript.toolchain_version}",
52
- "#{extension_point.sdks.assemblyscript.package}": "^#{extension_point_version}",
53
- "@as-pect/cli": "4.0.0",
54
- "as-wasi": "^0.2.1",
55
- "assemblyscript": "^0.16.1"
58
+ "#{extension_point.sdks.assemblyscript.package}": "#{extension_point_version}",
59
+ "@as-pect/cli": "^6.0.0",
60
+ "assemblyscript": "^0.18.13"
56
61
  },
57
62
  "scripts": {
58
63
  "test": "asp --summary --verbose",
59
- "build": "shopify-scripts-toolchain-as build --src src/script.ts --binary build/#{script_name}.wasm --metadata build/metadata.json -- --lib node_modules --optimize --use Date="
64
+ "build": "#{build_command}"
60
65
  },
61
66
  "engines": {
62
67
  "node": ">=#{MIN_NODE_VERSION}"
@@ -65,6 +70,30 @@ module Script
65
70
  HERE
66
71
  ctx.write("package.json", package_json)
67
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
68
97
  end
69
98
  end
70
99
  end
@@ -33,14 +33,12 @@ module Script
33
33
 
34
34
  def dependencies_installed?
35
35
  # Assuming if node_modules folder exist at root of script folder, all deps are installed
36
- return false unless ctx.dir_exist?("node_modules")
37
- check_if_ep_dependencies_up_to_date!
38
- true
36
+ ctx.dir_exist?("node_modules")
39
37
  end
40
38
 
41
39
  def metadata
42
40
  unless @ctx.file_exist?(METADATA_FILE)
43
- msg = @ctx.message('script.error.metadata_not_found_cause', METADATA_FILE)
41
+ msg = @ctx.message("script.error.metadata_not_found_cause", METADATA_FILE)
44
42
  raise Domain::Errors::MetadataNotFoundError, msg
45
43
  end
46
44
 
@@ -54,7 +52,7 @@ module Script
54
52
  output, status = @ctx.capture2e("node", "--version")
55
53
  raise Errors::DependencyInstallError, output unless status.success?
56
54
 
57
- require 'semantic/semantic'
55
+ require "semantic/semantic"
58
56
  version = ::Semantic::Version.new(output[1..-1])
59
57
  unless version >= ::Semantic::Version.new(AssemblyScriptProjectCreator::MIN_NODE_VERSION)
60
58
  raise Errors::DependencyInstallError,
@@ -71,8 +69,8 @@ module Script
71
69
  end
72
70
 
73
71
  def check_compilation_dependencies!
74
- pkg = JSON.parse(File.read('package.json'))
75
- build_script = pkg.dig('scripts', 'build')
72
+ pkg = JSON.parse(File.read("package.json"))
73
+ build_script = pkg.dig("scripts", "build")
76
74
 
77
75
  raise Errors::BuildScriptNotFoundError,
78
76
  "Build script not found" if build_script.nil?
@@ -83,47 +81,14 @@ module Script
83
81
  end
84
82
 
85
83
  def bytecode
86
- blob = format(BYTECODE_FILE, name: script_name)
87
- raise Errors::WebAssemblyBinaryNotFoundError unless @ctx.file_exist?(blob)
84
+ filename = format(BYTECODE_FILE, name: script_name)
85
+ raise Errors::WebAssemblyBinaryNotFoundError unless ctx.file_exist?(filename)
88
86
 
89
- contents = File.read(blob)
90
- @ctx.rm(blob)
87
+ contents = ctx.binread(filename)
88
+ ctx.rm(filename)
91
89
 
92
90
  contents
93
91
  end
94
-
95
- def check_if_ep_dependencies_up_to_date!
96
- return true if ENV['SHOPIFY_CLI_SCRIPTS_IGNORE_OUTDATED']
97
-
98
- # ignore exit code since it will not be 0 unless every package is up to date which they probably won't be
99
- out, _ = ctx.capture2e("npm", "outdated", "--json", "--depth", "0")
100
- parsed_outdated_check = JSON.parse(out)
101
- outdated_ep_packages = parsed_outdated_check
102
- .select { |package_name, _| package_name.start_with?('@shopify/extension-point-as-') }
103
- .select { |_, version_info| !package_is_up_to_date?(version_info) }
104
- .keys
105
- raise Errors::PackagesOutdatedError.new(outdated_ep_packages),
106
- "NPM packages out of date: #{outdated_ep_packages.join(', ')}" unless outdated_ep_packages.empty?
107
- end
108
-
109
- def package_is_up_to_date?(version_info)
110
- require 'semantic/semantic'
111
- current_version = version_info['current']
112
- latest_version = version_info['latest']
113
-
114
- # making an assumption that the script developer knows what they're doing if they're not referencing a
115
- # semver version
116
- begin
117
- current_version = ::Semantic::Version.new(current_version)
118
- latest_version = ::Semantic::Version.new(latest_version)
119
- rescue ArgumentError
120
- return true
121
- end
122
-
123
- return false if current_version.major < latest_version.major
124
- return false if latest_version.major == 0 && current_version.minor < latest_version.minor
125
- true
126
- end
127
92
  end
128
93
  end
129
94
  end
@@ -5,12 +5,59 @@ module Script
5
5
  module Infrastructure
6
6
  module Errors
7
7
  class AppNotInstalledError < ScriptProjectError; end
8
- class AppScriptNotPushedError < ScriptProjectError; end
9
- class AppScriptUndefinedError < ScriptProjectError; end
10
8
  class BuildError < ScriptProjectError; end
9
+ class ConfigUiSyntaxError < ScriptProjectError; end
10
+
11
+ class ConfigUiMissingKeysError < ScriptProjectError
12
+ attr_reader :filename, :missing_keys
13
+ def initialize(filename, missing_keys)
14
+ super()
15
+ @filename = filename
16
+ @missing_keys = missing_keys
17
+ end
18
+ end
19
+
20
+ class ConfigUiInvalidInputModeError < ScriptProjectError
21
+ attr_reader :filename, :valid_input_modes
22
+ def initialize(filename, valid_input_modes)
23
+ super()
24
+ @filename = filename
25
+ @valid_input_modes = valid_input_modes
26
+ end
27
+ end
28
+
29
+ class ConfigUiFieldsMissingKeysError < ScriptProjectError
30
+ attr_reader :filename, :missing_keys
31
+ def initialize(filename, missing_keys)
32
+ super()
33
+ @filename = filename
34
+ @missing_keys = missing_keys
35
+ end
36
+ end
37
+
38
+ class ConfigUiFieldsInvalidTypeError < ScriptProjectError
39
+ attr_reader :filename, :valid_types
40
+ def initialize(filename, valid_types)
41
+ super()
42
+ @filename = filename
43
+ @valid_types = valid_types
44
+ end
45
+ end
46
+
11
47
  class DependencyInstallError < ScriptProjectError; end
48
+ class DeprecatedEPError < ScriptProjectError; end
12
49
  class EmptyResponseError < ScriptProjectError; end
13
50
  class ForbiddenError < ScriptProjectError; end
51
+ class InvalidContextError < ScriptProjectError; end
52
+
53
+ class InvalidLanguageError < ScriptProjectError
54
+ attr_reader :language, :extension_point_type
55
+ def initialize(language, extension_point_type)
56
+ super()
57
+ @language = language
58
+ @extension_point_type = extension_point_type
59
+ end
60
+ end
14
61
 
15
62
  class GraphqlError < ScriptProjectError
16
63
  attr_reader :errors
@@ -30,25 +77,9 @@ module Script
30
77
  end
31
78
  end
32
79
 
33
- class ScriptServiceUserError < ScriptProjectError
34
- def initialize(query_name, errors)
35
- super("Failed performing #{query_name}. Errors: #{errors}.")
36
- end
37
- end
38
-
80
+ class ScriptProjectAlreadyExistsError < ScriptProjectError; end
39
81
  class ShopAuthenticationError < ScriptProjectError; end
40
- class ShopScriptConflictError < ScriptProjectError; end
41
- class ShopScriptUndefinedError < ScriptProjectError; end
42
82
  class TaskRunnerNotFoundError < ScriptProjectError; end
43
-
44
- class PackagesOutdatedError < ScriptProjectError
45
- attr_reader :outdated_packages
46
- def initialize(outdated_packages)
47
- super("EP packages are outdated and need to be updated: #{outdated_packages.join(', ')}")
48
- @outdated_packages = outdated_packages
49
- end
50
- end
51
-
52
83
  class BuildScriptNotFoundError < ScriptProjectError; end
53
84
  class InvalidBuildScriptError < ScriptProjectError; end
54
85
 
@@ -27,8 +27,8 @@ module Script
27
27
 
28
28
  def extension_point_configs
29
29
  @extension_points ||= begin
30
- require 'yaml'
31
- YAML.load_file(Project.project_filepath('config/extension_points.yml'))
30
+ require "yaml"
31
+ YAML.load_file(Project.project_filepath("config/extension_points.yml"))
32
32
  end
33
33
  end
34
34
  end
@@ -7,42 +7,37 @@ module Script
7
7
  include SmartProperties
8
8
  property! :ctx, accepts: ShopifyCli::Context
9
9
 
10
- def create_push_package(
11
- extension_point_type:,
12
- script_name:,
13
- description:,
14
- script_content:,
15
- compiled_type:,
16
- metadata:
17
- )
18
- build_file_path = file_path(script_name, compiled_type)
10
+ def create_push_package(script_project:, script_content:, compiled_type:, metadata:)
11
+ build_file_path = file_path(script_project.id, script_project.script_name, compiled_type)
19
12
  write_to_path(build_file_path, script_content)
20
13
 
21
14
  Domain::PushPackage.new(
22
15
  id: build_file_path,
23
- extension_point_type: extension_point_type,
24
- script_name: script_name,
25
- description: description,
16
+ uuid: script_project.uuid,
17
+ extension_point_type: script_project.extension_point_type,
18
+ script_name: script_project.script_name,
26
19
  script_content: script_content,
27
20
  compiled_type: compiled_type,
28
21
  metadata: metadata,
22
+ config_ui: script_project.config_ui,
29
23
  )
30
24
  end
31
25
 
32
- def get_push_package(extension_point_type:, script_name:, description:, compiled_type:, metadata:)
33
- build_file_path = file_path(script_name, compiled_type)
26
+ def get_push_package(script_project:, compiled_type:, metadata:)
27
+ build_file_path = file_path(script_project.id, script_project.script_name, compiled_type)
34
28
  raise Domain::PushPackageNotFoundError unless ctx.file_exist?(build_file_path)
35
29
 
36
- script_content = File.read(build_file_path)
30
+ script_content = ctx.binread(build_file_path)
37
31
 
38
32
  Domain::PushPackage.new(
39
33
  id: build_file_path,
40
- extension_point_type: extension_point_type,
41
- script_name: script_name,
42
- description: description,
34
+ uuid: script_project.uuid,
35
+ extension_point_type: script_project.extension_point_type,
36
+ script_name: script_project.script_name,
43
37
  script_content: script_content,
44
38
  compiled_type: compiled_type,
45
39
  metadata: metadata,
40
+ config_ui: script_project.config_ui,
46
41
  )
47
42
  end
48
43
 
@@ -50,11 +45,11 @@ module Script
50
45
 
51
46
  def write_to_path(path, content)
52
47
  ctx.mkdir_p(File.dirname(path))
53
- ctx.write(path, content)
48
+ ctx.binwrite(path, content)
54
49
  end
55
50
 
56
- def file_path(script_name, compiled_type)
57
- "#{ScriptProject.current.directory}/build/#{script_name}.#{compiled_type}"
51
+ def file_path(path_to_script, script_name, compiled_type)
52
+ "#{path_to_script}/build/#{script_name}.#{compiled_type}"
58
53
  end
59
54
  end
60
55
  end