Sha256: af0016f24f2d63a997c1274ab9b0e6a6a1dfa979e4cf15885d1f6816c8d56d25

Contents?: true

Size: 1.84 KB

Versions: 3

Compression:

Stored size: 1.84 KB

Contents

# frozen_string_literal: true
require 'sewing_kit/webpack/manifest/base'
require 'benchmark'
require 'browserslist_useragent'

module SewingKit
  module Webpack
    class Manifest
      class Production < Base
        def initialize
          @cache_by_user_agent = {}
          @metadata = nil
          @metadata_path = nil
        end

        def asset_bundle_name(user_agent)
          metadata_for(user_agent)['name']
        end

        # :nodoc:
        def asset_dependencies(entrypoint_name, user_agent)
          metadata_for(user_agent)['entrypoints'][entrypoint_name]
        end

        def metadata
          @metadata ||= load_metadata
        end

        private

        def metadata_for(user_agent)
          time = Benchmark.realtime do
            @cache_by_user_agent[user_agent] ||= find_matching_metadata(metadata, user_agent)
          end

          Rails.logger.debug(
            "[sewing_kit] found asset metadata for #{user_agent} in  #{time * 1000} milliseconds"
          )

          @cache_by_user_agent[user_agent]
        end

        def find_matching_metadata(consolidated_metadata, user_agent)
          return metadata unless metadata.is_a?(Array)

          found = consolidated_metadata.find do |metadata|
            return nil if metadata["resolvedBrowsers"].nil?
            matcher = BrowserslistUseragent::Match.new(metadata["resolvedBrowsers"], user_agent)

            matcher.browser? && matcher.version?(allow_higher: true)
          end

          found || consolidated_metadata.last
        end

        def load_metadata
          load_metadata_from_fs(path)
        end

        def path
          return SewingKit.configuration.manifest_path unless SewingKit.configuration.manifest_path.nil?

          File.join(Rails.root, 'public', 'bundles', SewingKit.configuration.manifest_name)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sewing_kit-0.95.3 lib/sewing_kit/webpack/manifest/production.rb
sewing_kit-0.95.2 lib/sewing_kit/webpack/manifest/production.rb
sewing_kit-0.95.1 lib/sewing_kit/webpack/manifest/production.rb