@shopify/cli-kit 3.38.0 → 3.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/cli-ruby/.devcontainer.json +5 -0
- package/assets/cli-ruby/.rubocop.yml +102 -0
- package/assets/cli-ruby/.rubocop_todo.yml +24 -0
- package/assets/cli-ruby/.ruby-version +1 -0
- package/assets/cli-ruby/CHANGELOG.md +634 -0
- package/assets/cli-ruby/CONTRIBUTING.md +3 -0
- package/assets/cli-ruby/Codespace.dockerfile +35 -0
- package/assets/cli-ruby/Gemfile +31 -0
- package/assets/cli-ruby/Gemfile.lock +190 -0
- package/{LICENSE → assets/cli-ruby/LICENSE} +2 -0
- package/assets/cli-ruby/README.md +30 -0
- package/assets/cli-ruby/RELEASING.md +72 -0
- package/assets/cli-ruby/Rakefile +243 -0
- package/assets/cli-ruby/SECURITY.md +59 -0
- package/assets/cli-ruby/Tests.dockerfile +35 -0
- package/assets/cli-ruby/assets/logo.png +0 -0
- package/assets/cli-ruby/bin/console +11 -0
- package/assets/cli-ruby/bin/load_shopify.rb +22 -0
- package/assets/cli-ruby/bin/shopify +60 -0
- package/assets/cli-ruby/bin/shopify.bat +3 -0
- package/assets/cli-ruby/dev.yml +29 -0
- package/assets/cli-ruby/docs/README.md +13 -0
- package/assets/cli-ruby/docs/contributors/testing.md +27 -0
- package/assets/cli-ruby/docs/users/installation.md +3 -0
- package/assets/cli-ruby/docs/users/migrate-from-themekit.md +18 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-arm-macos-v0.1.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-arm-macos-v0.2.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-arm-macos-v0.2.1.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-arm-macos-v0.3.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-linux-v0.1.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-linux-v0.2.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-linux-v0.2.1.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-linux-v0.3.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-macos-v0.1.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-macos-v0.2.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-macos-v0.2.1.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-macos-v0.3.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-windows-v0.1.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-windows-v0.2.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-windows-v0.2.1.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/hashes/javy-x86_64-windows-v0.3.0.gz.sha256 +1 -0
- package/assets/cli-ruby/ext/javy/javy.rb +204 -0
- package/assets/cli-ruby/ext/javy/version +1 -0
- package/assets/cli-ruby/ext/shopify-extensions/extconf.rb +21 -0
- package/assets/cli-ruby/ext/shopify-extensions/shopify_extensions.rb +152 -0
- package/assets/cli-ruby/ext/shopify-extensions/version +1 -0
- package/assets/cli-ruby/features/support/assertions.rb +17 -0
- package/assets/cli-ruby/features/support/cli.rb +7 -0
- package/assets/cli-ruby/features/support/process.rb +27 -0
- package/assets/cli-ruby/features/support/requires.rb +3 -0
- package/assets/cli-ruby/lib/docgen/class_template.md.erb +81 -0
- package/assets/cli-ruby/lib/docgen/index_template.md.erb +5 -0
- package/assets/cli-ruby/lib/docgen/markdown.rb +101 -0
- package/assets/cli-ruby/lib/graphql/admin_introspection.graphql +87 -0
- package/assets/cli-ruby/lib/graphql/all_organizations.graphql +19 -0
- package/assets/cli-ruby/lib/graphql/all_orgs_with_apps.graphql +30 -0
- package/assets/cli-ruby/lib/graphql/api_versions.graphql +6 -0
- package/assets/cli-ruby/lib/graphql/convert_dev_to_test_store.graphql +10 -0
- package/assets/cli-ruby/lib/graphql/create_app.graphql +20 -0
- package/assets/cli-ruby/lib/graphql/create_customer.graphql +9 -0
- package/assets/cli-ruby/lib/graphql/create_draft_order.graphql +8 -0
- package/assets/cli-ruby/lib/graphql/create_product.graphql +9 -0
- package/assets/cli-ruby/lib/graphql/extension_create.graphql +36 -0
- package/assets/cli-ruby/lib/graphql/extension_update_draft.graphql +18 -0
- package/assets/cli-ruby/lib/graphql/fetch_specifications.graphql +14 -0
- package/assets/cli-ruby/lib/graphql/find_organization.graphql +18 -0
- package/assets/cli-ruby/lib/graphql/find_organization_with_apps.graphql +20 -0
- package/assets/cli-ruby/lib/graphql/get_app_by_api_key.graphql +9 -0
- package/assets/cli-ruby/lib/graphql/get_app_urls.graphql +6 -0
- package/assets/cli-ruby/lib/graphql/get_extension_registrations.graphql +27 -0
- package/assets/cli-ruby/lib/graphql/get_variant_id.graphql +16 -0
- package/assets/cli-ruby/lib/graphql/update_dashboard_urls.graphql +8 -0
- package/assets/cli-ruby/lib/project_types/extension/cli.rb +156 -0
- package/assets/cli-ruby/lib/project_types/extension/commands/build.rb +51 -0
- package/assets/cli-ruby/lib/project_types/extension/commands/check.rb +51 -0
- package/assets/cli-ruby/lib/project_types/extension/commands/connect.rb +35 -0
- package/assets/cli-ruby/lib/project_types/extension/commands/create.rb +100 -0
- package/assets/cli-ruby/lib/project_types/extension/commands/extension_command.rb +29 -0
- package/assets/cli-ruby/lib/project_types/extension/commands/info.rb +86 -0
- package/assets/cli-ruby/lib/project_types/extension/commands/push.rb +112 -0
- package/assets/cli-ruby/lib/project_types/extension/commands/register.rb +67 -0
- package/assets/cli-ruby/lib/project_types/extension/commands/serve.rb +150 -0
- package/assets/cli-ruby/lib/project_types/extension/commands/tunnel.rb +73 -0
- package/assets/cli-ruby/lib/project_types/extension/errors.rb +9 -0
- package/assets/cli-ruby/lib/project_types/extension/extension_project.rb +151 -0
- package/assets/cli-ruby/lib/project_types/extension/extension_project_keys.rb +12 -0
- package/assets/cli-ruby/lib/project_types/extension/features/argo.rb +50 -0
- package/assets/cli-ruby/lib/project_types/extension/features/argo_config.rb +59 -0
- package/assets/cli-ruby/lib/project_types/extension/features/argo_dependencies.rb +28 -0
- package/assets/cli-ruby/lib/project_types/extension/features/argo_runtime.rb +15 -0
- package/assets/cli-ruby/lib/project_types/extension/features/argo_serve.rb +115 -0
- package/assets/cli-ruby/lib/project_types/extension/features/argo_setup.rb +54 -0
- package/assets/cli-ruby/lib/project_types/extension/features/argo_setup_step.rb +31 -0
- package/assets/cli-ruby/lib/project_types/extension/features/argo_setup_steps.rb +51 -0
- package/assets/cli-ruby/lib/project_types/extension/features/runtimes/admin.rb +29 -0
- package/assets/cli-ruby/lib/project_types/extension/features/runtimes/base.rb +19 -0
- package/assets/cli-ruby/lib/project_types/extension/features/runtimes/checkout_post_purchase.rb +23 -0
- package/assets/cli-ruby/lib/project_types/extension/features/runtimes/checkout_ui_extension.rb +29 -0
- package/assets/cli-ruby/lib/project_types/extension/forms/connect.rb +42 -0
- package/assets/cli-ruby/lib/project_types/extension/forms/create.rb +49 -0
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_name.rb +48 -0
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_registration.rb +55 -0
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_template.rb +37 -0
- package/assets/cli-ruby/lib/project_types/extension/forms/questions/ask_type.rb +47 -0
- package/assets/cli-ruby/lib/project_types/extension/loaders/project.rb +50 -0
- package/assets/cli-ruby/lib/project_types/extension/loaders/specification_handler.rb +22 -0
- package/assets/cli-ruby/lib/project_types/extension/messages/message_loading.rb +34 -0
- package/assets/cli-ruby/lib/project_types/extension/messages/messages.rb +292 -0
- package/assets/cli-ruby/lib/project_types/extension/models/app.rb +14 -0
- package/assets/cli-ruby/lib/project_types/extension/models/development_server.rb +77 -0
- package/assets/cli-ruby/lib/project_types/extension/models/development_server_requirements.rb +56 -0
- package/assets/cli-ruby/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
- package/assets/cli-ruby/lib/project_types/extension/models/npm_package.rb +44 -0
- package/assets/cli-ruby/lib/project_types/extension/models/product.rb +12 -0
- package/assets/cli-ruby/lib/project_types/extension/models/registration.rb +20 -0
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/app.rb +13 -0
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/base.rb +31 -0
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/capabilities.rb +11 -0
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development.rb +33 -0
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_entries.rb +38 -0
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_renderer.rb +38 -0
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/development_resource.rb +13 -0
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/extension.rb +46 -0
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/root.rb +21 -0
- package/assets/cli-ruby/lib/project_types/extension/models/server_config/user.rb +10 -0
- package/assets/cli-ruby/lib/project_types/extension/models/specification.rb +41 -0
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +29 -0
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/checkout_ui_extension.rb +170 -0
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/default.rb +145 -0
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/theme_app_extension.rb +122 -0
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension.rb +58 -0
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension_utils/script_config.rb +33 -0
- package/assets/cli-ruby/lib/project_types/extension/models/specification_handlers/web_pixel_extension_utils/script_config_repository.rb +75 -0
- package/assets/cli-ruby/lib/project_types/extension/models/specifications.rb +89 -0
- package/assets/cli-ruby/lib/project_types/extension/models/validation_error.rb +17 -0
- package/assets/cli-ruby/lib/project_types/extension/models/version.rb +15 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/choose_next_available_port.rb +36 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/configure_features.rb +73 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/configure_options.rb +21 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/convert_server_config.rb +85 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/app_converter.rb +27 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/product_converter.rb +21 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/registration_converter.rb +28 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/validation_error_converter.rb +25 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/converters/version_converter.rb +28 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/create_extension.rb +31 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/ensure_resource_url.rb +39 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/base.rb +15 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/build.rb +30 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/create.rb +30 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/outdated_extension_detection.rb +57 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/execute_commands/serve.rb +36 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/fetch_specifications.rb +21 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/find_npm_packages.rb +106 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/find_package_from_json.rb +37 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_app.rb +22 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_apps.rb +26 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_extensions.rb +33 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/get_product.rb +22 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/merge_server_config.rb +47 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/update_draft.rb +29 -0
- package/assets/cli-ruby/lib/project_types/extension/tasks/user_errors.rb +45 -0
- package/assets/cli-ruby/lib/project_types/node/cli.rb +12 -0
- package/assets/cli-ruby/lib/project_types/node/forms/create.rb +45 -0
- package/assets/cli-ruby/lib/project_types/node/messages/messages.rb +33 -0
- package/assets/cli-ruby/lib/project_types/php/cli.rb +16 -0
- package/assets/cli-ruby/lib/project_types/php/forms/create.rb +44 -0
- package/assets/cli-ruby/lib/project_types/php/messages/messages.rb +29 -0
- package/assets/cli-ruby/lib/project_types/rails/cli.rb +15 -0
- package/assets/cli-ruby/lib/project_types/rails/forms/create.rb +75 -0
- package/assets/cli-ruby/lib/project_types/rails/gem.rb +110 -0
- package/assets/cli-ruby/lib/project_types/rails/messages/messages.rb +101 -0
- package/assets/cli-ruby/lib/project_types/script/cli.rb +27 -0
- package/assets/cli-ruby/lib/project_types/script/commands/connect.rb +16 -0
- package/assets/cli-ruby/lib/project_types/script/commands/create.rb +24 -0
- package/assets/cli-ruby/lib/project_types/script/commands/javy.rb +24 -0
- package/assets/cli-ruby/lib/project_types/script/commands/push.rb +26 -0
- package/assets/cli-ruby/lib/project_types/script/loaders/project.rb +46 -0
- package/assets/cli-ruby/lib/project_types/script/loaders/specification_handler.rb +22 -0
- package/assets/cli-ruby/lib/project_types/script/messages/messages.rb +11 -0
- package/assets/cli-ruby/lib/project_types/theme/cli.rb +33 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/check.rb +38 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/common/root_helper.rb +93 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/common/shop_helper.rb +13 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/delete.rb +70 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/init.rb +46 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/language_server.rb +18 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/list.rb +33 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/open.rb +73 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/package.rb +73 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/publish.rb +49 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/pull.rb +112 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/push.rb +153 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/serve.rb +88 -0
- package/assets/cli-ruby/lib/project_types/theme/commands/share.rb +62 -0
- package/assets/cli-ruby/lib/project_types/theme/conversions/base_glob.rb +65 -0
- package/assets/cli-ruby/lib/project_types/theme/conversions/ignore_glob.rb +15 -0
- package/assets/cli-ruby/lib/project_types/theme/conversions/include_glob.rb +15 -0
- package/assets/cli-ruby/lib/project_types/theme/forms/confirm_store.rb +15 -0
- package/assets/cli-ruby/lib/project_types/theme/forms/select.rb +34 -0
- package/assets/cli-ruby/lib/project_types/theme/messages/messages.rb +424 -0
- package/assets/cli-ruby/lib/project_types/theme/models/specification_handlers/theme.rb +19 -0
- package/assets/cli-ruby/lib/project_types/theme/presenters/theme_presenter.rb +48 -0
- package/assets/cli-ruby/lib/project_types/theme/presenters/themes_presenter.rb +29 -0
- package/assets/cli-ruby/lib/project_types/theme/ui/sync_progress_bar.rb +20 -0
- package/assets/cli-ruby/lib/rubygems_plugin.rb +26 -0
- package/assets/cli-ruby/lib/shopify_cli/admin_api/populate_resource_command.rb +166 -0
- package/assets/cli-ruby/lib/shopify_cli/admin_api/schema.rb +35 -0
- package/assets/cli-ruby/lib/shopify_cli/admin_api.rb +163 -0
- package/assets/cli-ruby/lib/shopify_cli/api.rb +131 -0
- package/assets/cli-ruby/lib/shopify_cli/app_type_detector.rb +36 -0
- package/assets/cli-ruby/lib/shopify_cli/assets/post_auth_page/index.html.erb +34 -0
- package/assets/cli-ruby/lib/shopify_cli/assets/post_auth_page/style.css +58 -0
- package/assets/cli-ruby/lib/shopify_cli/changelog.rb +148 -0
- package/assets/cli-ruby/lib/shopify_cli/command/app_sub_command.rb +26 -0
- package/assets/cli-ruby/lib/shopify_cli/command/project_command.rb +31 -0
- package/assets/cli-ruby/lib/shopify_cli/command/sub_command.rb +21 -0
- package/assets/cli-ruby/lib/shopify_cli/command.rb +173 -0
- package/assets/cli-ruby/lib/shopify_cli/command_options/command_serve_options.rb +53 -0
- package/assets/cli-ruby/lib/shopify_cli/command_options.rb +7 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/app/connect.rb +22 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create/node.rb +40 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create/php.rb +37 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create/rails.rb +42 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/app/create.rb +28 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/app/deploy.rb +51 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/app/open.rb +19 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/app/serve.rb +51 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/app/tunnel.rb +43 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/app.rb +29 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/config.rb +76 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/help.rb +52 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/login.rb +98 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/logout.rb +50 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/populate/customer.rb +25 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/populate/draft_order.rb +28 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/populate/product.rb +24 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/populate.rb +23 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/reporting.rb +38 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/store.rb +15 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/switch.rb +39 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/system.rb +165 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/version.rb +15 -0
- package/assets/cli-ruby/lib/shopify_cli/commands/whoami.rb +28 -0
- package/assets/cli-ruby/lib/shopify_cli/commands.rb +36 -0
- package/assets/cli-ruby/lib/shopify_cli/connect.rb +32 -0
- package/assets/cli-ruby/lib/shopify_cli/constants.rb +91 -0
- package/assets/cli-ruby/lib/shopify_cli/context.rb +691 -0
- package/assets/cli-ruby/lib/shopify_cli/core/cli_version.rb +20 -0
- package/assets/cli-ruby/lib/shopify_cli/core/entry_point.rb +64 -0
- package/assets/cli-ruby/lib/shopify_cli/core/executor.rb +23 -0
- package/assets/cli-ruby/lib/shopify_cli/core/finalize.rb +13 -0
- package/assets/cli-ruby/lib/shopify_cli/core/help_resolver.rb +20 -0
- package/assets/cli-ruby/lib/shopify_cli/core/monorail.rb +122 -0
- package/assets/cli-ruby/lib/shopify_cli/core.rb +9 -0
- package/assets/cli-ruby/lib/shopify_cli/db.rb +114 -0
- package/assets/cli-ruby/lib/shopify_cli/environment.rb +198 -0
- package/assets/cli-ruby/lib/shopify_cli/exception_reporter.rb +79 -0
- package/assets/cli-ruby/lib/shopify_cli/feature.rb +95 -0
- package/assets/cli-ruby/lib/shopify_cli/file_system_listener.rb +30 -0
- package/assets/cli-ruby/lib/shopify_cli/form.rb +42 -0
- package/assets/cli-ruby/lib/shopify_cli/git.rb +320 -0
- package/assets/cli-ruby/lib/shopify_cli/github/issue_url_generator.rb +30 -0
- package/assets/cli-ruby/lib/shopify_cli/github.rb +5 -0
- package/assets/cli-ruby/lib/shopify_cli/helpers/haikunator.rb +92 -0
- package/assets/cli-ruby/lib/shopify_cli/helpers.rb +5 -0
- package/assets/cli-ruby/lib/shopify_cli/heroku.rb +140 -0
- package/assets/cli-ruby/lib/shopify_cli/http_request.rb +43 -0
- package/assets/cli-ruby/lib/shopify_cli/identity_auth/env_auth_token.rb +34 -0
- package/assets/cli-ruby/lib/shopify_cli/identity_auth/servlet.rb +44 -0
- package/assets/cli-ruby/lib/shopify_cli/identity_auth.rb +333 -0
- package/assets/cli-ruby/lib/shopify_cli/js_deps.rb +110 -0
- package/assets/cli-ruby/lib/shopify_cli/js_system.rb +115 -0
- package/assets/cli-ruby/lib/shopify_cli/lazy_delegator.rb +55 -0
- package/assets/cli-ruby/lib/shopify_cli/messages/messages.rb +863 -0
- package/assets/cli-ruby/lib/shopify_cli/method_object.rb +123 -0
- package/assets/cli-ruby/lib/shopify_cli/migrator/migration.rb +27 -0
- package/assets/cli-ruby/lib/shopify_cli/migrator/migrations/1631709766_noop.rb +13 -0
- package/assets/cli-ruby/lib/shopify_cli/migrator/migrations/1633691650_merge_reporting_configuration.rb +41 -0
- package/assets/cli-ruby/lib/shopify_cli/migrator.rb +46 -0
- package/assets/cli-ruby/lib/shopify_cli/options.rb +40 -0
- package/assets/cli-ruby/lib/shopify_cli/packager.rb +108 -0
- package/assets/cli-ruby/lib/shopify_cli/partners_api/app_extensions/job.rb +36 -0
- package/assets/cli-ruby/lib/shopify_cli/partners_api/app_extensions.rb +46 -0
- package/assets/cli-ruby/lib/shopify_cli/partners_api/organizations.rb +45 -0
- package/assets/cli-ruby/lib/shopify_cli/partners_api.rb +91 -0
- package/assets/cli-ruby/lib/shopify_cli/php_deps.rb +102 -0
- package/assets/cli-ruby/lib/shopify_cli/process_supervision.rb +228 -0
- package/assets/cli-ruby/lib/shopify_cli/project.rb +199 -0
- package/assets/cli-ruby/lib/shopify_cli/project_commands.rb +16 -0
- package/assets/cli-ruby/lib/shopify_cli/project_type.rb +66 -0
- package/assets/cli-ruby/lib/shopify_cli/release.rb +197 -0
- package/assets/cli-ruby/lib/shopify_cli/reporting_configuration_controller.rb +64 -0
- package/assets/cli-ruby/lib/shopify_cli/resolve_constant.rb +25 -0
- package/assets/cli-ruby/lib/shopify_cli/resources/env_file.rb +108 -0
- package/assets/cli-ruby/lib/shopify_cli/resources.rb +5 -0
- package/assets/cli-ruby/lib/shopify_cli/result.rb +448 -0
- package/assets/cli-ruby/lib/shopify_cli/sed.rb +19 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/connect_service.rb +25 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/create/node_service.rb +143 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/create/php_service.rb +147 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/create/rails_service.rb +239 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/node_service.rb +101 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/php_service.rb +135 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/deploy/heroku/rails_service.rb +120 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/open_service.rb +19 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/node_service.rb +19 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/php_service.rb +23 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/rails_service.rb +28 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/serve/serve_service.rb +57 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/auth_service.rb +21 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/start_service.rb +20 -0
- package/assets/cli-ruby/lib/shopify_cli/services/app/tunnel/stop_service.rb +20 -0
- package/assets/cli-ruby/lib/shopify_cli/services/base_service.rb +13 -0
- package/assets/cli-ruby/lib/shopify_cli/services/reporting_service.rb +16 -0
- package/assets/cli-ruby/lib/shopify_cli/services.rb +38 -0
- package/assets/cli-ruby/lib/shopify_cli/shopifolk.rb +81 -0
- package/assets/cli-ruby/lib/shopify_cli/task.rb +20 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks/confirm_store.rb +18 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks/create_api_client.rb +40 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_authenticated.rb +19 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_dev_store.rb +41 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_env.rb +90 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_git_dependency.rb +14 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_loopback_url.rb +20 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks/ensure_project_type.rb +14 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks/select_org_and_shop.rb +81 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks/update_dashboard_urls.rb +57 -0
- package/assets/cli-ruby/lib/shopify_cli/tasks.rb +44 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/backoff_helper.rb +47 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/cdn_fonts.rb +73 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/certificate_manager.rb +79 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/errors.rb +9 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/header_hash.rb +98 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hooks/file_change_hook.rb +77 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/remote_file_deleter.rb +62 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/remote_file_reloader.rb +63 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/resources/hot-reload-no-script.html +27 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/resources/hot_reload.js +48 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/resources/sse_client.js +43 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/resources/theme.js +114 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/resources/theme_extension.js +121 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/script_injector.rb +57 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload/sections_index.rb +50 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/hot_reload.rb +68 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/local_assets.rb +87 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/proxy.rb +246 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/proxy_param_builder.rb +82 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/reload_mode.rb +34 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/remote_watcher/json_files_update_job.rb +35 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/remote_watcher.rb +44 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/sse.rb +75 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/watcher.rb +61 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server/web_server.rb +140 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/dev_server.rb +320 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/development_theme.rb +101 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/app_extension.rb +40 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/hooks/file_change_hook.rb +68 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/hot_reload/script_injector.rb +30 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/hot_reload.rb +13 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/local_assets.rb +30 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/proxy_param_builder.rb +94 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server/watcher.rb +47 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/dev_server.rb +150 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/host_theme.rb +104 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/syncer/extension_serve_job.rb +133 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/syncer/operation.rb +21 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/syncer.rb +81 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/extension/ui/host_theme_progress_bar.rb +35 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/file.rb +149 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/filter/path_matcher.rb +38 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/ignore_filter.rb +112 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/ignore_helper.rb +37 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/include_filter.rb +67 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/mime_type.rb +34 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/root.rb +62 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/checksums.rb +66 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/downloader.rb +63 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/error_reporter.rb +45 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/merger.rb +53 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/operation.rb +57 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/standard_reporter.rb +32 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/unsupported_script_warning.rb +90 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/bulk.rb +133 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/bulk_item.rb +64 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/bulk_job.rb +139 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/bulk_request.rb +30 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/forms/apply_to_all.rb +41 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/forms/apply_to_all_form.rb +37 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/forms/base_strategy_form.rb +64 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/forms/select_delete_strategy.rb +29 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/forms/select_update_strategy.rb +30 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/json_delete_handler.rb +49 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader/json_update_handler.rb +71 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer/uploader.rb +231 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/syncer.rb +386 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/theme.rb +212 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/theme_access_api.rb +89 -0
- package/assets/cli-ruby/lib/shopify_cli/theme/theme_admin_api.rb +101 -0
- package/assets/cli-ruby/lib/shopify_cli/thread_pool/job.rb +35 -0
- package/assets/cli-ruby/lib/shopify_cli/thread_pool.rb +49 -0
- package/assets/cli-ruby/lib/shopify_cli/transform_data_structure.rb +87 -0
- package/assets/cli-ruby/lib/shopify_cli/tunnel.rb +255 -0
- package/assets/cli-ruby/lib/shopify_cli/utilities.rb +21 -0
- package/assets/cli-ruby/lib/shopify_cli/version.rb +3 -0
- package/assets/cli-ruby/lib/shopify_cli.rb +191 -0
- package/assets/cli-ruby/shipit.rubygems.yml +3 -0
- package/assets/cli-ruby/shopify-cli.gemspec +54 -0
- package/assets/cli-ruby/shopify-dev +16 -0
- package/assets/cli-ruby/test/minitest_ext.rb +115 -0
- package/assets/cli-ruby/test/project_types/extension/extension_test_helpers.rb +70 -0
- package/assets/cli-ruby/test/shopify-cli/migrator/migrations/migration_helper.rb +20 -0
- package/assets/cli-ruby/test/test_helpers.rb +18 -0
- package/assets/cli-ruby/utilities/constants.rb +7 -0
- package/assets/cli-ruby/utilities/docker/container.rb +104 -0
- package/assets/cli-ruby/utilities/docker.rb +89 -0
- package/assets/cli-ruby/utilities/utilities.rb +6 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/REVISION +1 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/autocall.rb +21 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/base_command.rb +49 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/command_registry.rb +94 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/config.rb +133 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +123 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/executor.rb +79 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/ini.rb +102 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/levenshtein.rb +82 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/logger.rb +82 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/resolver.rb +60 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/ruby_backports/enumerable.rb +6 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/support/test_helper.rb +244 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/support.rb +9 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/system.rb +243 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/util.rb +193 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit/version.rb +5 -0
- package/assets/cli-ruby/vendor/deps/cli-kit/lib/cli/kit.rb +60 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/REVISION +1 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +157 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/color.rb +84 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/formatter.rb +192 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +98 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +166 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +139 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +120 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/frame.rb +269 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +84 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/os.rb +73 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/printer.rb +59 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/progress.rb +90 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +484 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/prompt/options_handler.rb +29 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +282 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/spinner/async.rb +40 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +263 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +66 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb +232 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +46 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/truncater.rb +102 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/version.rb +5 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/widgets/base.rb +27 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/widgets/status.rb +61 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +77 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
- package/assets/cli-ruby/vendor/deps/cli-ui/lib/cli/ui.rb +233 -0
- package/assets/cli-ruby/vendor/deps/ruby2_keywords/LICENSE +22 -0
- package/assets/cli-ruby/vendor/deps/ruby2_keywords/README.md +67 -0
- package/assets/cli-ruby/vendor/deps/ruby2_keywords/Rakefile +54 -0
- package/assets/cli-ruby/vendor/deps/ruby2_keywords/lib/ruby2_keywords.rb +57 -0
- package/assets/cli-ruby/vendor/deps/ruby2_keywords/ruby2_keywords.gemspec +18 -0
- package/assets/cli-ruby/vendor/deps/ruby2_keywords/test/test_keyword.rb +41 -0
- package/assets/cli-ruby/vendor/deps/smart_properties/REVISION +1 -0
- package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/errors.rb +114 -0
- package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/property.rb +168 -0
- package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/property_collection.rb +83 -0
- package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/validations/ancestor.rb +27 -0
- package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/validations.rb +8 -0
- package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties/version.rb +3 -0
- package/assets/cli-ruby/vendor/deps/smart_properties/lib/smart_properties.rb +174 -0
- package/assets/cli-ruby/vendor/deps/webrick/Gemfile +3 -0
- package/assets/cli-ruby/vendor/deps/webrick/LICENSE.txt +22 -0
- package/assets/cli-ruby/vendor/deps/webrick/README.md +61 -0
- package/assets/cli-ruby/vendor/deps/webrick/Rakefile +10 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/config.rb +158 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/https.rb +152 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/log.rb +156 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/server.rb +381 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick/version.rb +18 -0
- package/assets/cli-ruby/vendor/deps/webrick/lib/webrick.rb +232 -0
- package/assets/cli-ruby/vendor/deps/webrick/webrick.gemspec +74 -0
- package/assets/cli-ruby/vendor/gen/lib/gen/commands/help.rb +20 -0
- package/assets/cli-ruby/vendor/gen/lib/gen/commands/new.rb +21 -0
- package/assets/cli-ruby/vendor/gen/lib/gen/commands.rb +18 -0
- package/assets/cli-ruby/vendor/gen/lib/gen/entry_point.rb +10 -0
- package/assets/cli-ruby/vendor/gen/lib/gen/generator.rb +165 -0
- package/assets/cli-ruby/vendor/gen/lib/gen.rb +39 -0
- package/assets/cli-ruby/vendor/gen/template/Gemfile +10 -0
- package/assets/cli-ruby/vendor/gen/template/README.md +1 -0
- package/assets/cli-ruby/vendor/gen/template/bin/testunit +23 -0
- package/assets/cli-ruby/vendor/gen/template/bin/update-deps +97 -0
- package/assets/cli-ruby/vendor/gen/template/dev-gems.yml +3 -0
- package/assets/cli-ruby/vendor/gen/template/dev-vendor.yml +4 -0
- package/assets/cli-ruby/vendor/gen/template/exe/__app__-gems +17 -0
- package/assets/cli-ruby/vendor/gen/template/exe/__app__-vendor +18 -0
- package/assets/cli-ruby/vendor/gen/template/lib/__app__/commands/example.rb +19 -0
- package/assets/cli-ruby/vendor/gen/template/lib/__app__/commands/help.rb +21 -0
- package/assets/cli-ruby/vendor/gen/template/lib/__app__/commands.rb +18 -0
- package/assets/cli-ruby/vendor/gen/template/lib/__app__/entry_point.rb +10 -0
- package/assets/cli-ruby/vendor/gen/template/lib/__app__.rb +33 -0
- package/assets/cli-ruby/vendor/gen/template/test/example_test.rb +17 -0
- package/assets/cli-ruby/vendor/gen/template/test/test_helper.rb +22 -0
- package/assets/cli-ruby/vendor/lib/semantic/LICENSE +20 -0
- package/assets/cli-ruby/vendor/lib/semantic/semantic.rb +4 -0
- package/assets/cli-ruby/vendor/lib/semantic/version.rb +179 -0
- package/dist/private/common/json.d.ts +2 -2
- package/dist/private/common/lodash.d.ts +4 -4
- package/dist/private/common/ts/overloaded-parameters.d.ts +5 -5
- package/dist/private/node/analytics.js +1 -1
- package/dist/private/node/analytics.js.map +1 -1
- package/dist/private/node/api/headers.d.ts +1 -1
- package/dist/private/node/api/headers.js +2 -2
- package/dist/private/node/api/headers.js.map +1 -1
- package/dist/private/node/api.d.ts +1 -1
- package/dist/private/node/constants.d.ts +3 -3
- package/dist/private/node/constants.js +1 -1
- package/dist/private/node/constants.js.map +1 -1
- package/dist/private/node/{environment → context}/service.d.ts +1 -1
- package/dist/private/node/{environment → context}/service.js +1 -1
- package/dist/private/node/context/service.js.map +1 -0
- package/dist/private/node/{environment → context}/spin-cache.d.ts +0 -0
- package/dist/private/node/{environment → context}/spin-cache.js +0 -0
- package/dist/private/node/context/spin-cache.js.map +1 -0
- package/dist/private/node/{environment → context}/utilities.d.ts +0 -0
- package/dist/private/node/{environment → context}/utilities.js +0 -0
- package/dist/private/node/context/utilities.js.map +1 -0
- package/dist/private/node/error-handler.d.ts +2 -0
- package/dist/private/node/error-handler.js +5 -0
- package/dist/private/node/error-handler.js.map +1 -0
- package/dist/private/node/session/authorize.js +13 -3
- package/dist/private/node/session/authorize.js.map +1 -1
- package/dist/private/node/session/device-authorization.js +1 -1
- package/dist/private/node/session/device-authorization.js.map +1 -1
- package/dist/private/node/session/exchange.d.ts +1 -1
- package/dist/private/node/session/exchange.js +1 -1
- package/dist/private/node/session/exchange.js.map +1 -1
- package/dist/private/node/session/identity-token-validation.js +1 -1
- package/dist/private/node/session/identity-token-validation.js.map +1 -1
- package/dist/private/node/session/identity.js +1 -1
- package/dist/private/node/session/identity.js.map +1 -1
- package/dist/private/node/session/redirect-listener.d.ts +1 -1
- package/dist/private/node/session/redirect-listener.js +5 -5
- package/dist/private/node/session/redirect-listener.js.map +1 -1
- package/dist/private/node/session/schema.d.ts +3 -3
- package/dist/private/node/session/validate.d.ts +1 -1
- package/dist/private/node/session/validate.js +1 -1
- package/dist/private/node/session/validate.js.map +1 -1
- package/dist/private/node/session.d.ts +4 -4
- package/dist/private/node/session.js +3 -3
- package/dist/private/node/session.js.map +1 -1
- package/dist/private/node/testing/ui.d.ts +31 -0
- package/dist/private/node/testing/ui.js +32 -1
- package/dist/private/node/testing/ui.js.map +1 -1
- package/dist/private/node/ui/components/Alert.d.ts +7 -7
- package/dist/private/node/ui/components/Alert.js +14 -13
- package/dist/private/node/ui/components/Alert.js.map +1 -1
- package/dist/private/node/ui/components/Alert.test.js +18 -4
- package/dist/private/node/ui/components/Alert.test.js.map +1 -1
- package/dist/private/node/ui/components/AutocompletePrompt.d.ts +13 -6
- package/dist/private/node/ui/components/AutocompletePrompt.js +18 -12
- package/dist/private/node/ui/components/AutocompletePrompt.js.map +1 -1
- package/dist/private/node/ui/components/AutocompletePrompt.test.js +62 -8
- package/dist/private/node/ui/components/AutocompletePrompt.test.js.map +1 -1
- package/dist/private/node/ui/components/Banner.d.ts +4 -4
- package/dist/private/node/ui/components/Banner.js.map +1 -1
- package/dist/private/node/ui/components/Command.d.ts +3 -3
- package/dist/private/node/ui/components/Command.js.map +1 -1
- package/dist/private/node/ui/components/ConcurrentOutput.d.ts +11 -5
- package/dist/private/node/ui/components/ConcurrentOutput.js +31 -16
- package/dist/private/node/ui/components/ConcurrentOutput.js.map +1 -1
- package/dist/private/node/ui/components/ConcurrentOutput.test.js +36 -12
- package/dist/private/node/ui/components/ConcurrentOutput.test.js.map +1 -1
- package/dist/private/node/ui/components/FatalError.d.ts +2 -2
- package/dist/private/node/ui/components/FatalError.js +10 -10
- package/dist/private/node/ui/components/FatalError.js.map +1 -1
- package/dist/private/node/ui/components/FilePath.d.ts +3 -3
- package/dist/private/node/ui/components/FilePath.js +1 -4
- package/dist/private/node/ui/components/FilePath.js.map +1 -1
- package/dist/private/node/ui/components/FilePath.test.js +1 -1
- package/dist/private/node/ui/components/FilePath.test.js.map +1 -1
- package/dist/private/node/ui/components/FullScreen.d.ts +3 -3
- package/dist/private/node/ui/components/FullScreen.js +1 -1
- package/dist/private/node/ui/components/FullScreen.js.map +1 -1
- package/dist/private/node/ui/components/Link.d.ts +3 -3
- package/dist/private/node/ui/components/Link.js.map +1 -1
- package/dist/private/node/ui/components/List.d.ts +6 -5
- package/dist/private/node/ui/components/List.js +4 -3
- package/dist/private/node/ui/components/List.js.map +1 -1
- package/dist/private/node/ui/components/Prompts/InfoTable.d.ts +6 -5
- package/dist/private/node/ui/components/Prompts/InfoTable.js +5 -5
- package/dist/private/node/ui/components/Prompts/InfoTable.js.map +1 -1
- package/dist/private/node/ui/components/Prompts/InfoTable.test.d.ts +1 -0
- package/dist/private/node/ui/components/Prompts/InfoTable.test.js +29 -0
- package/dist/private/node/ui/components/Prompts/InfoTable.test.js.map +1 -0
- package/dist/private/node/ui/components/SelectInput.d.ts +11 -3
- package/dist/private/node/ui/components/SelectInput.js +29 -16
- package/dist/private/node/ui/components/SelectInput.js.map +1 -1
- package/dist/private/node/ui/components/SelectInput.test.js +62 -8
- package/dist/private/node/ui/components/SelectInput.test.js.map +1 -1
- package/dist/private/node/ui/components/SelectPrompt.d.ts +8 -7
- package/dist/private/node/ui/components/SelectPrompt.js +22 -13
- package/dist/private/node/ui/components/SelectPrompt.js.map +1 -1
- package/dist/private/node/ui/components/SelectPrompt.test.js +27 -2
- package/dist/private/node/ui/components/SelectPrompt.test.js.map +1 -1
- package/dist/private/node/ui/components/Subdued.d.ts +3 -3
- package/dist/private/node/ui/components/Subdued.js.map +1 -1
- package/dist/private/node/ui/components/Table/Row.d.ts +3 -3
- package/dist/private/node/ui/components/Table/Row.js +3 -2
- package/dist/private/node/ui/components/Table/Row.js.map +1 -1
- package/dist/private/node/ui/components/Table/ScalarDict.d.ts +1 -1
- package/dist/private/node/ui/components/Table/Table.d.ts +11 -8
- package/dist/private/node/ui/components/Table/Table.js +3 -1
- package/dist/private/node/ui/components/Table/Table.js.map +1 -1
- package/dist/private/node/ui/components/Table/Table.test.js +1 -1
- package/dist/private/node/ui/components/Table/Table.test.js.map +1 -1
- package/dist/private/node/ui/components/Tasks.d.ts +7 -3
- package/dist/private/node/ui/components/Tasks.js +32 -6
- package/dist/private/node/ui/components/Tasks.js.map +1 -1
- package/dist/private/node/ui/components/Tasks.test.js +258 -18
- package/dist/private/node/ui/components/Tasks.test.js.map +1 -1
- package/dist/private/node/ui/components/TextAnimation.d.ts +3 -3
- package/dist/private/node/ui/components/TextAnimation.js.map +1 -1
- package/dist/private/node/ui/components/TextInput.d.ts +3 -3
- package/dist/private/node/ui/components/TextInput.js +1 -2
- package/dist/private/node/ui/components/TextInput.js.map +1 -1
- package/dist/private/node/ui/components/TextInput.test.js +1 -1
- package/dist/private/node/ui/components/TextInput.test.js.map +1 -1
- package/dist/private/node/ui/components/TextPrompt.d.ts +3 -3
- package/dist/private/node/ui/components/TextPrompt.js +5 -4
- package/dist/private/node/ui/components/TextPrompt.js.map +1 -1
- package/dist/private/node/ui/components/TextPrompt.test.js +2 -2
- package/dist/private/node/ui/components/TextPrompt.test.js.map +1 -1
- package/dist/private/node/ui/components/TextWithBackground.d.ts +12 -0
- package/dist/private/node/ui/components/TextWithBackground.js +39 -0
- package/dist/private/node/ui/components/TextWithBackground.js.map +1 -0
- package/dist/private/node/ui/components/TokenizedText.d.ts +17 -13
- package/dist/private/node/ui/components/TokenizedText.js +24 -6
- package/dist/private/node/ui/components/TokenizedText.js.map +1 -1
- package/dist/private/node/ui/components/TokenizedText.test.js +7 -2
- package/dist/private/node/ui/components/TokenizedText.test.js.map +1 -1
- package/dist/private/node/ui/components/UserInput.d.ts +3 -3
- package/dist/private/node/ui/components/UserInput.js.map +1 -1
- package/dist/private/node/ui/hooks/use-async-and-unmount.d.ts +1 -1
- package/dist/private/node/ui/hooks/use-async-and-unmount.js +1 -1
- package/dist/private/node/ui/hooks/use-async-and-unmount.js.map +1 -1
- package/dist/private/node/ui/hooks/use-layout.d.ts +1 -0
- package/dist/private/node/ui/hooks/use-layout.js +1 -0
- package/dist/private/node/ui/hooks/use-layout.js.map +1 -1
- package/dist/private/node/ui/utilities.d.ts +1 -1
- package/dist/private/node/ui.d.ts +1 -1
- package/dist/private/node/ui.js +3 -2
- package/dist/private/node/ui.js.map +1 -1
- package/dist/public/common/string.d.ts +3 -3
- package/dist/public/common/string.js.map +1 -1
- package/dist/{private → public}/common/ts/deep-required.d.ts +2 -1
- package/dist/{private → public}/common/ts/deep-required.js +0 -0
- package/dist/public/common/ts/deep-required.js.map +1 -0
- package/dist/public/common/ts/pick-by-prefix.d.ts +2 -1
- package/dist/public/common/ts/pick-by-prefix.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/analytics.js +1 -1
- package/dist/public/node/analytics.js.map +1 -1
- package/dist/public/node/api/http.d.ts +1 -0
- package/dist/public/node/api/http.js +1 -1
- package/dist/public/node/api/partners.js +1 -1
- package/dist/public/node/api/partners.js.map +1 -1
- package/dist/public/node/archiver.d.ts +20 -6
- package/dist/public/node/archiver.js +14 -13
- package/dist/public/node/archiver.js.map +1 -1
- package/dist/public/node/base-command.d.ts +3 -3
- package/dist/public/node/base-command.js +33 -31
- package/dist/public/node/base-command.js.map +1 -1
- package/dist/public/node/cli.d.ts +1 -1
- package/dist/public/node/cli.js +6 -5
- package/dist/public/node/cli.js.map +1 -1
- package/dist/public/node/{environment → context}/fqdn.d.ts +0 -0
- package/dist/public/node/{environment → context}/fqdn.js +1 -1
- package/dist/public/node/context/fqdn.js.map +1 -0
- package/dist/public/node/{environment → context}/local.d.ts +4 -4
- package/dist/public/node/{environment → context}/local.js +6 -6
- package/dist/public/node/context/local.js.map +1 -0
- package/dist/public/node/{environment → context}/spin.d.ts +1 -1
- package/dist/public/node/{environment → context}/spin.js +3 -3
- package/dist/public/node/context/spin.js.map +1 -0
- package/dist/public/node/crypto.d.ts +1 -1
- package/dist/public/node/dot-env.js +2 -0
- package/dist/public/node/dot-env.js.map +1 -1
- package/dist/public/node/environments.d.ts +15 -0
- package/dist/public/node/environments.js +33 -0
- package/dist/public/node/environments.js.map +1 -0
- package/dist/public/node/error-handler.d.ts +1 -2
- package/dist/public/node/error-handler.js +12 -2
- package/dist/public/node/error-handler.js.map +1 -1
- package/dist/public/node/error.d.ts +5 -5
- package/dist/public/node/error.js.map +1 -1
- package/dist/public/node/fs.d.ts +24 -4
- package/dist/public/node/fs.js +31 -2
- package/dist/public/node/fs.js.map +1 -1
- package/dist/public/node/git.d.ts +9 -1
- package/dist/public/node/git.js +32 -2
- package/dist/public/node/git.js.map +1 -1
- package/dist/public/node/hooks/postrun.d.ts +1 -1
- package/dist/public/node/hooks/postrun.js +1 -1
- package/dist/public/node/hooks/postrun.js.map +1 -1
- package/dist/public/node/http.d.ts +10 -1
- package/dist/public/node/http.js +35 -0
- package/dist/public/node/http.js.map +1 -1
- package/dist/public/node/metadata.d.ts +7 -7
- package/dist/public/node/metadata.js +1 -1
- package/dist/public/node/metadata.js.map +1 -1
- package/dist/public/node/monorail.d.ts +6 -6
- package/dist/public/node/monorail.js.map +1 -1
- package/dist/public/node/node-package-manager.d.ts +5 -5
- package/dist/public/node/os.d.ts +2 -2
- package/dist/public/node/output.d.ts +4 -4
- package/dist/public/node/output.js +1 -1
- package/dist/public/node/output.js.map +1 -1
- package/dist/public/node/path.d.ts +1 -1
- package/dist/public/node/plugins/tunnel.d.ts +5 -5
- package/dist/public/node/plugins.d.ts +4 -4
- package/dist/public/node/result.d.ts +1 -1
- package/dist/public/node/ruby.d.ts +2 -1
- package/dist/public/node/ruby.js +43 -20
- package/dist/public/node/ruby.js.map +1 -1
- package/dist/public/node/session.d.ts +1 -1
- package/dist/public/node/session.js +1 -1
- package/dist/public/node/session.js.map +1 -1
- package/dist/public/node/system.d.ts +1 -1
- package/dist/public/node/themes/generate-theme-name.d.ts +1 -0
- package/dist/public/node/themes/generate-theme-name.js +13 -0
- package/dist/public/node/themes/generate-theme-name.js.map +1 -0
- package/dist/public/node/themes/models/theme.d.ts +11 -0
- package/dist/public/node/themes/models/theme.js +29 -0
- package/dist/public/node/themes/models/theme.js.map +1 -0
- package/dist/public/node/themes/replace-invalid-characters.d.ts +1 -0
- package/dist/public/node/themes/replace-invalid-characters.js +6 -0
- package/dist/public/node/themes/replace-invalid-characters.js.map +1 -0
- package/dist/public/node/themes/theme-manager.d.ts +13 -0
- package/dist/public/node/themes/theme-manager.js +40 -0
- package/dist/public/node/themes/theme-manager.js.map +1 -0
- package/dist/public/node/themes/theme-urls.d.ts +5 -0
- package/dist/public/node/themes/theme-urls.js +16 -0
- package/dist/public/node/themes/theme-urls.js.map +1 -0
- package/dist/public/node/themes/themes-api/headers.d.ts +3 -0
- package/dist/public/node/themes/themes-api/headers.js +29 -0
- package/dist/public/node/themes/themes-api/headers.js.map +1 -0
- package/dist/public/node/themes/themes-api/retry.d.ts +1 -0
- package/dist/public/node/themes/themes-api/retry.js +6 -0
- package/dist/public/node/themes/themes-api/retry.js.map +1 -0
- package/dist/public/node/themes/themes-api/throttler.d.ts +2 -0
- package/dist/public/node/themes/themes-api/throttler.js +82 -0
- package/dist/public/node/themes/themes-api/throttler.js.map +1 -0
- package/dist/public/node/themes/themes-api.d.ts +9 -0
- package/dist/public/node/themes/themes-api.js +85 -0
- package/dist/public/node/themes/themes-api.js.map +1 -0
- package/dist/public/node/ui.d.ts +28 -24
- package/dist/public/node/ui.js +51 -8
- package/dist/public/node/ui.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -11
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/private/common/ts/deep-required.js.map +0 -1
- package/dist/private/node/environment/service.js.map +0 -1
- package/dist/private/node/environment/spin-cache.js.map +0 -1
- package/dist/private/node/environment/utilities.js.map +0 -1
- package/dist/private/node/simple-definitions.d.ts +0 -4
- package/dist/private/node/simple-definitions.js +0 -2
- package/dist/private/node/simple-definitions.js.map +0 -1
- package/dist/public/node/environment/fqdn.js.map +0 -1
- package/dist/public/node/environment/local.js.map +0 -1
- package/dist/public/node/environment/spin.js.map +0 -1
- package/dist/public/node/presets.d.ts +0 -8
- package/dist/public/node/presets.js +0 -26
- package/dist/public/node/presets.js.map +0 -1
- package/dist/ui/executor.d.ts +0 -2
- package/dist/ui/executor.js +0 -56
- package/dist/ui/executor.js.map +0 -1
- package/dist/ui.d.ts +0 -54
- package/dist/ui.js +0 -111
- package/dist/ui.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FatalError as Fatal } from '../../../../public/node/error.js';
|
|
2
|
-
import
|
|
2
|
+
import { FunctionComponent } from 'react';
|
|
3
3
|
export interface FatalErrorProps {
|
|
4
4
|
error: Fatal;
|
|
5
5
|
}
|
|
6
|
-
declare const FatalError:
|
|
6
|
+
declare const FatalError: FunctionComponent<FatalErrorProps>;
|
|
7
7
|
export { FatalError };
|
|
@@ -30,25 +30,25 @@ const FatalError = ({ error }) => {
|
|
|
30
30
|
tool = `${error.command} ${error.args.join(' ')}`;
|
|
31
31
|
}
|
|
32
32
|
return (React.createElement(Banner, { type: tool ? 'external_error' : 'error' },
|
|
33
|
-
tool
|
|
33
|
+
tool ? (React.createElement(Box, { marginBottom: 1 },
|
|
34
34
|
React.createElement(Text, null,
|
|
35
35
|
"Error coming from ",
|
|
36
|
-
React.createElement(Command, { command: tool })))),
|
|
36
|
+
React.createElement(Command, { command: tool })))) : null,
|
|
37
37
|
React.createElement(Box, null,
|
|
38
38
|
React.createElement(Text, null, error.message)),
|
|
39
|
-
error.tryMessage
|
|
40
|
-
React.createElement(TokenizedText, { item: error.tryMessage }))),
|
|
41
|
-
error.nextSteps
|
|
42
|
-
React.createElement(List, { title: "Next steps", items: error.nextSteps }))),
|
|
43
|
-
stack && stack.items.length !== 0
|
|
39
|
+
error.tryMessage ? (React.createElement(Box, { marginTop: 1 },
|
|
40
|
+
React.createElement(TokenizedText, { item: error.tryMessage }))) : null,
|
|
41
|
+
error.nextSteps ? (React.createElement(Box, { marginTop: 1 },
|
|
42
|
+
React.createElement(List, { title: "Next steps", items: error.nextSteps }))) : null,
|
|
43
|
+
stack && stack.items.length !== 0 ? (React.createElement(Box, { marginTop: 1, flexDirection: "column" },
|
|
44
44
|
React.createElement(Text, null, "To investigate the issue, examine this stack trace:"),
|
|
45
45
|
stack.items.map((item, index) => (React.createElement(Box, { flexDirection: "column", key: index, paddingLeft: 2 },
|
|
46
46
|
React.createElement(Text, null,
|
|
47
47
|
"at",
|
|
48
|
-
item.calleeShort
|
|
49
|
-
item.fileShort
|
|
48
|
+
item.calleeShort ? React.createElement(Text, { color: "yellow" }, ` ${item.calleeShort}`) : null,
|
|
49
|
+
item.fileShort ? ` (${item.fileShort}:${item.line})` : null),
|
|
50
50
|
React.createElement(Box, { paddingLeft: 2 },
|
|
51
|
-
React.createElement(Text, { dimColor: true }, item.sourceLine?.trim())))))))));
|
|
51
|
+
React.createElement(Text, { dimColor: true }, item.sourceLine?.trim()))))))) : null));
|
|
52
52
|
};
|
|
53
53
|
export { FatalError };
|
|
54
54
|
//# sourceMappingURL=FatalError.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FatalError.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/FatalError.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAA;AACpC,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,QAAQ,EAAE,yBAAyB,EAAE,aAAa,EAAsB,MAAM,kCAAkC,CAAA;AACxH,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"FatalError.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/FatalError.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Banner} from './Banner.js'\nimport {TokenizedText} from './TokenizedText.js'\nimport {Command} from './Command.js'\nimport {List} from './List.js'\nimport {BugError, cleanSingleStackTracePath, ExternalError, FatalError as Fatal} from '../../../../public/node/error.js'\nimport {Box, Text} from 'ink'\nimport React, {FunctionComponent} from 'react'\nimport StackTracey from 'stacktracey'\n\nexport interface FatalErrorProps {\n error: Fatal\n}\n\nconst FatalError: FunctionComponent<FatalErrorProps> = ({error}) => {\n let stack\n let tool\n\n if (error instanceof BugError) {\n stack = new StackTracey(error)\n stack.items.forEach((item) => {\n item.file = cleanSingleStackTracePath(item.file)\n })\n\n stack = stack.withSources()\n stack = stack\n .filter((entry) => {\n return !entry.file.includes('@oclif/core')\n })\n .map((item) => {\n /** We make the paths relative to the packages/ directory */\n const fileShortComponents = item.fileShort.split('packages/')\n item.fileShort = fileShortComponents.length === 2 ? fileShortComponents[1]! : fileShortComponents[0]!\n return item\n })\n }\n\n if (error instanceof ExternalError) {\n tool = `${error.command} ${error.args.join(' ')}`\n }\n\n return (\n <Banner type={tool ? 'external_error' : 'error'}>\n {tool ? (\n <Box marginBottom={1}>\n <Text>\n Error coming from <Command command={tool} />\n </Text>\n </Box>\n ) : null}\n\n <Box>\n <Text>{error.message}</Text>\n </Box>\n\n {error.tryMessage ? (\n <Box marginTop={1}>\n <TokenizedText item={error.tryMessage} />\n </Box>\n ) : null}\n\n {error.nextSteps ? (\n <Box marginTop={1}>\n <List title=\"Next steps\" items={error.nextSteps} />\n </Box>\n ) : null}\n\n {stack && stack.items.length !== 0 ? (\n <Box marginTop={1} flexDirection=\"column\">\n <Text>To investigate the issue, examine this stack trace:</Text>\n {stack.items.map((item, index) => (\n <Box flexDirection=\"column\" key={index} paddingLeft={2}>\n <Text>\n at{item.calleeShort ? <Text color=\"yellow\">{` ${item.calleeShort}`}</Text> : null}\n {item.fileShort ? ` (${item.fileShort}:${item.line})` : null}\n </Text>\n <Box paddingLeft={2}>\n <Text dimColor>{item.sourceLine?.trim()}</Text>\n </Box>\n </Box>\n ))}\n </Box>\n ) : null}\n </Banner>\n )\n}\n\nexport {FatalError}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
interface
|
|
1
|
+
import { FunctionComponent } from 'react';
|
|
2
|
+
interface FilePathProps {
|
|
3
3
|
filePath: string;
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
6
|
* `FilePath` displays a path to a file.
|
|
7
7
|
*/
|
|
8
|
-
declare const FilePath:
|
|
8
|
+
declare const FilePath: FunctionComponent<FilePathProps>;
|
|
9
9
|
export { FilePath };
|
|
@@ -4,10 +4,7 @@ import React from 'react';
|
|
|
4
4
|
* `FilePath` displays a path to a file.
|
|
5
5
|
*/
|
|
6
6
|
const FilePath = ({ filePath }) => {
|
|
7
|
-
return React.createElement(Text,
|
|
8
|
-
"\"",
|
|
9
|
-
filePath,
|
|
10
|
-
"\"");
|
|
7
|
+
return React.createElement(Text, { italic: true }, filePath);
|
|
11
8
|
};
|
|
12
9
|
export { FilePath };
|
|
13
10
|
//# sourceMappingURL=FilePath.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilePath.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/FilePath.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"FilePath.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/FilePath.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAA0B,MAAM,OAAO,CAAA;AAM9C;;GAEG;AACH,MAAM,QAAQ,GAAqC,CAAC,EAAC,QAAQ,EAAC,EAAe,EAAE;IAC7E,OAAO,oBAAC,IAAI,IAAC,MAAM,UAAE,QAAQ,CAAQ,CAAA;AACvC,CAAC,CAAA;AAED,OAAO,EAAC,QAAQ,EAAC,CAAA","sourcesContent":["import {Text} from 'ink'\nimport React, {FunctionComponent} from 'react'\n\ninterface FilePathProps {\n filePath: string\n}\n\n/**\n * `FilePath` displays a path to a file.\n */\nconst FilePath: FunctionComponent<FilePathProps> = ({filePath}): JSX.Element => {\n return <Text italic>{filePath}</Text>\n}\n\nexport {FilePath}\n"]}
|
|
@@ -5,7 +5,7 @@ import { render } from 'ink-testing-library';
|
|
|
5
5
|
describe('FilePath', async () => {
|
|
6
6
|
test('renders correctly', async () => {
|
|
7
7
|
const { lastFrame } = render(React.createElement(FilePath, { filePath: "src/this/is/a/test.js" }));
|
|
8
|
-
expect(lastFrame()).toMatchInlineSnapshot('"
|
|
8
|
+
expect(lastFrame()).toMatchInlineSnapshot('"[3msrc/this/is/a/test.js[23m"');
|
|
9
9
|
});
|
|
10
10
|
});
|
|
11
11
|
//# sourceMappingURL=FilePath.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilePath.test.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/FilePath.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AACtC,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAC,MAAM,QAAQ,CAAA;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAA;AAE1C,QAAQ,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;IAC9B,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,EAAC,SAAS,EAAC,GAAG,MAAM,CAAC,oBAAC,QAAQ,IAAC,QAAQ,EAAC,uBAAuB,GAAG,CAAC,CAAA;QAEzE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,qBAAqB,CAAC
|
|
1
|
+
{"version":3,"file":"FilePath.test.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/FilePath.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AACtC,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAC,MAAM,QAAQ,CAAA;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAA;AAE1C,QAAQ,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;IAC9B,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,EAAC,SAAS,EAAC,GAAG,MAAM,CAAC,oBAAC,QAAQ,IAAC,QAAQ,EAAC,uBAAuB,GAAG,CAAC,CAAA;QAEzE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,qBAAqB,CAAC,kCAAkC,CAAC,CAAA;IAC/E,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import {FilePath} from './FilePath.js'\nimport {describe, expect, test} from 'vitest'\nimport React from 'react'\nimport {render} from 'ink-testing-library'\n\ndescribe('FilePath', async () => {\n test('renders correctly', async () => {\n const {lastFrame} = render(<FilePath filePath=\"src/this/is/a/test.js\" />)\n\n expect(lastFrame()).toMatchInlineSnapshot('\"\u001b[3msrc/this/is/a/test.js\u001b[23m\"')\n })\n})\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FunctionComponent } from 'react';
|
|
2
2
|
/**
|
|
3
3
|
* `FullScreen` renders all output in a new buffer and makes it full screen. This is useful when:
|
|
4
4
|
* - You want to preserve terminal history. `ink` [normally clears the terminal history](https://github.com/vadimdemedes/ink/issues/382) if the rendered output is taller than the terminal window. By rendering in a separate buffer history will be preserved and will be visible after pressing `Ctrl+C`.
|
|
5
5
|
* - You want to respond to the resize event of the terminal. Whenever the user resizes their terminal window the output's height and width will be recalculated and re-rendered properly.
|
|
6
6
|
*/
|
|
7
|
-
declare const FullScreen:
|
|
8
|
-
export
|
|
7
|
+
declare const FullScreen: FunctionComponent;
|
|
8
|
+
export { FullScreen };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FullScreen.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/FullScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,SAAS,EAAC,MAAM,KAAK,CAAA;AAClC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"FullScreen.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/FullScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,SAAS,EAAC,MAAM,KAAK,CAAA;AAClC,OAAO,KAAK,EAAE,EAAoB,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAA;AAEnE;;;;GAIG;AACH,MAAM,UAAU,GAAsB,CAAC,EAAC,QAAQ,EAAC,EAAe,EAAE;IAChE,MAAM,EAAC,MAAM,EAAC,GAAG,SAAS,EAAE,CAAA;IAC5B,MAAM,cAAc,GAAG,MAAO,CAAA;IAE9B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC;QAC/B,OAAO,EAAE,cAAc,CAAC,OAAO;QAC/B,IAAI,EAAE,cAAc,CAAC,IAAI;KAC1B,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,QAAQ;YACf,OAAO,CAAC;gBACN,OAAO,EAAE,cAAc,CAAC,OAAO;gBAC/B,IAAI,EAAE,cAAc,CAAC,IAAI;aAC1B,CAAC,CAAA;QACJ,CAAC;QAED,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACrC,gCAAgC;QAChC,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QACrC,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YACtC,iCAAiC;YACjC,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QACvC,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACL,oBAAC,GAAG,IAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,IACxC,QAAQ,CACL,CACP,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAC,UAAU,EAAC,CAAA","sourcesContent":["import {Box, useStdout} from 'ink'\nimport React, {FunctionComponent, useEffect, useState} from 'react'\n\n/**\n * `FullScreen` renders all output in a new buffer and makes it full screen. This is useful when:\n * - You want to preserve terminal history. `ink` [normally clears the terminal history](https://github.com/vadimdemedes/ink/issues/382) if the rendered output is taller than the terminal window. By rendering in a separate buffer history will be preserved and will be visible after pressing `Ctrl+C`.\n * - You want to respond to the resize event of the terminal. Whenever the user resizes their terminal window the output's height and width will be recalculated and re-rendered properly.\n */\nconst FullScreen: FunctionComponent = ({children}): JSX.Element => {\n const {stdout} = useStdout()\n const standardOutput = stdout!\n\n const [size, setSize] = useState({\n columns: standardOutput.columns,\n rows: standardOutput.rows,\n })\n\n useEffect(() => {\n function onResize() {\n setSize({\n columns: standardOutput.columns,\n rows: standardOutput.rows,\n })\n }\n\n standardOutput.on('resize', onResize)\n // switch to an alternate buffer\n standardOutput.write('\\u001B[?1049h')\n return () => {\n standardOutput.off('resize', onResize)\n // switch back to the main buffer\n standardOutput.write('\\u001B[?1049l')\n }\n }, [])\n\n return (\n <Box width={size.columns} height={size.rows}>\n {children}\n </Box>\n )\n}\n\nexport {FullScreen}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
interface
|
|
1
|
+
import { FunctionComponent } from 'react';
|
|
2
|
+
interface LinkProps {
|
|
3
3
|
url: string;
|
|
4
4
|
label?: string;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
7
|
* `Link` displays a clickable link when supported by the terminal.
|
|
8
8
|
*/
|
|
9
|
-
declare const Link:
|
|
9
|
+
declare const Link: FunctionComponent<LinkProps>;
|
|
10
10
|
export { Link };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/Link.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"Link.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/Link.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAA0B,MAAM,OAAO,CAAA;AAC9C,OAAO,YAAY,MAAM,eAAe,CAAA;AAOxC,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAW;IACzC,OAAO,GAAG,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAA;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,IAAI,GAAiC,CAAC,EAAC,GAAG,EAAE,KAAK,EAAC,EAAe,EAAE;IACvE,OAAO,oBAAC,IAAI,QAAE,YAAY,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAQ,CAAA;AAC7F,CAAC,CAAA;AAED,OAAO,EAAC,IAAI,EAAC,CAAA","sourcesContent":["import chalk from 'chalk'\nimport {Text} from 'ink'\nimport React, {FunctionComponent} from 'react'\nimport terminalLink from 'terminal-link'\n\ninterface LinkProps {\n url: string\n label?: string\n}\n\nfunction fallback(text: string, url: string) {\n return `${text} ${chalk.dim(`( ${url} )`)}`\n}\n\n/**\n * `Link` displays a clickable link when supported by the terminal.\n */\nconst Link: FunctionComponent<LinkProps> = ({url, label}): JSX.Element => {\n return <Text>{terminalLink(label ?? url, url, {fallback: label ? fallback : false})}</Text>\n}\n\nexport {Link}\n"]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { TokenItem } from './TokenizedText.js';
|
|
2
|
-
import
|
|
3
|
-
interface
|
|
1
|
+
import { InlineToken, TokenItem } from './TokenizedText.js';
|
|
2
|
+
import { FunctionComponent } from 'react';
|
|
3
|
+
interface ListProps {
|
|
4
4
|
title?: string;
|
|
5
|
-
items: TokenItem[];
|
|
5
|
+
items: TokenItem<InlineToken>[];
|
|
6
6
|
ordered?: boolean;
|
|
7
|
+
margin?: boolean;
|
|
7
8
|
}
|
|
8
9
|
/**
|
|
9
10
|
* `List` displays an unordered or ordered list with text aligned with the bullet point
|
|
10
11
|
* and wrapped to the container width.
|
|
11
12
|
*/
|
|
12
|
-
declare const List:
|
|
13
|
+
declare const List: FunctionComponent<ListProps>;
|
|
13
14
|
export { List };
|
|
@@ -6,12 +6,13 @@ 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, ordered = false }) => {
|
|
9
|
+
const List = ({ title, items, margin = true, ordered = false }) => {
|
|
10
10
|
return (React.createElement(Box, { flexDirection: "column" },
|
|
11
|
-
title
|
|
11
|
+
title ? React.createElement(Text, { bold: true }, title) : null,
|
|
12
12
|
items.map((item, index) => (React.createElement(Box, { key: index },
|
|
13
13
|
React.createElement(Box, null,
|
|
14
|
-
React.createElement(Text, null,
|
|
14
|
+
margin ? React.createElement(Text, null, ' ') : null,
|
|
15
|
+
React.createElement(Text, null, `${ordered ? `${index + 1}.` : DOT}`)),
|
|
15
16
|
React.createElement(Box, { flexGrow: 1, marginLeft: 1 },
|
|
16
17
|
React.createElement(TokenizedText, { item: item })))))));
|
|
17
18
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/List.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
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,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,KAA0B,MAAM,OAAO,CAAA;AAS9C,MAAM,GAAG,GAAG,GAAG,CAAA;AAEf;;;GAGG;AACH,MAAM,IAAI,GAAiC,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,KAAK,EAAC,EAAe,EAAE;IACzG,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACxB,KAAK,CAAC,CAAC,CAAC,oBAAC,IAAI,IAAC,IAAI,UAAE,KAAK,CAAQ,CAAC,CAAC,CAAC,IAAI;QACxC,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,QAAE,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAQ,CAC/C;YAEN,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;gBAC7B,oBAAC,aAAa,IAAC,IAAI,EAAE,IAAI,GAAI,CACzB,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} from 'ink'\nimport React, {FunctionComponent} from 'react'\n\ninterface ListProps {\n title?: string\n items: TokenItem<InlineToken>[]\n ordered?: boolean\n margin?: boolean\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}): JSX.Element => {\n return (\n <Box flexDirection=\"column\">\n {title ? <Text bold>{title}</Text> : null}\n {items.map((item, index) => (\n <Box key={index}>\n <Box>\n {margin ? <Text>{' '}</Text> : null}\n <Text>{`${ordered ? `${index + 1}.` : DOT}`}</Text>\n </Box>\n\n <Box flexGrow={1} marginLeft={1}>\n <TokenizedText item={item} />\n </Box>\n </Box>\n ))}\n </Box>\n )\n}\n\nexport {List}\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { InlineToken, TokenItem } from '../TokenizedText.js';
|
|
2
|
+
import { FunctionComponent } from 'react';
|
|
3
|
+
export interface InfoTableProps {
|
|
3
4
|
table: {
|
|
4
|
-
[header: string]:
|
|
5
|
+
[header: string]: TokenItem<InlineToken>[];
|
|
5
6
|
};
|
|
6
7
|
}
|
|
7
|
-
declare const InfoTable:
|
|
8
|
-
export
|
|
8
|
+
declare const InfoTable: FunctionComponent<InfoTableProps>;
|
|
9
|
+
export { InfoTable };
|
|
@@ -6,12 +6,12 @@ const InfoTable = ({ table }) => {
|
|
|
6
6
|
const headers = Object.keys(table);
|
|
7
7
|
const headerColumnWidth = Math.max(...headers.map((header) => header.length));
|
|
8
8
|
return (React.createElement(Box, { flexDirection: "column" }, headers.map((header, index) => (React.createElement(Box, { key: index, marginBottom: index === headers.length - 1 ? 0 : 1 },
|
|
9
|
-
React.createElement(Box, { width: headerColumnWidth + 1 },
|
|
9
|
+
header.length > 0 && (React.createElement(Box, { width: headerColumnWidth + 1 },
|
|
10
10
|
React.createElement(Text, null,
|
|
11
11
|
capitalize(header),
|
|
12
|
-
":")),
|
|
13
|
-
React.createElement(Box, { flexGrow: 1 },
|
|
14
|
-
React.createElement(List, { items: table[header] })))))));
|
|
12
|
+
":"))),
|
|
13
|
+
React.createElement(Box, { marginLeft: header.length > 0 ? 2 : 0, flexGrow: 1 },
|
|
14
|
+
React.createElement(List, { margin: false, items: table[header] })))))));
|
|
15
15
|
};
|
|
16
|
-
export
|
|
16
|
+
export { InfoTable };
|
|
17
17
|
//# sourceMappingURL=InfoTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InfoTable.js","sourceRoot":"","sources":["../../../../../../src/private/node/ui/components/Prompts/InfoTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAA;AAC/B,OAAO,EAAC,UAAU,EAAC,MAAM,wCAAwC,CAAA;
|
|
1
|
+
{"version":3,"file":"InfoTable.js","sourceRoot":"","sources":["../../../../../../src/private/node/ui/components/Prompts/InfoTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAA;AAC/B,OAAO,EAAC,UAAU,EAAC,MAAM,wCAAwC,CAAA;AAEjE,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,KAA0B,MAAM,OAAO,CAAA;AAQ9C,MAAM,SAAS,GAAsC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClC,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAE7E,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,IACxB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9B,oBAAC,GAAG,IAAC,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CACpB,oBAAC,GAAG,IAAC,KAAK,EAAE,iBAAiB,GAAG,CAAC;YAC/B,oBAAC,IAAI;gBAAE,UAAU,CAAC,MAAM,CAAC;oBAAS,CAC9B,CACP;QACD,oBAAC,GAAG,IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;YACrD,oBAAC,IAAI,IAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAE,GAAI,CAC1C,CACF,CACP,CAAC,CACE,CACP,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAC,SAAS,EAAC,CAAA","sourcesContent":["import {List} from '../List.js'\nimport {capitalize} from '../../../../../public/common/string.js'\nimport {InlineToken, TokenItem} from '../TokenizedText.js'\nimport {Box, Text} from 'ink'\nimport React, {FunctionComponent} from 'react'\n\nexport interface InfoTableProps {\n table: {\n [header: string]: TokenItem<InlineToken>[]\n }\n}\n\nconst InfoTable: FunctionComponent<InfoTableProps> = ({table}) => {\n const headers = Object.keys(table)\n const headerColumnWidth = Math.max(...headers.map((header) => header.length))\n\n return (\n <Box flexDirection=\"column\">\n {headers.map((header, index) => (\n <Box key={index} marginBottom={index === headers.length - 1 ? 0 : 1}>\n {header.length > 0 && (\n <Box width={headerColumnWidth + 1}>\n <Text>{capitalize(header)}:</Text>\n </Box>\n )}\n <Box marginLeft={header.length > 0 ? 2 : 0} flexGrow={1}>\n <List margin={false} items={table[header]!} />\n </Box>\n </Box>\n ))}\n </Box>\n )\n}\n\nexport {InfoTable}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { InfoTable } from './InfoTable.js';
|
|
2
|
+
import { unstyled } from '../../../../../public/node/output.js';
|
|
3
|
+
import { describe, expect, test } from 'vitest';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { render } from 'ink-testing-library';
|
|
6
|
+
describe('InfoTable', async () => {
|
|
7
|
+
test('renders a horizontal table with bullet points', async () => {
|
|
8
|
+
const { lastFrame } = render(React.createElement(InfoTable, { table: {
|
|
9
|
+
'header 1': ['some', 'items'],
|
|
10
|
+
'header 2': [['one item', { link: { label: 'Shopify', url: 'https://shopify.com' } }]],
|
|
11
|
+
} }));
|
|
12
|
+
expect(unstyled(lastFrame())).toMatchInlineSnapshot(`
|
|
13
|
+
"Header 1: • some
|
|
14
|
+
• items
|
|
15
|
+
|
|
16
|
+
Header 2: • one item Shopify ( https://shopify.com )"
|
|
17
|
+
`);
|
|
18
|
+
});
|
|
19
|
+
test('supports an empty header value', async () => {
|
|
20
|
+
const { lastFrame } = render(React.createElement(InfoTable, { table: {
|
|
21
|
+
'': ['some', 'items'],
|
|
22
|
+
} }));
|
|
23
|
+
expect(unstyled(lastFrame())).toMatchInlineSnapshot(`
|
|
24
|
+
"• some
|
|
25
|
+
• items"
|
|
26
|
+
`);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=InfoTable.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InfoTable.test.js","sourceRoot":"","sources":["../../../../../../src/private/node/ui/components/Prompts/InfoTable.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAC,QAAQ,EAAC,MAAM,sCAAsC,CAAA;AAC7D,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAC,MAAM,QAAQ,CAAA;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAA;AAE1C,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;IAC/B,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,EAAC,SAAS,EAAC,GAAG,MAAM,CACxB,oBAAC,SAAS,IACR,KAAK,EAAE;gBACL,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC7B,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,EAAC,IAAI,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,qBAAqB,EAAC,EAAC,CAAC,CAAC;aACnF,GACD,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAG,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;KAKpD,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAC,SAAS,EAAC,GAAG,MAAM,CACxB,oBAAC,SAAS,IACR,KAAK,EAAE;gBACL,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;aACtB,GACD,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAG,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;KAGpD,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import {InfoTable} from './InfoTable.js'\nimport {unstyled} from '../../../../../public/node/output.js'\nimport {describe, expect, test} from 'vitest'\nimport React from 'react'\nimport {render} from 'ink-testing-library'\n\ndescribe('InfoTable', async () => {\n test('renders a horizontal table with bullet points', async () => {\n const {lastFrame} = render(\n <InfoTable\n table={{\n 'header 1': ['some', 'items'],\n 'header 2': [['one item', {link: {label: 'Shopify', url: 'https://shopify.com'}}]],\n }}\n />,\n )\n\n expect(unstyled(lastFrame()!)).toMatchInlineSnapshot(`\n \"Header 1: • some\n • items\n\n Header 2: • one item Shopify ( https://shopify.com )\"\n `)\n })\n\n test('supports an empty header value', async () => {\n const {lastFrame} = render(\n <InfoTable\n table={{\n '': ['some', 'items'],\n }}\n />,\n )\n\n expect(unstyled(lastFrame()!)).toMatchInlineSnapshot(`\n \"• some\n • items\"\n `)\n })\n})\n"]}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
2
|
+
interface OnChangeOptions<T> {
|
|
3
|
+
item: Item<T> | undefined;
|
|
4
|
+
usedShortcut: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface SelectInputProps<T> {
|
|
3
7
|
items: Item<T>[];
|
|
4
|
-
onChange: (item:
|
|
8
|
+
onChange: ({ item, usedShortcut }: OnChangeOptions<T>) => void;
|
|
5
9
|
enableShortcuts?: boolean;
|
|
6
10
|
focus?: boolean;
|
|
7
11
|
emptyMessage?: string;
|
|
@@ -9,6 +13,9 @@ export interface Props<T> {
|
|
|
9
13
|
highlightedTerm?: string;
|
|
10
14
|
loading?: boolean;
|
|
11
15
|
errorMessage?: string;
|
|
16
|
+
hasMorePages?: boolean;
|
|
17
|
+
morePagesMessage?: string;
|
|
18
|
+
infoMessage?: string;
|
|
12
19
|
}
|
|
13
20
|
export interface Item<T> {
|
|
14
21
|
label: string;
|
|
@@ -16,4 +23,5 @@ export interface Item<T> {
|
|
|
16
23
|
key?: string;
|
|
17
24
|
group?: string;
|
|
18
25
|
}
|
|
19
|
-
|
|
26
|
+
declare function SelectInput<T>({ items, onChange, enableShortcuts, focus, emptyMessage, defaultValue, highlightedTerm, loading, errorMessage, hasMorePages, morePagesMessage, infoMessage, }: React.PropsWithChildren<SelectInputProps<T>>): JSX.Element | null;
|
|
27
|
+
export { SelectInput };
|
|
@@ -30,10 +30,11 @@ function groupItems(items) {
|
|
|
30
30
|
});
|
|
31
31
|
return [withGroupMapped, withoutGroupMapped];
|
|
32
32
|
}
|
|
33
|
+
// eslint-disable-next-line react/function-component-definition
|
|
33
34
|
function SelectItemsGroup({ title, items, selectedIndex, hasMarginTop, enableShortcuts, highlightedTerm, }) {
|
|
34
35
|
return (React.createElement(Box, { key: title, flexDirection: "column", marginTop: hasMarginTop ? 1 : 0 },
|
|
35
|
-
title
|
|
36
|
-
React.createElement(Text, { bold: true }, title))),
|
|
36
|
+
title ? (React.createElement(Box, { marginLeft: 3 },
|
|
37
|
+
React.createElement(Text, { bold: true }, title))) : null,
|
|
37
38
|
items.map((item) => {
|
|
38
39
|
const isSelected = item.index === selectedIndex;
|
|
39
40
|
const label = highlightedLabel(item.label, highlightedTerm);
|
|
@@ -42,7 +43,8 @@ function SelectItemsGroup({ title, items, selectedIndex, hasMarginTop, enableSho
|
|
|
42
43
|
React.createElement(Text, { color: isSelected ? 'cyan' : undefined }, enableShortcuts ? `(${item.key}) ${label}` : label)));
|
|
43
44
|
})));
|
|
44
45
|
}
|
|
45
|
-
|
|
46
|
+
// eslint-disable-next-line react/function-component-definition
|
|
47
|
+
function SelectInput({ items, onChange, enableShortcuts = true, focus = true, emptyMessage = 'No items to select.', defaultValue, highlightedTerm, loading = false, errorMessage, hasMorePages = false, morePagesMessage, infoMessage, }) {
|
|
46
48
|
const defaultValueIndex = defaultValue ? items.findIndex((item) => item.value === defaultValue.value) : -1;
|
|
47
49
|
const initialIndex = defaultValueIndex === -1 ? 0 : defaultValueIndex;
|
|
48
50
|
const inputStack = useRef(null);
|
|
@@ -52,37 +54,43 @@ export default function SelectInput({ items, onChange, enableShortcuts = true, f
|
|
|
52
54
|
const keys = groupedItemsValues.map((item) => item.key);
|
|
53
55
|
const groupTitles = Object.keys(groupedItems);
|
|
54
56
|
const previousItems = useRef(items);
|
|
55
|
-
const changeSelection = useCallback((index) => {
|
|
57
|
+
const changeSelection = useCallback(({ index, usedShortcut = false }) => {
|
|
56
58
|
const groupedItem = groupedItemsValues.find((item) => item.index === index);
|
|
57
59
|
setSelectedIndex(index);
|
|
58
|
-
onChange(
|
|
60
|
+
onChange({
|
|
61
|
+
item: items.find((item) => item.value === groupedItem.value),
|
|
62
|
+
usedShortcut,
|
|
63
|
+
});
|
|
59
64
|
}, [items]);
|
|
60
65
|
useEffect(() => {
|
|
61
66
|
if (items.length === 0) {
|
|
62
67
|
// reset selection when items are empty
|
|
63
|
-
onChange(
|
|
68
|
+
onChange({
|
|
69
|
+
item: undefined,
|
|
70
|
+
usedShortcut: false,
|
|
71
|
+
});
|
|
64
72
|
}
|
|
65
73
|
else if (
|
|
66
74
|
// reset index when items change
|
|
67
75
|
!isEqual(previousItems.current.map((item) => item.value), items.map((item) => item.value))) {
|
|
68
|
-
changeSelection(0);
|
|
76
|
+
changeSelection({ index: 0 });
|
|
69
77
|
}
|
|
70
78
|
previousItems.current = items;
|
|
71
79
|
}, [items]);
|
|
72
80
|
const handleArrows = useCallback((key) => {
|
|
73
81
|
const lastIndex = items.length - 1;
|
|
74
82
|
if (key.upArrow) {
|
|
75
|
-
changeSelection(selectedIndex === 0 ? lastIndex : selectedIndex - 1);
|
|
83
|
+
changeSelection({ index: selectedIndex === 0 ? lastIndex : selectedIndex - 1 });
|
|
76
84
|
}
|
|
77
85
|
else if (key.downArrow) {
|
|
78
|
-
changeSelection(selectedIndex === lastIndex ? 0 : selectedIndex + 1);
|
|
86
|
+
changeSelection({ index: selectedIndex === lastIndex ? 0 : selectedIndex + 1 });
|
|
79
87
|
}
|
|
80
88
|
}, [selectedIndex, items]);
|
|
81
89
|
const handleShortcuts = useCallback((input) => {
|
|
82
90
|
if (keys.includes(input)) {
|
|
83
91
|
const groupedItem = groupedItemsValues.find((item) => item.key === input);
|
|
84
92
|
if (groupedItem !== undefined) {
|
|
85
|
-
changeSelection(groupedItem.index);
|
|
93
|
+
changeSelection({ index: groupedItem.index, usedShortcut: true });
|
|
86
94
|
}
|
|
87
95
|
}
|
|
88
96
|
}, [items]);
|
|
@@ -120,12 +128,17 @@ export default function SelectInput({ items, onChange, enableShortcuts = true, f
|
|
|
120
128
|
return (React.createElement(Box, { flexDirection: "column" },
|
|
121
129
|
groupTitles.map((title, index) => (React.createElement(SelectItemsGroup, { title: title, selectedIndex: selectedIndex, items: groupedItems[title], key: title, hasMarginTop: index !== 0, enableShortcuts: enableShortcuts, highlightedTerm: highlightedTerm }))),
|
|
122
130
|
ungroupedItems.length > 0 && (React.createElement(SelectItemsGroup, { title: ungroupedItemsTitle, selectedIndex: selectedIndex, items: ungroupedItems, hasMarginTop: groupTitles.length > 0, enableShortcuts: enableShortcuts, highlightedTerm: highlightedTerm })),
|
|
123
|
-
React.createElement(Box, { marginTop: 1, marginLeft: 3 },
|
|
124
|
-
React.createElement(Text,
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
React.createElement(Box, { marginTop: 1, marginLeft: 3, flexDirection: "column" },
|
|
132
|
+
hasMorePages ? (React.createElement(Text, null,
|
|
133
|
+
React.createElement(Text, { bold: true },
|
|
134
|
+
"1-",
|
|
135
|
+
items.length,
|
|
136
|
+
" of many"),
|
|
137
|
+
morePagesMessage ? ` ${morePagesMessage}` : null)) : null,
|
|
138
|
+
React.createElement(Text, { dimColor: true }, infoMessage
|
|
139
|
+
? infoMessage
|
|
140
|
+
: `Press ${figures.arrowUp}${figures.arrowDown} arrows to select, enter to confirm`))));
|
|
129
141
|
}
|
|
130
142
|
}
|
|
143
|
+
export { SelectInput };
|
|
131
144
|
//# sourceMappingURL=SelectInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectInput.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/SelectInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {isEqual} from '../../../../public/common/lang.js'\nimport {groupBy, partition} from '../../../../public/common/collection.js'\nimport {mapValues} from '../../../../public/common/object.js'\nimport React, {useState, useEffect, useRef, useCallback} from 'react'\nimport {Box, Key, useInput, Text} from 'ink'\nimport {debounce} from '@shopify/cli-kit/common/function'\nimport chalk from 'chalk'\nimport figures from 'figures'\n\nexport interface Props<T> {\n items: Item<T>[]\n onChange: (item: Item<T> | undefined) => void\n enableShortcuts?: boolean\n focus?: boolean\n emptyMessage?: string\n defaultValue?: Item<T>\n highlightedTerm?: string\n loading?: boolean\n errorMessage?: string\n}\n\nexport interface Item<T> {\n label: string\n value: T\n key?: string\n group?: string\n}\n\ninterface ItemWithIndex<T> extends Item<T> {\n key: string\n index: number\n}\n\nfunction highlightedLabel(label: string, term: string | undefined) {\n if (!term) {\n return label\n }\n\n const regex = new RegExp(term, 'i')\n return label.replace(regex, (match) => {\n return chalk.bold(match)\n })\n}\n\nfunction groupItems<T>(items: Item<T>[]): [{[key: string]: ItemWithIndex<T>[]}, ItemWithIndex<T>[]] {\n let index = 0\n\n const [withGroup, withoutGroup] = partition(items, 'group')\n\n const withGroupMapped = mapValues(groupBy(withGroup, 'group'), (groupItems) =>\n groupItems.map((groupItem) => {\n const item = {...groupItem, key: groupItem.key ?? (index + 1).toString(), index}\n index += 1\n return item\n }),\n )\n const withoutGroupMapped = withoutGroup.map((item) => {\n const newItem = {...item, key: item.key ?? (index + 1).toString(), index}\n index += 1\n return newItem\n })\n\n return [withGroupMapped, withoutGroupMapped]\n}\n\ninterface SelectItemsGroupProps<T> {\n title: string | undefined\n items: ItemWithIndex<T>[]\n selectedIndex: number\n hasMarginTop: boolean\n enableShortcuts: boolean\n highlightedTerm?: string\n}\n\nfunction SelectItemsGroup<T>({\n title,\n items,\n selectedIndex,\n hasMarginTop,\n enableShortcuts,\n highlightedTerm,\n}: SelectItemsGroupProps<T>): JSX.Element {\n return (\n <Box key={title} flexDirection=\"column\" marginTop={hasMarginTop ? 1 : 0}>\n {title && (\n <Box marginLeft={3}>\n <Text bold>{title}</Text>\n </Box>\n )}\n\n {items.map((item) => {\n const isSelected = item.index === selectedIndex\n const label = highlightedLabel(item.label, highlightedTerm)\n\n return (\n <Box key={item.key}>\n <Box marginRight={2}>{isSelected ? <Text color=\"cyan\">{`>`}</Text> : <Text> </Text>}</Box>\n\n <Text color={isSelected ? 'cyan' : undefined}>{enableShortcuts ? `(${item.key}) ${label}` : label}</Text>\n </Box>\n )\n })}\n </Box>\n )\n}\n\nexport default function SelectInput<T>({\n items,\n onChange,\n enableShortcuts = true,\n focus = true,\n emptyMessage = 'No items to select.',\n defaultValue,\n highlightedTerm,\n loading = false,\n errorMessage,\n}: React.PropsWithChildren<Props<T>>): JSX.Element | null {\n const defaultValueIndex = defaultValue ? items.findIndex((item) => item.value === defaultValue.value) : -1\n const initialIndex = defaultValueIndex === -1 ? 0 : defaultValueIndex\n const inputStack = useRef<string | null>(null)\n const [selectedIndex, setSelectedIndex] = useState(initialIndex)\n const [groupedItems, ungroupedItems] = groupItems(items)\n const groupedItemsValues = [...Object.values(groupedItems).flat(), ...ungroupedItems]\n const keys = groupedItemsValues.map((item) => item.key)\n const groupTitles = Object.keys(groupedItems)\n const previousItems = useRef<Item<T>[]>(items)\n\n const changeSelection = useCallback(\n (index: number) => {\n const groupedItem = groupedItemsValues.find((item) => item.index === index)!\n setSelectedIndex(index)\n onChange(items.find((item) => item.value === groupedItem.value))\n },\n [items],\n )\n\n useEffect(() => {\n if (items.length === 0) {\n // reset selection when items are empty\n onChange(undefined)\n } else if (\n // reset index when items change\n !isEqual(\n previousItems.current.map((item) => item.value),\n items.map((item) => item.value),\n )\n ) {\n changeSelection(0)\n }\n\n previousItems.current = items\n }, [items])\n\n const handleArrows = useCallback(\n (key: Key) => {\n const lastIndex = items.length - 1\n\n if (key.upArrow) {\n changeSelection(selectedIndex === 0 ? lastIndex : selectedIndex - 1)\n } else if (key.downArrow) {\n changeSelection(selectedIndex === lastIndex ? 0 : selectedIndex + 1)\n }\n },\n [selectedIndex, items],\n )\n\n const handleShortcuts = useCallback(\n (input: string) => {\n if (keys.includes(input)) {\n const groupedItem = groupedItemsValues.find((item) => item.key === input)\n if (groupedItem !== undefined) {\n changeSelection(groupedItem.index)\n }\n }\n },\n [items],\n )\n\n const debounceHandleShortcuts = useCallback(\n debounce((newInputStack) => {\n handleShortcuts(newInputStack)\n inputStack.current = null\n }, 300),\n [],\n )\n\n useInput(\n (input, key) => {\n // check that no special modifier (shift, control, etc.) is being pressed\n if (enableShortcuts && input.length > 0 && Object.values(key).every((value) => value === false)) {\n const newInputStack = inputStack.current === null ? input : inputStack.current + input\n\n inputStack.current = newInputStack\n debounceHandleShortcuts(newInputStack)\n } else {\n debounceHandleShortcuts.cancel()\n inputStack.current = null\n handleArrows(key)\n }\n },\n {isActive: focus},\n )\n\n const ungroupedItemsTitle = groupTitles.length > 0 ? 'Other' : undefined\n\n if (loading) {\n return (\n <Box marginLeft={3}>\n <Text dimColor>Loading...</Text>\n </Box>\n )\n } else if (errorMessage && errorMessage.length > 0) {\n return (\n <Box marginLeft={3}>\n <Text color=\"red\">{errorMessage}</Text>\n </Box>\n )\n } else if (items.length === 0) {\n return (\n <Box marginLeft={3}>\n <Text dimColor>{emptyMessage}</Text>\n </Box>\n )\n } else {\n return (\n <Box flexDirection=\"column\">\n {groupTitles.map((title, index) => (\n <SelectItemsGroup\n title={title}\n selectedIndex={selectedIndex}\n items={groupedItems[title]!}\n key={title}\n hasMarginTop={index !== 0}\n enableShortcuts={enableShortcuts}\n highlightedTerm={highlightedTerm}\n ></SelectItemsGroup>\n ))}\n\n {ungroupedItems.length > 0 && (\n <SelectItemsGroup\n title={ungroupedItemsTitle}\n selectedIndex={selectedIndex}\n items={ungroupedItems}\n hasMarginTop={groupTitles.length > 0}\n enableShortcuts={enableShortcuts}\n highlightedTerm={highlightedTerm}\n ></SelectItemsGroup>\n )}\n\n <Box marginTop={1} marginLeft={3}>\n <Text dimColor>\n Press {figures.arrowUp}\n {figures.arrowDown} arrows to select, enter to confirm\n </Text>\n </Box>\n </Box>\n )\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SelectInput.js","sourceRoot":"","sources":["../../../../../src/private/node/ui/components/SelectInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {isEqual} from '../../../../public/common/lang.js'\nimport {groupBy, partition} from '../../../../public/common/collection.js'\nimport {mapValues} from '../../../../public/common/object.js'\nimport React, {useState, useEffect, useRef, useCallback} from 'react'\nimport {Box, Key, useInput, Text} from 'ink'\nimport {debounce} from '@shopify/cli-kit/common/function'\nimport chalk from 'chalk'\nimport figures from 'figures'\n\ninterface OnChangeOptions<T> {\n item: Item<T> | undefined\n usedShortcut: boolean\n}\nexport interface SelectInputProps<T> {\n items: Item<T>[]\n onChange: ({item, usedShortcut}: OnChangeOptions<T>) => void\n enableShortcuts?: boolean\n focus?: boolean\n emptyMessage?: string\n defaultValue?: Item<T>\n highlightedTerm?: string\n loading?: boolean\n errorMessage?: string\n hasMorePages?: boolean\n morePagesMessage?: string\n infoMessage?: string\n}\n\nexport interface Item<T> {\n label: string\n value: T\n key?: string\n group?: string\n}\n\ninterface ItemWithIndex<T> extends Item<T> {\n key: string\n index: number\n}\n\nfunction highlightedLabel(label: string, term: string | undefined) {\n if (!term) {\n return label\n }\n\n const regex = new RegExp(term, 'i')\n return label.replace(regex, (match) => {\n return chalk.bold(match)\n })\n}\n\nfunction groupItems<T>(items: Item<T>[]): [{[key: string]: ItemWithIndex<T>[]}, ItemWithIndex<T>[]] {\n let index = 0\n\n const [withGroup, withoutGroup] = partition(items, 'group')\n\n const withGroupMapped = mapValues(groupBy(withGroup, 'group'), (groupItems) =>\n groupItems.map((groupItem) => {\n const item = {...groupItem, key: groupItem.key ?? (index + 1).toString(), index}\n index += 1\n return item\n }),\n )\n const withoutGroupMapped = withoutGroup.map((item) => {\n const newItem = {...item, key: item.key ?? (index + 1).toString(), index}\n index += 1\n return newItem\n })\n\n return [withGroupMapped, withoutGroupMapped]\n}\n\ninterface SelectItemsGroupProps<T> {\n title: string | undefined\n items: ItemWithIndex<T>[]\n selectedIndex: number\n hasMarginTop: boolean\n enableShortcuts: boolean\n highlightedTerm?: string\n}\n\n// eslint-disable-next-line react/function-component-definition\nfunction SelectItemsGroup<T>({\n title,\n items,\n selectedIndex,\n hasMarginTop,\n enableShortcuts,\n highlightedTerm,\n}: SelectItemsGroupProps<T>): JSX.Element {\n return (\n <Box key={title} flexDirection=\"column\" marginTop={hasMarginTop ? 1 : 0}>\n {title ? (\n <Box marginLeft={3}>\n <Text bold>{title}</Text>\n </Box>\n ) : null}\n\n {items.map((item) => {\n const isSelected = item.index === selectedIndex\n const label = highlightedLabel(item.label, highlightedTerm)\n\n return (\n <Box key={item.key}>\n <Box marginRight={2}>{isSelected ? <Text color=\"cyan\">{`>`}</Text> : <Text> </Text>}</Box>\n\n <Text color={isSelected ? 'cyan' : undefined}>{enableShortcuts ? `(${item.key}) ${label}` : label}</Text>\n </Box>\n )\n })}\n </Box>\n )\n}\n\n// eslint-disable-next-line react/function-component-definition\nfunction SelectInput<T>({\n items,\n onChange,\n enableShortcuts = true,\n focus = true,\n emptyMessage = 'No items to select.',\n defaultValue,\n highlightedTerm,\n loading = false,\n errorMessage,\n hasMorePages = false,\n morePagesMessage,\n infoMessage,\n}: React.PropsWithChildren<SelectInputProps<T>>): JSX.Element | null {\n const defaultValueIndex = defaultValue ? items.findIndex((item) => item.value === defaultValue.value) : -1\n const initialIndex = defaultValueIndex === -1 ? 0 : defaultValueIndex\n const inputStack = useRef<string | null>(null)\n const [selectedIndex, setSelectedIndex] = useState(initialIndex)\n const [groupedItems, ungroupedItems] = groupItems(items)\n const groupedItemsValues = [...Object.values(groupedItems).flat(), ...ungroupedItems]\n const keys = groupedItemsValues.map((item) => item.key)\n const groupTitles = Object.keys(groupedItems)\n const previousItems = useRef<Item<T>[]>(items)\n\n const changeSelection = useCallback(\n ({index, usedShortcut = false}: {index: number; usedShortcut?: boolean}) => {\n const groupedItem = groupedItemsValues.find((item) => item.index === index)!\n setSelectedIndex(index)\n onChange({\n item: items.find((item) => item.value === groupedItem.value),\n usedShortcut,\n })\n },\n [items],\n )\n\n useEffect(() => {\n if (items.length === 0) {\n // reset selection when items are empty\n onChange({\n item: undefined,\n usedShortcut: false,\n })\n } else if (\n // reset index when items change\n !isEqual(\n previousItems.current.map((item) => item.value),\n items.map((item) => item.value),\n )\n ) {\n changeSelection({index: 0})\n }\n\n previousItems.current = items\n }, [items])\n\n const handleArrows = useCallback(\n (key: Key) => {\n const lastIndex = items.length - 1\n\n if (key.upArrow) {\n changeSelection({index: selectedIndex === 0 ? lastIndex : selectedIndex - 1})\n } else if (key.downArrow) {\n changeSelection({index: selectedIndex === lastIndex ? 0 : selectedIndex + 1})\n }\n },\n [selectedIndex, items],\n )\n\n const handleShortcuts = useCallback(\n (input: string) => {\n if (keys.includes(input)) {\n const groupedItem = groupedItemsValues.find((item) => item.key === input)\n if (groupedItem !== undefined) {\n changeSelection({index: groupedItem.index, usedShortcut: true})\n }\n }\n },\n [items],\n )\n\n const debounceHandleShortcuts = useCallback(\n debounce((newInputStack) => {\n handleShortcuts(newInputStack)\n inputStack.current = null\n }, 300),\n [],\n )\n\n useInput(\n (input, key) => {\n // check that no special modifier (shift, control, etc.) is being pressed\n if (enableShortcuts && input.length > 0 && Object.values(key).every((value) => value === false)) {\n const newInputStack = inputStack.current === null ? input : inputStack.current + input\n\n inputStack.current = newInputStack\n debounceHandleShortcuts(newInputStack)\n } else {\n debounceHandleShortcuts.cancel()\n inputStack.current = null\n handleArrows(key)\n }\n },\n {isActive: focus},\n )\n\n const ungroupedItemsTitle = groupTitles.length > 0 ? 'Other' : undefined\n\n if (loading) {\n return (\n <Box marginLeft={3}>\n <Text dimColor>Loading...</Text>\n </Box>\n )\n } else if (errorMessage && errorMessage.length > 0) {\n return (\n <Box marginLeft={3}>\n <Text color=\"red\">{errorMessage}</Text>\n </Box>\n )\n } else if (items.length === 0) {\n return (\n <Box marginLeft={3}>\n <Text dimColor>{emptyMessage}</Text>\n </Box>\n )\n } else {\n return (\n <Box flexDirection=\"column\">\n {groupTitles.map((title, index) => (\n <SelectItemsGroup\n title={title}\n selectedIndex={selectedIndex}\n items={groupedItems[title]!}\n key={title}\n hasMarginTop={index !== 0}\n enableShortcuts={enableShortcuts}\n highlightedTerm={highlightedTerm}\n />\n ))}\n\n {ungroupedItems.length > 0 && (\n <SelectItemsGroup\n title={ungroupedItemsTitle}\n selectedIndex={selectedIndex}\n items={ungroupedItems}\n hasMarginTop={groupTitles.length > 0}\n enableShortcuts={enableShortcuts}\n highlightedTerm={highlightedTerm}\n />\n )}\n\n <Box marginTop={1} marginLeft={3} flexDirection=\"column\">\n {hasMorePages ? (\n <Text>\n <Text bold>1-{items.length} of many</Text>\n {morePagesMessage ? ` ${morePagesMessage}` : null}\n </Text>\n ) : null}\n <Text dimColor>\n {infoMessage\n ? infoMessage\n : `Press ${figures.arrowUp}${figures.arrowDown} arrows to select, enter to confirm`}\n </Text>\n </Box>\n </Box>\n )\n }\n}\n\nexport {SelectInput}\n"]}
|