@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,30 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
module ExecuteCommands
|
|
7
|
-
class Build < Base
|
|
8
|
-
prepend OutdatedExtensionDetection
|
|
9
|
-
|
|
10
|
-
property! :config_file_path, accepts: String
|
|
11
|
-
|
|
12
|
-
def call
|
|
13
|
-
ShopifyCLI::Result
|
|
14
|
-
.call(&method(:merge_server_config))
|
|
15
|
-
.then { |server_config| Models::DevelopmentServer.new.build(server_config) }
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
def merge_server_config
|
|
21
|
-
Tasks::MergeServerConfig.call(
|
|
22
|
-
context: context,
|
|
23
|
-
file_path: config_file_path,
|
|
24
|
-
type: type
|
|
25
|
-
)
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
module ExecuteCommands
|
|
7
|
-
class Create < Base
|
|
8
|
-
property! :template, accepts: Models::ServerConfig::Development::VALID_TEMPLATES
|
|
9
|
-
property! :root_dir, accepts: String
|
|
10
|
-
|
|
11
|
-
def call
|
|
12
|
-
ShopifyCLI::Result.success(generate_config)
|
|
13
|
-
.then { |server_config| Models::DevelopmentServer.new.create(server_config) }
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
def generate_config
|
|
19
|
-
extension = Models::ServerConfig::Extension.build(
|
|
20
|
-
template: template,
|
|
21
|
-
type: type,
|
|
22
|
-
root_dir: root_dir,
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
Models::ServerConfig::Root.new(extensions: [extension])
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
module Extension
|
|
2
|
-
module Tasks
|
|
3
|
-
module ExecuteCommands
|
|
4
|
-
module OutdatedExtensionDetection
|
|
5
|
-
class OutdatedCheck
|
|
6
|
-
include ShopifyCLI::MethodObject
|
|
7
|
-
|
|
8
|
-
property! :type, accepts: Models::DevelopmentServerRequirements.method(:type_supported?)
|
|
9
|
-
property! :context, accepts: ShopifyCLI::Context
|
|
10
|
-
property! :project, accepts: ShopifyCLI::Project, default: -> { ShopifyCLI::Project.current }
|
|
11
|
-
|
|
12
|
-
def call
|
|
13
|
-
return false if valid?(parse_package)
|
|
14
|
-
context.abort(upgrade_instructions)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
private
|
|
18
|
-
|
|
19
|
-
def upgrade_instructions
|
|
20
|
-
case type
|
|
21
|
-
when "checkout_ui_extension"
|
|
22
|
-
context.message("errors.outdated_extensions.checkout_ui_extension")
|
|
23
|
-
when "product_subscription"
|
|
24
|
-
context.message("errors.outdated_extensions.product_subscription")
|
|
25
|
-
when "checkout_post_purchase"
|
|
26
|
-
context.message("errors.outdated_extensions.checkout_post_purchase")
|
|
27
|
-
else
|
|
28
|
-
context.message("errors.outdated_extensions.unknown")
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def parse_package
|
|
33
|
-
File.open(Pathname(project.directory).join("package.json")) do |file|
|
|
34
|
-
Models::NpmPackage.parse(file)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def valid?(package)
|
|
39
|
-
case type
|
|
40
|
-
when "checkout_ui_extension", "product_subscription", "checkout_post_purchase"
|
|
41
|
-
package.dev_dependency?("@shopify/shopify-cli-extensions") &&
|
|
42
|
-
package.script?("build") &&
|
|
43
|
-
package.script?("develop")
|
|
44
|
-
else
|
|
45
|
-
true
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def call(*)
|
|
51
|
-
return super unless Models::DevelopmentServerRequirements.supported?(type)
|
|
52
|
-
OutdatedCheck.call(type: type, context: context).then { super }
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
module ExecuteCommands
|
|
7
|
-
class Serve < Base
|
|
8
|
-
prepend OutdatedExtensionDetection
|
|
9
|
-
|
|
10
|
-
property! :config_file_path, accepts: String
|
|
11
|
-
property :port, accepts: Integer, default: ShopifyCLI::Constants::Extension::DEFAULT_PORT
|
|
12
|
-
property :resource_url, accepts: String
|
|
13
|
-
property! :tunnel_url, accepts: String
|
|
14
|
-
|
|
15
|
-
def call
|
|
16
|
-
ShopifyCLI::Result
|
|
17
|
-
.call(&method(:merge_server_config))
|
|
18
|
-
.then { |server_config| Models::DevelopmentServer.new.serve(context, server_config) }
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
private
|
|
22
|
-
|
|
23
|
-
def merge_server_config
|
|
24
|
-
Tasks::MergeServerConfig.call(
|
|
25
|
-
context: context,
|
|
26
|
-
file_path: config_file_path,
|
|
27
|
-
port: port,
|
|
28
|
-
resource_url: resource_url,
|
|
29
|
-
tunnel_url: tunnel_url,
|
|
30
|
-
type: type
|
|
31
|
-
)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
module Extension
|
|
2
|
-
module Tasks
|
|
3
|
-
class FindNpmPackages
|
|
4
|
-
include ShopifyCLI::MethodObject
|
|
5
|
-
|
|
6
|
-
property! :js_system, accepts: ShopifyCLI::JsSystem
|
|
7
|
-
property! :production_only, accepts: [true, false], default: false, reader: :production_only?
|
|
8
|
-
|
|
9
|
-
def self.at_least_one_of(*package_names, **config)
|
|
10
|
-
new(**config).at_least_one_of(*package_names)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def self.all(*package_names, **config)
|
|
14
|
-
new(**config).all(*package_names)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def self.exactly_one_of(*package_names, **config)
|
|
18
|
-
new(**config).exactly_one_of(*package_names)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def all(*package_names)
|
|
22
|
-
call(*package_names) do |found_packages|
|
|
23
|
-
found_package_names = found_packages.map(&:name)
|
|
24
|
-
next found_packages if Set.new(found_package_names) == Set.new(package_names)
|
|
25
|
-
raise PackageResolutionFailed, format(
|
|
26
|
-
"Missing packages: %s",
|
|
27
|
-
(package_names - found_package_names).join(", ")
|
|
28
|
-
)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def at_least_one_of(*package_names)
|
|
33
|
-
call(*package_names) do |found_packages|
|
|
34
|
-
found_package_names = found_packages.map(&:name)
|
|
35
|
-
next found_packages unless (found_package_names & package_names).empty?
|
|
36
|
-
raise PackageResolutionFailed, format(
|
|
37
|
-
"Expected at least one of the following packages: %s",
|
|
38
|
-
package_names.join(", ")
|
|
39
|
-
)
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def exactly_one_of(*package_names)
|
|
44
|
-
call(*package_names) do |found_packages|
|
|
45
|
-
case found_packages.count
|
|
46
|
-
when 0
|
|
47
|
-
raise PackageResolutionFailed, format(
|
|
48
|
-
"Expected one of the following packages: %s",
|
|
49
|
-
package_names.join(", ")
|
|
50
|
-
)
|
|
51
|
-
when 1
|
|
52
|
-
found_packages.first.tap do |found_package|
|
|
53
|
-
next found_package if package_names.include?(found_package.name)
|
|
54
|
-
raise PackageResolutionFailed, format(
|
|
55
|
-
"Expected the following package: %s",
|
|
56
|
-
found_package.name
|
|
57
|
-
)
|
|
58
|
-
end
|
|
59
|
-
else
|
|
60
|
-
raise PackageResolutionFailed, "Found more than one package"
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def call(*package_names, &validate)
|
|
66
|
-
validate ||= ->(found_packages) { found_packages }
|
|
67
|
-
|
|
68
|
-
unless package_names.all? { |name| name.is_a?(String) }
|
|
69
|
-
raise ArgumentError, "Expected a list of package names"
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
ShopifyCLI::Result
|
|
73
|
-
.call(&method(:list_packages))
|
|
74
|
-
.then(&method(:search_packages).curry[package_names])
|
|
75
|
-
.then(&method(:filter_duplicates))
|
|
76
|
-
.then(&validate)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def list_packages
|
|
80
|
-
result, error, status =
|
|
81
|
-
js_system.call(yarn: yarn_list, npm: npm_list, capture_response: true)
|
|
82
|
-
raise error unless status.success?
|
|
83
|
-
result
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def yarn_list
|
|
87
|
-
production_only? ? %w[list --production --depth=0] : %w[list]
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def npm_list
|
|
91
|
-
production_only? ? %w[list --prod --depth=0] : %w[list]
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def search_packages(packages, package_list)
|
|
95
|
-
pattern = /(#{packages.join("|")})@(\d.*)$/
|
|
96
|
-
package_list.scan(pattern).map do |(name, version)|
|
|
97
|
-
Models::NpmPackage.new(name: name, version: version.strip)
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def filter_duplicates(packages)
|
|
102
|
-
packages.reject { |p| p.version.match(/deduped/) }.uniq
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "json"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
class FindPackageFromJson < ShopifyCLI::Task
|
|
7
|
-
include SmartProperties
|
|
8
|
-
|
|
9
|
-
property! :context, accepts: ShopifyCLI::Context
|
|
10
|
-
|
|
11
|
-
def self.call(package_name, **config)
|
|
12
|
-
new(**config).call(package_name)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def call(package_name)
|
|
16
|
-
ShopifyCLI::Result.success(resolve_package_json(package_name))
|
|
17
|
-
.then { |file| File.read(file) }
|
|
18
|
-
.then { |file| JSON.parse(file) }
|
|
19
|
-
.then { |file| file.dig("version") }
|
|
20
|
-
.then { |version| return Models::NpmPackage.new(name: package_name, version: version) }
|
|
21
|
-
.unwrap do |error|
|
|
22
|
-
context.debug(error)
|
|
23
|
-
context.abort(context.message("errors.module_not_found", package_name))
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
def resolve_package_json(package_name)
|
|
30
|
-
path = "path.join(require.resolve('#{package_name}'), '../package.json')"
|
|
31
|
-
package_json, error, _ = CLI::Kit::System.capture3("node", "-p", path)
|
|
32
|
-
return error unless !error.nil?
|
|
33
|
-
package_json.chomp
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
class GetApp < ShopifyCLI::Task
|
|
7
|
-
GRAPHQL_FILE = "get_app_by_api_key"
|
|
8
|
-
|
|
9
|
-
RESPONSE_FIELD = %w(data)
|
|
10
|
-
APP_FIELD = "app"
|
|
11
|
-
|
|
12
|
-
def call(context:, api_key:)
|
|
13
|
-
input = { api_key: api_key }
|
|
14
|
-
|
|
15
|
-
response = ShopifyCLI::PartnersAPI.query(context, GRAPHQL_FILE, **input).dig(*RESPONSE_FIELD)
|
|
16
|
-
context.abort(context.message("tasks.errors.parse_error")) if response.nil?
|
|
17
|
-
|
|
18
|
-
Converters::AppConverter.from_hash(response.dig(APP_FIELD))
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
class GetApps < ShopifyCLI::Task
|
|
7
|
-
def call(context:)
|
|
8
|
-
org_id = ShopifyCLI::DB.get(:organization_id)
|
|
9
|
-
return [] unless org_id
|
|
10
|
-
|
|
11
|
-
organization = ShopifyCLI::PartnersAPI::Organizations.fetch_with_apps(context, id: org_id)
|
|
12
|
-
apps_owned_by_organization(organization)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
private
|
|
16
|
-
|
|
17
|
-
def apps_owned_by_organization(organization)
|
|
18
|
-
return [] unless organization&.dig("apps")
|
|
19
|
-
|
|
20
|
-
organization["apps"].map do |app|
|
|
21
|
-
Converters::AppConverter.from_hash(app, organization)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
class GetExtensions < ShopifyCLI::Task
|
|
7
|
-
def call(context:, type:)
|
|
8
|
-
org_id = ShopifyCLI::DB.get(:organization_id)
|
|
9
|
-
return [] unless org_id
|
|
10
|
-
|
|
11
|
-
organization = ShopifyCLI::PartnersAPI::Organizations.fetch_with_extensions(context, type, id: org_id)
|
|
12
|
-
return [] unless organization_with_apps?(organization)
|
|
13
|
-
extensions_owned_by_organization(organization, context: context)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
def extensions_owned_by_organization(organization, context:)
|
|
19
|
-
organization["apps"].flat_map do |app|
|
|
20
|
-
registrations = app["extensionRegistrations"] || []
|
|
21
|
-
registrations.map do |registration|
|
|
22
|
-
[Converters::AppConverter.from_hash(app, organization),
|
|
23
|
-
Converters::RegistrationConverter.from_hash(context, registration)]
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def organization_with_apps?(organization)
|
|
29
|
-
organization&.key?("apps") && organization["apps"].any?
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
class GetProduct < ShopifyCLI::Task
|
|
7
|
-
API_VERSION = "2021-07"
|
|
8
|
-
GRAPHQL_FILE = "get_variant_id"
|
|
9
|
-
|
|
10
|
-
def call(context, shop)
|
|
11
|
-
response = ShopifyCLI::AdminAPI.query(
|
|
12
|
-
context,
|
|
13
|
-
GRAPHQL_FILE,
|
|
14
|
-
shop: shop,
|
|
15
|
-
api_version: API_VERSION
|
|
16
|
-
)
|
|
17
|
-
context.abort(context.message("tasks.errors.store_error")) if response.nil?
|
|
18
|
-
Converters::ProductConverter.from_hash(response)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
require "pathname"
|
|
4
|
-
|
|
5
|
-
module Extension
|
|
6
|
-
module Tasks
|
|
7
|
-
class MergeServerConfig
|
|
8
|
-
include SmartProperties
|
|
9
|
-
|
|
10
|
-
property! :context, accepts: ShopifyCLI::Context
|
|
11
|
-
property! :file_path, accepts: ->(path) { Pathname(path).yield_self(&:absolute?) }
|
|
12
|
-
property! :port, accepts: Integer, default: ShopifyCLI::Constants::Extension::DEFAULT_PORT
|
|
13
|
-
property :resource_url, accepts: String
|
|
14
|
-
property :tunnel_url, accepts: String
|
|
15
|
-
property! :type, accepts: Models::DevelopmentServerRequirements::SUPPORTED_EXTENSION_TYPES
|
|
16
|
-
|
|
17
|
-
def self.call(*args)
|
|
18
|
-
new(*args).call
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def call
|
|
22
|
-
config = YAML.load_file(file_path) if File.file?(file_path)
|
|
23
|
-
config ||= {}
|
|
24
|
-
|
|
25
|
-
project = ExtensionProject.current
|
|
26
|
-
Tasks::ConvertServerConfig.call(
|
|
27
|
-
api_key: project.env.api_key,
|
|
28
|
-
context: context,
|
|
29
|
-
hash: config,
|
|
30
|
-
registration_uuid: project.registration_uuid,
|
|
31
|
-
resource_url: resource_url || project.resource_url,
|
|
32
|
-
store: project.env.shop || "",
|
|
33
|
-
title: project.title,
|
|
34
|
-
tunnel_url: tunnel_url,
|
|
35
|
-
type: type,
|
|
36
|
-
port: port,
|
|
37
|
-
metafields: config["metafields"]
|
|
38
|
-
)
|
|
39
|
-
rescue Psych::SyntaxError => e
|
|
40
|
-
raise(
|
|
41
|
-
ShopifyCLI::Abort,
|
|
42
|
-
ShopifyCLI::Context.message("core.yaml.error.invalid", file_name, e.message)
|
|
43
|
-
)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
class UpdateDraft < ShopifyCLI::Task
|
|
7
|
-
include UserErrors
|
|
8
|
-
|
|
9
|
-
GRAPHQL_FILE = "extension_update_draft"
|
|
10
|
-
|
|
11
|
-
RESPONSE_FIELD = %w(data extensionUpdateDraft)
|
|
12
|
-
VERSION_FIELD = "extensionVersion"
|
|
13
|
-
|
|
14
|
-
def call(context:, api_key:, registration_id:, config:, extension_context:)
|
|
15
|
-
input = {
|
|
16
|
-
api_key: api_key,
|
|
17
|
-
registration_id: registration_id,
|
|
18
|
-
config: JSON.generate(config),
|
|
19
|
-
extension_context: extension_context,
|
|
20
|
-
}
|
|
21
|
-
response = ShopifyCLI::PartnersAPI.query(context, GRAPHQL_FILE, **input).dig(*RESPONSE_FIELD)
|
|
22
|
-
context.abort(context.message("tasks.errors.parse_error")) if response.nil?
|
|
23
|
-
|
|
24
|
-
abort_if_user_errors(context, response)
|
|
25
|
-
Converters::VersionConverter.from_hash(context, response.dig(VERSION_FIELD))
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
module UserErrors
|
|
7
|
-
USER_ERRORS_FIELD = "userErrors"
|
|
8
|
-
MESSAGE_FIELD = "message"
|
|
9
|
-
USER_ERRORS_PARSE_ERROR = "Unable to parse errors from server."
|
|
10
|
-
|
|
11
|
-
def abort_if_user_errors(context, response)
|
|
12
|
-
return if response.nil?
|
|
13
|
-
|
|
14
|
-
user_errors = response.dig(USER_ERRORS_FIELD)
|
|
15
|
-
output_all_user_errors(context, user_errors)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
def output_all_user_errors(context, user_errors)
|
|
21
|
-
return if user_errors.nil? || user_errors.empty?
|
|
22
|
-
last_user_error = user_errors.pop
|
|
23
|
-
|
|
24
|
-
user_errors.each { |user_error| puts_user_error(context, user_error) }
|
|
25
|
-
abort_user_error(context, last_user_error)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def puts_user_error(context, user_error)
|
|
29
|
-
output_user_error(context, user_error) { |message| context.puts("{{x}} #{message}") }
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def abort_user_error(context, user_error)
|
|
33
|
-
output_user_error(context, user_error) { |message| context.abort(message) }
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def output_user_error(context, user_error)
|
|
37
|
-
if user_error.key?(MESSAGE_FIELD)
|
|
38
|
-
yield(user_error[MESSAGE_FIELD])
|
|
39
|
-
else
|
|
40
|
-
context.abort(USER_ERRORS_PARSE_ERROR)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
require "shopify_cli"
|
|
2
|
-
require "optparse"
|
|
3
|
-
|
|
4
|
-
module ShopifyCLI
|
|
5
|
-
class AdminAPI
|
|
6
|
-
class PopulateResourceCommand < ShopifyCLI::Command::SubCommand
|
|
7
|
-
DEFAULT_COUNT = 5
|
|
8
|
-
|
|
9
|
-
attr_reader :input
|
|
10
|
-
|
|
11
|
-
class << self
|
|
12
|
-
attr_accessor :input_type
|
|
13
|
-
|
|
14
|
-
# we override the call classmethod here because we parse options at runtime
|
|
15
|
-
def call(args, command_name, _parent_command)
|
|
16
|
-
cmd = new(@ctx)
|
|
17
|
-
cmd.call(args, command_name)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def help
|
|
21
|
-
cmd = new(@ctx)
|
|
22
|
-
output = cmd.display_parent_help + "\n"
|
|
23
|
-
output + cmd.display_parent_extended_help
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def call(args, _)
|
|
28
|
-
@args = args
|
|
29
|
-
@input = Hash.new
|
|
30
|
-
@count = DEFAULT_COUNT
|
|
31
|
-
@help = false
|
|
32
|
-
@skip_shop_confirmation = false
|
|
33
|
-
input_options
|
|
34
|
-
resource_options.parse(@args)
|
|
35
|
-
|
|
36
|
-
if @help
|
|
37
|
-
output = display_parent_extended_help
|
|
38
|
-
output += "\n#{@ctx.message("core.populate.options.header", camel_case_resource_type)}\n"
|
|
39
|
-
output += resource_options.help
|
|
40
|
-
return @ctx.puts(output)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
ShopifyCLI::Tasks::ConfirmStore.call(@ctx) unless @skip_shop_confirmation
|
|
44
|
-
@shop = AdminAPI.get_shop_or_abort(@ctx)
|
|
45
|
-
if @silent
|
|
46
|
-
spin_group = CLI::UI::SpinGroup.new
|
|
47
|
-
spin_group.add(@ctx.message("core.populate.populating", @count, camel_case_resource_type)) do |spinner|
|
|
48
|
-
populate
|
|
49
|
-
spinner.update_title(completion_message)
|
|
50
|
-
end
|
|
51
|
-
spin_group.wait
|
|
52
|
-
else
|
|
53
|
-
populate
|
|
54
|
-
@ctx.puts(completion_message)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def message
|
|
59
|
-
raise NotImplementedError
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def defaults
|
|
63
|
-
raise NotImplementedError
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def display_parent_help
|
|
67
|
-
parent_command_klass.respond_to?(:help) ? parent_command_klass.help : ""
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def display_parent_extended_help
|
|
71
|
-
parent_command_klass.respond_to?(:extended_help) ? parent_command_klass.extended_help : ""
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def resource_options
|
|
75
|
-
@resource_options ||= OptionParser.new do |opts|
|
|
76
|
-
opts.banner = ""
|
|
77
|
-
opts.on(
|
|
78
|
-
"-c #{DEFAULT_COUNT}",
|
|
79
|
-
"--count=#{DEFAULT_COUNT}",
|
|
80
|
-
@ctx.message("core.populate.options.count_help")
|
|
81
|
-
) do |value|
|
|
82
|
-
@count = value.to_i
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
opts.on("-h", "--help", "print help") do |value|
|
|
86
|
-
@help = value
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
opts.on("--silent") { |v| @silent = v }
|
|
90
|
-
|
|
91
|
-
opts.on("--skip-shop-confirmation") { |v| @skip_shop_confirmation = v }
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def populate
|
|
96
|
-
@count.times do
|
|
97
|
-
run_mutation(defaults.merge(@input))
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def input_options
|
|
102
|
-
schema.type(self.class.input_type)["inputFields"].each do |field|
|
|
103
|
-
resource_options.on(
|
|
104
|
-
"--#{field["name"]}=#{field["defaultValue"]}",
|
|
105
|
-
field["description"]
|
|
106
|
-
) do |value|
|
|
107
|
-
@input[field["name"]] = value
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
def schema
|
|
113
|
-
@schema ||= AdminAPI::Schema.get(@ctx)
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def run_mutation(data)
|
|
117
|
-
kwargs = { input: data }
|
|
118
|
-
kwargs[:shop] = @shop
|
|
119
|
-
resp = AdminAPI.query(
|
|
120
|
-
@ctx, "create_#{snake_case_resource_type}", **kwargs
|
|
121
|
-
)
|
|
122
|
-
@ctx.abort(resp["errors"]) if resp["errors"]
|
|
123
|
-
@ctx.done(message(resp["data"])) unless @silent
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def completion_message
|
|
127
|
-
plural = @count > 1 ? "s" : ""
|
|
128
|
-
@ctx.message(
|
|
129
|
-
"core.populate.completion_message",
|
|
130
|
-
@count,
|
|
131
|
-
"#{camel_case_resource_type}#{plural}",
|
|
132
|
-
@shop,
|
|
133
|
-
camel_case_resource_type,
|
|
134
|
-
admin_url,
|
|
135
|
-
snake_case_resource_type
|
|
136
|
-
)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
def admin_url
|
|
140
|
-
"https://#{@shop}/admin/"
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def price
|
|
144
|
-
format("%.2f", rand(1..10))
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
private
|
|
148
|
-
|
|
149
|
-
def camel_case_resource_type
|
|
150
|
-
@camel_case_resource_type ||= self.class.to_s.split("::").last
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
def snake_case_resource_type
|
|
154
|
-
@snake_case_resource_type ||= camel_case_resource_type.to_s
|
|
155
|
-
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
|
156
|
-
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
|
157
|
-
.tr("-", "_")
|
|
158
|
-
.downcase
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
def parent_command_klass
|
|
162
|
-
@parent_command_klass ||= Module.const_get(self.class.to_s.split("::")[0..-2].join("::"))
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
end
|