# frozen_string_literal: true require "shopify_cli" module Script module Layers module Application class CreateScript class << self def call(ctx:, language:, sparse_checkout_branch:, title:, extension_point_type:) script_project_repo = Infrastructure::ScriptProjectRepository.new( ctx: ctx, directory: title, initial_directory: ctx.root ) in_new_directory_context(script_project_repo) do extension_point = ExtensionPoints.get(type: extension_point_type) project = script_project_repo.create( title: title, extension_point_type: extension_point_type, language: language ) # remove the need to pass the whole extension-point object to the infra layer type = extension_point.dasherize_type domain = extension_point.domain sparse_checkout_details = Infrastructure::SparseCheckoutDetails.new( repo: extension_point.libraries.for(language).repo, branch: sparse_checkout_branch, path: "#{domain}/#{language}/#{type}/default", input_queries_enabled: input_queries_enabled?, ) project_creator = Infrastructure::Languages::ProjectCreator.for( ctx: ctx, language: language, type: type, project_name: title, path_to_project: project.id, sparse_checkout_details: sparse_checkout_details, ) install_dependencies(ctx, language, title, project_creator) project end end private def install_dependencies(ctx, language, title, project_creator) task_runner = Infrastructure::Languages::TaskRunner.for(ctx, language) CLI::UI::Frame.open(ctx.message( "core.git.pulling_from_to", project_creator.sparse_checkout_details.repo, title, )) do UI::StrictSpinner.spin(ctx.message( "core.git.pulling", project_creator.sparse_checkout_details.repo, title, )) do |spinner| project_creator.setup_dependencies spinner.update_title(ctx.message("core.git.pulled", title)) end end ProjectDependencies.install(ctx: ctx, task_runner: task_runner) end def in_new_directory_context(script_project_repo) script_project_repo.create_project_directory yield rescue Infrastructure::Errors::ScriptProjectAlreadyExistsError raise rescue script_project_repo.delete_project_directory raise ensure script_project_repo.change_to_initial_directory end def input_queries_enabled? ShopifyCLI::Feature.enabled?(:scripts_beta_input_queries) end end end end end end