shopify-cli 2.4.0 → 2.5.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.
- checksums.yaml +4 -4
- data/.github/workflows/shopify.yml +0 -2
- data/.rubocop.yml +14 -14
- data/.rubocop_todo.yml +3 -3
- data/CHANGELOG.md +5 -0
- data/Dockerfile +1 -1
- data/Gemfile.lock +1 -1
- data/RELEASING.md +1 -1
- data/Rakefile +18 -18
- data/bin/shopify +3 -3
- data/lib/project_types/extension/cli.rb +3 -3
- data/lib/project_types/extension/commands/build.rb +2 -2
- data/lib/project_types/extension/commands/check.rb +2 -2
- data/lib/project_types/extension/commands/connect.rb +1 -1
- data/lib/project_types/extension/commands/create.rb +41 -23
- data/lib/project_types/extension/commands/extension_command.rb +1 -1
- data/lib/project_types/extension/commands/info.rb +1 -1
- data/lib/project_types/extension/commands/push.rb +1 -1
- data/lib/project_types/extension/commands/register.rb +2 -2
- data/lib/project_types/extension/commands/serve.rb +5 -5
- data/lib/project_types/extension/commands/tunnel.rb +6 -6
- data/lib/project_types/extension/extension_project.rb +4 -4
- data/lib/project_types/extension/features/argo.rb +2 -2
- data/lib/project_types/extension/features/argo_config.rb +5 -5
- data/lib/project_types/extension/features/argo_serve.rb +20 -6
- data/lib/project_types/extension/features/argo_setup.rb +1 -1
- data/lib/project_types/extension/features/argo_setup_step.rb +1 -1
- data/lib/project_types/extension/features/argo_setup_steps.rb +2 -2
- data/lib/project_types/extension/forms/connect.rb +2 -2
- data/lib/project_types/extension/forms/create.rb +2 -2
- data/lib/project_types/extension/forms/questions/ask_app.rb +2 -2
- data/lib/project_types/extension/forms/questions/ask_name.rb +1 -1
- data/lib/project_types/extension/forms/questions/ask_registration.rb +2 -2
- data/lib/project_types/extension/forms/questions/ask_template.rb +2 -2
- data/lib/project_types/extension/forms/questions/ask_type.rb +2 -2
- data/lib/project_types/extension/messages/message_loading.rb +2 -2
- data/lib/project_types/extension/models/development_server.rb +45 -6
- data/lib/project_types/extension/models/development_server_requirements.rb +22 -3
- data/lib/project_types/extension/models/lazy_specification_handler.rb +1 -1
- data/lib/project_types/extension/models/specification.rb +1 -1
- data/lib/project_types/extension/models/specification_handlers/default.rb +10 -2
- data/lib/project_types/extension/models/specification_handlers/theme_app_extension.rb +1 -1
- data/lib/project_types/extension/models/specifications.rb +4 -4
- data/lib/project_types/extension/tasks/choose_next_available_port.rb +1 -1
- data/lib/project_types/extension/tasks/configure_features.rb +1 -1
- data/lib/project_types/extension/tasks/configure_options.rb +1 -1
- data/lib/project_types/extension/tasks/converters/product_converter.rb +1 -1
- data/lib/project_types/extension/tasks/create_extension.rb +2 -2
- data/lib/project_types/extension/tasks/fetch_specifications.rb +2 -2
- data/lib/project_types/extension/tasks/find_npm_packages.rb +3 -3
- data/lib/project_types/extension/tasks/get_app.rb +2 -2
- data/lib/project_types/extension/tasks/get_apps.rb +2 -2
- data/lib/project_types/extension/tasks/get_extensions.rb +2 -2
- data/lib/project_types/extension/tasks/get_product.rb +2 -2
- data/lib/project_types/extension/tasks/run_extension_command.rb +10 -3
- data/lib/project_types/extension/tasks/update_draft.rb +2 -2
- data/lib/project_types/node/cli.rb +3 -3
- data/lib/project_types/node/commands/connect.rb +4 -4
- data/lib/project_types/node/commands/create.rb +10 -10
- data/lib/project_types/node/commands/deploy/heroku.rb +4 -4
- data/lib/project_types/node/commands/deploy.rb +3 -3
- data/lib/project_types/node/commands/generate.rb +2 -2
- data/lib/project_types/node/commands/open.rb +3 -3
- data/lib/project_types/node/commands/serve.rb +7 -7
- data/lib/project_types/node/commands/tunnel.rb +6 -6
- data/lib/project_types/node/forms/create.rb +3 -3
- data/lib/project_types/php/cli.rb +27 -0
- data/lib/project_types/php/commands/connect.rb +19 -0
- data/lib/project_types/php/commands/create.rb +143 -0
- data/lib/project_types/php/commands/deploy/heroku.rb +129 -0
- data/lib/project_types/php/commands/deploy.rb +32 -0
- data/lib/project_types/php/commands/open.rb +16 -0
- data/lib/project_types/php/commands/serve.rb +51 -0
- data/lib/project_types/php/commands/tunnel.rb +37 -0
- data/lib/project_types/php/forms/create.rb +45 -0
- data/lib/project_types/php/messages/messages.rb +191 -0
- data/lib/project_types/rails/cli.rb +3 -3
- data/lib/project_types/rails/commands/connect.rb +4 -4
- data/lib/project_types/rails/commands/create.rb +12 -12
- data/lib/project_types/rails/commands/deploy/heroku.rb +4 -4
- data/lib/project_types/rails/commands/deploy.rb +3 -3
- data/lib/project_types/rails/commands/generate/webhook.rb +3 -3
- data/lib/project_types/rails/commands/generate.rb +3 -3
- data/lib/project_types/rails/commands/open.rb +3 -3
- data/lib/project_types/rails/commands/serve.rb +8 -8
- data/lib/project_types/rails/commands/tunnel.rb +6 -6
- data/lib/project_types/rails/forms/create.rb +3 -3
- data/lib/project_types/rails/gem.rb +1 -1
- data/lib/project_types/rails/ruby.rb +1 -1
- data/lib/project_types/script/cli.rb +11 -4
- data/lib/project_types/script/commands/create.rb +2 -2
- data/lib/project_types/script/commands/push.rb +2 -2
- data/lib/project_types/script/forms/create.rb +1 -1
- data/lib/project_types/script/layers/application/extension_points.rb +2 -2
- data/lib/project_types/script/layers/application/push_script.rb +4 -1
- data/lib/project_types/script/layers/domain/script_project.rb +2 -2
- data/lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb +55 -0
- data/lib/project_types/script/layers/infrastructure/api_clients/script_service_api_client.rb +35 -0
- data/lib/project_types/script/layers/infrastructure/command_runner.rb +1 -1
- data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_project_creator.rb +1 -1
- data/lib/project_types/script/layers/infrastructure/languages/rust_project_creator.rb +1 -1
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +1 -1
- data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +5 -5
- data/lib/project_types/script/layers/infrastructure/script_service.rb +4 -8
- data/lib/project_types/script/layers/infrastructure/service_locator.rb +20 -0
- data/lib/project_types/script/tasks/ensure_env.rb +6 -6
- data/lib/project_types/script/ui/error_handler.rb +75 -75
- data/lib/project_types/script/ui/printing_spinner.rb +1 -1
- data/lib/project_types/theme/cli.rb +3 -3
- data/lib/project_types/theme/commands/check.rb +3 -3
- data/lib/project_types/theme/commands/delete.rb +7 -7
- data/lib/project_types/theme/commands/init.rb +3 -3
- data/lib/project_types/theme/commands/language_server.rb +2 -2
- data/lib/project_types/theme/commands/package.rb +2 -2
- data/lib/project_types/theme/commands/publish.rb +5 -5
- data/lib/project_types/theme/commands/pull.rb +9 -9
- data/lib/project_types/theme/commands/push.rb +12 -12
- data/lib/project_types/theme/commands/serve.rb +4 -4
- data/lib/project_types/theme/forms/confirm_store.rb +1 -1
- data/lib/project_types/theme/forms/select.rb +2 -2
- data/lib/{shopify-cli → shopify_cli}/admin_api/populate_resource_command.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/admin_api/schema.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/admin_api.rb +27 -27
- data/lib/{shopify-cli → shopify_cli}/api.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/command.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/commands/config.rb +14 -14
- data/lib/{shopify-cli → shopify_cli}/commands/help.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/commands/login.rb +7 -7
- data/lib/shopify_cli/commands/logout.rb +39 -0
- data/lib/{shopify-cli → shopify_cli}/commands/populate/customer.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/commands/populate/draft_order.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/commands/populate/product.rb +4 -4
- data/lib/shopify_cli/commands/populate.rb +23 -0
- data/lib/shopify_cli/commands/store.rb +15 -0
- data/lib/{shopify-cli → shopify_cli}/commands/switch.rb +5 -5
- data/lib/{shopify-cli → shopify_cli}/commands/system.rb +10 -10
- data/lib/shopify_cli/commands/version.rb +15 -0
- data/lib/{shopify-cli → shopify_cli}/commands/whoami.rb +7 -7
- data/lib/shopify_cli/commands.rb +34 -0
- data/lib/{shopify-cli → shopify_cli}/connect.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/constants.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/context.rb +6 -6
- data/lib/{shopify-cli → shopify_cli}/core/entry_point.rb +7 -7
- data/lib/{shopify-cli → shopify_cli}/core/executor.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/core/finalize.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/core/help_resolver.rb +2 -2
- data/lib/{shopify-cli → shopify_cli}/core/monorail.rb +8 -8
- data/lib/shopify_cli/core.rb +8 -0
- data/lib/{shopify-cli → shopify_cli}/db.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/environment.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/feature.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/form.rb +2 -2
- data/lib/{shopify-cli → shopify_cli}/git.rb +6 -6
- data/lib/{shopify-cli → shopify_cli}/helpers/haikunator.rb +1 -1
- data/lib/shopify_cli/helpers.rb +5 -0
- data/lib/{shopify-cli → shopify_cli}/heroku.rb +38 -13
- data/lib/{shopify-cli → shopify_cli}/http_request.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/identity_auth/servlet.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/identity_auth.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/js_deps.rb +7 -7
- data/lib/{shopify-cli → shopify_cli}/js_system.rb +10 -10
- data/lib/{shopify-cli → shopify_cli}/lazy_delegator.rb +2 -2
- data/lib/{shopify-cli → shopify_cli}/messages/messages.rb +17 -1
- data/lib/{shopify-cli → shopify_cli}/method_object.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/options.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/packager.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/partners_api/organizations.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/partners_api.rb +13 -13
- data/lib/shopify_cli/php_deps.rb +102 -0
- data/lib/{shopify-cli → shopify_cli}/process_supervision.rb +10 -8
- data/lib/{shopify-cli → shopify_cli}/project.rb +15 -15
- data/lib/{shopify-cli → shopify_cli}/project_commands.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/project_type.rb +5 -5
- data/lib/{shopify-cli → shopify_cli}/resolve_constant.rb +5 -5
- data/lib/{shopify-cli → shopify_cli}/resources/env_file.rb +1 -1
- data/lib/shopify_cli/resources.rb +5 -0
- data/lib/{shopify-cli → shopify_cli}/result.rb +11 -11
- data/lib/{shopify-cli → shopify_cli}/shopifolk.rb +6 -6
- data/lib/{shopify-cli → shopify_cli}/sub_command.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/task.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/tasks/confirm_store.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/tasks/create_api_client.rb +4 -4
- data/lib/shopify_cli/tasks/ensure_authenticated.rb +13 -0
- data/lib/{shopify-cli → shopify_cli}/tasks/ensure_dev_store.rb +5 -5
- data/lib/{shopify-cli → shopify_cli}/tasks/ensure_env.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/tasks/ensure_loopback_url.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/tasks/ensure_project_type.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/tasks/select_org_and_shop.rb +8 -8
- data/lib/{shopify-cli → shopify_cli}/tasks/update_dashboard_urls.rb +6 -6
- data/lib/{shopify-cli → shopify_cli}/tasks.rb +10 -10
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/certificate_manager.rb +5 -5
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/header_hash.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot-reload.js +0 -0
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot_reload.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/local_assets.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/proxy.rb +2 -2
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/sse.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/watcher.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server/web_server.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/dev_server.rb +3 -3
- data/lib/{shopify-cli → shopify_cli}/theme/development_theme.rb +9 -9
- data/lib/{shopify-cli → shopify_cli}/theme/file.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/ignore_filter.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/mime_type.rb +1 -1
- data/lib/{shopify-cli → shopify_cli}/theme/syncer.rb +6 -6
- data/lib/{shopify-cli → shopify_cli}/theme/theme.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/transform_data_structure.rb +4 -4
- data/lib/{shopify-cli → shopify_cli}/tunnel.rb +14 -14
- data/lib/shopify_cli/version.rb +3 -0
- data/lib/shopify_cli.rb +50 -49
- data/shopify-cli.gemspec +2 -2
- metadata +104 -91
- data/lib/project_types/script/layers/infrastructure/api_clients.rb +0 -89
- data/lib/shopify-cli/commands/logout.rb +0 -39
- data/lib/shopify-cli/commands/populate.rb +0 -23
- data/lib/shopify-cli/commands/store.rb +0 -15
- data/lib/shopify-cli/commands/version.rb +0 -15
- data/lib/shopify-cli/commands.rb +0 -34
- data/lib/shopify-cli/core.rb +0 -8
- data/lib/shopify-cli/helpers.rb +0 -5
- data/lib/shopify-cli/resources.rb +0 -5
- data/lib/shopify-cli/tasks/ensure_authenticated.rb +0 -13
- data/lib/shopify-cli/version.rb +0 -3
|
@@ -7,11 +7,11 @@ module Extension
|
|
|
7
7
|
NPM_SERVE_COMMAND = %w(run-script server)
|
|
8
8
|
|
|
9
9
|
property! :specification_handler, accepts: Extension::Models::SpecificationHandlers::Default
|
|
10
|
-
property
|
|
11
|
-
property! :context, accepts:
|
|
10
|
+
property :argo_runtime, accepts: -> (runtime) { runtime.class < Features::Runtimes::Base }
|
|
11
|
+
property! :context, accepts: ShopifyCLI::Context
|
|
12
12
|
property! :port, accepts: Integer, default: 39351
|
|
13
13
|
property :tunnel_url, accepts: String, default: nil
|
|
14
|
-
property! :js_system, accepts: ->(jss) { jss.respond_to?(:call) }, default:
|
|
14
|
+
property! :js_system, accepts: ->(jss) { jss.respond_to?(:call) }, default: ShopifyCLI::JsSystem
|
|
15
15
|
property :resource_url, accepts: String, default: nil
|
|
16
16
|
|
|
17
17
|
def call
|
|
@@ -30,6 +30,7 @@ module Extension
|
|
|
30
30
|
private
|
|
31
31
|
|
|
32
32
|
def start_server
|
|
33
|
+
return new_serve_flow if supports_development_server?
|
|
33
34
|
js_system.call(context, yarn: yarn_serve_command, npm: npm_serve_command)
|
|
34
35
|
end
|
|
35
36
|
|
|
@@ -58,8 +59,8 @@ module Extension
|
|
|
58
59
|
|
|
59
60
|
return if required_fields.none?
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
ShopifyCLI::Tasks::EnsureEnv.call(context, required: required_fields)
|
|
63
|
+
ShopifyCLI::Tasks::EnsureDevStore.call(context) if required_fields.include?(:shop)
|
|
63
64
|
|
|
64
65
|
project = ExtensionProject.current
|
|
65
66
|
ensure_resource_resource_url! if specification_handler.supplies_resource_url?
|
|
@@ -90,7 +91,7 @@ module Extension
|
|
|
90
91
|
def ensure_resource_resource_url!
|
|
91
92
|
project = ExtensionProject.current(force_reload: true)
|
|
92
93
|
|
|
93
|
-
|
|
94
|
+
ShopifyCLI::Result
|
|
94
95
|
.wrap(project.resource_url)
|
|
95
96
|
.rescue { specification_handler.build_resource_url(shop: project.env.shop, context: context) }
|
|
96
97
|
.then(&method(:persist_resource_url))
|
|
@@ -108,6 +109,19 @@ module Extension
|
|
|
108
109
|
ExtensionProject.update_env_file(context: context, resource_url: resource_url)
|
|
109
110
|
resource_url
|
|
110
111
|
end
|
|
112
|
+
|
|
113
|
+
def new_serve_flow
|
|
114
|
+
Tasks::RunExtensionCommand.new(
|
|
115
|
+
type: specification_handler.specification.identifier,
|
|
116
|
+
command: "serve",
|
|
117
|
+
context: context,
|
|
118
|
+
port: port,
|
|
119
|
+
).call
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def supports_development_server?
|
|
123
|
+
Models::DevelopmentServerRequirements.supported?(specification_handler.specification.identifier)
|
|
124
|
+
end
|
|
111
125
|
end
|
|
112
126
|
end
|
|
113
127
|
end
|
|
@@ -26,7 +26,7 @@ module Extension
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def run_install_steps(context, steps, identifier, directory_name)
|
|
29
|
-
system =
|
|
29
|
+
system = ShopifyCLI::JsSystem.new(ctx: context)
|
|
30
30
|
|
|
31
31
|
steps.inject(true) do |success, setup_step|
|
|
32
32
|
success && setup_step.call(context, identifier, directory_name, system)
|
|
@@ -11,7 +11,7 @@ module Extension
|
|
|
11
11
|
def call(context, identifier, directory_name, js_system)
|
|
12
12
|
step_result = step.call(context, identifier, directory_name, js_system)
|
|
13
13
|
can_fail? ? step_result : true
|
|
14
|
-
rescue
|
|
14
|
+
rescue ShopifyCLI::Abort => e
|
|
15
15
|
context.puts(e.message)
|
|
16
16
|
false
|
|
17
17
|
rescue StandardError => e
|
|
@@ -18,7 +18,7 @@ module Extension
|
|
|
18
18
|
def self.clone_template(git_template)
|
|
19
19
|
ArgoSetupStep.default do |context, _identifier, directory_name, _js_system|
|
|
20
20
|
begin
|
|
21
|
-
|
|
21
|
+
ShopifyCLI::Git.clone(git_template, directory_name, ctx: context)
|
|
22
22
|
context.root = File.join(context.root, directory_name)
|
|
23
23
|
rescue StandardError
|
|
24
24
|
context.puts("{{x}} Unable to clone the repository.")
|
|
@@ -28,7 +28,7 @@ module Extension
|
|
|
28
28
|
|
|
29
29
|
def self.install_dependencies
|
|
30
30
|
ArgoSetupStep.default do |context, _identifier, _directory_name, js_system|
|
|
31
|
-
|
|
31
|
+
ShopifyCLI::JsDeps.new(ctx: context, system: js_system).install
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Extension
|
|
4
4
|
module Forms
|
|
5
|
-
class Connect <
|
|
5
|
+
class Connect < ShopifyCLI::Form
|
|
6
6
|
attr_reader :registration, :app
|
|
7
7
|
|
|
8
8
|
flag_arguments :type
|
|
@@ -19,7 +19,7 @@ module Extension
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def ask
|
|
22
|
-
|
|
22
|
+
ShopifyCLI::Result.wrap(ExtensionProjectDetails.new)
|
|
23
23
|
.then(&Questions::AskRegistration.new(ctx: ctx, type: type))
|
|
24
24
|
.unwrap { |e| raise e }
|
|
25
25
|
.tap do |project_details|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Extension
|
|
4
4
|
module Forms
|
|
5
|
-
class Create <
|
|
5
|
+
class Create < ShopifyCLI::Form
|
|
6
6
|
flag_arguments :name, :type, :api_key, :template
|
|
7
7
|
|
|
8
8
|
attr_reader :app
|
|
@@ -21,7 +21,7 @@ module Extension
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def ask
|
|
24
|
-
|
|
24
|
+
ShopifyCLI::Result.wrap(ExtensionProjectDetails.new)
|
|
25
25
|
.then(&Questions::AskApp.new(ctx: ctx, api_key: api_key))
|
|
26
26
|
.then(&Questions::AskType.new(ctx: ctx, type: type))
|
|
27
27
|
.then(&Questions::AskTemplate.new(ctx: ctx))
|
|
@@ -2,7 +2,7 @@ module Extension
|
|
|
2
2
|
module Forms
|
|
3
3
|
module Questions
|
|
4
4
|
class AskApp
|
|
5
|
-
include
|
|
5
|
+
include ShopifyCLI::MethodObject
|
|
6
6
|
|
|
7
7
|
property! :ctx
|
|
8
8
|
property :api_key
|
|
@@ -45,7 +45,7 @@ module Extension
|
|
|
45
45
|
def abort_no_apps
|
|
46
46
|
ctx.puts(@ctx.message("create.no_apps"))
|
|
47
47
|
ctx.puts(@ctx.message("create.learn_about_apps"))
|
|
48
|
-
raise
|
|
48
|
+
raise ShopifyCLI::AbortSilent
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
end
|
|
@@ -4,7 +4,7 @@ module Extension
|
|
|
4
4
|
module Forms
|
|
5
5
|
module Questions
|
|
6
6
|
class AskRegistration
|
|
7
|
-
include
|
|
7
|
+
include ShopifyCLI::MethodObject
|
|
8
8
|
|
|
9
9
|
property! :ctx
|
|
10
10
|
property! :type
|
|
@@ -43,7 +43,7 @@ module Extension
|
|
|
43
43
|
def abort_no_registrations
|
|
44
44
|
ctx.puts(@ctx.message("connect.no_extensions", type))
|
|
45
45
|
ctx.puts(@ctx.message("connect.learn_about_extensions"))
|
|
46
|
-
raise
|
|
46
|
+
raise ShopifyCLI::AbortSilent
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
end
|
|
@@ -2,7 +2,7 @@ module Extension
|
|
|
2
2
|
module Forms
|
|
3
3
|
module Questions
|
|
4
4
|
class AskTemplate
|
|
5
|
-
include
|
|
5
|
+
include ShopifyCLI::MethodObject
|
|
6
6
|
|
|
7
7
|
TEMPLATE_REQUIRED_TYPES = [
|
|
8
8
|
"checkout_ui_extension",
|
|
@@ -28,7 +28,7 @@ module Extension
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def extension_server_beta?
|
|
31
|
-
|
|
31
|
+
ShopifyCLI::Shopifolk.check && ShopifyCLI::Feature.enabled?(:extension_server_beta)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def choose_interactively
|
|
@@ -2,7 +2,7 @@ module Extension
|
|
|
2
2
|
module Forms
|
|
3
3
|
module Questions
|
|
4
4
|
class AskType
|
|
5
|
-
include
|
|
5
|
+
include ShopifyCLI::MethodObject
|
|
6
6
|
|
|
7
7
|
property! :ctx
|
|
8
8
|
property :type
|
|
@@ -39,7 +39,7 @@ module Extension
|
|
|
39
39
|
|
|
40
40
|
def abort_due_to_missing_specifications
|
|
41
41
|
ctx.puts(@ctx.message("create.no_available_extensions"))
|
|
42
|
-
raise
|
|
42
|
+
raise ShopifyCLI::AbortSilent
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -15,9 +15,9 @@ module Extension
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def self.load_current_type_messages
|
|
18
|
-
return unless
|
|
18
|
+
return unless ShopifyCLI::Project.has_current?
|
|
19
19
|
messages_for_type(
|
|
20
|
-
|
|
20
|
+
ShopifyCLI::Project.current.config[Extension::ExtensionProjectKeys::SPECIFICATION_IDENTIFIER_KEY]
|
|
21
21
|
)
|
|
22
22
|
end
|
|
23
23
|
|
|
@@ -7,9 +7,20 @@ module Extension
|
|
|
7
7
|
|
|
8
8
|
include SmartProperties
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
EXECUTABLE_DIRECTORY = File.join(ShopifyCLI::ROOT, "ext", "shopify-extensions")
|
|
11
11
|
|
|
12
|
-
property
|
|
12
|
+
property :executable, converts: :to_s
|
|
13
|
+
|
|
14
|
+
def executable
|
|
15
|
+
super || begin
|
|
16
|
+
case RbConfig::CONFIG.fetch("host_os")
|
|
17
|
+
when /(linux)|(darwin)/
|
|
18
|
+
File.join(EXECUTABLE_DIRECTORY, "shopify-extensions")
|
|
19
|
+
else
|
|
20
|
+
File.join(EXECUTABLE_DIRECTORY, "shopify-extensions.exe")
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
13
24
|
|
|
14
25
|
def create(server_config)
|
|
15
26
|
CLI::Kit::System.capture3(executable, "create", "-", stdin_data: server_config.to_yaml)
|
|
@@ -18,18 +29,46 @@ module Extension
|
|
|
18
29
|
end
|
|
19
30
|
|
|
20
31
|
def build(server_config)
|
|
21
|
-
_, error,
|
|
22
|
-
return if
|
|
32
|
+
_, error, status = CLI::Kit::System.capture3(executable, "build", "-", stdin_data: server_config.to_yaml)
|
|
33
|
+
return if status.success?
|
|
23
34
|
raise DevelopmentServerError, error
|
|
24
35
|
end
|
|
25
36
|
|
|
26
|
-
def serve
|
|
27
|
-
|
|
37
|
+
def serve(context, server_config)
|
|
38
|
+
CLI::Kit::System.popen3(executable, "serve", "-") do |input, out, err, status|
|
|
39
|
+
context.puts("Sending configuration data …")
|
|
40
|
+
input << server_config.to_yaml
|
|
41
|
+
input.close
|
|
42
|
+
|
|
43
|
+
forward_output_to_user(out, err, context)
|
|
44
|
+
|
|
45
|
+
status.value
|
|
46
|
+
end
|
|
28
47
|
end
|
|
29
48
|
|
|
30
49
|
def version
|
|
31
50
|
raise NotImplementedError
|
|
32
51
|
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def forward_output_to_user(out, err, ctx)
|
|
56
|
+
ctx.puts("Starting monitoring threads …")
|
|
57
|
+
|
|
58
|
+
Thread.new do
|
|
59
|
+
ctx.puts("Ready to process standard output")
|
|
60
|
+
while (line = out.gets)
|
|
61
|
+
ctx.puts(line)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Thread.new do
|
|
66
|
+
ctx.puts("Ready to process standard error")
|
|
67
|
+
while (error = err.gets)
|
|
68
|
+
ctx.puts(error)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
33
72
|
end
|
|
34
73
|
end
|
|
35
74
|
end
|
|
@@ -8,9 +8,28 @@ module Extension
|
|
|
8
8
|
"checkout_ui_extension",
|
|
9
9
|
]
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
UNIX_NAME = "shopify-extensions"
|
|
12
|
+
WINDOWS_NAME = "shopify-extensions.exe"
|
|
13
|
+
|
|
14
|
+
class << self
|
|
15
|
+
def supported?(type)
|
|
16
|
+
binary_installed? && type_supported?(type) && beta_enabled?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def binary_installed?
|
|
22
|
+
extension_dir = File.join(ShopifyCLI::ROOT, "ext", "shopify-extensions")
|
|
23
|
+
File.exist?(File.join(extension_dir, UNIX_NAME)) || File.exist?(File.join(extension_dir, WINDOWS_NAME))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def type_supported?(type)
|
|
27
|
+
SUPPORTED_EXTENSION_TYPES.include?(type.downcase)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def beta_enabled?
|
|
31
|
+
ShopifyCLI::Shopifolk.check && ShopifyCLI::Feature.enabled?(:extension_server_beta)
|
|
32
|
+
end
|
|
14
33
|
end
|
|
15
34
|
end
|
|
16
35
|
end
|
|
@@ -18,7 +18,7 @@ module Extension
|
|
|
18
18
|
def self.build(feature_set_attributes)
|
|
19
19
|
feature_set_attributes.each_with_object(OpenStruct.new) do |(identifier, feature_attributes), feature_set|
|
|
20
20
|
next if feature_attributes.nil?
|
|
21
|
-
feature_set[identifier] =
|
|
21
|
+
feature_set[identifier] = ShopifyCLI::ResolveConstant
|
|
22
22
|
.call(identifier, namespace: Features)
|
|
23
23
|
.rescue { OpenStruct }
|
|
24
24
|
.then { |c| c.new(**feature_attributes) }
|
|
@@ -43,10 +43,12 @@ module Extension
|
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def choose_port?(context)
|
|
46
|
+
return true if supports_development_server?
|
|
46
47
|
argo_runtime(context).supports?(:port)
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
def establish_tunnel?(context)
|
|
51
|
+
return true if supports_development_server?
|
|
50
52
|
argo_runtime(context).supports?(:public_url)
|
|
51
53
|
end
|
|
52
54
|
|
|
@@ -66,6 +68,8 @@ module Extension
|
|
|
66
68
|
end
|
|
67
69
|
|
|
68
70
|
def argo_runtime(context)
|
|
71
|
+
return if supports_development_server?
|
|
72
|
+
|
|
69
73
|
@argo_runtime ||= Features::ArgoRuntime.find(
|
|
70
74
|
cli_package: cli_package(context),
|
|
71
75
|
identifier: identifier
|
|
@@ -76,7 +80,7 @@ module Extension
|
|
|
76
80
|
cli_package_name = specification.features.argo&.cli_package_name
|
|
77
81
|
return unless cli_package_name
|
|
78
82
|
|
|
79
|
-
js_system =
|
|
83
|
+
js_system = ShopifyCLI::JsSystem.new(ctx: context)
|
|
80
84
|
Tasks::FindNpmPackages.exactly_one_of(cli_package_name, js_system: js_system)
|
|
81
85
|
.unwrap { |_e| context.abort(context.message("errors.package_not_found", cli_package_name)) }
|
|
82
86
|
end
|
|
@@ -87,7 +91,7 @@ module Extension
|
|
|
87
91
|
if (str = messages.dig(*key_parts))
|
|
88
92
|
str % params
|
|
89
93
|
else
|
|
90
|
-
|
|
94
|
+
ShopifyCLI::Context.message(key, *params)
|
|
91
95
|
end
|
|
92
96
|
end
|
|
93
97
|
|
|
@@ -118,6 +122,10 @@ module Extension
|
|
|
118
122
|
def messages
|
|
119
123
|
@messages ||= Messages::TYPES[identifier.downcase.to_sym] || {}
|
|
120
124
|
end
|
|
125
|
+
|
|
126
|
+
def supports_development_server?
|
|
127
|
+
Models::DevelopmentServerRequirements.supported?(identifier)
|
|
128
|
+
end
|
|
121
129
|
end
|
|
122
130
|
end
|
|
123
131
|
end
|
|
@@ -15,7 +15,7 @@ module Extension
|
|
|
15
15
|
context.root = File.join(context.root, directory_name)
|
|
16
16
|
|
|
17
17
|
if getting_started
|
|
18
|
-
|
|
18
|
+
ShopifyCLI::Git.clone("https://github.com/Shopify/theme-extension-getting-started", context.root)
|
|
19
19
|
context.rm_r(".git")
|
|
20
20
|
else
|
|
21
21
|
FileUtils.makedirs(SUPPORTED_BUCKETS.map { |b| File.join(context.root, b) })
|
|
@@ -5,7 +5,7 @@ module Extension
|
|
|
5
5
|
|
|
6
6
|
property! :custom_handler_root,
|
|
7
7
|
accepts: ->(d) { File.directory?(d) },
|
|
8
|
-
default: -> { File.expand_path("lib/project_types/extension/models/specification_handlers",
|
|
8
|
+
default: -> { File.expand_path("lib/project_types/extension/models/specification_handlers", ShopifyCLI::ROOT) }
|
|
9
9
|
|
|
10
10
|
property! :custom_handler_namespace,
|
|
11
11
|
accepts: ->(m) { m.respond_to?(:const_get) },
|
|
@@ -39,9 +39,9 @@ module Extension
|
|
|
39
39
|
private
|
|
40
40
|
|
|
41
41
|
def fetch_specifications_and_build_handlers
|
|
42
|
-
|
|
42
|
+
ShopifyCLI::Result
|
|
43
43
|
.call(&fetch_specifications)
|
|
44
|
-
.map(&
|
|
44
|
+
.map(&ShopifyCLI::TransformDataStructure.new(symbolize_keys: true, underscore_keys: true))
|
|
45
45
|
.then(&method(:select_cli_extensions))
|
|
46
46
|
.then(&Tasks::ConfigureFeatures)
|
|
47
47
|
.then(&Tasks::ConfigureOptions)
|
|
@@ -61,7 +61,7 @@ module Extension
|
|
|
61
61
|
|
|
62
62
|
def instantiate_specification_handlers(specifications)
|
|
63
63
|
specifications.each_with_object({}) do |specification, handlers|
|
|
64
|
-
|
|
64
|
+
ShopifyCLI::ResolveConstant.call(specification.identifier, namespace: custom_handler_namespace)
|
|
65
65
|
.rescue { |error| error.is_a?(NameError) ? SpecificationHandlers::Default : raise(error) }
|
|
66
66
|
.then { |handler_class| handler_class.new(specification) }
|
|
67
67
|
.unwrap { |error| raise error }
|
|
@@ -3,7 +3,7 @@ require "shopify_cli"
|
|
|
3
3
|
|
|
4
4
|
module Extension
|
|
5
5
|
module Tasks
|
|
6
|
-
class CreateExtension <
|
|
6
|
+
class CreateExtension < ShopifyCLI::Task
|
|
7
7
|
include UserErrors
|
|
8
8
|
|
|
9
9
|
GRAPHQL_FILE = "extension_create"
|
|
@@ -20,7 +20,7 @@ module Extension
|
|
|
20
20
|
extension_context: extension_context,
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
response =
|
|
23
|
+
response = ShopifyCLI::PartnersAPI.query(context, GRAPHQL_FILE, **input).dig(*RESPONSE_FIELD)
|
|
24
24
|
context.abort(context.message("tasks.errors.parse_error")) if response.nil?
|
|
25
25
|
|
|
26
26
|
abort_if_user_errors(context, response)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
module Extension
|
|
2
2
|
module Tasks
|
|
3
3
|
class FetchSpecifications
|
|
4
|
-
include
|
|
4
|
+
include ShopifyCLI::MethodObject
|
|
5
5
|
|
|
6
6
|
property :context
|
|
7
7
|
property :api_key
|
|
8
8
|
|
|
9
9
|
def call
|
|
10
|
-
response =
|
|
10
|
+
response = ShopifyCLI::PartnersAPI
|
|
11
11
|
.query(context, "fetch_specifications", api_key: api_key)
|
|
12
12
|
.dig("data", "extensionSpecifications")
|
|
13
13
|
context.abort(context.message("tasks.errors.parse_error")) if response.nil?
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
module Extension
|
|
2
2
|
module Tasks
|
|
3
3
|
class FindNpmPackages
|
|
4
|
-
include
|
|
4
|
+
include ShopifyCLI::MethodObject
|
|
5
5
|
|
|
6
|
-
property! :js_system, accepts:
|
|
6
|
+
property! :js_system, accepts: ShopifyCLI::JsSystem
|
|
7
7
|
property! :production_only, accepts: [true, false], default: false, reader: :production_only?
|
|
8
8
|
|
|
9
9
|
def self.at_least_one_of(*package_names, **config)
|
|
@@ -69,7 +69,7 @@ module Extension
|
|
|
69
69
|
raise ArgumentError, "Expected a list of package names"
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
ShopifyCLI::Result
|
|
73
73
|
.call(&method(:list_packages))
|
|
74
74
|
.then(&method(:search_packages).curry[package_names])
|
|
75
75
|
.then(&method(:filter_duplicates))
|
|
@@ -3,7 +3,7 @@ require "shopify_cli"
|
|
|
3
3
|
|
|
4
4
|
module Extension
|
|
5
5
|
module Tasks
|
|
6
|
-
class GetApp <
|
|
6
|
+
class GetApp < ShopifyCLI::Task
|
|
7
7
|
GRAPHQL_FILE = "get_app_by_api_key"
|
|
8
8
|
|
|
9
9
|
RESPONSE_FIELD = %w(data)
|
|
@@ -12,7 +12,7 @@ module Extension
|
|
|
12
12
|
def call(context:, api_key:)
|
|
13
13
|
input = { api_key: api_key }
|
|
14
14
|
|
|
15
|
-
response =
|
|
15
|
+
response = ShopifyCLI::PartnersAPI.query(context, GRAPHQL_FILE, **input).dig(*RESPONSE_FIELD)
|
|
16
16
|
context.abort(context.message("tasks.errors.parse_error")) if response.nil?
|
|
17
17
|
|
|
18
18
|
Converters::AppConverter.from_hash(response.dig(APP_FIELD))
|
|
@@ -3,9 +3,9 @@ require "shopify_cli"
|
|
|
3
3
|
|
|
4
4
|
module Extension
|
|
5
5
|
module Tasks
|
|
6
|
-
class GetApps <
|
|
6
|
+
class GetApps < ShopifyCLI::Task
|
|
7
7
|
def call(context:)
|
|
8
|
-
organizations =
|
|
8
|
+
organizations = ShopifyCLI::PartnersAPI::Organizations.fetch_with_app(context)
|
|
9
9
|
apps_from_organizations(organizations)
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -3,9 +3,9 @@ require "shopify_cli"
|
|
|
3
3
|
|
|
4
4
|
module Extension
|
|
5
5
|
module Tasks
|
|
6
|
-
class GetExtensions <
|
|
6
|
+
class GetExtensions < ShopifyCLI::Task
|
|
7
7
|
def call(context:, type:)
|
|
8
|
-
organizations =
|
|
8
|
+
organizations = ShopifyCLI::PartnersAPI::Organizations.fetch_with_extensions(context, type)
|
|
9
9
|
extensions_from_organizations(organizations, context: context)
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -3,12 +3,12 @@ require "shopify_cli"
|
|
|
3
3
|
|
|
4
4
|
module Extension
|
|
5
5
|
module Tasks
|
|
6
|
-
class GetProduct <
|
|
6
|
+
class GetProduct < ShopifyCLI::Task
|
|
7
7
|
API_VERSION = "2021-07"
|
|
8
8
|
GRAPHQL_FILE = "get_variant_id"
|
|
9
9
|
|
|
10
10
|
def call(context, shop)
|
|
11
|
-
response =
|
|
11
|
+
response = ShopifyCLI::AdminAPI.query(
|
|
12
12
|
context,
|
|
13
13
|
GRAPHQL_FILE,
|
|
14
14
|
shop: shop,
|
|
@@ -4,7 +4,7 @@ require "shopify_cli"
|
|
|
4
4
|
|
|
5
5
|
module Extension
|
|
6
6
|
module Tasks
|
|
7
|
-
class RunExtensionCommand <
|
|
7
|
+
class RunExtensionCommand < ShopifyCLI::Task
|
|
8
8
|
include SmartProperties
|
|
9
9
|
|
|
10
10
|
SUPPORTED_EXTENSION_TYPES = [
|
|
@@ -14,15 +14,18 @@ module Extension
|
|
|
14
14
|
SUPPORTED_COMMANDS = [
|
|
15
15
|
"create",
|
|
16
16
|
"build",
|
|
17
|
+
"serve",
|
|
17
18
|
]
|
|
18
19
|
|
|
19
20
|
property :root_dir, accepts: String
|
|
20
21
|
property :template, accepts: Models::ServerConfig::Development::VALID_TEMPLATES
|
|
21
22
|
property! :type, accepts: SUPPORTED_EXTENSION_TYPES
|
|
22
23
|
property! :command, accepts: SUPPORTED_COMMANDS
|
|
24
|
+
property :context, accepts: ShopifyCLI::Context
|
|
25
|
+
property :port, accepts: Integer, default: 39351
|
|
23
26
|
|
|
24
27
|
def call
|
|
25
|
-
|
|
28
|
+
ShopifyCLI::Result
|
|
26
29
|
.call(&method(:build_extension))
|
|
27
30
|
.then(&method(:build_server_config))
|
|
28
31
|
.then(&method(:run_command))
|
|
@@ -42,7 +45,7 @@ module Extension
|
|
|
42
45
|
end
|
|
43
46
|
|
|
44
47
|
def build_server_config(extension)
|
|
45
|
-
Models::ServerConfig::Root.new(extensions: [extension])
|
|
48
|
+
Models::ServerConfig::Root.new(port: port, extensions: [extension])
|
|
46
49
|
end
|
|
47
50
|
|
|
48
51
|
def run_command(server_config)
|
|
@@ -51,6 +54,10 @@ module Extension
|
|
|
51
54
|
Models::DevelopmentServer.new.create(server_config)
|
|
52
55
|
when "build"
|
|
53
56
|
Models::DevelopmentServer.new.build(server_config)
|
|
57
|
+
when "serve"
|
|
58
|
+
Models::DevelopmentServer.new.serve(context, server_config)
|
|
59
|
+
else
|
|
60
|
+
raise NotImplementedError
|
|
54
61
|
end
|
|
55
62
|
end
|
|
56
63
|
end
|