shopify-cli 1.6.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +15 -2
- data/CHANGELOG.md +21 -0
- data/Gemfile +12 -12
- data/Gemfile.lock +14 -14
- data/Rakefile +32 -30
- data/bin/load_shopify.rb +6 -6
- data/bin/shopify +2 -2
- data/dev.yml +3 -0
- data/ext/shopify-cli/extconf.rb +7 -7
- data/lib/docgen/markdown.rb +12 -12
- data/lib/graphql/extension_create.graphql +17 -2
- data/lib/graphql/fetch_specifications.graphql +14 -0
- data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
- data/lib/project_types/extension/cli.rb +56 -55
- data/lib/project_types/extension/commands/build.rb +3 -3
- data/lib/project_types/extension/commands/create.rb +17 -10
- data/lib/project_types/extension/commands/extension_command.rb +14 -7
- data/lib/project_types/extension/commands/push.rb +10 -10
- data/lib/project_types/extension/commands/register.rb +22 -32
- data/lib/project_types/extension/commands/serve.rb +1 -7
- data/lib/project_types/extension/commands/tunnel.rb +12 -12
- data/lib/project_types/extension/extension_project.rb +22 -7
- data/lib/project_types/extension/extension_project_keys.rb +5 -4
- data/lib/project_types/extension/features/argo.rb +26 -42
- data/lib/project_types/extension/features/argo_config.rb +5 -5
- data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
- data/lib/project_types/extension/features/argo_renderer_package.rb +47 -0
- data/lib/project_types/extension/features/argo_serve.rb +69 -0
- data/lib/project_types/extension/features/argo_setup.rb +3 -3
- data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
- data/lib/project_types/extension/forms/create.rb +28 -34
- data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
- data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
- data/lib/project_types/extension/forms/questions/ask_type.rb +47 -0
- data/lib/project_types/extension/messages/message_loading.rb +3 -1
- data/lib/project_types/extension/messages/messages.rb +55 -55
- data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
- data/lib/project_types/extension/models/registration.rb +1 -0
- data/lib/project_types/extension/models/specification.rb +6 -2
- data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +1 -1
- data/lib/project_types/extension/models/specification_handlers/default.rb +10 -2
- data/lib/project_types/extension/models/specifications.rb +14 -3
- data/lib/project_types/extension/models/version.rb +1 -1
- data/lib/project_types/extension/tasks/configure_features.rb +7 -5
- data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
- data/lib/project_types/extension/tasks/converters/registration_converter.rb +8 -6
- data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
- data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
- data/lib/project_types/extension/tasks/create_extension.rb +4 -4
- data/lib/project_types/extension/tasks/fetch_specifications.rb +8 -28
- data/lib/project_types/extension/tasks/get_app.rb +4 -4
- data/lib/project_types/extension/tasks/get_apps.rb +3 -3
- data/lib/project_types/extension/tasks/update_draft.rb +4 -4
- data/lib/project_types/extension/tasks/user_errors.rb +4 -4
- data/lib/project_types/node/cli.rb +19 -19
- data/lib/project_types/node/commands/connect.rb +3 -3
- data/lib/project_types/node/commands/create.rb +40 -38
- data/lib/project_types/node/commands/deploy.rb +4 -4
- data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
- data/lib/project_types/node/commands/generate.rb +2 -24
- data/lib/project_types/node/commands/open.rb +2 -2
- data/lib/project_types/node/commands/populate.rb +6 -6
- data/lib/project_types/node/commands/populate/customer.rb +5 -5
- data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
- data/lib/project_types/node/commands/populate/product.rb +5 -5
- data/lib/project_types/node/commands/serve.rb +9 -9
- data/lib/project_types/node/commands/tunnel.rb +7 -7
- data/lib/project_types/node/forms/create.rb +17 -8
- data/lib/project_types/node/messages/messages.rb +8 -7
- data/lib/project_types/rails/cli.rb +21 -21
- data/lib/project_types/rails/commands/connect.rb +3 -3
- data/lib/project_types/rails/commands/create.rb +51 -48
- data/lib/project_types/rails/commands/deploy.rb +4 -4
- data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
- data/lib/project_types/rails/commands/generate.rb +7 -7
- data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
- data/lib/project_types/rails/commands/open.rb +2 -2
- data/lib/project_types/rails/commands/populate.rb +6 -6
- data/lib/project_types/rails/commands/populate/customer.rb +5 -5
- data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
- data/lib/project_types/rails/commands/populate/product.rb +5 -5
- data/lib/project_types/rails/commands/serve.rb +11 -11
- data/lib/project_types/rails/commands/tunnel.rb +7 -7
- data/lib/project_types/rails/forms/create.rb +34 -24
- data/lib/project_types/rails/gem.rb +23 -23
- data/lib/project_types/rails/messages/messages.rb +9 -8
- data/lib/project_types/rails/ruby.rb +2 -2
- data/lib/project_types/script/cli.rb +36 -40
- data/lib/project_types/script/commands/create.rb +9 -13
- data/lib/project_types/script/commands/push.rb +6 -5
- data/lib/project_types/script/config/extension_points.yml +25 -10
- data/lib/project_types/script/errors.rb +1 -19
- data/lib/project_types/script/forms/create.rb +7 -18
- data/lib/project_types/script/graphql/app_script_update_or_create.graphql +7 -5
- data/lib/project_types/script/graphql/script_service_proxy.graphql +1 -2
- data/lib/project_types/script/layers/application/build_script.rb +6 -8
- data/lib/project_types/script/layers/application/create_script.rb +34 -24
- data/lib/project_types/script/layers/application/extension_points.rb +3 -2
- data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
- data/lib/project_types/script/layers/application/push_script.rb +10 -15
- data/lib/project_types/script/layers/domain/config_ui.rb +16 -0
- data/lib/project_types/script/layers/domain/errors.rb +16 -0
- data/lib/project_types/script/layers/domain/extension_point.rb +60 -45
- data/lib/project_types/script/layers/domain/metadata.rb +18 -25
- data/lib/project_types/script/layers/domain/push_package.rb +9 -5
- data/lib/project_types/script/layers/domain/script_project.rb +38 -0
- data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +39 -10
- data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +9 -44
- data/lib/project_types/script/layers/infrastructure/errors.rb +50 -19
- data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +2 -2
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +16 -21
- data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +4 -4
- data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +2 -2
- data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +179 -0
- data/lib/project_types/script/layers/infrastructure/script_service.rb +35 -78
- data/lib/project_types/script/messages/messages.rb +33 -57
- data/lib/project_types/script/ui/error_handler.rb +116 -88
- data/lib/project_types/script/ui/printing_spinner.rb +1 -1
- data/lib/project_types/script/ui/strict_spinner.rb +1 -1
- data/lib/project_types/theme/cli.rb +19 -19
- data/lib/project_types/theme/commands/connect.rb +12 -12
- data/lib/project_types/theme/commands/create.rb +11 -11
- data/lib/project_types/theme/commands/deploy.rb +8 -8
- data/lib/project_types/theme/commands/generate.rb +3 -3
- data/lib/project_types/theme/commands/generate/env.rb +15 -15
- data/lib/project_types/theme/commands/push.rb +15 -15
- data/lib/project_types/theme/commands/serve.rb +5 -5
- data/lib/project_types/theme/forms/connect.rb +4 -4
- data/lib/project_types/theme/forms/create.rb +5 -5
- data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +22 -22
- data/lib/project_types/theme/themekit.rb +15 -15
- data/lib/rubygems_plugin.rb +3 -3
- data/lib/shopify-cli/admin_api.rb +11 -11
- data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
- data/lib/shopify-cli/admin_api/schema.rb +3 -3
- data/lib/shopify-cli/api.rb +10 -10
- data/lib/shopify-cli/command.rb +1 -1
- data/lib/shopify-cli/commands.rb +9 -9
- data/lib/shopify-cli/commands/config.rb +28 -52
- data/lib/shopify-cli/commands/connect.rb +10 -10
- data/lib/shopify-cli/commands/create.rb +5 -5
- data/lib/shopify-cli/commands/help.rb +6 -6
- data/lib/shopify-cli/commands/logout.rb +3 -3
- data/lib/shopify-cli/commands/system.rb +32 -32
- data/lib/shopify-cli/commands/version.rb +2 -2
- data/lib/shopify-cli/context.rb +51 -23
- data/lib/shopify-cli/core.rb +4 -4
- data/lib/shopify-cli/core/entry_point.rb +5 -5
- data/lib/shopify-cli/core/executor.rb +1 -1
- data/lib/shopify-cli/core/help_resolver.rb +2 -2
- data/lib/shopify-cli/core/monorail.rb +16 -16
- data/lib/shopify-cli/db.rb +2 -2
- data/lib/shopify-cli/feature.rb +1 -1
- data/lib/shopify-cli/form.rb +1 -1
- data/lib/shopify-cli/git.rb +17 -17
- data/lib/shopify-cli/helpers.rb +1 -1
- data/lib/shopify-cli/helpers/haikunator.rb +1 -1
- data/lib/shopify-cli/heroku.rb +28 -28
- data/lib/shopify-cli/http_request.rb +2 -2
- data/lib/shopify-cli/js_deps.rb +12 -12
- data/lib/shopify-cli/js_system.rb +7 -7
- data/lib/shopify-cli/lazy_delegator.rb +55 -0
- data/lib/shopify-cli/messages/messages.rb +7 -16
- data/lib/shopify-cli/method_object.rb +1 -1
- data/lib/shopify-cli/oauth.rb +27 -27
- data/lib/shopify-cli/oauth/servlet.rb +9 -9
- data/lib/shopify-cli/options.rb +3 -3
- data/lib/shopify-cli/packager.rb +25 -25
- data/lib/shopify-cli/partners_api.rb +16 -16
- data/lib/shopify-cli/partners_api/organizations.rb +10 -10
- data/lib/shopify-cli/process_supervision.rb +7 -7
- data/lib/shopify-cli/project.rb +16 -16
- data/lib/shopify-cli/project_type.rb +3 -3
- data/lib/shopify-cli/resolve_constant.rb +1 -1
- data/lib/shopify-cli/resources.rb +1 -1
- data/lib/shopify-cli/resources/env_file.rb +10 -10
- data/lib/shopify-cli/result.rb +11 -11
- data/lib/shopify-cli/shopifolk.rb +6 -9
- data/lib/shopify-cli/sub_command.rb +1 -1
- data/lib/shopify-cli/task.rb +3 -3
- data/lib/shopify-cli/tasks.rb +7 -7
- data/lib/shopify-cli/tasks/create_api_client.rb +5 -5
- data/lib/shopify-cli/tasks/ensure_dev_store.rb +12 -12
- data/lib/shopify-cli/tasks/ensure_env.rb +15 -15
- data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
- data/lib/shopify-cli/tasks/select_org_and_shop.rb +19 -19
- data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
- data/lib/shopify-cli/transform_data_structure.rb +86 -0
- data/lib/shopify-cli/tunnel.rb +30 -30
- data/lib/shopify-cli/version.rb +1 -1
- data/lib/shopify_cli.rb +56 -54
- data/shopify-cli.gemspec +6 -6
- data/vendor/deps/smart_properties/REVISION +1 -1
- data/vendor/deps/smart_properties/lib/smart_properties/property.rb +7 -1
- data/vendor/deps/smart_properties/lib/smart_properties/version.rb +1 -1
- data/vendor/gen/template/bin/update-deps +9 -9
- metadata +15 -11
- data/lib/project_types/extension/forms/register.rb +0 -47
- data/lib/project_types/script/commands/disable.rb +0 -25
- data/lib/project_types/script/commands/enable.rb +0 -78
- data/lib/project_types/script/graphql/shop_script_delete.graphql +0 -14
- data/lib/project_types/script/graphql/shop_script_update_or_create.graphql +0 -28
- data/lib/project_types/script/layers/application/disable_script.rb +0 -21
- data/lib/project_types/script/layers/application/enable_script.rb +0 -23
- data/lib/project_types/script/script_project.rb +0 -63
|
@@ -14,39 +14,32 @@ module Script
|
|
|
14
14
|
|
|
15
15
|
class << self
|
|
16
16
|
def create_from_json(ctx, metadata_json)
|
|
17
|
+
err_tag = nil
|
|
17
18
|
metadata_hash = JSON.parse(metadata_json)
|
|
18
|
-
schema_versions = metadata_hash["schemaVersions"]
|
|
19
|
-
if schema_versions.nil?
|
|
20
|
-
err_msg = "script.error.metadata_schema_versions_missing"
|
|
21
|
-
raise ::Script::Layers::Domain::Errors::MetadataValidationError, ctx.message(err_msg)
|
|
22
|
-
end
|
|
23
|
-
# Scripts may be attached to more than one EP in the future but not right now
|
|
24
|
-
unless schema_versions.count == 1
|
|
25
|
-
err_msg = "script.error.metadata_schema_versions_single_key"
|
|
26
|
-
raise ::Script::Layers::Domain::Errors::MetadataValidationError, ctx.message(err_msg)
|
|
27
|
-
end
|
|
28
19
|
|
|
29
|
-
|
|
20
|
+
use_msgpack = !!metadata_hash.dig("flags", "use_msgpack")
|
|
21
|
+
schema_versions = metadata_hash["schemaVersions"] || {}
|
|
22
|
+
|
|
23
|
+
version = schema_versions.values.first || {}
|
|
30
24
|
schema_major_version = version["major"]
|
|
31
25
|
schema_minor_version = version["minor"]
|
|
32
|
-
if schema_major_version.nil?
|
|
33
|
-
err_msg = "script.error.metadata_schema_versions_missing_major"
|
|
34
|
-
raise ::Script::Layers::Domain::Errors::MetadataValidationError, ctx.message(err_msg)
|
|
35
|
-
end
|
|
36
26
|
|
|
37
|
-
if
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
if schema_versions.empty?
|
|
28
|
+
err_tag = "script.error.metadata_schema_versions_missing"
|
|
29
|
+
elsif schema_versions.count != 1
|
|
30
|
+
# Scripts may be attached to more than one EP in the future but not right now
|
|
31
|
+
err_tag = "script.error.metadata_schema_versions_single_key"
|
|
32
|
+
elsif schema_major_version.nil?
|
|
33
|
+
err_tag = "script.error.metadata_schema_versions_missing_major"
|
|
34
|
+
elsif schema_minor_version.nil?
|
|
35
|
+
err_tag = "script.error.metadata_schema_versions_missing_minor"
|
|
40
36
|
end
|
|
41
37
|
|
|
42
|
-
use_msgpack = !!metadata_hash.dig("flags", "use_msgpack")
|
|
43
|
-
|
|
44
38
|
Metadata.new(schema_major_version, schema_minor_version, use_msgpack)
|
|
45
|
-
rescue ::
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
raise ::Script::Layers::Domain::Errors::MetadataValidationError, ctx.message(err_msg)
|
|
39
|
+
rescue JSON::ParserError
|
|
40
|
+
err_tag = "script.error.metadata_validation_cause"
|
|
41
|
+
ensure
|
|
42
|
+
raise Errors::MetadataValidationError, ctx.message(err_tag) if err_tag
|
|
50
43
|
end
|
|
51
44
|
end
|
|
52
45
|
end
|
|
@@ -5,41 +5,45 @@ module Script
|
|
|
5
5
|
module Domain
|
|
6
6
|
class PushPackage
|
|
7
7
|
attr_reader :id,
|
|
8
|
+
:uuid,
|
|
8
9
|
:extension_point_type,
|
|
9
10
|
:script_name,
|
|
10
|
-
:
|
|
11
|
+
:config_ui,
|
|
11
12
|
:script_content,
|
|
12
13
|
:compiled_type,
|
|
13
14
|
:metadata
|
|
14
15
|
|
|
15
16
|
def initialize(
|
|
16
17
|
id:,
|
|
18
|
+
uuid:,
|
|
17
19
|
extension_point_type:,
|
|
18
20
|
script_name:,
|
|
19
|
-
description:,
|
|
20
21
|
script_content:,
|
|
21
22
|
compiled_type:,
|
|
22
|
-
metadata
|
|
23
|
+
metadata:,
|
|
24
|
+
config_ui:
|
|
23
25
|
)
|
|
24
26
|
@id = id
|
|
27
|
+
@uuid = uuid
|
|
25
28
|
@extension_point_type = extension_point_type
|
|
26
29
|
@script_name = script_name
|
|
27
|
-
@description = description
|
|
28
30
|
@script_content = script_content
|
|
29
31
|
@compiled_type = compiled_type
|
|
30
32
|
@metadata = metadata
|
|
33
|
+
@config_ui = config_ui
|
|
31
34
|
end
|
|
32
35
|
|
|
33
36
|
def push(script_service, api_key, force)
|
|
34
37
|
script_service.push(
|
|
38
|
+
uuid: @uuid,
|
|
35
39
|
extension_point_type: @extension_point_type,
|
|
36
40
|
script_name: @script_name,
|
|
37
|
-
description: @description,
|
|
38
41
|
script_content: @script_content,
|
|
39
42
|
compiled_type: @compiled_type,
|
|
40
43
|
api_key: api_key,
|
|
41
44
|
force: force,
|
|
42
45
|
metadata: @metadata,
|
|
46
|
+
config_ui: @config_ui,
|
|
43
47
|
)
|
|
44
48
|
end
|
|
45
49
|
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Script
|
|
4
|
+
module Layers
|
|
5
|
+
module Domain
|
|
6
|
+
class ScriptProject
|
|
7
|
+
include SmartProperties
|
|
8
|
+
|
|
9
|
+
property! :id, accepts: String
|
|
10
|
+
property :env, accepts: ShopifyCli::Resources::EnvFile
|
|
11
|
+
|
|
12
|
+
property! :extension_point_type, accepts: String
|
|
13
|
+
property! :script_name, accepts: String
|
|
14
|
+
property! :language, accepts: String
|
|
15
|
+
|
|
16
|
+
property :config_ui, accepts: ConfigUi
|
|
17
|
+
|
|
18
|
+
def initialize(*)
|
|
19
|
+
super
|
|
20
|
+
|
|
21
|
+
ShopifyCli::Core::Monorail.metadata = {
|
|
22
|
+
"script_name" => script_name,
|
|
23
|
+
"extension_point_type" => extension_point_type,
|
|
24
|
+
"language" => language,
|
|
25
|
+
}
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def api_key
|
|
29
|
+
env&.api_key
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def uuid
|
|
33
|
+
env&.extra&.[]("UUID")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -11,7 +11,10 @@ module Script
|
|
|
11
11
|
property! :path_to_project, accepts: String
|
|
12
12
|
|
|
13
13
|
BOOTSTRAP = "npx --no-install shopify-scripts-toolchain-as bootstrap --from %{extension_point} --dest %{base}"
|
|
14
|
+
BUILD = "shopify-scripts-toolchain-as build --src src/shopify_main.ts " \
|
|
15
|
+
"--binary build/%{script_name}.wasm --metadata build/metadata.json"
|
|
14
16
|
MIN_NODE_VERSION = "14.5.0"
|
|
17
|
+
ASC_ARGS = "-- --lib node_modules --optimize --use Date="
|
|
15
18
|
|
|
16
19
|
def setup_dependencies
|
|
17
20
|
write_npmrc
|
|
@@ -19,8 +22,7 @@ module Script
|
|
|
19
22
|
end
|
|
20
23
|
|
|
21
24
|
def bootstrap
|
|
22
|
-
|
|
23
|
-
out, status = ctx.capture2e(format(BOOTSTRAP, extension_point: type, base: path_to_project))
|
|
25
|
+
out, status = ctx.capture2e(bootstap_command)
|
|
24
26
|
raise Domain::Errors::ServiceFailureError, out unless status.success?
|
|
25
27
|
end
|
|
26
28
|
|
|
@@ -28,17 +30,21 @@ module Script
|
|
|
28
30
|
|
|
29
31
|
def write_npmrc
|
|
30
32
|
ctx.system(
|
|
31
|
-
|
|
33
|
+
"npm", "--userconfig", "./.npmrc", "config", "set", "@shopify:registry", "https://registry.npmjs.com"
|
|
32
34
|
)
|
|
33
35
|
ctx.system(
|
|
34
|
-
|
|
36
|
+
"npm", "--userconfig", "./.npmrc", "config", "set", "engine-strict", "true"
|
|
35
37
|
)
|
|
36
38
|
end
|
|
37
39
|
|
|
38
40
|
def extension_point_version
|
|
41
|
+
if extension_point.sdks.assemblyscript.versioned?
|
|
42
|
+
return extension_point.sdks.assemblyscript.version
|
|
43
|
+
end
|
|
44
|
+
|
|
39
45
|
out, status = ctx.capture2e("npm show #{extension_point.sdks.assemblyscript.package} version --json")
|
|
40
46
|
raise Domain::Errors::ServiceFailureError, out unless status.success?
|
|
41
|
-
JSON.parse(out)
|
|
47
|
+
"^#{JSON.parse(out)}"
|
|
42
48
|
end
|
|
43
49
|
|
|
44
50
|
def write_package_json
|
|
@@ -49,14 +55,13 @@ module Script
|
|
|
49
55
|
"devDependencies": {
|
|
50
56
|
"@shopify/scripts-sdk-as": "#{extension_point.sdks.assemblyscript.sdk_version}",
|
|
51
57
|
"@shopify/scripts-toolchain-as": "#{extension_point.sdks.assemblyscript.toolchain_version}",
|
|
52
|
-
"#{extension_point.sdks.assemblyscript.package}": "
|
|
53
|
-
"@as-pect/cli": "
|
|
54
|
-
"
|
|
55
|
-
"assemblyscript": "^0.16.1"
|
|
58
|
+
"#{extension_point.sdks.assemblyscript.package}": "#{extension_point_version}",
|
|
59
|
+
"@as-pect/cli": "^6.0.0",
|
|
60
|
+
"assemblyscript": "^0.18.13"
|
|
56
61
|
},
|
|
57
62
|
"scripts": {
|
|
58
63
|
"test": "asp --summary --verbose",
|
|
59
|
-
"build": "
|
|
64
|
+
"build": "#{build_command}"
|
|
60
65
|
},
|
|
61
66
|
"engines": {
|
|
62
67
|
"node": ">=#{MIN_NODE_VERSION}"
|
|
@@ -65,6 +70,30 @@ module Script
|
|
|
65
70
|
HERE
|
|
66
71
|
ctx.write("package.json", package_json)
|
|
67
72
|
end
|
|
73
|
+
|
|
74
|
+
def bootstap_command
|
|
75
|
+
type = extension_point.dasherize_type
|
|
76
|
+
base_command = format(BOOTSTRAP, extension_point: type, base: path_to_project)
|
|
77
|
+
domain = extension_point.domain
|
|
78
|
+
|
|
79
|
+
if domain.nil?
|
|
80
|
+
base_command
|
|
81
|
+
else
|
|
82
|
+
"#{base_command} --domain #{domain}"
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def build_command
|
|
87
|
+
type = extension_point.dasherize_type
|
|
88
|
+
base_command = format(BUILD, script_name: script_name)
|
|
89
|
+
domain = extension_point.domain
|
|
90
|
+
|
|
91
|
+
if domain.nil?
|
|
92
|
+
"#{base_command} #{ASC_ARGS}"
|
|
93
|
+
else
|
|
94
|
+
"#{base_command} --domain #{domain} --ep #{type} #{ASC_ARGS}"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
68
97
|
end
|
|
69
98
|
end
|
|
70
99
|
end
|
|
@@ -33,14 +33,12 @@ module Script
|
|
|
33
33
|
|
|
34
34
|
def dependencies_installed?
|
|
35
35
|
# Assuming if node_modules folder exist at root of script folder, all deps are installed
|
|
36
|
-
|
|
37
|
-
check_if_ep_dependencies_up_to_date!
|
|
38
|
-
true
|
|
36
|
+
ctx.dir_exist?("node_modules")
|
|
39
37
|
end
|
|
40
38
|
|
|
41
39
|
def metadata
|
|
42
40
|
unless @ctx.file_exist?(METADATA_FILE)
|
|
43
|
-
msg = @ctx.message(
|
|
41
|
+
msg = @ctx.message("script.error.metadata_not_found_cause", METADATA_FILE)
|
|
44
42
|
raise Domain::Errors::MetadataNotFoundError, msg
|
|
45
43
|
end
|
|
46
44
|
|
|
@@ -54,7 +52,7 @@ module Script
|
|
|
54
52
|
output, status = @ctx.capture2e("node", "--version")
|
|
55
53
|
raise Errors::DependencyInstallError, output unless status.success?
|
|
56
54
|
|
|
57
|
-
require
|
|
55
|
+
require "semantic/semantic"
|
|
58
56
|
version = ::Semantic::Version.new(output[1..-1])
|
|
59
57
|
unless version >= ::Semantic::Version.new(AssemblyScriptProjectCreator::MIN_NODE_VERSION)
|
|
60
58
|
raise Errors::DependencyInstallError,
|
|
@@ -71,8 +69,8 @@ module Script
|
|
|
71
69
|
end
|
|
72
70
|
|
|
73
71
|
def check_compilation_dependencies!
|
|
74
|
-
pkg = JSON.parse(File.read(
|
|
75
|
-
build_script = pkg.dig(
|
|
72
|
+
pkg = JSON.parse(File.read("package.json"))
|
|
73
|
+
build_script = pkg.dig("scripts", "build")
|
|
76
74
|
|
|
77
75
|
raise Errors::BuildScriptNotFoundError,
|
|
78
76
|
"Build script not found" if build_script.nil?
|
|
@@ -83,47 +81,14 @@ module Script
|
|
|
83
81
|
end
|
|
84
82
|
|
|
85
83
|
def bytecode
|
|
86
|
-
|
|
87
|
-
raise Errors::WebAssemblyBinaryNotFoundError unless
|
|
84
|
+
filename = format(BYTECODE_FILE, name: script_name)
|
|
85
|
+
raise Errors::WebAssemblyBinaryNotFoundError unless ctx.file_exist?(filename)
|
|
88
86
|
|
|
89
|
-
contents =
|
|
90
|
-
|
|
87
|
+
contents = ctx.binread(filename)
|
|
88
|
+
ctx.rm(filename)
|
|
91
89
|
|
|
92
90
|
contents
|
|
93
91
|
end
|
|
94
|
-
|
|
95
|
-
def check_if_ep_dependencies_up_to_date!
|
|
96
|
-
return true if ENV['SHOPIFY_CLI_SCRIPTS_IGNORE_OUTDATED']
|
|
97
|
-
|
|
98
|
-
# ignore exit code since it will not be 0 unless every package is up to date which they probably won't be
|
|
99
|
-
out, _ = ctx.capture2e("npm", "outdated", "--json", "--depth", "0")
|
|
100
|
-
parsed_outdated_check = JSON.parse(out)
|
|
101
|
-
outdated_ep_packages = parsed_outdated_check
|
|
102
|
-
.select { |package_name, _| package_name.start_with?('@shopify/extension-point-as-') }
|
|
103
|
-
.select { |_, version_info| !package_is_up_to_date?(version_info) }
|
|
104
|
-
.keys
|
|
105
|
-
raise Errors::PackagesOutdatedError.new(outdated_ep_packages),
|
|
106
|
-
"NPM packages out of date: #{outdated_ep_packages.join(', ')}" unless outdated_ep_packages.empty?
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def package_is_up_to_date?(version_info)
|
|
110
|
-
require 'semantic/semantic'
|
|
111
|
-
current_version = version_info['current']
|
|
112
|
-
latest_version = version_info['latest']
|
|
113
|
-
|
|
114
|
-
# making an assumption that the script developer knows what they're doing if they're not referencing a
|
|
115
|
-
# semver version
|
|
116
|
-
begin
|
|
117
|
-
current_version = ::Semantic::Version.new(current_version)
|
|
118
|
-
latest_version = ::Semantic::Version.new(latest_version)
|
|
119
|
-
rescue ArgumentError
|
|
120
|
-
return true
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
return false if current_version.major < latest_version.major
|
|
124
|
-
return false if latest_version.major == 0 && current_version.minor < latest_version.minor
|
|
125
|
-
true
|
|
126
|
-
end
|
|
127
92
|
end
|
|
128
93
|
end
|
|
129
94
|
end
|
|
@@ -5,12 +5,59 @@ module Script
|
|
|
5
5
|
module Infrastructure
|
|
6
6
|
module Errors
|
|
7
7
|
class AppNotInstalledError < ScriptProjectError; end
|
|
8
|
-
class AppScriptNotPushedError < ScriptProjectError; end
|
|
9
|
-
class AppScriptUndefinedError < ScriptProjectError; end
|
|
10
8
|
class BuildError < ScriptProjectError; end
|
|
9
|
+
class ConfigUiSyntaxError < ScriptProjectError; end
|
|
10
|
+
|
|
11
|
+
class ConfigUiMissingKeysError < ScriptProjectError
|
|
12
|
+
attr_reader :filename, :missing_keys
|
|
13
|
+
def initialize(filename, missing_keys)
|
|
14
|
+
super()
|
|
15
|
+
@filename = filename
|
|
16
|
+
@missing_keys = missing_keys
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class ConfigUiInvalidInputModeError < ScriptProjectError
|
|
21
|
+
attr_reader :filename, :valid_input_modes
|
|
22
|
+
def initialize(filename, valid_input_modes)
|
|
23
|
+
super()
|
|
24
|
+
@filename = filename
|
|
25
|
+
@valid_input_modes = valid_input_modes
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class ConfigUiFieldsMissingKeysError < ScriptProjectError
|
|
30
|
+
attr_reader :filename, :missing_keys
|
|
31
|
+
def initialize(filename, missing_keys)
|
|
32
|
+
super()
|
|
33
|
+
@filename = filename
|
|
34
|
+
@missing_keys = missing_keys
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
class ConfigUiFieldsInvalidTypeError < ScriptProjectError
|
|
39
|
+
attr_reader :filename, :valid_types
|
|
40
|
+
def initialize(filename, valid_types)
|
|
41
|
+
super()
|
|
42
|
+
@filename = filename
|
|
43
|
+
@valid_types = valid_types
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
11
47
|
class DependencyInstallError < ScriptProjectError; end
|
|
48
|
+
class DeprecatedEPError < ScriptProjectError; end
|
|
12
49
|
class EmptyResponseError < ScriptProjectError; end
|
|
13
50
|
class ForbiddenError < ScriptProjectError; end
|
|
51
|
+
class InvalidContextError < ScriptProjectError; end
|
|
52
|
+
|
|
53
|
+
class InvalidLanguageError < ScriptProjectError
|
|
54
|
+
attr_reader :language, :extension_point_type
|
|
55
|
+
def initialize(language, extension_point_type)
|
|
56
|
+
super()
|
|
57
|
+
@language = language
|
|
58
|
+
@extension_point_type = extension_point_type
|
|
59
|
+
end
|
|
60
|
+
end
|
|
14
61
|
|
|
15
62
|
class GraphqlError < ScriptProjectError
|
|
16
63
|
attr_reader :errors
|
|
@@ -30,25 +77,9 @@ module Script
|
|
|
30
77
|
end
|
|
31
78
|
end
|
|
32
79
|
|
|
33
|
-
class
|
|
34
|
-
def initialize(query_name, errors)
|
|
35
|
-
super("Failed performing #{query_name}. Errors: #{errors}.")
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
80
|
+
class ScriptProjectAlreadyExistsError < ScriptProjectError; end
|
|
39
81
|
class ShopAuthenticationError < ScriptProjectError; end
|
|
40
|
-
class ShopScriptConflictError < ScriptProjectError; end
|
|
41
|
-
class ShopScriptUndefinedError < ScriptProjectError; end
|
|
42
82
|
class TaskRunnerNotFoundError < ScriptProjectError; end
|
|
43
|
-
|
|
44
|
-
class PackagesOutdatedError < ScriptProjectError
|
|
45
|
-
attr_reader :outdated_packages
|
|
46
|
-
def initialize(outdated_packages)
|
|
47
|
-
super("EP packages are outdated and need to be updated: #{outdated_packages.join(', ')}")
|
|
48
|
-
@outdated_packages = outdated_packages
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
83
|
class BuildScriptNotFoundError < ScriptProjectError; end
|
|
53
84
|
class InvalidBuildScriptError < ScriptProjectError; end
|
|
54
85
|
|
|
@@ -27,8 +27,8 @@ module Script
|
|
|
27
27
|
|
|
28
28
|
def extension_point_configs
|
|
29
29
|
@extension_points ||= begin
|
|
30
|
-
require
|
|
31
|
-
YAML.load_file(Project.project_filepath(
|
|
30
|
+
require "yaml"
|
|
31
|
+
YAML.load_file(Project.project_filepath("config/extension_points.yml"))
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -7,42 +7,37 @@ module Script
|
|
|
7
7
|
include SmartProperties
|
|
8
8
|
property! :ctx, accepts: ShopifyCli::Context
|
|
9
9
|
|
|
10
|
-
def create_push_package(
|
|
11
|
-
|
|
12
|
-
script_name:,
|
|
13
|
-
description:,
|
|
14
|
-
script_content:,
|
|
15
|
-
compiled_type:,
|
|
16
|
-
metadata:
|
|
17
|
-
)
|
|
18
|
-
build_file_path = file_path(script_name, compiled_type)
|
|
10
|
+
def create_push_package(script_project:, script_content:, compiled_type:, metadata:)
|
|
11
|
+
build_file_path = file_path(script_project.id, script_project.script_name, compiled_type)
|
|
19
12
|
write_to_path(build_file_path, script_content)
|
|
20
13
|
|
|
21
14
|
Domain::PushPackage.new(
|
|
22
15
|
id: build_file_path,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
16
|
+
uuid: script_project.uuid,
|
|
17
|
+
extension_point_type: script_project.extension_point_type,
|
|
18
|
+
script_name: script_project.script_name,
|
|
26
19
|
script_content: script_content,
|
|
27
20
|
compiled_type: compiled_type,
|
|
28
21
|
metadata: metadata,
|
|
22
|
+
config_ui: script_project.config_ui,
|
|
29
23
|
)
|
|
30
24
|
end
|
|
31
25
|
|
|
32
|
-
def get_push_package(
|
|
33
|
-
build_file_path = file_path(script_name, compiled_type)
|
|
26
|
+
def get_push_package(script_project:, compiled_type:, metadata:)
|
|
27
|
+
build_file_path = file_path(script_project.id, script_project.script_name, compiled_type)
|
|
34
28
|
raise Domain::PushPackageNotFoundError unless ctx.file_exist?(build_file_path)
|
|
35
29
|
|
|
36
|
-
script_content =
|
|
30
|
+
script_content = ctx.binread(build_file_path)
|
|
37
31
|
|
|
38
32
|
Domain::PushPackage.new(
|
|
39
33
|
id: build_file_path,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
34
|
+
uuid: script_project.uuid,
|
|
35
|
+
extension_point_type: script_project.extension_point_type,
|
|
36
|
+
script_name: script_project.script_name,
|
|
43
37
|
script_content: script_content,
|
|
44
38
|
compiled_type: compiled_type,
|
|
45
39
|
metadata: metadata,
|
|
40
|
+
config_ui: script_project.config_ui,
|
|
46
41
|
)
|
|
47
42
|
end
|
|
48
43
|
|
|
@@ -50,11 +45,11 @@ module Script
|
|
|
50
45
|
|
|
51
46
|
def write_to_path(path, content)
|
|
52
47
|
ctx.mkdir_p(File.dirname(path))
|
|
53
|
-
ctx.
|
|
48
|
+
ctx.binwrite(path, content)
|
|
54
49
|
end
|
|
55
50
|
|
|
56
|
-
def file_path(script_name, compiled_type)
|
|
57
|
-
"#{
|
|
51
|
+
def file_path(path_to_script, script_name, compiled_type)
|
|
52
|
+
"#{path_to_script}/build/#{script_name}.#{compiled_type}"
|
|
58
53
|
end
|
|
59
54
|
end
|
|
60
55
|
end
|