summaryrefslogtreecommitdiff
path: root/lib/gitlab/webpack/manifest.rb
diff options
context:
space:
mode:
authorMike Greiling <mike@pixelcog.com>2018-04-26 15:12:39 -0500
committerMike Greiling <mike@pixelcog.com>2018-05-01 15:15:10 -0500
commitd224b59a769de823e868b115b4631e0cd2d8bb09 (patch)
tree8bdaa158ce4bda4837b54216517d8b1a130c1600 /lib/gitlab/webpack/manifest.rb
parent996e5d79dfefac5dd5cacbfdd08c443f007f4492 (diff)
downloadgitlab-ce-d224b59a769de823e868b115b4631e0cd2d8bb09.tar.gz
update webpack manifest integration to recognize multi-chunk entrypoints
Diffstat (limited to 'lib/gitlab/webpack/manifest.rb')
-rw-r--r--lib/gitlab/webpack/manifest.rb49
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