@shopify/cli-kit 3.45.1 → 3.46.0-pre.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.
- 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/private/node/ui/components/ConcurrentOutput.js.map +1 -1
- package/dist/private/node/ui/components/ConcurrentOutput.test.js +2 -2
- package/dist/private/node/ui/components/ConcurrentOutput.test.js.map +1 -1
- package/dist/private/node/ui/components/List.d.ts +2 -0
- package/dist/private/node/ui/components/List.js +5 -4
- package/dist/private/node/ui/components/List.js.map +1 -1
- package/dist/private/node/ui/components/Prompts/InfoTable.d.ts +10 -2
- package/dist/private/node/ui/components/Prompts/InfoTable.js +12 -8
- package/dist/private/node/ui/components/Prompts/InfoTable.js.map +1 -1
- package/dist/public/common/string.js +62 -0
- package/dist/public/common/string.js.map +1 -1
- 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/public/node/cli.d.ts +1 -0
- package/dist/public/node/cli.js +15 -1
- package/dist/public/node/cli.js.map +1 -1
- package/dist/public/node/fs.d.ts +7 -2
- package/dist/public/node/fs.js +4 -3
- package/dist/public/node/fs.js.map +1 -1
- package/dist/public/node/output.d.ts +3 -1
- package/dist/public/node/output.js +10 -2
- package/dist/public/node/output.js.map +1 -1
- package/dist/public/node/ui.d.ts +3 -2
- package/dist/public/node/ui.js +1 -1
- package/dist/public/node/ui.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
- 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
package/assets/cli-ruby/Gemfile
CHANGED
package/assets/cli-ruby/Rakefile
CHANGED
|
@@ -57,16 +57,12 @@ namespace :rdoc do
|
|
|
57
57
|
"lib/shopify_cli/context.rb",
|
|
58
58
|
"lib/shopify_cli/db.rb",
|
|
59
59
|
"lib/shopify_cli/git.rb",
|
|
60
|
-
"lib/shopify_cli/heroku.rb",
|
|
61
|
-
"lib/shopify_cli/js_deps.rb",
|
|
62
60
|
"lib/shopify_cli/lazy_delegator.rb",
|
|
63
61
|
"lib/shopify_cli/method_object.rb",
|
|
64
62
|
"lib/shopify_cli/partners_api.rb",
|
|
65
|
-
"lib/shopify_cli/process_supervision.rb",
|
|
66
63
|
"lib/shopify_cli/project.rb",
|
|
67
64
|
"lib/shopify_cli/result.rb",
|
|
68
65
|
"lib/shopify_cli/transform_data_structure.rb",
|
|
69
|
-
"lib/shopify_cli/tunnel.rb",
|
|
70
66
|
]
|
|
71
67
|
|
|
72
68
|
task all: [:markdown, :wiki, :cleanup]
|
|
@@ -105,78 +101,6 @@ end
|
|
|
105
101
|
desc("Generate markdown documentation and update the wiki")
|
|
106
102
|
task(rdoc: "rdoc:all")
|
|
107
103
|
|
|
108
|
-
namespace :package do
|
|
109
|
-
require "shopify_cli/packager"
|
|
110
|
-
|
|
111
|
-
task all: [:debian, :rpm, :homebrew]
|
|
112
|
-
|
|
113
|
-
desc("Builds a Debian package of the CLI")
|
|
114
|
-
task :debian do
|
|
115
|
-
ShopifyCLI::Packager.new.build_debian
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
desc("Builds an RPM package of the CLI")
|
|
119
|
-
task :rpm do
|
|
120
|
-
ShopifyCLI::Packager.new.build_rpm
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
desc("Builds a Homebrew package of the CLI")
|
|
124
|
-
task :homebrew do
|
|
125
|
-
ShopifyCLI::Packager.new.build_homebrew
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
desc("Builds all distribution packages of the CLI")
|
|
130
|
-
task(package: "package:all")
|
|
131
|
-
|
|
132
|
-
namespace :changelog do
|
|
133
|
-
require "shopify_cli/changelog"
|
|
134
|
-
|
|
135
|
-
task :update do
|
|
136
|
-
ShopifyCLI::Changelog.new.update!
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
namespace :release do
|
|
141
|
-
require "shopify_cli/release"
|
|
142
|
-
|
|
143
|
-
task :prepare, [:new_version] do |_t, args|
|
|
144
|
-
new_version = args[:new_version]
|
|
145
|
-
unless new_version
|
|
146
|
-
raise <<~NO_NEW_VERSION
|
|
147
|
-
New version must be provided, e.g.:
|
|
148
|
-
|
|
149
|
-
$ GITHUB_ACCESS_TOKEN=abcdef rake "release:prepare[1.2.3]"
|
|
150
|
-
|
|
151
|
-
NO_NEW_VERSION
|
|
152
|
-
end
|
|
153
|
-
github_access_token = ENV["GITHUB_ACCESS_TOKEN"]
|
|
154
|
-
unless github_access_token
|
|
155
|
-
raise <<~NO_GITHUB_ACCESS_TOKEN
|
|
156
|
-
GitHub access token must be provided, e.g.:
|
|
157
|
-
|
|
158
|
-
$ GITHUB_ACCESS_TOKEN=abcdef rake "release:prepare[1.2.3]"
|
|
159
|
-
NO_GITHUB_ACCESS_TOKEN
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
ShopifyCLI::Release.new(new_version, github_access_token).prepare!
|
|
163
|
-
puts "Completed!"
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
task :package do
|
|
167
|
-
github_access_token = ENV["GITHUB_ACCESS_TOKEN"]
|
|
168
|
-
unless github_access_token
|
|
169
|
-
raise <<~NO_GITHUB_ACCESS_TOKEN
|
|
170
|
-
GitHub access token must be provided, e.g.:
|
|
171
|
-
|
|
172
|
-
$ GITHUB_ACCESS_TOKEN=abcdef rake release:package
|
|
173
|
-
NO_GITHUB_ACCESS_TOKEN
|
|
174
|
-
end
|
|
175
|
-
ShopifyCLI::Release.new(ShopifyCLI::VERSION, github_access_token).package!
|
|
176
|
-
puts "Completed!"
|
|
177
|
-
end
|
|
178
|
-
end
|
|
179
|
-
|
|
180
104
|
namespace :extensions do
|
|
181
105
|
task :update do
|
|
182
106
|
version = ENV.fetch("VERSION").strip
|
|
@@ -19,90 +19,27 @@ module Extension
|
|
|
19
19
|
class Command < ShopifyCLI::Command::ProjectCommand
|
|
20
20
|
autoload :ExtensionCommand, Project.project_filepath("commands/extension_command")
|
|
21
21
|
|
|
22
|
-
subcommand :Create, "create", Project.project_filepath("commands/create")
|
|
23
|
-
subcommand :Register, "register", Project.project_filepath("commands/register")
|
|
24
|
-
subcommand :Info, "info", Project.project_filepath("commands/info")
|
|
25
|
-
subcommand :Connect, "connect", Project.project_filepath("commands/connect")
|
|
26
|
-
subcommand :Build, "build", Project.project_filepath("commands/build")
|
|
27
22
|
subcommand :Serve, "serve", Project.project_filepath("commands/serve")
|
|
28
|
-
subcommand :Push, "push", Project.project_filepath("commands/push")
|
|
29
|
-
subcommand :Tunnel, "tunnel", Project.project_filepath("commands/tunnel")
|
|
30
|
-
subcommand :Check, "check", Project.project_filepath("commands/check")
|
|
31
23
|
end
|
|
32
24
|
ShopifyCLI::Commands.register("Extension::Command", "extension")
|
|
33
25
|
|
|
34
26
|
module Tasks
|
|
35
|
-
autoload :UserErrors, Project.project_filepath("tasks/user_errors")
|
|
36
|
-
autoload :GetApps, Project.project_filepath("tasks/get_apps")
|
|
37
|
-
autoload :GetApp, Project.project_filepath("tasks/get_app")
|
|
38
|
-
autoload :CreateExtension, Project.project_filepath("tasks/create_extension")
|
|
39
|
-
autoload :UpdateDraft, Project.project_filepath("tasks/update_draft")
|
|
40
|
-
autoload :FetchSpecifications, Project.project_filepath("tasks/fetch_specifications")
|
|
41
27
|
autoload :ConfigureFeatures, Project.project_filepath("tasks/configure_features")
|
|
42
28
|
autoload :ConfigureOptions, Project.project_filepath("tasks/configure_options")
|
|
43
|
-
autoload :
|
|
44
|
-
autoload :FindNpmPackages, Project.project_filepath("tasks/find_npm_packages")
|
|
45
|
-
autoload :GetExtensions, Project.project_filepath("tasks/get_extensions")
|
|
46
|
-
autoload :GetProduct, Project.project_filepath("tasks/get_product")
|
|
47
|
-
autoload :MergeServerConfig, Project.project_filepath("tasks/merge_server_config")
|
|
48
|
-
autoload :FindPackageFromJson, Project.project_filepath("tasks/find_package_from_json.rb")
|
|
49
|
-
autoload :EnsureResourceUrl, Project.project_filepath("tasks/ensure_resource_url.rb")
|
|
50
|
-
autoload :ConvertServerConfig, Project.project_filepath("tasks/convert_server_config")
|
|
29
|
+
autoload :FetchSpecifications, Project.project_filepath("tasks/fetch_specifications")
|
|
51
30
|
|
|
52
31
|
module Converters
|
|
53
|
-
autoload :RegistrationConverter, Project.project_filepath("tasks/converters/registration_converter")
|
|
54
32
|
autoload :VersionConverter, Project.project_filepath("tasks/converters/version_converter")
|
|
55
33
|
autoload :ValidationErrorConverter, Project.project_filepath("tasks/converters/validation_error_converter")
|
|
56
|
-
autoload :AppConverter, Project.project_filepath("tasks/converters/app_converter")
|
|
57
|
-
autoload :ProductConverter, Project.project_filepath("tasks/converters/product_converter")
|
|
58
|
-
autoload :ExecuteCommands, Project.project_filepath("cli/execute_commands")
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
module ExecuteCommands
|
|
62
|
-
autoload :Base, Project.project_filepath("tasks/execute_commands/base")
|
|
63
|
-
autoload :Build, Project.project_filepath("tasks/execute_commands/build")
|
|
64
|
-
autoload :Create, Project.project_filepath("tasks/execute_commands/create")
|
|
65
|
-
autoload :Serve, Project.project_filepath("tasks/execute_commands/serve")
|
|
66
|
-
autoload :OutdatedExtensionDetection,
|
|
67
|
-
Project.project_filepath("tasks/execute_commands/outdated_extension_detection")
|
|
68
|
-
|
|
69
|
-
class << self
|
|
70
|
-
def build(*args)
|
|
71
|
-
Build.new(*args).call
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def create(*args)
|
|
75
|
-
Create.new(*args).call
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def serve(*args)
|
|
79
|
-
Serve.new(*args).call
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
module Forms
|
|
86
|
-
module Questions
|
|
87
|
-
autoload :AskApp, Project.project_filepath("forms/questions/ask_app")
|
|
88
|
-
autoload :AskName, Project.project_filepath("forms/questions/ask_name")
|
|
89
|
-
autoload :AskTemplate, Project.project_filepath("forms/questions/ask_template")
|
|
90
|
-
autoload :AskType, Project.project_filepath("forms/questions/ask_type")
|
|
91
|
-
autoload :AskRegistration, Project.project_filepath("forms/questions/ask_registration")
|
|
92
34
|
end
|
|
93
|
-
|
|
94
|
-
autoload :Create, Project.project_filepath("forms/create")
|
|
95
|
-
autoload :Register, Project.project_filepath("forms/register")
|
|
96
|
-
autoload :Connect, Project.project_filepath("forms/connect")
|
|
97
35
|
end
|
|
98
36
|
|
|
99
37
|
module Features
|
|
100
38
|
module Runtimes
|
|
101
|
-
autoload :Admin, Project.project_filepath("features/runtimes/admin")
|
|
102
39
|
autoload :Base, Project.project_filepath("features/runtimes/base")
|
|
103
|
-
autoload :CheckoutPostPurchase, Project.project_filepath("features/runtimes/checkout_post_purchase")
|
|
104
40
|
autoload :CheckoutUiExtension, Project.project_filepath("features/runtimes/checkout_ui_extension")
|
|
105
41
|
end
|
|
42
|
+
|
|
106
43
|
autoload :ArgoServe, Project.project_filepath("features/argo_serve")
|
|
107
44
|
autoload :ArgoServeOptions, Project.project_filepath("features/argo_serve_options")
|
|
108
45
|
autoload :ArgoSetup, Project.project_filepath("features/argo_setup")
|
|
@@ -119,30 +56,12 @@ module Extension
|
|
|
119
56
|
autoload :Default, Project.project_filepath("models/specification_handlers/default")
|
|
120
57
|
end
|
|
121
58
|
|
|
122
|
-
module ServerConfig
|
|
123
|
-
autoload :Base, Project.project_filepath("models/server_config/base")
|
|
124
|
-
autoload :App, Project.project_filepath("models/server_config/app")
|
|
125
|
-
autoload :Capabilities, Project.project_filepath("models/server_config/capabilities")
|
|
126
|
-
autoload :Development, Project.project_filepath("models/server_config/development")
|
|
127
|
-
autoload :DevelopmentEntries, Project.project_filepath("models/server_config/development_entries")
|
|
128
|
-
autoload :DevelopmentRenderer, Project.project_filepath("models/server_config/development_renderer")
|
|
129
|
-
autoload :DevelopmentResource, Project.project_filepath("models/server_config/development_resource")
|
|
130
|
-
autoload :Extension, Project.project_filepath("models/server_config/extension")
|
|
131
|
-
autoload :Root, Project.project_filepath("models/server_config/root")
|
|
132
|
-
autoload :User, Project.project_filepath("models/server_config/user")
|
|
133
|
-
end
|
|
134
|
-
|
|
135
59
|
autoload :App, Project.project_filepath("models/app")
|
|
136
|
-
autoload :
|
|
137
|
-
autoload :Version, Project.project_filepath("models/version")
|
|
138
|
-
autoload :ValidationError, Project.project_filepath("models/validation_error")
|
|
60
|
+
autoload :LazySpecificationHandler, Project.project_filepath("models/lazy_specification_handler")
|
|
139
61
|
autoload :Specification, Project.project_filepath("models/specification")
|
|
140
62
|
autoload :Specifications, Project.project_filepath("models/specifications")
|
|
141
|
-
autoload :
|
|
142
|
-
autoload :
|
|
143
|
-
autoload :Product, Project.project_filepath("models/product")
|
|
144
|
-
autoload :DevelopmentServer, Project.project_filepath("models/development_server")
|
|
145
|
-
autoload :DevelopmentServerRequirements, Project.project_filepath("models/development_server_requirements")
|
|
63
|
+
autoload :ValidationError, Project.project_filepath("models/validation_error")
|
|
64
|
+
autoload :Version, Project.project_filepath("models/version")
|
|
146
65
|
end
|
|
147
66
|
|
|
148
67
|
autoload :ExtensionProjectKeys, Project.project_filepath("extension_project_keys")
|
|
@@ -6,9 +6,6 @@ module ShopifyCLI
|
|
|
6
6
|
# these concerns are taken care of.
|
|
7
7
|
#
|
|
8
8
|
class AdminAPI < API
|
|
9
|
-
autoload :PopulateResourceCommand, "shopify_cli/admin_api/populate_resource_command"
|
|
10
|
-
autoload :Schema, "shopify_cli/admin_api/schema"
|
|
11
|
-
|
|
12
9
|
class << self
|
|
13
10
|
##
|
|
14
11
|
# issues a graphql query or mutation to the Shopify Admin API. It loads a graphql
|
|
@@ -5,10 +5,9 @@ module ShopifyCLI
|
|
|
5
5
|
class Command
|
|
6
6
|
class SubCommand < Command
|
|
7
7
|
class << self
|
|
8
|
-
def call(args, command_name,
|
|
8
|
+
def call(args, command_name, _parent_command)
|
|
9
9
|
cmd = new(@ctx)
|
|
10
10
|
args = cmd.options.parse(@_options, args || [])
|
|
11
|
-
return call_help(parent_command, command_name) if cmd.options.help
|
|
12
11
|
check_ruby_version
|
|
13
12
|
check_node_version
|
|
14
13
|
run_prerequisites
|
|
@@ -5,7 +5,6 @@ require "semantic/semantic"
|
|
|
5
5
|
module ShopifyCLI
|
|
6
6
|
class Command < CLI::Kit::BaseCommand
|
|
7
7
|
autoload :SubCommand, "shopify_cli/command/sub_command"
|
|
8
|
-
autoload :AppSubCommand, "shopify_cli/command/app_sub_command"
|
|
9
8
|
autoload :ProjectCommand, "shopify_cli/command/project_command"
|
|
10
9
|
|
|
11
10
|
VersionRange = Struct.new(:from, :to, keyword_init: true)
|
|
@@ -28,7 +27,6 @@ module ShopifyCLI
|
|
|
28
27
|
else
|
|
29
28
|
cmd = new(@ctx)
|
|
30
29
|
cmd.options.parse(@_options, args)
|
|
31
|
-
return call_help(command_name) if cmd.options.help
|
|
32
30
|
check_ruby_version
|
|
33
31
|
check_node_version
|
|
34
32
|
run_prerequisites
|
|
@@ -149,11 +147,6 @@ module ShopifyCLI
|
|
|
149
147
|
@task_registry || ShopifyCLI::Tasks::Registry
|
|
150
148
|
end
|
|
151
149
|
|
|
152
|
-
def call_help(*cmds)
|
|
153
|
-
help = Commands::Help.new(@ctx)
|
|
154
|
-
help.call(cmds, nil)
|
|
155
|
-
end
|
|
156
|
-
|
|
157
150
|
class PrerequisiteTask
|
|
158
151
|
attr_reader :name, :args
|
|
159
152
|
|
|
@@ -17,20 +17,5 @@ module ShopifyCLI
|
|
|
17
17
|
def self.core_command?(cmd)
|
|
18
18
|
@core_commands.include?(cmd)
|
|
19
19
|
end
|
|
20
|
-
|
|
21
|
-
register :Config, "config", "shopify_cli/commands/config", true
|
|
22
|
-
register :Help, "help", "shopify_cli/commands/help", true
|
|
23
|
-
register :Login, "login", "shopify_cli/commands/login", true
|
|
24
|
-
register :Logout, "logout", "shopify_cli/commands/logout", true
|
|
25
|
-
register :Populate, "populate", "shopify_cli/commands/populate", true
|
|
26
|
-
register :Reporting, "reporting", "shopify_cli/commands/reporting", true
|
|
27
|
-
register :Store, "store", "shopify_cli/commands/store", true
|
|
28
|
-
register :Switch, "switch", "shopify_cli/commands/switch", true
|
|
29
|
-
register :System, "system", "shopify_cli/commands/system", true
|
|
30
|
-
register :Version, "version", "shopify_cli/commands/version", true
|
|
31
|
-
register :Whoami, "whoami", "shopify_cli/commands/whoami", true
|
|
32
|
-
register :App, "app", "shopify_cli/commands/app", true
|
|
33
|
-
|
|
34
|
-
autoload :Connect, "shopify_cli/commands/connect"
|
|
35
20
|
end
|
|
36
21
|
end
|
|
@@ -2,7 +2,6 @@ module ShopifyCLI
|
|
|
2
2
|
module Core
|
|
3
3
|
autoload :EntryPoint, "shopify_cli/core/entry_point"
|
|
4
4
|
autoload :Executor, "shopify_cli/core/executor"
|
|
5
|
-
autoload :HelpResolver, "shopify_cli/core/help_resolver"
|
|
6
5
|
autoload :Monorail, "shopify_cli/core/monorail"
|
|
7
6
|
autoload :CliVersion, "shopify_cli/core/cli_version"
|
|
8
7
|
end
|
|
@@ -210,7 +210,7 @@ module ShopifyCLI
|
|
|
210
210
|
def request(method, path, headers: nil, query: [], form_data: nil, body_stream: nil)
|
|
211
211
|
uri = URI.join("https://#{shop}", path)
|
|
212
212
|
|
|
213
|
-
if
|
|
213
|
+
if proxy_via_theme_access_app?(path)
|
|
214
214
|
headers = headers ? headers.slice("ACCEPT", "CONTENT-TYPE", "CONTENT-LENGTH", "Cookie") : {}
|
|
215
215
|
headers.merge!({
|
|
216
216
|
"X-Shopify-Access-Token" => Environment.admin_auth_token,
|
|
@@ -249,6 +249,14 @@ module ShopifyCLI
|
|
|
249
249
|
.with_rack_env(env)
|
|
250
250
|
.build
|
|
251
251
|
end
|
|
252
|
+
|
|
253
|
+
def proxy_via_theme_access_app?(path)
|
|
254
|
+
return false unless Environment.theme_access_password?
|
|
255
|
+
return false if path == "/localization"
|
|
256
|
+
return false if path.start_with?("/cart/")
|
|
257
|
+
|
|
258
|
+
true
|
|
259
|
+
end
|
|
252
260
|
end
|
|
253
261
|
end
|
|
254
262
|
end
|
|
@@ -84,7 +84,7 @@ module ShopifyCLI
|
|
|
84
84
|
autocall(:Logger) { CLI::Kit::Logger.new(debug_log_file: ShopifyCLI.debug_log_file) }
|
|
85
85
|
# ShopifyCLI::Resolver
|
|
86
86
|
autocall(:Resolver) do
|
|
87
|
-
|
|
87
|
+
CLI::Kit::Resolver.new(
|
|
88
88
|
tool_name: TOOL_NAME,
|
|
89
89
|
command_registry: ShopifyCLI::Commands::Registry
|
|
90
90
|
)
|
|
@@ -99,11 +99,8 @@ module ShopifyCLI
|
|
|
99
99
|
|
|
100
100
|
autoload :AdminAPI, "shopify_cli/admin_api"
|
|
101
101
|
autoload :API, "shopify_cli/api"
|
|
102
|
-
autoload :AppTypeDetector, "shopify_cli/app_type_detector"
|
|
103
102
|
autoload :Command, "shopify_cli/command"
|
|
104
|
-
autoload :CommandOptions, "shopify_cli/command_options"
|
|
105
103
|
autoload :Commands, "shopify_cli/commands"
|
|
106
|
-
autoload :Connect, "shopify_cli/connect"
|
|
107
104
|
autoload :Constants, "shopify_cli/constants"
|
|
108
105
|
autoload :Context, "shopify_cli/context"
|
|
109
106
|
autoload :Core, "shopify_cli/core"
|
|
@@ -114,28 +111,22 @@ module ShopifyCLI
|
|
|
114
111
|
autoload :Git, "shopify_cli/git"
|
|
115
112
|
autoload :GitHub, "shopify_cli/github"
|
|
116
113
|
autoload :Helpers, "shopify_cli/helpers"
|
|
117
|
-
autoload :Heroku, "shopify_cli/heroku"
|
|
118
114
|
autoload :IdentityAuth, "shopify_cli/identity_auth"
|
|
119
|
-
autoload :JsDeps, "shopify_cli/js_deps"
|
|
120
115
|
autoload :JsSystem, "shopify_cli/js_system"
|
|
121
116
|
autoload :LazyDelegator, "shopify_cli/lazy_delegator"
|
|
122
117
|
autoload :MethodObject, "shopify_cli/method_object"
|
|
123
118
|
autoload :Options, "shopify_cli/options"
|
|
124
119
|
autoload :PartnersAPI, "shopify_cli/partners_api"
|
|
125
|
-
autoload :PHPDeps, "shopify_cli/php_deps"
|
|
126
|
-
autoload :ProcessSupervision, "shopify_cli/process_supervision"
|
|
127
120
|
autoload :Project, "shopify_cli/project"
|
|
128
121
|
autoload :ProjectType, "shopify_cli/project_type"
|
|
129
122
|
autoload :ReportingConfigurationController, "shopify_cli/reporting_configuration_controller"
|
|
130
123
|
autoload :ResolveConstant, "shopify_cli/resolve_constant"
|
|
131
124
|
autoload :Resources, "shopify_cli/resources"
|
|
132
125
|
autoload :Result, "shopify_cli/result"
|
|
133
|
-
autoload :Services, "shopify_cli/services"
|
|
134
126
|
autoload :Shopifolk, "shopify_cli/shopifolk"
|
|
135
127
|
autoload :Task, "shopify_cli/task"
|
|
136
128
|
autoload :Tasks, "shopify_cli/tasks"
|
|
137
129
|
autoload :TransformDataStructure, "shopify_cli/transform_data_structure"
|
|
138
|
-
autoload :Tunnel, "shopify_cli/tunnel"
|
|
139
130
|
autoload :Utilities, "shopify_cli/utilities"
|
|
140
131
|
|
|
141
132
|
require "shopify_cli/messages/messages"
|
|
@@ -8,10 +8,8 @@ module TestHelpers
|
|
|
8
8
|
autoload :FakeFS, "test_helpers/fake_fs"
|
|
9
9
|
autoload :FakeProject, "test_helpers/fake_project"
|
|
10
10
|
autoload :FakeUI, "test_helpers/fake_ui"
|
|
11
|
-
autoload :Heroku, "test_helpers/heroku"
|
|
12
11
|
autoload :Partners, "test_helpers/partners"
|
|
13
12
|
autoload :Project, "test_helpers/project"
|
|
14
|
-
autoload :Schema, "test_helpers/schema"
|
|
15
13
|
autoload :Shopifolk, "test_helpers/shopifolk"
|
|
16
14
|
autoload :Singleton, "test_helpers/singleton"
|
|
17
15
|
autoload :TemporaryDirectory, "test_helpers/temporary_directory"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConcurrentOutput.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/ConcurrentOutput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {OutputProcess} from '../../../../public/node/output.js'\nimport useAsyncAndUnmount from '../hooks/use-async-and-unmount.js'\nimport {AbortController} from '../../../../public/node/abort.js'\nimport {handleCtrlC} from '../../ui.js'\nimport React, {FunctionComponent, useState} from 'react'\nimport {Box, Key, Static, Text, useInput} from 'ink'\nimport stripAnsi from 'strip-ansi'\nimport treeKill from 'tree-kill'\nimport figures from 'figures'\nimport {Writable} from 'stream'\n\nexport type WritableStream = (process: OutputProcess, index: number) => Writable\n\ninterface Shortcut {\n key: string\n action: string\n}\nexport interface ConcurrentOutputProps {\n processes: OutputProcess[]\n abortController: AbortController\n showTimestamps?: boolean\n onInput?: (input: string, key: Key, exit: () => void) => void\n footer?: {\n shortcuts: Shortcut[]\n subTitle?: string\n }\n}\ninterface Chunk {\n color: string\n prefix: string\n lines: string[]\n}\n\n/**\n * Renders output from concurrent processes to the terminal.\n * Output will be divided in a three column layout\n * with the left column containing the timestamp,\n * the right column containing the output,\n * and the middle column containing the process prefix.\n * Every process will be rendered with a different color, up to 4 colors.\n *\n * For example running `shopify app dev`:\n *\n * ```shell\n * 2022-10-10 13:11:03 | backend | npm\n * 2022-10-10 13:11:03 | backend | WARN ignoring workspace config at ...\n * 2022-10-10 13:11:03 | backend |\n * 2022-10-10 13:11:03 | backend |\n * 2022-10-10 13:11:03 | backend | > shopify-app-template-node@0.1.0 dev\n * 2022-10-10 13:11:03 | backend | > cross-env NODE_ENV=development nodemon backend/index.js --watch ./backend\n * 2022-10-10 13:11:03 | backend |\n * 2022-10-10 13:11:03 | backend |\n * 2022-10-10 13:11:03 | frontend |\n * 2022-10-10 13:11:03 | frontend | > starter-react-frontend-app@0.1.0 dev\n * 2022-10-10 13:11:03 | frontend | > cross-env NODE_ENV=development node vite-server.js\n * 2022-10-10 13:11:03 | frontend |\n * 2022-10-10 13:11:03 | frontend |\n * 2022-10-10 13:11:03 | backend |\n * 2022-10-10 13:11:03 | backend | [nodemon] to restart at any time, enter `rs`\n * 2022-10-10 13:11:03 | backend | [nodemon] watching path(s): backend/\n * 2022-10-10 13:11:03 | backend | [nodemon] watching extensions: js,mjs,json\n * 2022-10-10 13:11:03 | backend | [nodemon] starting `node backend/index.js`\n * 2022-10-10 13:11:03 | backend |\n *\n * ```\n */\nconst ConcurrentOutput: FunctionComponent<ConcurrentOutputProps> = ({\n processes,\n abortController,\n showTimestamps = true,\n onInput,\n footer,\n}) => {\n const [processOutput, setProcessOutput] = useState<Chunk[]>([])\n const concurrentColors = ['yellow', 'cyan', 'magenta', 'green', 'blue']\n const prefixColumnSize = Math.max(...processes.map((process) => process.prefix.length))\n\n function lineColor(index: number) {\n const colorIndex = index < concurrentColors.length ? index : index % concurrentColors.length\n return concurrentColors[colorIndex]!\n }\n\n const writableStream = (process: OutputProcess, index: number) => {\n return new Writable({\n write(chunk, _encoding, next) {\n const lines = stripAnsi(chunk.toString('utf8').replace(/(\\n)$/, '')).split(/\\n/)\n\n setProcessOutput((previousProcessOutput) => [\n ...previousProcessOutput,\n {\n color: lineColor(index),\n prefix: process.prefix,\n lines,\n },\n ])\n\n next()\n },\n })\n }\n\n const runProcesses = () => {\n return Promise.all(\n processes.map(async (process, index) => {\n const stdout = writableStream(process, index)\n const stderr = writableStream(process, index)\n\n await process.action(stdout, stderr, abortController.signal)\n }),\n )\n }\n\n useInput(\n (input, key) => {\n handleCtrlC(input, key)\n\n onInput!(input, key, () => treeKill(process.pid, 'SIGINT'))\n },\n {isActive: typeof onInput !== 'undefined'},\n )\n\n useAsyncAndUnmount(runProcesses, {onRejected: () => abortController.abort()})\n\n return (\n <>\n <Static items={processOutput}>\n {(chunk, index) => {\n return (\n <Box flexDirection=\"column\" key={index}>\n {chunk.lines.map((line, index) => (\n <Box key={index} flexDirection=\"row\">\n {showTimestamps ? (\n <Box>\n <Box marginRight={1}>\n <Text color={chunk.color}>\n {new Date().toISOString().replace(/T/, ' ').replace(/\\..+/, '')}\n </Text>\n </Box>\n\n <Text bold color={chunk.color}>\n {figures.lineVertical}\n </Text>\n </Box>\n ) : null}\n\n <Box width={prefixColumnSize} marginX={1}>\n <Text color={chunk.color}>{chunk.prefix}</Text>\n </Box>\n\n <Text bold color={chunk.color}>\n {figures.lineVertical}\n </Text>\n\n <Box flexGrow={1} paddingLeft={1}>\n <Text color={chunk.color}>{line}</Text>\n </Box>\n </Box>\n ))}\n </Box>\n )\n }}\n </Static>\n {footer ? (\n <Box marginY={1} flexDirection=\"column\" flexGrow={1}>\n <Box flexDirection=\"column\">\n {footer.shortcuts.map((shortcut, index) => (\n <Text key={index}>\n {figures.pointerSmall} Press <Text bold>{shortcut.key}</Text> {figures.lineVertical} {shortcut.action}\n </Text>\n ))}\n </Box>\n {footer.subTitle ? (\n <Box marginTop={1}>\n <Text>{footer.subTitle}</Text>\n </Box>\n ) : null}\n </Box>\n ) : null}\n </>\n )\n}\n\nexport {ConcurrentOutput}\n"]}
|
|
1
|
+
{"version":3,"file":"ConcurrentOutput.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/ConcurrentOutput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {OutputProcess} from '../../../../public/node/output.js'\nimport useAsyncAndUnmount from '../hooks/use-async-and-unmount.js'\nimport {AbortController} from '../../../../public/node/abort.js'\nimport {handleCtrlC} from '../../ui.js'\nimport React, {FunctionComponent, useState} from 'react'\nimport {Box, Key, Static, Text, useInput, TextProps} from 'ink'\nimport stripAnsi from 'strip-ansi'\nimport treeKill from 'tree-kill'\nimport figures from 'figures'\nimport {Writable} from 'stream'\n\nexport type WritableStream = (process: OutputProcess, index: number) => Writable\n\ninterface Shortcut {\n key: string\n action: string\n}\nexport interface ConcurrentOutputProps {\n processes: OutputProcess[]\n abortController: AbortController\n showTimestamps?: boolean\n onInput?: (input: string, key: Key, exit: () => void) => void\n footer?: {\n shortcuts: Shortcut[]\n subTitle?: string\n }\n}\ninterface Chunk {\n color: TextProps['color']\n prefix: string\n lines: string[]\n}\n\n/**\n * Renders output from concurrent processes to the terminal.\n * Output will be divided in a three column layout\n * with the left column containing the timestamp,\n * the right column containing the output,\n * and the middle column containing the process prefix.\n * Every process will be rendered with a different color, up to 4 colors.\n *\n * For example running `shopify app dev`:\n *\n * ```shell\n * 2022-10-10 13:11:03 | backend | npm\n * 2022-10-10 13:11:03 | backend | WARN ignoring workspace config at ...\n * 2022-10-10 13:11:03 | backend |\n * 2022-10-10 13:11:03 | backend |\n * 2022-10-10 13:11:03 | backend | > shopify-app-template-node@0.1.0 dev\n * 2022-10-10 13:11:03 | backend | > cross-env NODE_ENV=development nodemon backend/index.js --watch ./backend\n * 2022-10-10 13:11:03 | backend |\n * 2022-10-10 13:11:03 | backend |\n * 2022-10-10 13:11:03 | frontend |\n * 2022-10-10 13:11:03 | frontend | > starter-react-frontend-app@0.1.0 dev\n * 2022-10-10 13:11:03 | frontend | > cross-env NODE_ENV=development node vite-server.js\n * 2022-10-10 13:11:03 | frontend |\n * 2022-10-10 13:11:03 | frontend |\n * 2022-10-10 13:11:03 | backend |\n * 2022-10-10 13:11:03 | backend | [nodemon] to restart at any time, enter `rs`\n * 2022-10-10 13:11:03 | backend | [nodemon] watching path(s): backend/\n * 2022-10-10 13:11:03 | backend | [nodemon] watching extensions: js,mjs,json\n * 2022-10-10 13:11:03 | backend | [nodemon] starting `node backend/index.js`\n * 2022-10-10 13:11:03 | backend |\n *\n * ```\n */\nconst ConcurrentOutput: FunctionComponent<ConcurrentOutputProps> = ({\n processes,\n abortController,\n showTimestamps = true,\n onInput,\n footer,\n}) => {\n const [processOutput, setProcessOutput] = useState<Chunk[]>([])\n const concurrentColors: TextProps['color'][] = ['yellow', 'cyan', 'magenta', 'green', 'blue']\n const prefixColumnSize = Math.max(...processes.map((process) => process.prefix.length))\n\n function lineColor(index: number) {\n const colorIndex = index < concurrentColors.length ? index : index % concurrentColors.length\n return concurrentColors[colorIndex]!\n }\n\n const writableStream = (process: OutputProcess, index: number) => {\n return new Writable({\n write(chunk, _encoding, next) {\n const lines = stripAnsi(chunk.toString('utf8').replace(/(\\n)$/, '')).split(/\\n/)\n\n setProcessOutput((previousProcessOutput) => [\n ...previousProcessOutput,\n {\n color: lineColor(index),\n prefix: process.prefix,\n lines,\n },\n ])\n\n next()\n },\n })\n }\n\n const runProcesses = () => {\n return Promise.all(\n processes.map(async (process, index) => {\n const stdout = writableStream(process, index)\n const stderr = writableStream(process, index)\n\n await process.action(stdout, stderr, abortController.signal)\n }),\n )\n }\n\n useInput(\n (input, key) => {\n handleCtrlC(input, key)\n\n onInput!(input, key, () => treeKill(process.pid, 'SIGINT'))\n },\n {isActive: typeof onInput !== 'undefined'},\n )\n\n useAsyncAndUnmount(runProcesses, {onRejected: () => abortController.abort()})\n\n return (\n <>\n <Static items={processOutput}>\n {(chunk, index) => {\n return (\n <Box flexDirection=\"column\" key={index}>\n {chunk.lines.map((line, index) => (\n <Box key={index} flexDirection=\"row\">\n {showTimestamps ? (\n <Box>\n <Box marginRight={1}>\n <Text color={chunk.color}>\n {new Date().toISOString().replace(/T/, ' ').replace(/\\..+/, '')}\n </Text>\n </Box>\n\n <Text bold color={chunk.color}>\n {figures.lineVertical}\n </Text>\n </Box>\n ) : null}\n\n <Box width={prefixColumnSize} marginX={1}>\n <Text color={chunk.color}>{chunk.prefix}</Text>\n </Box>\n\n <Text bold color={chunk.color}>\n {figures.lineVertical}\n </Text>\n\n <Box flexGrow={1} paddingLeft={1}>\n <Text color={chunk.color}>{line}</Text>\n </Box>\n </Box>\n ))}\n </Box>\n )\n }}\n </Static>\n {footer ? (\n <Box marginY={1} flexDirection=\"column\" flexGrow={1}>\n <Box flexDirection=\"column\">\n {footer.shortcuts.map((shortcut, index) => (\n <Text key={index}>\n {figures.pointerSmall} Press <Text bold>{shortcut.key}</Text> {figures.lineVertical} {shortcut.action}\n </Text>\n ))}\n </Box>\n {footer.subTitle ? (\n <Box marginTop={1}>\n <Text>{footer.subTitle}</Text>\n </Box>\n ) : null}\n </Box>\n ) : null}\n </>\n )\n}\n\nexport {ConcurrentOutput}\n"]}
|
|
@@ -40,7 +40,7 @@ describe('ConcurrentOutput', () => {
|
|
|
40
40
|
shortcuts: [
|
|
41
41
|
{
|
|
42
42
|
key: 'p',
|
|
43
|
-
action: '
|
|
43
|
+
action: 'preview in your browser',
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
key: 'q',
|
|
@@ -60,7 +60,7 @@ describe('ConcurrentOutput', () => {
|
|
|
60
60
|
0000-00-00 00:00:00 │ frontend │ second frontend message
|
|
61
61
|
0000-00-00 00:00:00 │ frontend │ third frontend message
|
|
62
62
|
|
|
63
|
-
› Press p │
|
|
63
|
+
› Press p │ preview in your browser
|
|
64
64
|
› Press q │ quit
|
|
65
65
|
|
|
66
66
|
Preview URL: https://shopify.com
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConcurrentOutput.test.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/ConcurrentOutput.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAC,wBAAwB,EAAE,sBAAsB,EAAC,MAAM,qBAAqB,CAAA;AACpF,OAAO,EAAC,eAAe,EAAc,MAAM,kCAAkC,CAAA;AAC7E,OAAO,EAAC,QAAQ,EAAC,MAAM,mCAAmC,CAAA;AAC1D,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAC,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAA;AAG1C,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QAC3E,QAAQ;QACR,IAAI,qBAAiC,CAAA;QACrC,IAAI,sBAAkC,CAAA;QAEtC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,UAAU,OAAO,EAAE,OAAO;YACjE,qBAAqB,GAAG,OAAO,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,MAAM,eAAe,GAAG,IAAI,OAAO,CAAO,UAAU,OAAO,EAAE,OAAO;YAClE,sBAAsB,GAAG,OAAO,CAAA;QAClC,CAAC,CAAC,CAAA;QAEF,MAAM,cAAc,GAAG;YACrB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,KAAK,EAAE,MAAgB,EAAE,OAAiB,EAAE,OAAoB,EAAE,EAAE;gBAC1E,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;gBACrC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;gBACtC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;gBAErC,qBAAqB,EAAE,CAAA;YACzB,CAAC;SACF,CAAA;QAED,MAAM,eAAe,GAAG;YACtB,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,KAAK,EAAE,MAAgB,EAAE,OAAiB,EAAE,OAAoB,EAAE,EAAE;gBAC1E,MAAM,cAAc,CAAA;gBAEpB,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;gBACtC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;gBACvC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;gBAEtC,sBAAsB,EAAE,CAAA;YAC1B,CAAC;SACF,CAAA;QACD,OAAO;QAEP,MAAM,cAAc,GAAG,MAAM,CAC3B,oBAAC,gBAAgB,IACf,SAAS,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC,EAC5C,eAAe,EAAE,IAAI,eAAe,EAAE,EACtC,MAAM,EAAE;gBACN,SAAS,EAAE;oBACT;wBACE,GAAG,EAAE,GAAG;wBACR,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"ConcurrentOutput.test.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/ConcurrentOutput.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import {ConcurrentOutput} from './ConcurrentOutput.js'\nimport {getLastFrameAfterUnmount, waitForInputsToBeReady} from '../../testing/ui.js'\nimport {AbortController, AbortSignal} from '../../../../public/node/abort.js'\nimport {unstyled} from '../../../../public/node/output.js'\nimport React from 'react'\nimport {describe, expect, test, vi} from 'vitest'\nimport {render} from 'ink-testing-library'\nimport {Writable} from 'stream'\n\ndescribe('ConcurrentOutput', () => {\n test('renders a stream of concurrent outputs from sub-processes', async () => {\n // Given\n let backendPromiseResolve: () => void\n let frontendPromiseResolve: () => void\n\n const backendPromise = new Promise<void>(function (resolve, _reject) {\n backendPromiseResolve = resolve\n })\n\n const frontendPromise = new Promise<void>(function (resolve, _reject) {\n frontendPromiseResolve = resolve\n })\n\n const backendProcess = {\n prefix: 'backend',\n action: async (stdout: Writable, _stderr: Writable, _signal: AbortSignal) => {\n stdout.write('first backend message')\n stdout.write('second backend message')\n stdout.write('third backend message')\n\n backendPromiseResolve()\n },\n }\n\n const frontendProcess = {\n prefix: 'frontend',\n action: async (stdout: Writable, _stderr: Writable, _signal: AbortSignal) => {\n await backendPromise\n\n stdout.write('first frontend message')\n stdout.write('second frontend message')\n stdout.write('third frontend message')\n\n frontendPromiseResolve()\n },\n }\n // When\n\n const renderInstance = render(\n <ConcurrentOutput\n processes={[backendProcess, frontendProcess]}\n abortController={new AbortController()}\n footer={{\n shortcuts: [\n {\n key: 'p',\n action: 'preview in your browser',\n },\n {\n key: 'q',\n action: 'quit',\n },\n ],\n subTitle: `Preview URL: https://shopify.com`,\n }}\n />,\n )\n\n // wait for all output to be rendered\n await frontendPromise\n\n // Then\n expect(unstyled(getLastFrameAfterUnmount(renderInstance)!.replace(/\\d/g, '0'))).toMatchInlineSnapshot(`\n \"0000-00-00 00:00:00 │ backend │ first backend message\n 0000-00-00 00:00:00 │ backend │ second backend message\n 0000-00-00 00:00:00 │ backend │ third backend message\n 0000-00-00 00:00:00 │ frontend │ first frontend message\n 0000-00-00 00:00:00 │ frontend │ second frontend message\n 0000-00-00 00:00:00 │ frontend │ third frontend message\n\n › Press p │ preview in your browser\n › Press q │ quit\n\n Preview URL: https://shopify.com\n \"\n `)\n })\n\n test('accepts a onInput function that fires when a key is pressed', async () => {\n const neverEndingPromise = new Promise<void>(function (_resolve, _reject) {})\n\n const neverEndingProcess = {\n prefix: 'never-ending-process',\n action: async () => {\n await neverEndingPromise\n },\n }\n\n const onInput = vi.fn()\n\n const renderInstance = render(\n <ConcurrentOutput\n processes={[neverEndingProcess]}\n abortController={new AbortController()}\n onInput={(input, key) => onInput(input, key)}\n />,\n )\n\n await waitForInputsToBeReady()\n expect(onInput).toHaveBeenCalledTimes(0)\n\n renderInstance.stdin.write('a')\n expect(onInput).toHaveBeenCalledTimes(1)\n expect(onInput.mock.calls[0]![0]).toBe('a')\n })\n})\n"]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { InlineToken, TokenItem } from './TokenizedText.js';
|
|
2
|
+
import { TextProps } from 'ink';
|
|
2
3
|
import { FunctionComponent } from 'react';
|
|
3
4
|
interface ListProps {
|
|
4
5
|
title?: string;
|
|
5
6
|
items: TokenItem<InlineToken>[];
|
|
6
7
|
ordered?: boolean;
|
|
7
8
|
margin?: boolean;
|
|
9
|
+
color?: TextProps['color'];
|
|
8
10
|
}
|
|
9
11
|
/**
|
|
10
12
|
* `List` displays an unordered or ordered list with text aligned with the bullet point
|
|
@@ -6,15 +6,16 @@ const DOT = '•';
|
|
|
6
6
|
* `List` displays an unordered or ordered list with text aligned with the bullet point
|
|
7
7
|
* and wrapped to the container width.
|
|
8
8
|
*/
|
|
9
|
-
const List = ({ title, items, margin = true, ordered = false }) => {
|
|
9
|
+
const List = ({ title, items, margin = true, ordered = false, color }) => {
|
|
10
10
|
return (React.createElement(Box, { flexDirection: "column" },
|
|
11
|
-
title ? React.createElement(Text, { bold: true }, title) : null,
|
|
11
|
+
title ? (React.createElement(Text, { bold: true, color: color }, title)) : null,
|
|
12
12
|
items.map((item, index) => (React.createElement(Box, { key: index },
|
|
13
13
|
React.createElement(Box, null,
|
|
14
14
|
margin ? React.createElement(Text, null, ' ') : null,
|
|
15
|
-
React.createElement(Text,
|
|
15
|
+
React.createElement(Text, { color: color }, `${ordered ? `${index + 1}.` : DOT}`)),
|
|
16
16
|
React.createElement(Box, { flexGrow: 1, marginLeft: 1 },
|
|
17
|
-
React.createElement(
|
|
17
|
+
React.createElement(Text, { color: color },
|
|
18
|
+
React.createElement(TokenizedText, { item: item }))))))));
|
|
18
19
|
};
|
|
19
20
|
export { List };
|
|
20
21
|
//# sourceMappingURL=List.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/List.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyB,aAAa,EAAC,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAC,GAAG,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/List.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyB,aAAa,EAAC,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAC,GAAG,EAAE,IAAI,EAAY,MAAM,KAAK,CAAA;AACxC,OAAO,KAA0B,MAAM,OAAO,CAAA;AAU9C,MAAM,GAAG,GAAG,GAAG,CAAA;AAEf;;;GAGG;AACH,MAAM,IAAI,GAAiC,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,KAAK,EAAC,EAAe,EAAE;IAChH,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACxB,KAAK,CAAC,CAAC,CAAC,CACP,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,KAAK,IACpB,KAAK,CACD,CACR,CAAC,CAAC,CAAC,IAAI;QACP,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,oBAAC,GAAG,IAAC,GAAG,EAAE,KAAK;YACb,oBAAC,GAAG;gBACD,MAAM,CAAC,CAAC,CAAC,oBAAC,IAAI,QAAE,IAAI,CAAQ,CAAC,CAAC,CAAC,IAAI;gBACpC,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,IAAG,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAQ,CAC7D;YAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;gBAC7B,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK;oBAChB,oBAAC,aAAa,IAAC,IAAI,EAAE,IAAI,GAAI,CACxB,CACH,CACF,CACP,CAAC,CACE,CACP,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAC,IAAI,EAAC,CAAA","sourcesContent":["import {InlineToken, TokenItem, TokenizedText} from './TokenizedText.js'\nimport {Box, Text, TextProps} from 'ink'\nimport React, {FunctionComponent} from 'react'\n\ninterface ListProps {\n title?: string\n items: TokenItem<InlineToken>[]\n ordered?: boolean\n margin?: boolean\n color?: TextProps['color']\n}\n\nconst DOT = '•'\n\n/**\n * `List` displays an unordered or ordered list with text aligned with the bullet point\n * and wrapped to the container width.\n */\nconst List: FunctionComponent<ListProps> = ({title, items, margin = true, ordered = false, color}): JSX.Element => {\n return (\n <Box flexDirection=\"column\">\n {title ? (\n <Text bold color={color}>\n {title}\n </Text>\n ) : null}\n {items.map((item, index) => (\n <Box key={index}>\n <Box>\n {margin ? <Text>{' '}</Text> : null}\n <Text color={color}>{`${ordered ? `${index + 1}.` : DOT}`}</Text>\n </Box>\n\n <Box flexGrow={1} marginLeft={1}>\n <Text color={color}>\n <TokenizedText item={item} />\n </Text>\n </Box>\n </Box>\n ))}\n </Box>\n )\n}\n\nexport {List}\n"]}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import { InlineToken, TokenItem } from '../TokenizedText.js';
|
|
2
|
+
import { TextProps } from 'ink';
|
|
2
3
|
import { FunctionComponent } from 'react';
|
|
4
|
+
type Items = TokenItem<InlineToken>[];
|
|
5
|
+
export interface InfoTableSection {
|
|
6
|
+
color?: TextProps['color'];
|
|
7
|
+
header: string;
|
|
8
|
+
helperText?: string;
|
|
9
|
+
items: Items;
|
|
10
|
+
}
|
|
3
11
|
export interface InfoTableProps {
|
|
4
12
|
table: {
|
|
5
|
-
[header: string]:
|
|
6
|
-
};
|
|
13
|
+
[header: string]: Items;
|
|
14
|
+
} | InfoTableSection[];
|
|
7
15
|
}
|
|
8
16
|
declare const InfoTable: FunctionComponent<InfoTableProps>;
|
|
9
17
|
export { InfoTable };
|
|
@@ -3,15 +3,19 @@ import { capitalize } from '../../../../../public/common/string.js';
|
|
|
3
3
|
import { Box, Text } from 'ink';
|
|
4
4
|
import React from 'react';
|
|
5
5
|
const InfoTable = ({ table }) => {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
const sections = Array.isArray(table)
|
|
7
|
+
? table
|
|
8
|
+
: Object.keys(table).map((header) => ({ header, items: table[header], color: undefined, helperText: undefined }));
|
|
9
|
+
const headerColumnWidth = Math.max(...sections.map((section) => section.header.length));
|
|
10
|
+
return (React.createElement(Box, { flexDirection: "column" }, sections.map((section, index) => (React.createElement(Box, { key: index, marginBottom: index === sections.length - 1 ? 0 : 1 },
|
|
11
|
+
section.header.length > 0 && (React.createElement(Box, { width: headerColumnWidth + 1 },
|
|
12
|
+
React.createElement(Text, { color: section.color },
|
|
13
|
+
capitalize(section.header),
|
|
12
14
|
":"))),
|
|
13
|
-
React.createElement(Box, { marginLeft: header.length > 0 ? 2 : 0, flexGrow: 1 },
|
|
14
|
-
React.createElement(List, { margin: false, items:
|
|
15
|
+
React.createElement(Box, { marginLeft: section.header.length > 0 ? 2 : 0, flexGrow: 1, flexDirection: "column" },
|
|
16
|
+
React.createElement(List, { margin: false, items: section.items, color: section.color }),
|
|
17
|
+
section.helperText ? (React.createElement(Box, { marginTop: 1 },
|
|
18
|
+
React.createElement(Text, { color: section.color }, section.helperText))) : null))))));
|
|
15
19
|
};
|
|
16
20
|
export { InfoTable };
|
|
17
21
|
//# sourceMappingURL=InfoTable.js.map
|