Sha256: 1f496e37691b019b9f74aa3d03f897e2cc25926b5058191bb6a5ae9ba5b89710

Contents?: true

Size: 1.2 KB

Versions: 5

Compression:

Stored size: 1.2 KB

Contents

# frozen_string_literal: true

require 'active_support/current_attributes'

module Proscenium
  class Resolver < ActiveSupport::CurrentAttributes
    # TODO: cache this across requests in production.
    attribute :resolved

    # Resolve the given `path` to a URL path.
    #
    # @param path [String] Can be URL path, file system path, or bare specifier (ie. NPM package).
    # @return [String] URL path.
    #
    # rubocop:disable Metrics/*
    def self.resolve(path)
      self.resolved ||= {}

      self.resolved[path] ||= begin
        if path.start_with?('./', '../')
          raise ArgumentError, 'path must be an absolute file system or URL path'
        end

        if path.start_with?('@proscenium/')
          "/#{path}"
        elsif path.start_with?(Proscenium.ui_path.to_s)
          path.delete_prefix Proscenium.root.join('lib').to_s
        elsif path.start_with?("#{Rails.root}/")
          path.delete_prefix Rails.root.to_s
        elsif (engine = Proscenium.config.engines.find { |e| path.start_with? "#{e.root}/" })
          path.sub(/^#{engine.root}/, "/#{engine.engine_name}")
        else
          Builder.resolve path
        end
      end
    end
    # rubocop:enable Metrics/*
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
proscenium-0.19.0.beta1-x86_64-linux lib/proscenium/resolver.rb
proscenium-0.19.0.beta1-aarch64-linux lib/proscenium/resolver.rb
proscenium-0.19.0.beta1-arm64-darwin lib/proscenium/resolver.rb
proscenium-0.19.0.beta1-x86_64-darwin lib/proscenium/resolver.rb
proscenium-0.19.0.beta1 lib/proscenium/resolver.rb