shopify-cli 1.7.1 → 1.11.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.
- checksums.yaml +4 -4
- data/.github/PULL_REQUEST_TEMPLATE.md +1 -0
- data/.github/workflows/build.yml +28 -0
- data/.rubocop_todo.yml +15 -2
- data/CHANGELOG.md +25 -0
- data/Gemfile.lock +15 -15
- data/README.md +2 -1
- data/dev.yml +3 -0
- data/lib/docgen/markdown.rb +1 -1
- data/lib/graphql/extension_create.graphql +17 -2
- data/lib/graphql/fetch_specifications.graphql +14 -0
- data/lib/project_types/extension/cli.rb +8 -10
- data/lib/project_types/extension/commands/create.rb +2 -2
- data/lib/project_types/extension/commands/extension_command.rb +10 -6
- data/lib/project_types/extension/commands/push.rb +2 -2
- data/lib/project_types/extension/commands/register.rb +6 -5
- data/lib/project_types/extension/commands/serve.rb +64 -22
- data/lib/project_types/extension/commands/tunnel.rb +3 -1
- data/lib/project_types/extension/extension_project.rb +20 -4
- data/lib/project_types/extension/extension_project_keys.rb +2 -1
- data/lib/project_types/extension/features/argo.rb +19 -44
- data/lib/project_types/extension/features/argo_runtime.rb +63 -0
- data/lib/project_types/extension/features/argo_serve.rb +79 -0
- data/lib/project_types/extension/features/argo_serve_options.rb +40 -0
- data/lib/project_types/extension/features/argo_setup.rb +1 -1
- data/lib/project_types/extension/forms/questions/ask_type.rb +16 -5
- data/lib/project_types/extension/messages/message_loading.rb +3 -1
- data/lib/project_types/extension/messages/messages.rb +9 -6
- data/lib/project_types/extension/models/npm_package.rb +14 -0
- data/lib/project_types/extension/models/registration.rb +1 -0
- data/lib/project_types/extension/models/specification.rb +7 -2
- data/lib/project_types/extension/models/specification_handlers/checkout_argo_extension.rb +18 -0
- data/lib/project_types/extension/models/specification_handlers/default.rb +35 -2
- data/lib/project_types/extension/models/specifications.rb +12 -1
- data/lib/project_types/extension/models/version.rb +1 -1
- data/lib/project_types/extension/tasks/choose_next_available_port.rb +36 -0
- data/lib/project_types/extension/tasks/configure_features.rb +5 -1
- data/lib/project_types/extension/tasks/converters/registration_converter.rb +2 -0
- data/lib/project_types/extension/tasks/fetch_specifications.rb +8 -28
- data/lib/project_types/extension/tasks/find_npm_packages.rb +106 -0
- data/lib/project_types/node/commands/generate.rb +0 -22
- data/lib/project_types/node/forms/create.rb +10 -1
- data/lib/project_types/node/messages/messages.rb +5 -4
- data/lib/project_types/rails/forms/create.rb +11 -1
- data/lib/project_types/rails/messages/messages.rb +5 -4
- data/lib/project_types/script/cli.rb +7 -8
- data/lib/project_types/script/commands/create.rb +0 -7
- data/lib/project_types/script/commands/push.rb +3 -3
- data/lib/project_types/script/config/extension_points.yml +17 -0
- data/lib/project_types/script/errors.rb +0 -19
- data/lib/project_types/script/forms/create.rb +3 -14
- data/lib/project_types/script/graphql/app_script_update_or_create.graphql +5 -5
- data/lib/project_types/script/graphql/get_app_scripts.graphql +6 -0
- data/lib/project_types/script/graphql/script_service_proxy.graphql +1 -2
- data/lib/project_types/script/layers/application/build_script.rb +1 -2
- data/lib/project_types/script/layers/application/create_script.rb +32 -49
- data/lib/project_types/script/layers/application/extension_points.rb +3 -2
- data/lib/project_types/script/layers/application/push_script.rb +5 -5
- data/lib/project_types/script/layers/domain/errors.rb +0 -2
- 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 +4 -4
- data/lib/project_types/script/layers/domain/script_project.rb +54 -0
- data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +39 -14
- data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +14 -43
- data/lib/project_types/script/layers/infrastructure/command_runner.rb +19 -0
- data/lib/project_types/script/layers/infrastructure/errors.rb +40 -20
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +12 -13
- data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +9 -10
- data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +6 -7
- data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +172 -0
- data/lib/project_types/script/layers/infrastructure/script_service.rb +25 -76
- data/lib/project_types/script/messages/messages.rb +20 -53
- data/lib/project_types/script/tasks/ensure_env.rb +85 -0
- data/lib/project_types/script/ui/error_handler.rb +32 -41
- data/lib/shopify-cli/context.rb +28 -0
- data/lib/shopify-cli/js_system.rb +2 -2
- data/lib/shopify-cli/messages/messages.rb +50 -45
- data/lib/shopify-cli/method_object.rb +4 -4
- data/lib/shopify-cli/oauth.rb +9 -3
- data/lib/shopify-cli/packager.rb +1 -1
- data/lib/shopify-cli/partners_api/organizations.rb +3 -3
- data/lib/shopify-cli/resolve_constant.rb +1 -1
- data/lib/shopify-cli/resources/env_file.rb +1 -1
- data/lib/shopify-cli/tasks/ensure_dev_store.rb +1 -1
- data/lib/shopify-cli/tasks/select_org_and_shop.rb +6 -4
- data/lib/shopify-cli/transform_data_structure.rb +2 -2
- data/lib/shopify-cli/tunnel.rb +22 -1
- data/lib/shopify-cli/version.rb +1 -1
- data/lib/shopify_cli.rb +0 -1
- 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
- metadata +17 -12
- data/.travis.yml +0 -14
- data/lib/project_types/script/commands/disable.rb +0 -25
- data/lib/project_types/script/commands/enable.rb +0 -80
- 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/layers/infrastructure/config_ui_repository.rb +0 -46
- data/lib/project_types/script/script_project.rb +0 -64
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e1ca8221a25313b8cd908a02e4c5c68dc9f74ed38e7472804346419e45d8d9d8
|
|
4
|
+
data.tar.gz: b0658aae7cb7ca368b78aa80f3fab364867bc1d6ae36515c07f3692bb87730cb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 54fde8fed1098f483c817cfb0dd8d9ab291556da026dabcc7d0e0dc934fb9c2e97dd2865d72257ca75a2c5d1560759e4ece27c8acc76a8a56f299e8f004594f0
|
|
7
|
+
data.tar.gz: b193f5f389c2a03875e98d4636aa3cd16c7bfe212d798defed234233b0aad410382e3f56d83b58f63189b6f8256be762518c4439bfe732961c682db8fd81cb25
|
|
@@ -29,3 +29,4 @@ Fixes #0000 <!-- link to issue if one exists -->
|
|
|
29
29
|
-->
|
|
30
30
|
- [ ] I've added a CHANGELOG entry for this PR (if the change is public-facing)
|
|
31
31
|
- [ ] I've considered possible cross-platform impacts (Mac, Linux, Windows).
|
|
32
|
+
- [ ] I've left the version number as is (we'll handle incrmenting this when releasing).
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
build:
|
|
7
|
+
name: Ruby ${{ matrix.version }}
|
|
8
|
+
runs-on: macos-latest
|
|
9
|
+
strategy:
|
|
10
|
+
matrix:
|
|
11
|
+
version:
|
|
12
|
+
- 3.0.0
|
|
13
|
+
- 2.6.6
|
|
14
|
+
- 2.7.1
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v2
|
|
17
|
+
|
|
18
|
+
- name: Set up Ruby ${{ matrix.version }}
|
|
19
|
+
uses: ruby/setup-ruby@v1
|
|
20
|
+
with:
|
|
21
|
+
ruby-version: ${{ matrix.version }}
|
|
22
|
+
bundler-cache: true
|
|
23
|
+
|
|
24
|
+
- name: Install Dependencies
|
|
25
|
+
run: bundle install
|
|
26
|
+
|
|
27
|
+
- name: Run Tests
|
|
28
|
+
run: bundle exec rake
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2021-04-08 18:25:36 UTC using RuboCop version 1.12.1.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
|
8
8
|
|
|
9
|
-
# Offense count:
|
|
9
|
+
# Offense count: 35
|
|
10
10
|
Minitest/MultipleAssertions:
|
|
11
11
|
Max: 9
|
|
12
|
+
|
|
13
|
+
# Offense count: 1
|
|
14
|
+
# Cop supports --auto-correct.
|
|
15
|
+
Style/PerlBackrefs:
|
|
16
|
+
Exclude:
|
|
17
|
+
- 'lib/docgen/markdown.rb'
|
|
18
|
+
|
|
19
|
+
# Offense count: 2
|
|
20
|
+
# Cop supports --auto-correct.
|
|
21
|
+
Style/RedundantBegin:
|
|
22
|
+
Exclude:
|
|
23
|
+
- 'lib/shopify-cli/shopifolk.rb'
|
|
24
|
+
- 'test/shopify-cli/tunnel_test.rb'
|
data/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,37 @@
|
|
|
1
1
|
Unreleased
|
|
2
2
|
------
|
|
3
3
|
|
|
4
|
+
Version 1.11.0
|
|
5
|
+
--------------
|
|
6
|
+
* [#1221](https://github.com/Shopify/shopify-app-cli/pull/1221): Prioritizes returning an HTTPS URL over HTTP from `shopify tunnel status`.
|
|
7
|
+
* [#1223](https://github.com/Shopify/shopify-app-cli/pull/1233): Running `shopify serve` in an extension project now automatically runs `shopify tunnel`.
|
|
8
|
+
* [#1225](https://github.com/Shopify/shopify-app-cli/pull/1225): Improved handling of "account not found" scenario, plus improvements to related tests and UX messaging
|
|
9
|
+
* [#1229](https://github.com/Shopify/shopify-app-cli/pull/1229): Allows Checkout Extensions to specify configuration attributes in their extension.config.yml file.
|
|
10
|
+
* [#1238](https://github.com/Shopify/shopify-app-cli/pull/1238): Auto Tunnel Support for Checkout Extension
|
|
11
|
+
|
|
12
|
+
Version 1.10.0
|
|
13
|
+
--------------
|
|
14
|
+
* Updating internal features in development
|
|
15
|
+
|
|
16
|
+
Version 1.9.1
|
|
17
|
+
-------------
|
|
18
|
+
* [1201](https://github.com/Shopify/shopify-app-cli/pull/1201) Determine Argo Renderer Dynamically. This fixes `shopify serve` and `shopify push` for extensions.
|
|
19
|
+
|
|
20
|
+
Version 1.9.0
|
|
21
|
+
-------------
|
|
22
|
+
* [1181](https://github.com/Shopify/shopify-app-cli/pull/1181): Remove the subcommand references of the `generate` command for node apps (fixes [1176](https://github.com/Shopify/shopify-app-cli/issues/1176))
|
|
23
|
+
|
|
24
|
+
Version 1.8.0
|
|
25
|
+
-------------
|
|
26
|
+
* [1119](https://github.com/Shopify/shopify-app-cli/pull/1119): Enable guest serialization for scripts
|
|
27
|
+
|
|
4
28
|
Version 1.7.1
|
|
5
29
|
------
|
|
6
30
|
* Updating internal features in development
|
|
7
31
|
|
|
8
32
|
Version 1.7.0
|
|
9
33
|
-----
|
|
34
|
+
* [#1109](https://github.com/Shopify/shopify-app-cli/pull/1109): Abort app generation if name contains disallowed text.
|
|
10
35
|
* [#1075](https://github.com/Shopify/shopify-app-cli/pull/1075): Add support for kebab-case flags
|
|
11
36
|
|
|
12
37
|
Version 1.6.0
|
data/Gemfile.lock
CHANGED
|
@@ -4,7 +4,7 @@ GEM
|
|
|
4
4
|
addressable (2.7.0)
|
|
5
5
|
public_suffix (>= 2.0.2, < 5.0)
|
|
6
6
|
ansi (1.5.0)
|
|
7
|
-
ast (2.4.
|
|
7
|
+
ast (2.4.2)
|
|
8
8
|
builder (3.2.4)
|
|
9
9
|
byebug (11.1.3)
|
|
10
10
|
coderay (1.1.3)
|
|
@@ -22,7 +22,7 @@ GEM
|
|
|
22
22
|
ruby-progressbar
|
|
23
23
|
mocha (1.11.2)
|
|
24
24
|
parallel (1.20.1)
|
|
25
|
-
parser (
|
|
25
|
+
parser (3.0.1.0)
|
|
26
26
|
ast (~> 2.4.1)
|
|
27
27
|
pry (0.13.1)
|
|
28
28
|
coderay (~> 1.1)
|
|
@@ -33,26 +33,26 @@ GEM
|
|
|
33
33
|
public_suffix (4.0.6)
|
|
34
34
|
rainbow (3.0.0)
|
|
35
35
|
rake (13.0.1)
|
|
36
|
-
regexp_parser (1.
|
|
37
|
-
rexml (3.2.
|
|
38
|
-
rubocop (1.
|
|
36
|
+
regexp_parser (2.1.1)
|
|
37
|
+
rexml (3.2.5)
|
|
38
|
+
rubocop (1.12.1)
|
|
39
39
|
parallel (~> 1.10)
|
|
40
|
-
parser (>=
|
|
40
|
+
parser (>= 3.0.0.0)
|
|
41
41
|
rainbow (>= 2.2.2, < 4.0)
|
|
42
|
-
regexp_parser (>= 1.8)
|
|
42
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
43
43
|
rexml
|
|
44
|
-
rubocop-ast (>= 1.
|
|
44
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
|
45
45
|
ruby-progressbar (~> 1.7)
|
|
46
|
-
unicode-display_width (>= 1.4.0, <
|
|
47
|
-
rubocop-ast (1.
|
|
46
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
|
47
|
+
rubocop-ast (1.4.1)
|
|
48
48
|
parser (>= 2.7.1.5)
|
|
49
49
|
rubocop-minitest (0.10.1)
|
|
50
50
|
rubocop (>= 0.87)
|
|
51
|
-
rubocop-shopify (
|
|
52
|
-
rubocop (~> 1.
|
|
53
|
-
ruby-progressbar (1.
|
|
51
|
+
rubocop-shopify (2.0.1)
|
|
52
|
+
rubocop (~> 1.11)
|
|
53
|
+
ruby-progressbar (1.11.0)
|
|
54
54
|
timecop (0.9.2)
|
|
55
|
-
unicode-display_width (
|
|
55
|
+
unicode-display_width (2.0.0)
|
|
56
56
|
webmock (3.9.3)
|
|
57
57
|
addressable (>= 2.3.6)
|
|
58
58
|
crack (>= 0.3.2)
|
|
@@ -76,4 +76,4 @@ DEPENDENCIES
|
|
|
76
76
|
webmock
|
|
77
77
|
|
|
78
78
|
BUNDLED WITH
|
|
79
|
-
1.
|
|
79
|
+
2.1.4
|
data/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# [Shopify App CLI](https://shopify.dev/tools/cli)
|
|
2
2
|
|
|
3
|
-
[](LICENSE.md)
|
|
3
|
+
[](LICENSE.md)
|
|
4
|
+
[](https://github.com/Shopify/shopify-app-cli/actions)
|
|
4
5
|
|
|
5
6
|
Shopify App CLI helps you build Shopify apps faster. It quickly generates Node.js and Ruby on Rails apps and automates many common development tasks.
|
|
6
7
|
|
data/dev.yml
CHANGED
data/lib/docgen/markdown.rb
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
|
-
mutation ExtensionCreate(
|
|
2
|
-
|
|
1
|
+
mutation ExtensionCreate(
|
|
2
|
+
$api_key: String!
|
|
3
|
+
$type: ExtensionType!
|
|
4
|
+
$title: String!
|
|
5
|
+
$config: JSON!
|
|
6
|
+
$extension_context: String
|
|
7
|
+
) {
|
|
8
|
+
extensionCreate(
|
|
9
|
+
input: {
|
|
10
|
+
apiKey: $api_key
|
|
11
|
+
type: $type
|
|
12
|
+
title: $title
|
|
13
|
+
config: $config
|
|
14
|
+
context: $extension_context
|
|
15
|
+
}
|
|
16
|
+
) {
|
|
3
17
|
extensionRegistration {
|
|
4
18
|
id
|
|
19
|
+
uuid
|
|
5
20
|
type
|
|
6
21
|
title
|
|
7
22
|
draftVersion {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Extension
|
|
4
|
+
class PackageResolutionFailed < RuntimeError; end
|
|
5
|
+
|
|
4
6
|
class Project < ShopifyCli::ProjectType
|
|
5
7
|
hidden_feature
|
|
6
8
|
title("App Extension")
|
|
@@ -36,6 +38,8 @@ module Extension
|
|
|
36
38
|
autoload :UpdateDraft, Project.project_filepath("tasks/update_draft")
|
|
37
39
|
autoload :FetchSpecifications, Project.project_filepath("tasks/fetch_specifications")
|
|
38
40
|
autoload :ConfigureFeatures, Project.project_filepath("tasks/configure_features")
|
|
41
|
+
autoload :ChooseNextAvailablePort, Project.project_filepath("tasks/choose_next_available_port")
|
|
42
|
+
autoload :FindNpmPackages, Project.project_filepath("tasks/find_npm_packages")
|
|
39
43
|
|
|
40
44
|
module Converters
|
|
41
45
|
autoload :RegistrationConverter, Project.project_filepath("tasks/converters/registration_converter")
|
|
@@ -57,11 +61,14 @@ module Extension
|
|
|
57
61
|
end
|
|
58
62
|
|
|
59
63
|
module Features
|
|
64
|
+
autoload :ArgoServe, Project.project_filepath("features/argo_serve")
|
|
65
|
+
autoload :ArgoServeOptions, Project.project_filepath("features/argo_serve_options")
|
|
60
66
|
autoload :ArgoSetup, Project.project_filepath("features/argo_setup")
|
|
61
67
|
autoload :ArgoSetupStep, Project.project_filepath("features/argo_setup_step")
|
|
62
68
|
autoload :ArgoSetupSteps, Project.project_filepath("features/argo_setup_steps")
|
|
63
69
|
autoload :ArgoDependencies, Project.project_filepath("features/argo_dependencies")
|
|
64
70
|
autoload :ArgoConfig, Project.project_filepath("features/argo_config")
|
|
71
|
+
autoload :ArgoRuntime, Project.project_filepath("features/argo_runtime")
|
|
65
72
|
autoload :Argo, Project.project_filepath("features/argo")
|
|
66
73
|
end
|
|
67
74
|
|
|
@@ -77,18 +84,9 @@ module Extension
|
|
|
77
84
|
autoload :Specification, Project.project_filepath("models/specification")
|
|
78
85
|
autoload :Specifications, Project.project_filepath("models/specifications")
|
|
79
86
|
autoload :LazySpecificationHandler, Project.project_filepath("models/lazy_specification_handler")
|
|
87
|
+
autoload :NpmPackage, Project.project_filepath("models/npm_package")
|
|
80
88
|
end
|
|
81
89
|
|
|
82
90
|
autoload :ExtensionProjectKeys, Project.project_filepath("extension_project_keys")
|
|
83
91
|
autoload :ExtensionProject, Project.project_filepath("extension_project")
|
|
84
|
-
|
|
85
|
-
def self.specifications
|
|
86
|
-
@specifications ||= Models::Specifications.new(
|
|
87
|
-
fetch_specifications: Tasks::FetchSpecifications
|
|
88
|
-
)
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def self.specifications=(specifications)
|
|
92
|
-
@specifications = specifications
|
|
93
|
-
end
|
|
94
92
|
end
|
|
@@ -38,8 +38,8 @@ module Extension
|
|
|
38
38
|
Usage: {{command:#{ShopifyCli::TOOL_NAME} create extension}}
|
|
39
39
|
Options:
|
|
40
40
|
{{command:--type=TYPE}} The type of extension you would like to create.
|
|
41
|
-
{{command:--name=NAME}} The name of your extension (50 characters)
|
|
42
|
-
{{command:--api-key=KEY}} The API key of your app
|
|
41
|
+
{{command:--name=NAME}} The name of your extension (50 characters).
|
|
42
|
+
{{command:--api-key=KEY}} The API key of your app.
|
|
43
43
|
HELP
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -8,15 +8,19 @@ module Extension
|
|
|
8
8
|
@project ||= ExtensionProject.current
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def
|
|
12
|
-
@
|
|
13
|
-
identifier = project.
|
|
11
|
+
def specification_handler
|
|
12
|
+
@specification_handler ||= begin
|
|
13
|
+
identifier = project.specification_identifier
|
|
14
14
|
Models::LazySpecificationHandler.new(identifier) do
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
specifications = Models::Specifications.new(
|
|
16
|
+
fetch_specifications: Tasks::FetchSpecifications.new(api_key: project.app.api_key, context: @ctx)
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
unless specifications.valid?(identifier)
|
|
20
|
+
@ctx.abort(@ctx.message("errors.unknown_type", project.specification_identifier))
|
|
17
21
|
end
|
|
18
22
|
|
|
19
|
-
|
|
23
|
+
specifications[identifier]
|
|
20
24
|
end
|
|
21
25
|
end
|
|
22
26
|
end
|
|
@@ -59,8 +59,8 @@ module Extension
|
|
|
59
59
|
context: @ctx,
|
|
60
60
|
api_key: project.app.api_key,
|
|
61
61
|
registration_id: project.registration_id,
|
|
62
|
-
config:
|
|
63
|
-
extension_context:
|
|
62
|
+
config: specification_handler.config(@ctx),
|
|
63
|
+
extension_context: specification_handler.extension_context(@ctx)
|
|
64
64
|
)
|
|
65
65
|
end
|
|
66
66
|
end
|
|
@@ -12,7 +12,7 @@ module Extension
|
|
|
12
12
|
|
|
13
13
|
update_project_files(registration)
|
|
14
14
|
|
|
15
|
-
@ctx.puts(@ctx.message("register.success", project.title
|
|
15
|
+
@ctx.puts(@ctx.message("register.success", project.title))
|
|
16
16
|
@ctx.puts(@ctx.message("register.success_info"))
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -27,8 +27,8 @@ module Extension
|
|
|
27
27
|
private
|
|
28
28
|
|
|
29
29
|
def confirm_registration
|
|
30
|
-
@ctx.puts(@ctx.message("register.confirm_info",
|
|
31
|
-
CLI::UI::Prompt.confirm(@ctx.message("register.confirm_question"
|
|
30
|
+
@ctx.puts(@ctx.message("register.confirm_info", specification_handler.name))
|
|
31
|
+
CLI::UI::Prompt.confirm(@ctx.message("register.confirm_question"))
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def register_extension
|
|
@@ -37,10 +37,10 @@ module Extension
|
|
|
37
37
|
Tasks::CreateExtension.call(
|
|
38
38
|
context: @ctx,
|
|
39
39
|
api_key: app.api_key,
|
|
40
|
-
type:
|
|
40
|
+
type: specification_handler.graphql_identifier,
|
|
41
41
|
title: project.title,
|
|
42
42
|
config: {},
|
|
43
|
-
extension_context:
|
|
43
|
+
extension_context: specification_handler.extension_context(@ctx)
|
|
44
44
|
)
|
|
45
45
|
end
|
|
46
46
|
|
|
@@ -50,6 +50,7 @@ module Extension
|
|
|
50
50
|
api_key: app.api_key,
|
|
51
51
|
api_secret: app.secret,
|
|
52
52
|
registration_id: registration.id,
|
|
53
|
+
registration_uuid: registration.uuid,
|
|
53
54
|
title: project.title
|
|
54
55
|
)
|
|
55
56
|
end
|
|
@@ -3,41 +3,83 @@
|
|
|
3
3
|
module Extension
|
|
4
4
|
module Commands
|
|
5
5
|
class Serve < ExtensionCommand
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
DEFAULT_PORT = 39351
|
|
7
|
+
|
|
8
|
+
options do |parser, flags|
|
|
9
|
+
parser.on("-t", "--[no-]tunnel", "Establish an ngrok tunnel") { |tunnel| flags[:tunnel] = tunnel }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class RuntimeConfiguration
|
|
13
|
+
include SmartProperties
|
|
14
|
+
|
|
15
|
+
property! :tunnel_url, accepts: String, default: ""
|
|
16
|
+
property! :tunnel_requested, accepts: [true, false], reader: :tunnel_requested?, default: true
|
|
17
|
+
property! :port, accepts: (1...(2**16)), default: DEFAULT_PORT
|
|
18
|
+
end
|
|
8
19
|
|
|
9
20
|
def call(_args, _command_name)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
yarn_serve_command += serve_args
|
|
21
|
-
npm_serve_command += %w(--) + serve_args
|
|
22
|
-
end
|
|
23
|
-
success = ShopifyCli::JsSystem.call(@ctx, yarn: yarn_serve_command, npm: npm_serve_command)
|
|
24
|
-
@ctx.abort(@ctx.message("serve.serve_failure_message")) unless success
|
|
25
|
-
end
|
|
21
|
+
config = RuntimeConfiguration.new(
|
|
22
|
+
tunnel_requested: tunnel_requested?
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
ShopifyCli::Result
|
|
26
|
+
.success(config)
|
|
27
|
+
.then(&method(:find_available_port))
|
|
28
|
+
.then(&method(:start_tunnel_if_required))
|
|
29
|
+
.then(&method(:serve))
|
|
30
|
+
.unwrap { |error| raise error }
|
|
26
31
|
end
|
|
27
32
|
|
|
28
33
|
def self.help
|
|
29
34
|
<<~HELP
|
|
30
35
|
Serve your extension in a local simulator for development.
|
|
31
36
|
Usage: {{command:#{ShopifyCli::TOOL_NAME} serve}}
|
|
37
|
+
Options:
|
|
38
|
+
{{command:--tunnel=TUNNEL}} Establish an ngrok tunnel (default: false)
|
|
32
39
|
HELP
|
|
33
40
|
end
|
|
34
41
|
|
|
35
42
|
private
|
|
36
43
|
|
|
37
|
-
def
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
def tunnel_requested?
|
|
45
|
+
tunnel = options.flags[:tunnel]
|
|
46
|
+
tunnel.nil? || !!tunnel
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def find_available_port(runtime_configuration)
|
|
50
|
+
return runtime_configuration unless specification_handler.choose_port?(@ctx)
|
|
51
|
+
|
|
52
|
+
chosen_port = Tasks::ChooseNextAvailablePort
|
|
53
|
+
.call(from: runtime_configuration.port)
|
|
54
|
+
.unwrap { |_error| @ctx.abort(@ctx.message("serve.no_available_ports_found")) }
|
|
55
|
+
runtime_configuration.tap { |c| c.port = chosen_port }
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def start_tunnel_if_required(runtime_configuration)
|
|
59
|
+
return runtime_configuration unless specification_handler.establish_tunnel?(@ctx)
|
|
60
|
+
return runtime_configuration unless runtime_configuration.tunnel_requested?
|
|
61
|
+
|
|
62
|
+
return start_tunnel(runtime_configuration) if can_start_tunnel?(runtime_configuration)
|
|
63
|
+
@ctx.abort(@ctx.message("serve.tunnel_already_running"))
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def can_start_tunnel?(runtime_configuration)
|
|
67
|
+
return true if ShopifyCli::Tunnel.urls.empty?
|
|
68
|
+
ShopifyCli::Tunnel.running_on?(runtime_configuration.port)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def start_tunnel(runtime_configuration)
|
|
72
|
+
tunnel_url = ShopifyCli::Tunnel.start(@ctx, port: runtime_configuration.port)
|
|
73
|
+
runtime_configuration.tap { |c| c.tunnel_url = tunnel_url }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def serve(runtime_configuration)
|
|
77
|
+
specification_handler.serve(
|
|
78
|
+
context: @ctx,
|
|
79
|
+
tunnel_url: runtime_configuration.tunnel_url,
|
|
80
|
+
port: runtime_configuration.port
|
|
81
|
+
)
|
|
82
|
+
runtime_configuration
|
|
41
83
|
end
|
|
42
84
|
end
|
|
43
85
|
end
|