shopify-cli 1.7.1 → 1.11.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 (103) 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/.rubocop_todo.yml +15 -2
  5. data/CHANGELOG.md +25 -0
  6. data/Gemfile.lock +15 -15
  7. data/README.md +2 -1
  8. data/dev.yml +3 -0
  9. data/lib/docgen/markdown.rb +1 -1
  10. data/lib/graphql/extension_create.graphql +17 -2
  11. data/lib/graphql/fetch_specifications.graphql +14 -0
  12. data/lib/project_types/extension/cli.rb +8 -10
  13. data/lib/project_types/extension/commands/create.rb +2 -2
  14. data/lib/project_types/extension/commands/extension_command.rb +10 -6
  15. data/lib/project_types/extension/commands/push.rb +2 -2
  16. data/lib/project_types/extension/commands/register.rb +6 -5
  17. data/lib/project_types/extension/commands/serve.rb +64 -22
  18. data/lib/project_types/extension/commands/tunnel.rb +3 -1
  19. data/lib/project_types/extension/extension_project.rb +20 -4
  20. data/lib/project_types/extension/extension_project_keys.rb +2 -1
  21. data/lib/project_types/extension/features/argo.rb +19 -44
  22. data/lib/project_types/extension/features/argo_runtime.rb +63 -0
  23. data/lib/project_types/extension/features/argo_serve.rb +79 -0
  24. data/lib/project_types/extension/features/argo_serve_options.rb +40 -0
  25. data/lib/project_types/extension/features/argo_setup.rb +1 -1
  26. data/lib/project_types/extension/forms/questions/ask_type.rb +16 -5
  27. data/lib/project_types/extension/messages/message_loading.rb +3 -1
  28. data/lib/project_types/extension/messages/messages.rb +9 -6
  29. data/lib/project_types/extension/models/npm_package.rb +14 -0
  30. data/lib/project_types/extension/models/registration.rb +1 -0
  31. data/lib/project_types/extension/models/specification.rb +7 -2
  32. data/lib/project_types/extension/models/specification_handlers/checkout_argo_extension.rb +18 -0
  33. data/lib/project_types/extension/models/specification_handlers/default.rb +35 -2
  34. data/lib/project_types/extension/models/specifications.rb +12 -1
  35. data/lib/project_types/extension/models/version.rb +1 -1
  36. data/lib/project_types/extension/tasks/choose_next_available_port.rb +36 -0
  37. data/lib/project_types/extension/tasks/configure_features.rb +5 -1
  38. data/lib/project_types/extension/tasks/converters/registration_converter.rb +2 -0
  39. data/lib/project_types/extension/tasks/fetch_specifications.rb +8 -28
  40. data/lib/project_types/extension/tasks/find_npm_packages.rb +106 -0
  41. data/lib/project_types/node/commands/generate.rb +0 -22
  42. data/lib/project_types/node/forms/create.rb +10 -1
  43. data/lib/project_types/node/messages/messages.rb +5 -4
  44. data/lib/project_types/rails/forms/create.rb +11 -1
  45. data/lib/project_types/rails/messages/messages.rb +5 -4
  46. data/lib/project_types/script/cli.rb +7 -8
  47. data/lib/project_types/script/commands/create.rb +0 -7
  48. data/lib/project_types/script/commands/push.rb +3 -3
  49. data/lib/project_types/script/config/extension_points.yml +17 -0
  50. data/lib/project_types/script/errors.rb +0 -19
  51. data/lib/project_types/script/forms/create.rb +3 -14
  52. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +5 -5
  53. data/lib/project_types/script/graphql/get_app_scripts.graphql +6 -0
  54. data/lib/project_types/script/graphql/script_service_proxy.graphql +1 -2
  55. data/lib/project_types/script/layers/application/build_script.rb +1 -2
  56. data/lib/project_types/script/layers/application/create_script.rb +32 -49
  57. data/lib/project_types/script/layers/application/extension_points.rb +3 -2
  58. data/lib/project_types/script/layers/application/push_script.rb +5 -5
  59. data/lib/project_types/script/layers/domain/errors.rb +0 -2
  60. data/lib/project_types/script/layers/domain/extension_point.rb +60 -45
  61. data/lib/project_types/script/layers/domain/metadata.rb +18 -25
  62. data/lib/project_types/script/layers/domain/push_package.rb +4 -4
  63. data/lib/project_types/script/layers/domain/script_project.rb +54 -0
  64. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +39 -14
  65. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +14 -43
  66. data/lib/project_types/script/layers/infrastructure/command_runner.rb +19 -0
  67. data/lib/project_types/script/layers/infrastructure/errors.rb +40 -20
  68. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +12 -13
  69. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +9 -10
  70. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +6 -7
  71. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +172 -0
  72. data/lib/project_types/script/layers/infrastructure/script_service.rb +25 -76
  73. data/lib/project_types/script/messages/messages.rb +20 -53
  74. data/lib/project_types/script/tasks/ensure_env.rb +85 -0
  75. data/lib/project_types/script/ui/error_handler.rb +32 -41
  76. data/lib/shopify-cli/context.rb +28 -0
  77. data/lib/shopify-cli/js_system.rb +2 -2
  78. data/lib/shopify-cli/messages/messages.rb +50 -45
  79. data/lib/shopify-cli/method_object.rb +4 -4
  80. data/lib/shopify-cli/oauth.rb +9 -3
  81. data/lib/shopify-cli/packager.rb +1 -1
  82. data/lib/shopify-cli/partners_api/organizations.rb +3 -3
  83. data/lib/shopify-cli/resolve_constant.rb +1 -1
  84. data/lib/shopify-cli/resources/env_file.rb +1 -1
  85. data/lib/shopify-cli/tasks/ensure_dev_store.rb +1 -1
  86. data/lib/shopify-cli/tasks/select_org_and_shop.rb +6 -4
  87. data/lib/shopify-cli/transform_data_structure.rb +2 -2
  88. data/lib/shopify-cli/tunnel.rb +22 -1
  89. data/lib/shopify-cli/version.rb +1 -1
  90. data/lib/shopify_cli.rb +0 -1
  91. data/vendor/deps/smart_properties/REVISION +1 -1
  92. data/vendor/deps/smart_properties/lib/smart_properties/property.rb +7 -1
  93. data/vendor/deps/smart_properties/lib/smart_properties/version.rb +1 -1
  94. metadata +17 -12
  95. data/.travis.yml +0 -14
  96. data/lib/project_types/script/commands/disable.rb +0 -25
  97. data/lib/project_types/script/commands/enable.rb +0 -80
  98. data/lib/project_types/script/graphql/shop_script_delete.graphql +0 -14
  99. data/lib/project_types/script/graphql/shop_script_update_or_create.graphql +0 -28
  100. data/lib/project_types/script/layers/application/disable_script.rb +0 -21
  101. data/lib/project_types/script/layers/application/enable_script.rb +0 -23
  102. data/lib/project_types/script/layers/infrastructure/config_ui_repository.rb +0 -46
  103. data/lib/project_types/script/script_project.rb +0 -64
@@ -7,59 +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:, no_config_ui:)
11
- extension_point = ExtensionPoints.get(type: extension_point_type)
12
- project = setup_project(
13
- ctx: ctx,
14
- language: language,
15
- script_name: script_name,
16
- extension_point: extension_point,
17
- description: description,
18
- no_config_ui: no_config_ui
19
- )
20
- project_creator = Infrastructure::ProjectCreator
21
- .for(ctx, language, extension_point, script_name, project.directory)
22
- install_dependencies(ctx, language, script_name, project_creator)
23
- bootstrap(ctx, project_creator)
24
- 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
25
27
  end
26
28
 
27
29
  private
28
30
 
29
- DEFAULT_CONFIG_UI_FILENAME = "config-ui.yml"
30
- DEFAULT_CONFIG = {
31
- "version" => 1,
32
- "type" => "single",
33
- "fields" => [],
34
- }
35
-
36
- def setup_project(ctx:, language:, script_name:, extension_point:, description:, no_config_ui:)
37
- ScriptProject.create(ctx, script_name)
38
-
39
- identifiers = {
40
- extension_point_type: extension_point.type,
41
- script_name: script_name,
42
- language: language,
43
- description: description,
44
- }
45
-
46
- unless no_config_ui
47
- require "yaml" # takes 20ms, so deferred as late as possible.
48
- identifiers.merge!(config_ui_file: DEFAULT_CONFIG_UI_FILENAME)
49
- Infrastructure::ConfigUiRepository
50
- .new(ctx: ctx)
51
- .create_config_ui(DEFAULT_CONFIG_UI_FILENAME, YAML.dump(DEFAULT_CONFIG))
52
- end
53
-
54
- ScriptProject.write(
55
- ctx,
56
- project_type: :script,
57
- organization_id: nil, # TODO: can you provide this at creation
58
- **identifiers
59
- )
60
- ScriptProject.current
61
- end
62
-
63
31
  def install_dependencies(ctx, language, script_name, project_creator)
64
32
  task_runner = Infrastructure::TaskRunner.for(ctx, language, script_name)
65
33
  project_creator.setup_dependencies
@@ -72,6 +40,21 @@ module Script
72
40
  spinner.update_title(ctx.message("script.create.created"))
73
41
  end
74
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)
56
+ end
57
+ end
75
58
  end
76
59
  end
77
60
  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
 
@@ -6,21 +6,21 @@ 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)
11
- config_ui = Infrastructure::ConfigUiRepository.new(ctx: ctx).get_config_ui(script_project.config_ui_file)
12
12
 
13
13
  ProjectDependencies.install(ctx: ctx, task_runner: task_runner)
14
- BuildScript.call(ctx: ctx, task_runner: task_runner, script_project: script_project, config_ui: config_ui)
14
+ BuildScript.call(ctx: ctx, task_runner: task_runner, script_project: script_project)
15
15
 
16
16
  UI::PrintingSpinner.spin(ctx, ctx.message("script.application.pushing")) do |p_ctx, spinner|
17
17
  package = Infrastructure::PushPackageRepository.new(ctx: p_ctx).get_push_package(
18
18
  script_project: script_project,
19
19
  compiled_type: task_runner.compiled_type,
20
20
  metadata: task_runner.metadata,
21
- config_ui: config_ui,
22
21
  )
23
- package.push(Infrastructure::ScriptService.new(ctx: p_ctx), script_project.api_key, force)
22
+ uuid = package.push(Infrastructure::ScriptService.new(ctx: p_ctx), script_project.api_key, force)
23
+ script_project_repo.update_env(uuid: uuid)
24
24
  spinner.update_title(p_ctx.message("script.application.pushed"))
25
25
  end
26
26
  end
@@ -39,8 +39,6 @@ module Script
39
39
  end
40
40
  end
41
41
 
42
- class ServiceFailureError < ScriptProjectError; end
43
-
44
42
  class MetadataNotFoundError < ScriptProjectError; end
45
43
 
46
44
  class MetadataValidationError < ScriptProjectError; end
@@ -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
@@ -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,9 +5,9 @@ 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
11
  :config_ui,
12
12
  :script_content,
13
13
  :compiled_type,
@@ -15,18 +15,18 @@ module Script
15
15
 
16
16
  def initialize(
17
17
  id:,
18
+ uuid:,
18
19
  extension_point_type:,
19
20
  script_name:,
20
- description:,
21
21
  script_content:,
22
22
  compiled_type:,
23
23
  metadata:,
24
24
  config_ui:
25
25
  )
26
26
  @id = id
27
+ @uuid = uuid
27
28
  @extension_point_type = extension_point_type
28
29
  @script_name = script_name
29
- @description = description
30
30
  @script_content = script_content
31
31
  @compiled_type = compiled_type
32
32
  @metadata = metadata
@@ -35,9 +35,9 @@ module Script
35
35
 
36
36
  def push(script_service, api_key, force)
37
37
  script_service.push(
38
+ uuid: @uuid,
38
39
  extension_point_type: @extension_point_type,
39
40
  script_name: @script_name,
40
- description: @description,
41
41
  script_content: @script_content,
42
42
  compiled_type: @compiled_type,
43
43
  api_key: api_key,
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Script
4
+ module Layers
5
+ module Domain
6
+ class ScriptProject
7
+ include SmartProperties
8
+
9
+ UUID_ENV_KEY = "UUID"
10
+
11
+ property! :id, accepts: String
12
+ property :env, accepts: ShopifyCli::Resources::EnvFile
13
+
14
+ property! :extension_point_type, accepts: String
15
+ property! :script_name, accepts: String
16
+ property! :language, accepts: String
17
+
18
+ property :config_ui, accepts: ConfigUi
19
+
20
+ def initialize(*)
21
+ super
22
+
23
+ ShopifyCli::Core::Monorail.metadata = {
24
+ "script_name" => script_name,
25
+ "extension_point_type" => extension_point_type,
26
+ "language" => language,
27
+ }
28
+ end
29
+
30
+ def api_key
31
+ env&.api_key
32
+ end
33
+
34
+ def api_secret
35
+ env&.secret
36
+ end
37
+
38
+ def uuid
39
+ uuid_defined? && !raw_uuid.empty? ? raw_uuid : nil
40
+ end
41
+
42
+ def uuid_defined?
43
+ !raw_uuid.nil?
44
+ end
45
+
46
+ private
47
+
48
+ def raw_uuid
49
+ env&.extra&.[](UUID_ENV_KEY)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ 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.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,26 +22,25 @@ 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))
24
- raise Domain::Errors::ServiceFailureError, out unless status.success?
25
+ command_runner.call(bootstap_command)
25
26
  end
26
27
 
27
28
  private
28
29
 
30
+ def command_runner
31
+ @command_runner ||= CommandRunner.new(ctx: ctx)
32
+ end
33
+
29
34
  def write_npmrc
30
- ctx.system(
31
- "npm", "--userconfig", "./.npmrc", "config", "set", "@shopify:registry", "https://registry.npmjs.com"
32
- )
33
- ctx.system(
34
- "npm", "--userconfig", "./.npmrc", "config", "set", "engine-strict", "true"
35
- )
35
+ command_runner.call("npm --userconfig ./.npmrc config set @shopify:registry https://registry.npmjs.com")
36
+ command_runner.call("npm --userconfig ./.npmrc config set engine-strict true")
36
37
  end
37
38
 
38
39
  def extension_point_version
39
- out, status = ctx.capture2e("npm show #{extension_point.sdks.assemblyscript.package} version --json")
40
- raise Domain::Errors::ServiceFailureError, out unless status.success?
41
- JSON.parse(out)
40
+ return extension_point.sdks.assemblyscript.version if extension_point.sdks.assemblyscript.versioned?
41
+
42
+ out = command_runner.call("npm show #{extension_point.sdks.assemblyscript.package} version --json")
43
+ "^#{JSON.parse(out)}"
42
44
  end
43
45
 
44
46
  def write_package_json
@@ -49,13 +51,13 @@ module Script
49
51
  "devDependencies": {
50
52
  "@shopify/scripts-sdk-as": "#{extension_point.sdks.assemblyscript.sdk_version}",
51
53
  "@shopify/scripts-toolchain-as": "#{extension_point.sdks.assemblyscript.toolchain_version}",
52
- "#{extension_point.sdks.assemblyscript.package}": "^#{extension_point_version}",
54
+ "#{extension_point.sdks.assemblyscript.package}": "#{extension_point_version}",
53
55
  "@as-pect/cli": "^6.0.0",
54
56
  "assemblyscript": "^0.18.13"
55
57
  },
56
58
  "scripts": {
57
59
  "test": "asp --summary --verbose",
58
- "build": "shopify-scripts-toolchain-as build --src src/shopify_main.ts --binary build/#{script_name}.wasm --metadata build/metadata.json -- --lib node_modules --optimize --use Date="
60
+ "build": "#{build_command}"
59
61
  },
60
62
  "engines": {
61
63
  "node": ">=#{MIN_NODE_VERSION}"
@@ -64,6 +66,29 @@ module Script
64
66
  HERE
65
67
  ctx.write("package.json", package_json)
66
68
  end
69
+
70
+ def bootstap_command
71
+ type = extension_point.dasherize_type
72
+ base_command = format(BOOTSTRAP, extension_point: type, base: path_to_project)
73
+ domain = extension_point.domain
74
+
75
+ if domain.nil?
76
+ base_command
77
+ else
78
+ "#{base_command} --domain #{domain}"
79
+ end
80
+ end
81
+
82
+ def build_command
83
+ type = extension_point.dasherize_type
84
+ domain = extension_point.domain
85
+
86
+ if domain.nil?
87
+ "#{BUILD} #{ASC_ARGS}"
88
+ else
89
+ "#{BUILD} --domain #{domain} --ep #{type} #{ASC_ARGS}"
90
+ end
91
+ end
67
92
  end
68
93
  end
69
94
  end