lib/ckeditor5/rails/cdn/url_generator.rb



# frozen_string_literal: true

require 'active_support'

module CKEditor5::Rails::Cdn
  module UrlGenerator
    extend ActiveSupport::Concern

    CDN_THIRD_PARTY_GENERATORS = {
      jsdelivr: lambda { |bundle, version, path|
        base_url = "https://cdn.jsdelivr.net/npm/#{bundle}@#{version}/dist"
        "#{base_url}/#{path.start_with?('translations/') ? '' : 'browser/'}#{path}"
      },

      unpkg: lambda { |bundle, version, path|
        base_url = "https://unpkg.com/#{bundle}@#{version}/dist"
        "#{base_url}/#{path.start_with?('translations/') ? '' : 'browser/'}#{path}"
      }
    }.freeze

    CDN_COMMERCIAL_GENERATORS = {
      cloud: lambda { |bundle, version, path|
        domain = bundle == 'ckbox' ? 'ckbox.io' : 'ckeditor.com'

        "https://cdn.#{domain}/#{bundle}/#{version}/#{path}"
      }
    }.freeze

    included do
      attr_reader :cdn
    end

    def create_cdn_url(bundle, version, path)
      generator = CDN_THIRD_PARTY_GENERATORS[cdn] || CDN_COMMERCIAL_GENERATORS[cdn] || cdn

      raise ArgumentError, "Unknown provider: #{cdn}" unless generator

      generator.call(bundle, version, path)
    end
  end
end