@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.
Files changed (136) hide show
  1. package/assets/cli-ruby/Gemfile +0 -1
  2. package/assets/cli-ruby/Rakefile +0 -76
  3. package/assets/cli-ruby/lib/project_types/extension/cli.rb +5 -86
  4. package/assets/cli-ruby/lib/shopify_cli/admin_api.rb +0 -3
  5. package/assets/cli-ruby/lib/shopify_cli/command/sub_command.rb +1 -2
  6. package/assets/cli-ruby/lib/shopify_cli/command.rb +0 -7
  7. package/assets/cli-ruby/lib/shopify_cli/commands.rb +0 -15
  8. package/assets/cli-ruby/lib/shopify_cli/core.rb +0 -1
  9. package/assets/cli-ruby/lib/shopify_cli/identity_auth.rb +0 -1
  10. package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/proxy.rb +9 -1
  11. package/assets/cli-ruby/lib/shopify_cli.rb +1 -10
  12. package/assets/cli-ruby/test/test_helpers.rb +0 -2
  13. package/dist/public/common/version.d.ts +1 -1
  14. package/dist/public/common/version.js +1 -1
  15. package/dist/public/common/version.js.map +1 -1
  16. package/dist/tsconfig.tsbuildinfo +1 -1
  17. package/package.json +1 -1
  18. package/assets/cli-ruby/lib/project_types/extension/commands/build.rb +0 -51
  19. package/assets/cli-ruby/lib/project_types/extension/commands/check.rb +0 -51
  20. package/assets/cli-ruby/lib/project_types/extension/commands/connect.rb +0 -35
  21. package/assets/cli-ruby/lib/project_types/extension/commands/create.rb +0 -100
  22. package/assets/cli-ruby/lib/project_types/extension/commands/info.rb +0 -86
  23. package/assets/cli-ruby/lib/project_types/extension/commands/push.rb +0 -112
  24. package/assets/cli-ruby/lib/project_types/extension/commands/register.rb +0 -67
  25. package/assets/cli-ruby/lib/project_types/extension/commands/tunnel.rb +0 -73
  26. package/assets/cli-ruby/lib/project_types/extension/forms/connect.rb +0 -42
  27. package/assets/cli-ruby/lib/project_types/extension/forms/create.rb +0 -49
  28. package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_app.rb +0 -53
  29. package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_name.rb +0 -48
  30. package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_registration.rb +0 -55
  31. package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_template.rb +0 -37
  32. package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_type.rb +0 -47
  33. package/assets/cli-ruby/lib/project_types/extension/models/development_server.rb +0 -77
  34. package/assets/cli-ruby/lib/project_types/extension/models/development_server_requirements.rb +0 -56
  35. package/assets/cli-ruby/lib/project_types/extension/models/npm_package.rb +0 -44
  36. package/assets/cli-ruby/lib/project_types/extension/models/product.rb +0 -12
  37. package/assets/cli-ruby/lib/project_types/extension/models/registration.rb +0 -20
  38. package/assets/cli-ruby/lib/project_types/extension/models/server_config/app.rb +0 -13
  39. package/assets/cli-ruby/lib/project_types/extension/models/server_config/base.rb +0 -31
  40. package/assets/cli-ruby/lib/project_types/extension/models/server_config/capabilities.rb +0 -11
  41. package/assets/cli-ruby/lib/project_types/extension/models/server_config/development.rb +0 -33
  42. package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_entries.rb +0 -38
  43. package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_renderer.rb +0 -38
  44. package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_resource.rb +0 -13
  45. package/assets/cli-ruby/lib/project_types/extension/models/server_config/extension.rb +0 -46
  46. package/assets/cli-ruby/lib/project_types/extension/models/server_config/root.rb +0 -21
  47. package/assets/cli-ruby/lib/project_types/extension/models/server_config/user.rb +0 -10
  48. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +0 -29
  49. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/checkout_ui_extension.rb +0 -170
  50. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension.rb +0 -58
  51. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension_utils/script_config.rb +0 -33
  52. package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension_utils/script_config_repository.rb +0 -75
  53. package/assets/cli-ruby/lib/project_types/extension/tasks/choose_next_available_port.rb +0 -36
  54. package/assets/cli-ruby/lib/project_types/extension/tasks/convert_server_config.rb +0 -85
  55. package/assets/cli-ruby/lib/project_types/extension/tasks/converters/app_converter.rb +0 -27
  56. package/assets/cli-ruby/lib/project_types/extension/tasks/converters/product_converter.rb +0 -21
  57. package/assets/cli-ruby/lib/project_types/extension/tasks/converters/registration_converter.rb +0 -28
  58. package/assets/cli-ruby/lib/project_types/extension/tasks/create_extension.rb +0 -31
  59. package/assets/cli-ruby/lib/project_types/extension/tasks/ensure_resource_url.rb +0 -39
  60. package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/base.rb +0 -15
  61. package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/build.rb +0 -30
  62. package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/create.rb +0 -30
  63. package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/outdated_extension_detection.rb +0 -57
  64. package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/serve.rb +0 -36
  65. package/assets/cli-ruby/lib/project_types/extension/tasks/find_npm_packages.rb +0 -106
  66. package/assets/cli-ruby/lib/project_types/extension/tasks/find_package_from_json.rb +0 -37
  67. package/assets/cli-ruby/lib/project_types/extension/tasks/get_app.rb +0 -22
  68. package/assets/cli-ruby/lib/project_types/extension/tasks/get_apps.rb +0 -26
  69. package/assets/cli-ruby/lib/project_types/extension/tasks/get_extensions.rb +0 -33
  70. package/assets/cli-ruby/lib/project_types/extension/tasks/get_product.rb +0 -22
  71. package/assets/cli-ruby/lib/project_types/extension/tasks/merge_server_config.rb +0 -47
  72. package/assets/cli-ruby/lib/project_types/extension/tasks/update_draft.rb +0 -29
  73. package/assets/cli-ruby/lib/project_types/extension/tasks/user_errors.rb +0 -45
  74. package/assets/cli-ruby/lib/shopify_cli/admin_api/populate_resource_command.rb +0 -166
  75. package/assets/cli-ruby/lib/shopify_cli/admin_api/schema.rb +0 -35
  76. package/assets/cli-ruby/lib/shopify_cli/app_type_detector.rb +0 -36
  77. package/assets/cli-ruby/lib/shopify_cli/assets/post_auth_page/index.html.erb +0 -34
  78. package/assets/cli-ruby/lib/shopify_cli/assets/post_auth_page/style.css +0 -58
  79. package/assets/cli-ruby/lib/shopify_cli/changelog.rb +0 -148
  80. package/assets/cli-ruby/lib/shopify_cli/command/app_sub_command.rb +0 -26
  81. package/assets/cli-ruby/lib/shopify_cli/command_options/command_serve_options.rb +0 -53
  82. package/assets/cli-ruby/lib/shopify_cli/command_options.rb +0 -7
  83. package/assets/cli-ruby/lib/shopify_cli/commands/app/connect.rb +0 -22
  84. package/assets/cli-ruby/lib/shopify_cli/commands/app/create/node.rb +0 -40
  85. package/assets/cli-ruby/lib/shopify_cli/commands/app/create/php.rb +0 -37
  86. package/assets/cli-ruby/lib/shopify_cli/commands/app/create/rails.rb +0 -42
  87. package/assets/cli-ruby/lib/shopify_cli/commands/app/create.rb +0 -28
  88. package/assets/cli-ruby/lib/shopify_cli/commands/app/deploy.rb +0 -51
  89. package/assets/cli-ruby/lib/shopify_cli/commands/app/open.rb +0 -19
  90. package/assets/cli-ruby/lib/shopify_cli/commands/app/serve.rb +0 -51
  91. package/assets/cli-ruby/lib/shopify_cli/commands/app/tunnel.rb +0 -43
  92. package/assets/cli-ruby/lib/shopify_cli/commands/app.rb +0 -29
  93. package/assets/cli-ruby/lib/shopify_cli/commands/config.rb +0 -76
  94. package/assets/cli-ruby/lib/shopify_cli/commands/help.rb +0 -52
  95. package/assets/cli-ruby/lib/shopify_cli/commands/login.rb +0 -98
  96. package/assets/cli-ruby/lib/shopify_cli/commands/logout.rb +0 -50
  97. package/assets/cli-ruby/lib/shopify_cli/commands/populate/customer.rb +0 -25
  98. package/assets/cli-ruby/lib/shopify_cli/commands/populate/draft_order.rb +0 -28
  99. package/assets/cli-ruby/lib/shopify_cli/commands/populate/product.rb +0 -24
  100. package/assets/cli-ruby/lib/shopify_cli/commands/populate.rb +0 -23
  101. package/assets/cli-ruby/lib/shopify_cli/commands/reporting.rb +0 -38
  102. package/assets/cli-ruby/lib/shopify_cli/commands/store.rb +0 -15
  103. package/assets/cli-ruby/lib/shopify_cli/commands/switch.rb +0 -39
  104. package/assets/cli-ruby/lib/shopify_cli/commands/system.rb +0 -165
  105. package/assets/cli-ruby/lib/shopify_cli/commands/version.rb +0 -15
  106. package/assets/cli-ruby/lib/shopify_cli/commands/whoami.rb +0 -28
  107. package/assets/cli-ruby/lib/shopify_cli/connect.rb +0 -32
  108. package/assets/cli-ruby/lib/shopify_cli/core/help_resolver.rb +0 -20
  109. package/assets/cli-ruby/lib/shopify_cli/heroku.rb +0 -140
  110. package/assets/cli-ruby/lib/shopify_cli/identity_auth/servlet.rb +0 -44
  111. package/assets/cli-ruby/lib/shopify_cli/js_deps.rb +0 -110
  112. package/assets/cli-ruby/lib/shopify_cli/packager.rb +0 -108
  113. package/assets/cli-ruby/lib/shopify_cli/php_deps.rb +0 -102
  114. package/assets/cli-ruby/lib/shopify_cli/process_supervision.rb +0 -228
  115. package/assets/cli-ruby/lib/shopify_cli/project_commands.rb +0 -16
  116. package/assets/cli-ruby/lib/shopify_cli/release.rb +0 -197
  117. package/assets/cli-ruby/lib/shopify_cli/sed.rb +0 -19
  118. package/assets/cli-ruby/lib/shopify_cli/services/app/connect_service.rb +0 -25
  119. package/assets/cli-ruby/lib/shopify_cli/services/app/create/node_service.rb +0 -143
  120. package/assets/cli-ruby/lib/shopify_cli/services/app/create/php_service.rb +0 -147
  121. package/assets/cli-ruby/lib/shopify_cli/services/app/create/rails_service.rb +0 -239
  122. package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/node_service.rb +0 -101
  123. package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/php_service.rb +0 -135
  124. package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/rails_service.rb +0 -120
  125. package/assets/cli-ruby/lib/shopify_cli/services/app/open_service.rb +0 -19
  126. package/assets/cli-ruby/lib/shopify_cli/services/app/serve/node_service.rb +0 -19
  127. package/assets/cli-ruby/lib/shopify_cli/services/app/serve/php_service.rb +0 -23
  128. package/assets/cli-ruby/lib/shopify_cli/services/app/serve/rails_service.rb +0 -28
  129. package/assets/cli-ruby/lib/shopify_cli/services/app/serve/serve_service.rb +0 -57
  130. package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/auth_service.rb +0 -21
  131. package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/start_service.rb +0 -20
  132. package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/stop_service.rb +0 -20
  133. package/assets/cli-ruby/lib/shopify_cli/services/base_service.rb +0 -13
  134. package/assets/cli-ruby/lib/shopify_cli/services/reporting_service.rb +0 -16
  135. package/assets/cli-ruby/lib/shopify_cli/services.rb +0 -38
  136. 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