shopify-cli 1.7.1 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
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