Sha256: a06e814eb32701240b76085fa4c352e18d21b78a77124aa46ba158bf4b5bbee2

Contents?: true

Size: 1.46 KB

Versions: 9

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module Proscenium
  class Middleware
    extend ActiveSupport::Autoload

    # Error when the build command fails.
    class BuildError < StandardError; end

    autoload :Base
    autoload :Esbuild
    autoload :Runtime

    def initialize(app)
      @app = app
    end

    def call(env)
      request = Rack::Request.new(env)

      return @app.call(env) if !request.get? && !request.head?

      attempt(request) || @app.call(env)
    end

    private

    # Look for the precompiled file in public/assets first, then fallback to the Proscenium
    # middleware that matches the type of file requested, ie: .js => esbuild.
    # See Rails.application.config.proscenium.glob_types.
    def attempt(request)
      return unless (type = find_type(request))

      file_handler.attempt(request.env) || type.attempt(request)
    end

    # Returns the type of file being requested using Rails.application.config.proscenium.glob_types.
    def find_type(request)
      path = Pathname.new(request.path)

      return Runtime if path.fnmatch?(glob_types[:runtime], File::FNM_EXTGLOB)
      return Esbuild if path.fnmatch?(glob_types[:esbuild], File::FNM_EXTGLOB)
    end

    def file_handler
      ::ActionDispatch::FileHandler.new Rails.public_path.join('assets').to_s,
                                        headers: { 'X-Proscenium-Middleware' => 'precompiled' }
    end

    def glob_types
      Rails.application.config.proscenium.glob_types
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
proscenium-0.1.2-arm64-darwin lib/proscenium/middleware.rb
proscenium-0.1.2-x86_64-darwin lib/proscenium/middleware.rb
proscenium-0.1.2-x86_64-linux lib/proscenium/middleware.rb
proscenium-0.1.1-arm64-darwin lib/proscenium/middleware.rb
proscenium-0.1.1-x86_64-darwin lib/proscenium/middleware.rb
proscenium-0.1.1-x86_64-linux lib/proscenium/middleware.rb
proscenium-0.1.0.alpha4-arm64-darwin lib/proscenium/middleware.rb
proscenium-0.1.0.alpha4-x86_64-darwin lib/proscenium/middleware.rb
proscenium-0.1.0.alpha4-x86_64-linux lib/proscenium/middleware.rb