@shopify/cli-kit 3.45.0 → 3.46.0-pre.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.
- package/assets/cli-ruby/Gemfile +0 -1
- package/assets/cli-ruby/Rakefile +0 -76
- package/assets/cli-ruby/lib/project_types/extension/cli.rb +5 -86
- package/assets/cli-ruby/lib/shopify_cli/admin_api.rb +0 -3
- package/assets/cli-ruby/lib/shopify_cli/command/sub_command.rb +1 -2
- package/assets/cli-ruby/lib/shopify_cli/command.rb +0 -7
- package/assets/cli-ruby/lib/shopify_cli/commands.rb +0 -15
- package/assets/cli-ruby/lib/shopify_cli/core.rb +0 -1
- package/assets/cli-ruby/lib/shopify_cli/identity_auth.rb +0 -1
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/proxy.rb +9 -1
- package/assets/cli-ruby/lib/shopify_cli.rb +1 -10
- package/assets/cli-ruby/test/test_helpers.rb +0 -2
- package/dist/public/common/version.d.ts +1 -1
- package/dist/public/common/version.js +1 -1
- package/dist/public/common/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/assets/cli-ruby/lib/project_types/extension/commands/build.rb +0 -51
- package/assets/cli-ruby/lib/project_types/extension/commands/check.rb +0 -51
- package/assets/cli-ruby/lib/project_types/extension/commands/connect.rb +0 -35
- package/assets/cli-ruby/lib/project_types/extension/commands/create.rb +0 -100
- package/assets/cli-ruby/lib/project_types/extension/commands/info.rb +0 -86
- package/assets/cli-ruby/lib/project_types/extension/commands/push.rb +0 -112
- package/assets/cli-ruby/lib/project_types/extension/commands/register.rb +0 -67
- package/assets/cli-ruby/lib/project_types/extension/commands/tunnel.rb +0 -73
- package/assets/cli-ruby/lib/project_types/extension/forms/connect.rb +0 -42
- package/assets/cli-ruby/lib/project_types/extension/forms/create.rb +0 -49
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_app.rb +0 -53
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_name.rb +0 -48
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_registration.rb +0 -55
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_template.rb +0 -37
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_type.rb +0 -47
- package/assets/cli-ruby/lib/project_types/extension/models/development_server.rb +0 -77
- package/assets/cli-ruby/lib/project_types/extension/models/development_server_requirements.rb +0 -56
- package/assets/cli-ruby/lib/project_types/extension/models/npm_package.rb +0 -44
- package/assets/cli-ruby/lib/project_types/extension/models/product.rb +0 -12
- package/assets/cli-ruby/lib/project_types/extension/models/registration.rb +0 -20
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/app.rb +0 -13
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/base.rb +0 -31
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/capabilities.rb +0 -11
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development.rb +0 -33
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_entries.rb +0 -38
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_renderer.rb +0 -38
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_resource.rb +0 -13
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/extension.rb +0 -46
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/root.rb +0 -21
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/user.rb +0 -10
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +0 -29
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/checkout_ui_extension.rb +0 -170
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension.rb +0 -58
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension_utils/script_config.rb +0 -33
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension_utils/script_config_repository.rb +0 -75
- package/assets/cli-ruby/lib/project_types/extension/tasks/choose_next_available_port.rb +0 -36
- package/assets/cli-ruby/lib/project_types/extension/tasks/convert_server_config.rb +0 -85
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/app_converter.rb +0 -27
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/product_converter.rb +0 -21
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/registration_converter.rb +0 -28
- package/assets/cli-ruby/lib/project_types/extension/tasks/create_extension.rb +0 -31
- package/assets/cli-ruby/lib/project_types/extension/tasks/ensure_resource_url.rb +0 -39
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/base.rb +0 -15
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/build.rb +0 -30
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/create.rb +0 -30
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/outdated_extension_detection.rb +0 -57
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/serve.rb +0 -36
- package/assets/cli-ruby/lib/project_types/extension/tasks/find_npm_packages.rb +0 -106
- package/assets/cli-ruby/lib/project_types/extension/tasks/find_package_from_json.rb +0 -37
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_app.rb +0 -22
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_apps.rb +0 -26
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_extensions.rb +0 -33
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_product.rb +0 -22
- package/assets/cli-ruby/lib/project_types/extension/tasks/merge_server_config.rb +0 -47
- package/assets/cli-ruby/lib/project_types/extension/tasks/update_draft.rb +0 -29
- package/assets/cli-ruby/lib/project_types/extension/tasks/user_errors.rb +0 -45
- package/assets/cli-ruby/lib/shopify_cli/admin_api/populate_resource_command.rb +0 -166
- package/assets/cli-ruby/lib/shopify_cli/admin_api/schema.rb +0 -35
- package/assets/cli-ruby/lib/shopify_cli/app_type_detector.rb +0 -36
- package/assets/cli-ruby/lib/shopify_cli/assets/post_auth_page/index.html.erb +0 -34
- package/assets/cli-ruby/lib/shopify_cli/assets/post_auth_page/style.css +0 -58
- package/assets/cli-ruby/lib/shopify_cli/changelog.rb +0 -148
- package/assets/cli-ruby/lib/shopify_cli/command/app_sub_command.rb +0 -26
- package/assets/cli-ruby/lib/shopify_cli/command_options/command_serve_options.rb +0 -53
- package/assets/cli-ruby/lib/shopify_cli/command_options.rb +0 -7
- package/assets/cli-ruby/lib/shopify_cli/commands/app/connect.rb +0 -22
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create/node.rb +0 -40
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create/php.rb +0 -37
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create/rails.rb +0 -42
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create.rb +0 -28
- package/assets/cli-ruby/lib/shopify_cli/commands/app/deploy.rb +0 -51
- package/assets/cli-ruby/lib/shopify_cli/commands/app/open.rb +0 -19
- package/assets/cli-ruby/lib/shopify_cli/commands/app/serve.rb +0 -51
- package/assets/cli-ruby/lib/shopify_cli/commands/app/tunnel.rb +0 -43
- package/assets/cli-ruby/lib/shopify_cli/commands/app.rb +0 -29
- package/assets/cli-ruby/lib/shopify_cli/commands/config.rb +0 -76
- package/assets/cli-ruby/lib/shopify_cli/commands/help.rb +0 -52
- package/assets/cli-ruby/lib/shopify_cli/commands/login.rb +0 -98
- package/assets/cli-ruby/lib/shopify_cli/commands/logout.rb +0 -50
- package/assets/cli-ruby/lib/shopify_cli/commands/populate/customer.rb +0 -25
- package/assets/cli-ruby/lib/shopify_cli/commands/populate/draft_order.rb +0 -28
- package/assets/cli-ruby/lib/shopify_cli/commands/populate/product.rb +0 -24
- package/assets/cli-ruby/lib/shopify_cli/commands/populate.rb +0 -23
- package/assets/cli-ruby/lib/shopify_cli/commands/reporting.rb +0 -38
- package/assets/cli-ruby/lib/shopify_cli/commands/store.rb +0 -15
- package/assets/cli-ruby/lib/shopify_cli/commands/switch.rb +0 -39
- package/assets/cli-ruby/lib/shopify_cli/commands/system.rb +0 -165
- package/assets/cli-ruby/lib/shopify_cli/commands/version.rb +0 -15
- package/assets/cli-ruby/lib/shopify_cli/commands/whoami.rb +0 -28
- package/assets/cli-ruby/lib/shopify_cli/connect.rb +0 -32
- package/assets/cli-ruby/lib/shopify_cli/core/help_resolver.rb +0 -20
- package/assets/cli-ruby/lib/shopify_cli/heroku.rb +0 -140
- package/assets/cli-ruby/lib/shopify_cli/identity_auth/servlet.rb +0 -44
- package/assets/cli-ruby/lib/shopify_cli/js_deps.rb +0 -110
- package/assets/cli-ruby/lib/shopify_cli/packager.rb +0 -108
- package/assets/cli-ruby/lib/shopify_cli/php_deps.rb +0 -102
- package/assets/cli-ruby/lib/shopify_cli/process_supervision.rb +0 -228
- package/assets/cli-ruby/lib/shopify_cli/project_commands.rb +0 -16
- package/assets/cli-ruby/lib/shopify_cli/release.rb +0 -197
- package/assets/cli-ruby/lib/shopify_cli/sed.rb +0 -19
- package/assets/cli-ruby/lib/shopify_cli/services/app/connect_service.rb +0 -25
- package/assets/cli-ruby/lib/shopify_cli/services/app/create/node_service.rb +0 -143
- package/assets/cli-ruby/lib/shopify_cli/services/app/create/php_service.rb +0 -147
- package/assets/cli-ruby/lib/shopify_cli/services/app/create/rails_service.rb +0 -239
- package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/node_service.rb +0 -101
- package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/php_service.rb +0 -135
- package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/rails_service.rb +0 -120
- package/assets/cli-ruby/lib/shopify_cli/services/app/open_service.rb +0 -19
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/node_service.rb +0 -19
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/php_service.rb +0 -23
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/rails_service.rb +0 -28
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/serve_service.rb +0 -57
- package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/auth_service.rb +0 -21
- package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/start_service.rb +0 -20
- package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/stop_service.rb +0 -20
- package/assets/cli-ruby/lib/shopify_cli/services/base_service.rb +0 -13
- package/assets/cli-ruby/lib/shopify_cli/services/reporting_service.rb +0 -16
- package/assets/cli-ruby/lib/shopify_cli/services.rb +0 -38
- package/assets/cli-ruby/lib/shopify_cli/tunnel.rb +0 -255
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
module Extension
|
|
2
|
-
module Forms
|
|
3
|
-
module Questions
|
|
4
|
-
class AskApp
|
|
5
|
-
include ShopifyCLI::MethodObject
|
|
6
|
-
|
|
7
|
-
property! :ctx
|
|
8
|
-
property :api_key
|
|
9
|
-
property! :prompt,
|
|
10
|
-
converts: :to_proc,
|
|
11
|
-
default: -> { CLI::UI::Prompt.method(:ask) }
|
|
12
|
-
|
|
13
|
-
def call(project_details)
|
|
14
|
-
project_details.tap(&method(:prompt_for_app))
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
private
|
|
18
|
-
|
|
19
|
-
def prompt_for_app(project_details)
|
|
20
|
-
project_details.app =
|
|
21
|
-
api_key.nil? ? choose_interactively(load_apps) : validate_app_ownership(api_key)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def validate_app_ownership(api_key)
|
|
25
|
-
found_app = Tasks::GetApp.call(context: ctx, api_key: api_key)
|
|
26
|
-
ctx.abort(ctx.message("create.invalid_api_key", api_key)) if found_app.nil?
|
|
27
|
-
found_app
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def choose_interactively(apps)
|
|
31
|
-
prompt.call(ctx.message("create.ask_app")) do |handler|
|
|
32
|
-
apps.each do |app|
|
|
33
|
-
handler.option("#{app.title} by #{app.business_name}") { app }
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def load_apps
|
|
39
|
-
ctx.puts(@ctx.message("create.loading_apps"))
|
|
40
|
-
apps = Tasks::GetApps.call(context: ctx)
|
|
41
|
-
|
|
42
|
-
apps.empty? ? abort_no_apps : apps
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def abort_no_apps
|
|
46
|
-
ctx.puts(@ctx.message("create.no_apps"))
|
|
47
|
-
ctx.puts(@ctx.message("create.learn_about_apps"))
|
|
48
|
-
raise ShopifyCLI::AbortSilent
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
module Extension
|
|
2
|
-
module Forms
|
|
3
|
-
module Questions
|
|
4
|
-
class AskName
|
|
5
|
-
include ShopifyCLI::MethodObject
|
|
6
|
-
|
|
7
|
-
property! :ctx
|
|
8
|
-
property :name
|
|
9
|
-
property :prompt,
|
|
10
|
-
accepts: ->(prompt) { prompt.respond_to?(:call) },
|
|
11
|
-
default: -> { CLI::UI::Prompt.method(:ask) }
|
|
12
|
-
|
|
13
|
-
def call(project_details)
|
|
14
|
-
if theme_app_extension?(project_details)
|
|
15
|
-
project_details.name = name || "theme-app-extension"
|
|
16
|
-
else
|
|
17
|
-
project_details.name = ask_with_reprompt(
|
|
18
|
-
initial_value: name,
|
|
19
|
-
break_condition: -> (current_name) { Models::Registration.valid_title?(current_name) },
|
|
20
|
-
prompt_message: ctx.message("create.ask_name"),
|
|
21
|
-
reprompt_message: ctx.message("create.invalid_name", Models::Registration::MAX_TITLE_LENGTH)
|
|
22
|
-
)
|
|
23
|
-
end
|
|
24
|
-
project_details
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
def theme_app_extension?(project_details)
|
|
30
|
-
project_details&.type&.identifier == "THEME_APP_EXTENSION"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def ask_with_reprompt(initial_value:, break_condition:, prompt_message:, reprompt_message:)
|
|
34
|
-
value = initial_value
|
|
35
|
-
reprompt = false
|
|
36
|
-
|
|
37
|
-
until break_condition.call(value)
|
|
38
|
-
ctx.puts(reprompt_message) if reprompt
|
|
39
|
-
value = prompt.call(prompt_message)&.strip
|
|
40
|
-
reprompt = true
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
value
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Forms
|
|
5
|
-
module Questions
|
|
6
|
-
class AskRegistration
|
|
7
|
-
include ShopifyCLI::MethodObject
|
|
8
|
-
|
|
9
|
-
property! :ctx
|
|
10
|
-
property! :type
|
|
11
|
-
property! :prompt,
|
|
12
|
-
converts: :to_proc,
|
|
13
|
-
default: -> { CLI::UI::Prompt.method(:ask) }
|
|
14
|
-
|
|
15
|
-
def call(project_details)
|
|
16
|
-
project_details.tap(&method(:prompt_for_registration))
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def prompt_for_registration(project_details)
|
|
22
|
-
apps_and_registrations = load_registrations(type)
|
|
23
|
-
app, registration = choose_interactively(apps_and_registrations)
|
|
24
|
-
project_details.app = app
|
|
25
|
-
project_details.registration = registration
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def choose_interactively(apps_and_registrations)
|
|
29
|
-
prompt.call(ctx.message("connect.ask_registration")) do |handler|
|
|
30
|
-
apps_and_registrations.each do |(app, extension)|
|
|
31
|
-
handler.option("#{app.title} by #{app.business_name}: #{extension.title}") { [app, extension] }
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def load_registrations(type)
|
|
37
|
-
registrations = []
|
|
38
|
-
loading_extensions = @ctx.message("connect.loading_extensions")
|
|
39
|
-
|
|
40
|
-
CLI::UI::Spinner.spin(loading_extensions) do |_spinner|
|
|
41
|
-
registrations += Tasks::GetExtensions.call(context: ctx, type: type)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
registrations.empty? ? abort_no_registrations : registrations
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def abort_no_registrations
|
|
48
|
-
ctx.puts(@ctx.message("connect.no_extensions", type))
|
|
49
|
-
ctx.puts(@ctx.message("connect.learn_about_extensions"))
|
|
50
|
-
raise ShopifyCLI::AbortSilent
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
module Extension
|
|
2
|
-
module Forms
|
|
3
|
-
module Questions
|
|
4
|
-
class AskTemplate
|
|
5
|
-
include ShopifyCLI::MethodObject
|
|
6
|
-
|
|
7
|
-
property! :ctx
|
|
8
|
-
property :template, accepts: Models::ServerConfig::Development::VALID_TEMPLATES
|
|
9
|
-
property :prompt,
|
|
10
|
-
accepts: ->(prompt) { prompt.respond_to?(:call) },
|
|
11
|
-
default: -> { CLI::UI::Prompt.method(:ask) }
|
|
12
|
-
|
|
13
|
-
def call(project_details)
|
|
14
|
-
if template_required?(project_details)
|
|
15
|
-
project_details.template = template || choose_interactively(project_details)
|
|
16
|
-
end
|
|
17
|
-
project_details
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
private
|
|
21
|
-
|
|
22
|
-
def template_required?(project_details)
|
|
23
|
-
type = project_details&.type&.identifier
|
|
24
|
-
Models::DevelopmentServerRequirements.supported?(type)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def choose_interactively(project_details)
|
|
28
|
-
prompt.call(ctx.message("create.ask_template")) do |handler|
|
|
29
|
-
Models::ServerConfig::Development.find(project_details&.type&.identifier).each do |template|
|
|
30
|
-
handler.option(template) { template }
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
module Extension
|
|
2
|
-
module Forms
|
|
3
|
-
module Questions
|
|
4
|
-
class AskType
|
|
5
|
-
include ShopifyCLI::MethodObject
|
|
6
|
-
|
|
7
|
-
property! :ctx
|
|
8
|
-
property :type
|
|
9
|
-
property :prompt,
|
|
10
|
-
converts: :to_proc,
|
|
11
|
-
default: -> { CLI::UI::Prompt.method(:ask) }
|
|
12
|
-
|
|
13
|
-
def call(project_details)
|
|
14
|
-
specifications = Models::Specifications.new(
|
|
15
|
-
fetch_specifications: Tasks::FetchSpecifications.new(context: ctx, api_key: project_details.app.api_key)
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
project_details.tap do |p|
|
|
19
|
-
p.type = type.nil? ? choose_type(specifications) : validate_given_type(specifications, type)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
def validate_given_type(specifications, type)
|
|
26
|
-
return specifications[type] if specifications.valid?(type)
|
|
27
|
-
ctx.abort(ctx.message("create.invalid_type")) unless type.nil?
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def choose_type(specifications)
|
|
31
|
-
abort_due_to_missing_specifications if specifications.none?
|
|
32
|
-
|
|
33
|
-
prompt.call(ctx.message("create.ask_type")) do |handler|
|
|
34
|
-
specifications.each do |type|
|
|
35
|
-
handler.option("#{type.name} #{type.tagline}") { type }
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def abort_due_to_missing_specifications
|
|
41
|
-
ctx.puts(@ctx.message("create.no_available_extensions"))
|
|
42
|
-
raise ShopifyCLI::AbortSilent
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Models
|
|
5
|
-
class DevelopmentServer
|
|
6
|
-
class DevelopmentServerError < StandardError; end
|
|
7
|
-
|
|
8
|
-
include SmartProperties
|
|
9
|
-
|
|
10
|
-
EXECUTABLE_DIRECTORY = File.join(ShopifyCLI::ROOT, "ext", "shopify-extensions")
|
|
11
|
-
|
|
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
|
|
24
|
-
|
|
25
|
-
def executable_installed?
|
|
26
|
-
File.exist?(executable)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def create(server_config)
|
|
30
|
-
output, _ = CLI::Kit::System.capture2e(executable, "create", "-", stdin_data: server_config.to_yaml)
|
|
31
|
-
output
|
|
32
|
-
rescue StandardError => error
|
|
33
|
-
raise error
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def build(server_config)
|
|
37
|
-
output, error, status = CLI::Kit::System.capture3(executable, "build", "-", stdin_data: server_config.to_yaml)
|
|
38
|
-
return output if status.success?
|
|
39
|
-
raise DevelopmentServerError, error
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def serve(context, server_config)
|
|
43
|
-
CLI::Kit::System.popen3(executable, "serve", "-") do |input, out, err, status|
|
|
44
|
-
context.debug("Sending configuration data to extension development server …")
|
|
45
|
-
input << server_config.to_yaml
|
|
46
|
-
input.close
|
|
47
|
-
|
|
48
|
-
forward_output_to_user(out, err, context)
|
|
49
|
-
|
|
50
|
-
status.value
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def version
|
|
55
|
-
raise NotImplementedError
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
private
|
|
59
|
-
|
|
60
|
-
def forward_output_to_user(out, err, ctx)
|
|
61
|
-
ctx.debug("Starting message processing threads to relay output produced by the extension development server …")
|
|
62
|
-
|
|
63
|
-
Thread.new do
|
|
64
|
-
while (line = out.gets)
|
|
65
|
-
ctx.puts(line)
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
Thread.new do
|
|
70
|
-
while (error = err.gets)
|
|
71
|
-
ctx.puts(error)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
package/assets/cli-ruby/lib/project_types/extension/models/development_server_requirements.rb
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "shopify_cli"
|
|
4
|
-
|
|
5
|
-
module Extension
|
|
6
|
-
module Models
|
|
7
|
-
class DevelopmentServerRequirements
|
|
8
|
-
SUPPORTED_EXTENSION_TYPES = [
|
|
9
|
-
"checkout_ui_extension",
|
|
10
|
-
"checkout_post_purchase",
|
|
11
|
-
"product_subscription",
|
|
12
|
-
"web_pixel_extension",
|
|
13
|
-
"pos_ui_extension",
|
|
14
|
-
]
|
|
15
|
-
|
|
16
|
-
class << self
|
|
17
|
-
def supported?(type)
|
|
18
|
-
if type_supported?(type) && beta_enabled?
|
|
19
|
-
return true if binary_installed?
|
|
20
|
-
warn_about_missing_binary
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
false
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def beta_enabled?
|
|
27
|
-
ShopifyCLI::Feature.enabled?(:extension_server_beta)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def type_supported?(type)
|
|
31
|
-
SUPPORTED_EXTENSION_TYPES.include?(type.downcase)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
private
|
|
35
|
-
|
|
36
|
-
def binary_installed?
|
|
37
|
-
Models::DevelopmentServer.new.executable_installed?
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def warn_about_missing_binary
|
|
41
|
-
CLI::UI::Frame.open(message("errors.development_server_binary_not_found.title"), color: :yellow) do
|
|
42
|
-
context.puts(message("errors.development_server_binary_not_found.message"))
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def message(key)
|
|
47
|
-
context.message(key)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def context
|
|
51
|
-
@context ||= ShopifyCLI::Context.new
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
require "semantic/semantic"
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Models
|
|
5
|
-
class NpmPackage
|
|
6
|
-
include SmartProperties
|
|
7
|
-
include Comparable
|
|
8
|
-
|
|
9
|
-
property :name
|
|
10
|
-
property :version
|
|
11
|
-
property :scripts, accepts: Hash, default: -> { {} }
|
|
12
|
-
property :dependencies, accepts: Hash, default: -> { {} }
|
|
13
|
-
property :dev_dependencies, accepts: Hash, default: -> { {} }
|
|
14
|
-
|
|
15
|
-
def initialize(**config)
|
|
16
|
-
super(**config.select { |property_name, _| self.class.properties.key?(property_name) })
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def self.parse(io)
|
|
20
|
-
ShopifyCLI::Result.call { JSON.parse(io.read) }
|
|
21
|
-
.then(&ShopifyCLI::TransformDataStructure.new(underscore_keys: true, symbolize_keys: true, shallow: true))
|
|
22
|
-
.then { |specification| new(**specification) }
|
|
23
|
-
.unwrap { |error| raise "Failed to parse NPM package specification: #{error}" }
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def <=>(other)
|
|
27
|
-
return nil unless name == other.name
|
|
28
|
-
Semantic::Version.new(version) <=> Semantic::Version.new(other.version)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def script?(name)
|
|
32
|
-
scripts.key?(name)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def dependency?(name)
|
|
36
|
-
dependencies.key?(name)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def dev_dependency?(name)
|
|
40
|
-
dev_dependencies.key?(name)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Models
|
|
5
|
-
class Registration
|
|
6
|
-
MAX_TITLE_LENGTH = 50
|
|
7
|
-
include SmartProperties
|
|
8
|
-
|
|
9
|
-
property! :id, accepts: Integer
|
|
10
|
-
property! :uuid, accepts: String
|
|
11
|
-
property! :type, accepts: String
|
|
12
|
-
property! :title, accepts: String
|
|
13
|
-
property! :draft_version, accepts: Extension::Models::Version
|
|
14
|
-
|
|
15
|
-
def self.valid_title?(title)
|
|
16
|
-
!title.nil? && !title.strip.empty? && title.length <= MAX_TITLE_LENGTH
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Models
|
|
5
|
-
module ServerConfig
|
|
6
|
-
class Base
|
|
7
|
-
def to_h
|
|
8
|
-
to_hash
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def to_hash
|
|
12
|
-
is_hashable = ->(obj) { obj.respond_to?(:to_hash) }
|
|
13
|
-
is_collection_of_hashables = ->(obj) { obj.is_a?(Enumerable) && obj.all?(&is_hashable) }
|
|
14
|
-
|
|
15
|
-
self.class.properties.each.reduce({}) do |data, (_, property)|
|
|
16
|
-
data.merge(property.name.to_s => send(property.reader).yield_self do |value|
|
|
17
|
-
case value
|
|
18
|
-
when is_collection_of_hashables
|
|
19
|
-
value.map { |element| element.to_hash.transform_keys(&:to_s) }
|
|
20
|
-
when is_hashable
|
|
21
|
-
value.to_hash.transform_keys(&:to_s)
|
|
22
|
-
else
|
|
23
|
-
value
|
|
24
|
-
end
|
|
25
|
-
end)
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
module Extension
|
|
2
|
-
module Models
|
|
3
|
-
module ServerConfig
|
|
4
|
-
class Development < Base
|
|
5
|
-
include SmartProperties
|
|
6
|
-
VALID_TEMPLATES = [
|
|
7
|
-
"javascript",
|
|
8
|
-
"javascript-react",
|
|
9
|
-
"typescript",
|
|
10
|
-
"typescript-react",
|
|
11
|
-
]
|
|
12
|
-
|
|
13
|
-
CURRENT_DIRECTORY = "."
|
|
14
|
-
|
|
15
|
-
property :root_dir, accepts: String, default: CURRENT_DIRECTORY
|
|
16
|
-
property! :build_dir, accepts: String, default: "build"
|
|
17
|
-
property :template, accepts: VALID_TEMPLATES
|
|
18
|
-
property :renderer, accepts: ServerConfig::DevelopmentRenderer
|
|
19
|
-
property :entries, accepts: ServerConfig::DevelopmentEntries
|
|
20
|
-
property :resource, accepts: ServerConfig::DevelopmentResource
|
|
21
|
-
|
|
22
|
-
def self.find(type)
|
|
23
|
-
case type.downcase
|
|
24
|
-
when "web_pixel_extension"
|
|
25
|
-
["javascript"]
|
|
26
|
-
else
|
|
27
|
-
VALID_TEMPLATES
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_entries.rb
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Models
|
|
5
|
-
module ServerConfig
|
|
6
|
-
class DevelopmentEntries < Base
|
|
7
|
-
include SmartProperties
|
|
8
|
-
|
|
9
|
-
JAVASCRIPT = "javascript"
|
|
10
|
-
JAVASCRIPT_REACT = "javascript-react"
|
|
11
|
-
TYPESCRIPT = "typescript"
|
|
12
|
-
TYPESCRIPT_REACT = "typescript-react"
|
|
13
|
-
|
|
14
|
-
VALID_ENTRY_POINTS = [
|
|
15
|
-
"src/index.js",
|
|
16
|
-
"src/index.jsx",
|
|
17
|
-
"src/index.ts",
|
|
18
|
-
"src/index.tsx",
|
|
19
|
-
]
|
|
20
|
-
|
|
21
|
-
property! :main, accepts: VALID_ENTRY_POINTS
|
|
22
|
-
|
|
23
|
-
def self.find(template)
|
|
24
|
-
case template
|
|
25
|
-
when JAVASCRIPT
|
|
26
|
-
new(main: "src/index.js")
|
|
27
|
-
when JAVASCRIPT_REACT
|
|
28
|
-
new(main: "src/index.jsx")
|
|
29
|
-
when TYPESCRIPT
|
|
30
|
-
new(main: "src/index.ts")
|
|
31
|
-
when TYPESCRIPT_REACT
|
|
32
|
-
new(main: "src/index.tsx")
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_renderer.rb
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Models
|
|
5
|
-
module ServerConfig
|
|
6
|
-
class DevelopmentRenderer < Base
|
|
7
|
-
include SmartProperties
|
|
8
|
-
|
|
9
|
-
VALID_RENDERERS = [
|
|
10
|
-
"@shopify/admin-ui-extensions",
|
|
11
|
-
"@shopify/post-purchase-ui-extensions",
|
|
12
|
-
"@shopify/checkout-ui-extensions",
|
|
13
|
-
"@shopify/retail-ui-extensions",
|
|
14
|
-
]
|
|
15
|
-
|
|
16
|
-
property! :name, accepts: VALID_RENDERERS
|
|
17
|
-
property! :version, accepts: String, default: "latest"
|
|
18
|
-
|
|
19
|
-
def self.find(type)
|
|
20
|
-
case type.downcase
|
|
21
|
-
when "product_subscription"
|
|
22
|
-
new(name: "@shopify/admin-ui-extensions", version: "^1.0.1")
|
|
23
|
-
when "checkout_ui_extension"
|
|
24
|
-
new(name: "@shopify/checkout-ui-extensions", version: "^0.15.0")
|
|
25
|
-
when "checkout_post_purchase"
|
|
26
|
-
new(name: "@shopify/post-purchase-ui-extensions", version: "^0.13.2")
|
|
27
|
-
when "pos_ui_extension"
|
|
28
|
-
new(name: "@shopify/retail-ui-extensions", version: "^0.12.0")
|
|
29
|
-
when "web_pixel_extension"
|
|
30
|
-
nil
|
|
31
|
-
else
|
|
32
|
-
raise ArgumentError, "Unknown extension type: #{type}"
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
require "securerandom"
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Models
|
|
5
|
-
module ServerConfig
|
|
6
|
-
class Extension < Base
|
|
7
|
-
include SmartProperties
|
|
8
|
-
|
|
9
|
-
property! :uuid, accepts: String
|
|
10
|
-
property! :type, accepts: String
|
|
11
|
-
property! :user, accepts: ServerConfig::User
|
|
12
|
-
property! :development, accepts: ServerConfig::Development
|
|
13
|
-
property :capabilities, accepts: ServerConfig::Capabilities
|
|
14
|
-
property :extension_points, accepts: Array
|
|
15
|
-
property :title, accepts: String
|
|
16
|
-
property :description, accepts: String
|
|
17
|
-
property :version, accepts: String
|
|
18
|
-
property :metafields, accepts: Array
|
|
19
|
-
|
|
20
|
-
def self.build(uuid: "", template:, type:, root_dir:, **args)
|
|
21
|
-
renderer = ServerConfig::DevelopmentRenderer.find(type)
|
|
22
|
-
entry = ServerConfig::DevelopmentEntries.find(template)
|
|
23
|
-
new(
|
|
24
|
-
uuid: uuid.empty? ? generate_dev_uuid : uuid,
|
|
25
|
-
type: type.downcase,
|
|
26
|
-
user: ServerConfig::User.new,
|
|
27
|
-
development: ServerConfig::Development.new(
|
|
28
|
-
root_dir: root_dir,
|
|
29
|
-
template: template,
|
|
30
|
-
renderer: renderer,
|
|
31
|
-
entries: entry
|
|
32
|
-
),
|
|
33
|
-
capabilities: ServerConfig::Capabilities.new(
|
|
34
|
-
network_access: false
|
|
35
|
-
),
|
|
36
|
-
metafields: args.delete(:metafields)
|
|
37
|
-
)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def self.generate_dev_uuid
|
|
41
|
-
"dev-#{SecureRandom.uuid}"
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|