@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,21 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Models
|
|
5
|
-
module ServerConfig
|
|
6
|
-
class Root < Base
|
|
7
|
-
include SmartProperties
|
|
8
|
-
|
|
9
|
-
property :app, accepts: ServerConfig::App
|
|
10
|
-
property! :extensions, accepts: Array, default: -> { [] }
|
|
11
|
-
property! :port, accepts: Integer, default: 39351
|
|
12
|
-
property :public_url, accepts: String
|
|
13
|
-
property :store, accepts: String
|
|
14
|
-
|
|
15
|
-
def to_yaml
|
|
16
|
-
to_h.to_yaml.gsub("---\n", "")
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "base64"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Models
|
|
6
|
-
module SpecificationHandlers
|
|
7
|
-
class CheckoutPostPurchase < Default
|
|
8
|
-
PERMITTED_CONFIG_KEYS = [:metafields]
|
|
9
|
-
RENDERER_PACKAGE_NAME = "@shopify/post-purchase-ui-extensions"
|
|
10
|
-
|
|
11
|
-
def config(context)
|
|
12
|
-
{
|
|
13
|
-
**Features::ArgoConfig.parse_yaml(context, PERMITTED_CONFIG_KEYS),
|
|
14
|
-
**argo.config(context, include_renderer_version: false),
|
|
15
|
-
}
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
protected
|
|
19
|
-
|
|
20
|
-
def argo
|
|
21
|
-
Features::Argo.new(
|
|
22
|
-
git_template: specification.features.argo.git_template,
|
|
23
|
-
renderer_package_name: RENDERER_PACKAGE_NAME
|
|
24
|
-
)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Models
|
|
5
|
-
module SpecificationHandlers
|
|
6
|
-
class CheckoutUiExtension < Default
|
|
7
|
-
L10N_ERROR_PREFIX = "core.extension.push.checkout_ui_extension.localization.error"
|
|
8
|
-
L10N_FILE_SIZE_LIMIT = 16 * 1024 # 16kb
|
|
9
|
-
L10N_BUNDLE_SIZE_LIMIT = 256 * 1024 # 256kb
|
|
10
|
-
LOCALE_CODE_FORMAT = %r{
|
|
11
|
-
\A
|
|
12
|
-
(?<language>[a-zA-Z]{2,3}) # Language tag
|
|
13
|
-
(?:
|
|
14
|
-
-
|
|
15
|
-
(?<region>[a-zA-Z]{2}) # Optional region subtag
|
|
16
|
-
)?
|
|
17
|
-
\z}x
|
|
18
|
-
PERMITTED_CONFIG_KEYS = [:extension_points, :metafields, :name, :capabilities]
|
|
19
|
-
|
|
20
|
-
def config(context)
|
|
21
|
-
{
|
|
22
|
-
**Features::ArgoConfig.parse_yaml(context, PERMITTED_CONFIG_KEYS),
|
|
23
|
-
**argo.config(context, include_renderer_version: false),
|
|
24
|
-
**localization(context),
|
|
25
|
-
}
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def supplies_resource_url?
|
|
29
|
-
true
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def build_resource_url(context:, shop:)
|
|
33
|
-
product = Tasks::GetProduct.call(context, shop)
|
|
34
|
-
return unless product
|
|
35
|
-
format("/cart/%<variant_id>d:%<quantity>d", variant_id: product.variant_id, quantity: 1)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
def localization(context)
|
|
41
|
-
Dir.chdir(context.root) do
|
|
42
|
-
locale_filenames = Dir["locales/*"].select { |filename| valid_l10n_file?(filename) }
|
|
43
|
-
# Localization is optional
|
|
44
|
-
return {} if locale_filenames.empty?
|
|
45
|
-
|
|
46
|
-
validate_no_duplicate_locale(locale_filenames)
|
|
47
|
-
validate_total_size(locale_filenames)
|
|
48
|
-
default_locale = single_default_locale(locale_filenames)
|
|
49
|
-
|
|
50
|
-
locale_filenames.map do |filename|
|
|
51
|
-
locale = basename_for_locale_filename(filename)
|
|
52
|
-
[locale.to_sym, read_locale_file(filename)]
|
|
53
|
-
end
|
|
54
|
-
.yield_self do |encoded_files_by_locale|
|
|
55
|
-
{
|
|
56
|
-
localization: {
|
|
57
|
-
default_locale: default_locale,
|
|
58
|
-
translations: encoded_files_by_locale.to_h,
|
|
59
|
-
},
|
|
60
|
-
}
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def read_locale_file(filename)
|
|
66
|
-
content = File.read(filename, mode: "rt", encoding: "bom|utf-8").strip
|
|
67
|
-
raise_invalid_encoding_error(filename) unless content.valid_encoding?
|
|
68
|
-
Base64.strict_encode64(content)
|
|
69
|
-
rescue ArgumentError
|
|
70
|
-
raise_invalid_encoding_error(filename)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def validate_no_duplicate_locale(locale_filenames)
|
|
74
|
-
duplicate_locale = locale_filenames
|
|
75
|
-
.map { |filename| basename_for_locale_filename(filename.downcase) }
|
|
76
|
-
.group_by { |locale| locale }
|
|
77
|
-
.detect { |_k, v| v.size > 1 }
|
|
78
|
-
&.first
|
|
79
|
-
raise(
|
|
80
|
-
ShopifyCLI::Abort,
|
|
81
|
-
ShopifyCLI::Context.message("#{L10N_ERROR_PREFIX}.duplicate_locale_code", duplicate_locale)
|
|
82
|
-
) unless duplicate_locale.nil?
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def validate_total_size(locale_filenames)
|
|
86
|
-
total_size = locale_filenames.sum { |filename| File.size(filename) }
|
|
87
|
-
if total_size > L10N_BUNDLE_SIZE_LIMIT
|
|
88
|
-
raise(
|
|
89
|
-
ShopifyCLI::Abort,
|
|
90
|
-
ShopifyCLI::Context.message(
|
|
91
|
-
"#{L10N_ERROR_PREFIX}.bundle_too_large",
|
|
92
|
-
CLI::Kit::Util.to_filesize(L10N_BUNDLE_SIZE_LIMIT)
|
|
93
|
-
)
|
|
94
|
-
)
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def single_default_locale(locale_filenames)
|
|
99
|
-
default_locale_matches = locale_filenames.grep(/default/)
|
|
100
|
-
if default_locale_matches.size != 1
|
|
101
|
-
raise(ShopifyCLI::Abort, ShopifyCLI::Context.message("#{L10N_ERROR_PREFIX}.single_default_locale"))
|
|
102
|
-
end
|
|
103
|
-
basename_for_locale_filename(default_locale_matches.first)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def valid_l10n_file?(filename)
|
|
107
|
-
return false unless File.file?(filename)
|
|
108
|
-
return false unless File.dirname(filename) == "locales"
|
|
109
|
-
|
|
110
|
-
validate_file_extension(filename)
|
|
111
|
-
validate_file_locale_code(filename)
|
|
112
|
-
validate_file_size(filename)
|
|
113
|
-
validate_file_not_empty(filename)
|
|
114
|
-
|
|
115
|
-
true
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
def validate_file_extension(filename)
|
|
119
|
-
if File.extname(filename) != ".json"
|
|
120
|
-
raise(
|
|
121
|
-
ShopifyCLI::Abort, ShopifyCLI::Context.message("#{L10N_ERROR_PREFIX}.invalid_file_extension", filename)
|
|
122
|
-
)
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def validate_file_locale_code(filename)
|
|
127
|
-
unless valid_locale_code?(basename_for_locale_filename(filename))
|
|
128
|
-
raise(
|
|
129
|
-
ShopifyCLI::Abort, ShopifyCLI::Context.message("#{L10N_ERROR_PREFIX}.invalid_locale_code", filename)
|
|
130
|
-
)
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
def validate_file_size(filename)
|
|
135
|
-
if File.size(filename) > L10N_FILE_SIZE_LIMIT
|
|
136
|
-
raise(
|
|
137
|
-
ShopifyCLI::Abort,
|
|
138
|
-
ShopifyCLI::Context.message(
|
|
139
|
-
"#{L10N_ERROR_PREFIX}.file_too_large",
|
|
140
|
-
filename,
|
|
141
|
-
CLI::Kit::Util.to_filesize(L10N_FILE_SIZE_LIMIT)
|
|
142
|
-
)
|
|
143
|
-
)
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
def validate_file_not_empty(filename)
|
|
148
|
-
if File.zero?(filename)
|
|
149
|
-
raise(ShopifyCLI::Abort, ShopifyCLI::Context.message("#{L10N_ERROR_PREFIX}.file_empty", filename))
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
def valid_locale_code?(locale_code)
|
|
154
|
-
LOCALE_CODE_FORMAT.match?(locale_code)
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
def basename_for_locale_filename(filename)
|
|
158
|
-
File.basename(File.basename(filename, ".json"), ".default")
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
def raise_invalid_encoding_error(filename)
|
|
162
|
-
raise(
|
|
163
|
-
ShopifyCLI::Abort,
|
|
164
|
-
ShopifyCLI::Context.message("#{L10N_ERROR_PREFIX}.invalid_file_encoding", filename)
|
|
165
|
-
)
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
end
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "base64"
|
|
3
|
-
require "fileutils"
|
|
4
|
-
require "json"
|
|
5
|
-
require_relative "web_pixel_extension_utils/script_config"
|
|
6
|
-
require_relative "web_pixel_extension_utils/script_config_repository"
|
|
7
|
-
|
|
8
|
-
module Extension
|
|
9
|
-
module Models
|
|
10
|
-
module SpecificationHandlers
|
|
11
|
-
class WebPixelExtension < Default
|
|
12
|
-
SCRIPT_FILE = "build/main.js"
|
|
13
|
-
|
|
14
|
-
def name
|
|
15
|
-
"Web Pixel Extension"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def read_configuration
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def access_config_property(context, ext_config, key, &process_value)
|
|
22
|
-
context.abort(context.message("core.extension.push.web_pixel_extension.error.missing_config_key_error",
|
|
23
|
-
key)) unless ext_config.key?(key)
|
|
24
|
-
|
|
25
|
-
begin
|
|
26
|
-
process_value.nil? ? ext_config[key] : process_value.call(ext_config[key])
|
|
27
|
-
rescue StandardError
|
|
28
|
-
context.abort(context.message("core.extension.push.web_pixel_extension.error.invalid_config_value_error",
|
|
29
|
-
key))
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def config(context)
|
|
34
|
-
begin
|
|
35
|
-
ext_config = WebPixelExtensionUtils::ScriptConfigYmlRepository.new(ctx: context).get!.content
|
|
36
|
-
rescue StandardError
|
|
37
|
-
context.abort(context.message("core.extension.push.web_pixel_extension.error.file_read_error",
|
|
38
|
-
WebPixelExtensionUtils::ScriptConfigYmlRepository.filename))
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
begin
|
|
42
|
-
script_contents = File.read(File.join(context.root, SCRIPT_FILE)).chomp
|
|
43
|
-
rescue
|
|
44
|
-
context.abort(context.message("core.extension.push.web_pixel_extension.error.file_read_error", SCRIPT_FILE))
|
|
45
|
-
end
|
|
46
|
-
{
|
|
47
|
-
runtime_context: access_config_property(context, ext_config, "runtime_context"),
|
|
48
|
-
serialized_script: Base64.strict_encode64(script_contents),
|
|
49
|
-
runtime_configuration_definition: access_config_property(context, ext_config,
|
|
50
|
-
"configuration", &:to_json),
|
|
51
|
-
config_version: access_config_property(context, ext_config,
|
|
52
|
-
"version", &:to_s),
|
|
53
|
-
}
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Extension
|
|
4
|
-
module Models
|
|
5
|
-
module SpecificationHandlers
|
|
6
|
-
module WebPixelExtensionUtils
|
|
7
|
-
class ScriptConfig
|
|
8
|
-
attr_reader :content, :version, :configuration, :filename
|
|
9
|
-
|
|
10
|
-
REQUIRED_FIELDS = %w(version)
|
|
11
|
-
|
|
12
|
-
def initialize(content:, filename:)
|
|
13
|
-
@filename = filename
|
|
14
|
-
validate_content!(content)
|
|
15
|
-
@content = content
|
|
16
|
-
@version = @content["version"].to_s
|
|
17
|
-
@configuration = @content["configuration"]
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
private
|
|
21
|
-
|
|
22
|
-
def validate_content!(content)
|
|
23
|
-
REQUIRED_FIELDS.each do |field|
|
|
24
|
-
if content[field].nil?
|
|
25
|
-
raise "invalid field:#{field}, filename:#{filename}"
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
require_relative "script_config"
|
|
2
|
-
module Extension
|
|
3
|
-
module Models
|
|
4
|
-
module SpecificationHandlers
|
|
5
|
-
module WebPixelExtensionUtils
|
|
6
|
-
class ScriptConfigRepository
|
|
7
|
-
include SmartProperties
|
|
8
|
-
property! :ctx, accepts: ShopifyCLI::Context
|
|
9
|
-
|
|
10
|
-
def active?
|
|
11
|
-
ctx.file_exist?(filename)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def get!
|
|
15
|
-
raise RuntimeError.new("NoScriptConfigFile"), filename unless active?
|
|
16
|
-
|
|
17
|
-
content = ctx.read(filename)
|
|
18
|
-
hash = file_content_to_hash(content)
|
|
19
|
-
|
|
20
|
-
from_h(hash)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def filename
|
|
24
|
-
raise NotImplementedError
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
def from_h(hash)
|
|
30
|
-
Extension::Models::SpecificationHandlers::WebPixelExtensionUtils::ScriptConfig.new(content: hash,
|
|
31
|
-
filename: filename)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def file_content_to_hash(file_content)
|
|
35
|
-
raise NotImplementedError
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def hash_to_file_content(hash)
|
|
39
|
-
raise NotImplementedError
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
class ScriptConfigYmlRepository < ScriptConfigRepository
|
|
44
|
-
def self.filename
|
|
45
|
-
"extension.config.yml"
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def filename
|
|
49
|
-
ScriptConfigYmlRepository.filename
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
private
|
|
53
|
-
|
|
54
|
-
def file_content_to_hash(file_content)
|
|
55
|
-
begin
|
|
56
|
-
hash = YAML.load(file_content)
|
|
57
|
-
rescue Psych::SyntaxError
|
|
58
|
-
raise parse_error
|
|
59
|
-
end
|
|
60
|
-
raise parse_error unless hash.is_a?(Hash)
|
|
61
|
-
hash
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def hash_to_file_content(hash)
|
|
65
|
-
YAML.dump(hash)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def parse_error
|
|
69
|
-
RuntimeError.new("ScriptConfigParseError #{filename}, serialization_format: \"YAML\" ")
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
require "socket"
|
|
4
|
-
|
|
5
|
-
module Extension
|
|
6
|
-
module Tasks
|
|
7
|
-
class ChooseNextAvailablePort
|
|
8
|
-
include ShopifyCLI::MethodObject
|
|
9
|
-
|
|
10
|
-
property! :from
|
|
11
|
-
property! :to, default: -> { from + 10 }
|
|
12
|
-
property! :host, default: "127.0.0.1"
|
|
13
|
-
|
|
14
|
-
def call
|
|
15
|
-
available_port = port_range(from: from, to: to).find { |p| available?(host, p) }
|
|
16
|
-
raise ArgumentError, "Ports between #{from} and #{to} are unavailable" if available_port.nil?
|
|
17
|
-
available_port
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
private
|
|
21
|
-
|
|
22
|
-
def port_range(from:, to:)
|
|
23
|
-
(from..to)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def available?(host, port)
|
|
27
|
-
Socket.tcp(host, port, connect_timeout: 1) do |socket|
|
|
28
|
-
socket.close
|
|
29
|
-
false
|
|
30
|
-
end
|
|
31
|
-
rescue Errno::ECONNREFUSED
|
|
32
|
-
true
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
class ConvertServerConfig
|
|
7
|
-
include SmartProperties
|
|
8
|
-
|
|
9
|
-
property! :api_key, accepts: String
|
|
10
|
-
property! :context, accepts: ShopifyCLI::Context
|
|
11
|
-
property! :hash, accepts: Hash
|
|
12
|
-
property! :port, accepts: Integer
|
|
13
|
-
property! :registration_uuid, accepts: String
|
|
14
|
-
property :resource_url, accepts: String
|
|
15
|
-
property! :store, accepts: String
|
|
16
|
-
property! :title, accepts: String
|
|
17
|
-
property :tunnel_url, accepts: String
|
|
18
|
-
property! :type, accepts: String
|
|
19
|
-
property :metafields, accepts: Array
|
|
20
|
-
|
|
21
|
-
DEFAULT_BUILD_DIR = "build"
|
|
22
|
-
|
|
23
|
-
def self.call(*args)
|
|
24
|
-
new(*args).call
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def call
|
|
28
|
-
context.abort(context.message("tasks.errors.parse_error")) if hash.nil?
|
|
29
|
-
|
|
30
|
-
renderer = Models::ServerConfig::DevelopmentRenderer.find(type)
|
|
31
|
-
extension = Models::ServerConfig::Extension.new(
|
|
32
|
-
uuid: registration_uuid,
|
|
33
|
-
type: type,
|
|
34
|
-
user: Models::ServerConfig::User.new,
|
|
35
|
-
development: Models::ServerConfig::Development.new(
|
|
36
|
-
build_dir: hash.dig("development", "build_dir") || DEFAULT_BUILD_DIR,
|
|
37
|
-
renderer: renderer,
|
|
38
|
-
entries: Models::ServerConfig::DevelopmentEntries.new(
|
|
39
|
-
main: hash.dig("development", "entries", "main") || determine_default_entry_main(project_directory),
|
|
40
|
-
)
|
|
41
|
-
),
|
|
42
|
-
extension_points: hash.dig("extension_points"),
|
|
43
|
-
capabilities: Models::ServerConfig::Capabilities.new(
|
|
44
|
-
network_access: hash.dig("capabilities", "network_access") || false
|
|
45
|
-
),
|
|
46
|
-
version: renderer ? version(renderer.name, context) : nil,
|
|
47
|
-
title: title,
|
|
48
|
-
metafields: metafields
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
unless resource_url.nil?
|
|
52
|
-
extension.development.resource = Models::ServerConfig::DevelopmentResource.new(url: resource_url)
|
|
53
|
-
end
|
|
54
|
-
server_config = Models::ServerConfig::Root.new(
|
|
55
|
-
extensions: [extension],
|
|
56
|
-
port: port,
|
|
57
|
-
public_url: tunnel_url,
|
|
58
|
-
store: store
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
unless api_key.nil?
|
|
62
|
-
server_config.app = Models::ServerConfig::App.new(api_key: api_key)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
server_config
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def version(renderer, context)
|
|
69
|
-
Tasks::FindPackageFromJson.call(renderer, context: context).version
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
private
|
|
73
|
-
|
|
74
|
-
def determine_default_entry_main(project_directory)
|
|
75
|
-
Dir.chdir(project_directory) do
|
|
76
|
-
Dir["src/*"].lazy.grep(/index.[jt]sx?/).first
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def project_directory
|
|
81
|
-
ExtensionProject.current.directory
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
module Converters
|
|
7
|
-
module AppConverter
|
|
8
|
-
API_KEY_FIELD = "apiKey"
|
|
9
|
-
API_SECRET_KEYS_FIELD = "apiSecretKeys"
|
|
10
|
-
API_SECRET_FIELD = "secret"
|
|
11
|
-
TITLE_FIELD = "title"
|
|
12
|
-
ORGANIZATION_NAME_FIELD = "businessName"
|
|
13
|
-
|
|
14
|
-
def self.from_hash(hash, organization = {})
|
|
15
|
-
return nil if hash.nil?
|
|
16
|
-
|
|
17
|
-
Models::App.new(
|
|
18
|
-
api_key: hash[API_KEY_FIELD],
|
|
19
|
-
secret: hash[API_SECRET_KEYS_FIELD].first[API_SECRET_FIELD],
|
|
20
|
-
title: hash[TITLE_FIELD],
|
|
21
|
-
business_name: organization[ORGANIZATION_NAME_FIELD]
|
|
22
|
-
)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
module Converters
|
|
7
|
-
module ProductConverter
|
|
8
|
-
VARIANT_PATH = ["data", "products", "edges", 0, "node", "variants", "edges", 0, "node", "id"]
|
|
9
|
-
|
|
10
|
-
def self.from_hash(hash)
|
|
11
|
-
return nil if hash.nil?
|
|
12
|
-
variant = hash.dig(*VARIANT_PATH)
|
|
13
|
-
return unless variant
|
|
14
|
-
Models::Product.new(
|
|
15
|
-
variant_id: ShopifyCLI::API.gid_to_id(variant)
|
|
16
|
-
)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
package/assets/cli-ruby/lib/project_types/extension/tasks/converters/registration_converter.rb
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
module Converters
|
|
7
|
-
module RegistrationConverter
|
|
8
|
-
ID_FIELD = "id"
|
|
9
|
-
UUID_FIELD = "uuid"
|
|
10
|
-
TYPE_FIELD = "type"
|
|
11
|
-
TITLE_FIELD = "title"
|
|
12
|
-
DRAFT_VERSION_FIELD = "draftVersion"
|
|
13
|
-
|
|
14
|
-
def self.from_hash(context, hash)
|
|
15
|
-
context.abort(context.message("tasks.errors.parse_error")) if hash.nil?
|
|
16
|
-
|
|
17
|
-
Models::Registration.new(
|
|
18
|
-
id: hash[ID_FIELD].to_i,
|
|
19
|
-
uuid: hash[UUID_FIELD],
|
|
20
|
-
type: hash[TYPE_FIELD],
|
|
21
|
-
title: hash[TITLE_FIELD],
|
|
22
|
-
draft_version: VersionConverter.from_hash(context, hash[DRAFT_VERSION_FIELD])
|
|
23
|
-
)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
class CreateExtension < ShopifyCLI::Task
|
|
7
|
-
include UserErrors
|
|
8
|
-
|
|
9
|
-
GRAPHQL_FILE = "extension_create"
|
|
10
|
-
|
|
11
|
-
RESPONSE_FIELD = %w(data extensionCreate)
|
|
12
|
-
REGISTRATION_FIELD = "extensionRegistration"
|
|
13
|
-
|
|
14
|
-
def call(context:, api_key:, type:, title:, config:, extension_context: nil)
|
|
15
|
-
input = {
|
|
16
|
-
api_key: api_key,
|
|
17
|
-
type: type,
|
|
18
|
-
title: title,
|
|
19
|
-
config: JSON.generate(config),
|
|
20
|
-
extension_context: extension_context,
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
response = ShopifyCLI::PartnersAPI.query(context, GRAPHQL_FILE, **input).dig(*RESPONSE_FIELD)
|
|
24
|
-
context.abort(context.message("tasks.errors.parse_error")) if response.nil?
|
|
25
|
-
|
|
26
|
-
abort_if_user_errors(context, response)
|
|
27
|
-
Converters::RegistrationConverter.from_hash(context, response.dig(REGISTRATION_FIELD))
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
class EnsureResourceUrl < ShopifyCLI::Task
|
|
7
|
-
include SmartProperties
|
|
8
|
-
|
|
9
|
-
property! :context, accepts: ShopifyCLI::Context
|
|
10
|
-
property! :specification_handler, accepts: Extension::Models::SpecificationHandlers::Default
|
|
11
|
-
|
|
12
|
-
def self.call(*args)
|
|
13
|
-
new(*args).call
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def call
|
|
17
|
-
project = ExtensionProject.current(force_reload: true)
|
|
18
|
-
|
|
19
|
-
ShopifyCLI::Result
|
|
20
|
-
.wrap(project.resource_url)
|
|
21
|
-
.rescue { specification_handler.build_resource_url(shop: project.env.shop, context: context) }
|
|
22
|
-
.then(&method(:persist_resource_url))
|
|
23
|
-
.unwrap do |nil_or_exception|
|
|
24
|
-
case nil_or_exception
|
|
25
|
-
when nil
|
|
26
|
-
context.warn(context.message("warnings.resource_url_auto_generation_failed", project.env.shop))
|
|
27
|
-
else
|
|
28
|
-
context.abort(nil_or_exception)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def persist_resource_url(resource_url)
|
|
34
|
-
ExtensionProject.update_env_file(context: context, resource_url: resource_url)
|
|
35
|
-
resource_url
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require "shopify_cli"
|
|
3
|
-
|
|
4
|
-
module Extension
|
|
5
|
-
module Tasks
|
|
6
|
-
module ExecuteCommands
|
|
7
|
-
class Base
|
|
8
|
-
include SmartProperties
|
|
9
|
-
|
|
10
|
-
property! :type, accepts: Models::DevelopmentServerRequirements::SUPPORTED_EXTENSION_TYPES
|
|
11
|
-
property! :context, accepts: ShopifyCLI::Context
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|