Sha256: 29b15cbe8af21017b4249dd63ee0ada0807171ce964e7adc5f42d546a81fa240

Contents?: true

Size: 1.97 KB

Versions: 17

Compression:

Stored size: 1.97 KB

Contents

# frozen_string_literal: true

module Extension
  module Models
    class DevelopmentServer
      class DevelopmentServerError < StandardError; end

      include SmartProperties

      EXECUTABLE_DIRECTORY = File.join(ShopifyCLI::ROOT, "ext", "shopify-extensions")

      property :executable, converts: :to_s

      def executable
        super || begin
          case RbConfig::CONFIG.fetch("host_os")
          when /(linux)|(darwin)/
            File.join(EXECUTABLE_DIRECTORY, "shopify-extensions")
          else
            File.join(EXECUTABLE_DIRECTORY, "shopify-extensions.exe")
          end
        end
      end

      def executable_installed?
        File.exist?(executable)
      end

      def create(server_config)
        CLI::Kit::System.capture3(executable, "create", "-", stdin_data: server_config.to_yaml)
      rescue StandardError => error
        raise error
      end

      def build(server_config)
        output, error, status = CLI::Kit::System.capture3(executable, "build", "-", stdin_data: server_config.to_yaml)
        return output if status.success?
        raise DevelopmentServerError, error
      end

      def serve(context, server_config)
        CLI::Kit::System.popen3(executable, "serve", "-") do |input, out, err, status|
          context.debug("Sending configuration data to extension development server …")
          input << server_config.to_yaml
          input.close

          forward_output_to_user(out, err, context)

          status.value
        end
      end

      def version
        raise NotImplementedError
      end

      private

      def forward_output_to_user(out, err, ctx)
        ctx.debug("Starting message processing threads to relay output produced by the extension development server …")

        Thread.new do
          while (line = out.gets)
            ctx.puts(line)
          end
        end

        Thread.new do
          while (error = err.gets)
            ctx.puts(error)
          end
        end
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
shopify-cli-2.15.6 lib/project_types/extension/models/development_server.rb
shopify-cli-2.15.5 lib/project_types/extension/models/development_server.rb
shopify-cli-2.15.4 lib/project_types/extension/models/development_server.rb
shopify-cli-2.15.3 lib/project_types/extension/models/development_server.rb
shopify-cli-2.15.2 lib/project_types/extension/models/development_server.rb
shopify-cli-2.15.1 lib/project_types/extension/models/development_server.rb
shopify-cli-2.15.0 lib/project_types/extension/models/development_server.rb
shopify-cli-2.14.0 lib/project_types/extension/models/development_server.rb
shopify-cli-2.13.0 lib/project_types/extension/models/development_server.rb
shopify-cli-2.12.0 lib/project_types/extension/models/development_server.rb
shopify-cli-2.11.2 lib/project_types/extension/models/development_server.rb
shopify-cli-2.11.1 lib/project_types/extension/models/development_server.rb
shopify-cli-2.11.0 lib/project_types/extension/models/development_server.rb
shopify-cli-2.10.2 lib/project_types/extension/models/development_server.rb
shopify-cli-2.10.1 lib/project_types/extension/models/development_server.rb
shopify-cli-2.10.0 lib/project_types/extension/models/development_server.rb
shopify-cli-2.9.0 lib/project_types/extension/models/development_server.rb