diff options
author | Mike Greiling <mike@pixelcog.com> | 2018-04-26 23:12:39 +0300 |
---|---|---|
committer | Mike Greiling <mike@pixelcog.com> | 2018-05-01 23:15:10 +0300 |
commit | d224b59a769de823e868b115b4631e0cd2d8bb09 (patch) | |
tree | 8bdaa158ce4bda4837b54216517d8b1a130c1600 /lib/gitlab/webpack | |
parent | 996e5d79dfefac5dd5cacbfdd08c443f007f4492 (diff) |
update webpack manifest integration to recognize multi-chunk entrypoints
Diffstat (limited to 'lib/gitlab/webpack')
-rw-r--r-- | lib/gitlab/webpack/manifest.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/gitlab/webpack/manifest.rb b/lib/gitlab/webpack/manifest.rb new file mode 100644 index 00000000000..6d23e938de8 --- /dev/null +++ b/lib/gitlab/webpack/manifest.rb @@ -0,0 +1,49 @@ +require 'webpack/rails/manifest' + +module Gitlab + module Webpack + class Manifest < ::Webpack::Rails::Manifest + # Raised if webpack couldn't build one of your assets + class WebpackError < StandardError + def initialize(errors) + super "Error in webpack compile, details follow below:\n#{errors.join("\n\n")}" + end + end + + # Raised if a supplied asset does not exist in the webpack manifest + AssetMissingError = Class.new(StandardError) + + class << self + def asset_paths(source) + raise ::Webpack::Rails::Manifest::WebpackError, manifest["errors"] unless manifest_bundled? + + paths = manifest["assetsByChunkName"][source] + if paths + # Can be either a string or an array of strings. + # Do not include source maps as they are not javascript + [paths].flatten.reject { |p| p =~ /.*\.map$/ }.map do |p| + "/#{::Rails.configuration.webpack.public_path}/#{p}" + end + else + raise AssetMissingError, "Can't find asset '#{source}' in webpack manifest" + end + end + + def entrypoint_paths(source) + raise ::Webpack::Rails::Manifest::WebpackError, manifest["errors"] unless manifest_bundled? + + entrypoint = manifest["entrypoints"][source] + if entrypoint && entrypoint["assets"] + # Can be either a string or an array of strings. + # Do not include source maps as they are not javascript + [entrypoint["assets"]].flatten.reject { |p| p =~ /.*\.map$/ }.map do |p| + "/#{::Rails.configuration.webpack.public_path}/#{p}" + end + else + raise AssetMissingError, "Can't find entry point '#{source}' in webpack manifest" + end + end + end + end + end +end |