sprockets 3.0.0.beta.6 → 3.0.0.beta.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +171 -100
  3. data/lib/rake/sprocketstask.rb +2 -2
  4. data/lib/sprockets.rb +69 -63
  5. data/lib/sprockets/asset.rb +2 -61
  6. data/lib/sprockets/autoload_processor.rb +48 -0
  7. data/lib/sprockets/base.rb +4 -6
  8. data/lib/sprockets/bower.rb +8 -5
  9. data/lib/sprockets/bundle.rb +9 -13
  10. data/lib/sprockets/cache.rb +19 -14
  11. data/lib/sprockets/cache/file_store.rb +2 -1
  12. data/lib/sprockets/cached_environment.rb +15 -68
  13. data/lib/sprockets/closure_compressor.rb +17 -4
  14. data/lib/sprockets/coffee_script_processor.rb +26 -0
  15. data/lib/sprockets/coffee_script_template.rb +3 -20
  16. data/lib/sprockets/compressing.rb +10 -4
  17. data/lib/sprockets/configuration.rb +21 -37
  18. data/lib/sprockets/context.rb +37 -67
  19. data/lib/sprockets/dependencies.rb +73 -0
  20. data/lib/sprockets/digest_utils.rb +8 -2
  21. data/lib/sprockets/directive_processor.rb +122 -165
  22. data/lib/sprockets/eco_processor.rb +32 -0
  23. data/lib/sprockets/eco_template.rb +3 -26
  24. data/lib/sprockets/ejs_processor.rb +31 -0
  25. data/lib/sprockets/ejs_template.rb +3 -25
  26. data/lib/sprockets/encoding_utils.rb +9 -21
  27. data/lib/sprockets/engines.rb +25 -27
  28. data/lib/sprockets/environment.rb +9 -1
  29. data/lib/sprockets/erb_processor.rb +30 -0
  30. data/lib/sprockets/erb_template.rb +3 -20
  31. data/lib/sprockets/file_reader.rb +15 -0
  32. data/lib/sprockets/http_utils.rb +2 -0
  33. data/lib/sprockets/jst_processor.rb +9 -2
  34. data/lib/sprockets/legacy.rb +212 -3
  35. data/lib/sprockets/legacy_tilt_processor.rb +1 -1
  36. data/lib/sprockets/loader.rb +95 -89
  37. data/lib/sprockets/manifest.rb +23 -59
  38. data/lib/sprockets/mime.rb +28 -41
  39. data/lib/sprockets/path_dependency_utils.rb +76 -0
  40. data/lib/sprockets/path_utils.rb +21 -1
  41. data/lib/sprockets/paths.rb +23 -8
  42. data/lib/sprockets/processing.rb +102 -91
  43. data/lib/sprockets/processor_utils.rb +97 -0
  44. data/lib/sprockets/resolve.rb +110 -97
  45. data/lib/sprockets/sass_cache_store.rb +2 -2
  46. data/lib/sprockets/sass_compressor.rb +17 -4
  47. data/lib/sprockets/sass_functions.rb +2 -2
  48. data/lib/sprockets/sass_importer.rb +2 -2
  49. data/lib/sprockets/sass_processor.rb +305 -0
  50. data/lib/sprockets/sass_template.rb +4 -286
  51. data/lib/sprockets/server.rb +1 -13
  52. data/lib/sprockets/transformers.rb +62 -25
  53. data/lib/sprockets/uglifier_compressor.rb +17 -4
  54. data/lib/sprockets/uri_utils.rb +190 -0
  55. data/lib/sprockets/utils.rb +87 -6
  56. data/lib/sprockets/version.rb +1 -1
  57. data/lib/sprockets/yui_compressor.rb +17 -4
  58. metadata +14 -5
  59. data/lib/sprockets/asset_uri.rb +0 -80
  60. data/lib/sprockets/lazy_processor.rb +0 -15
@@ -127,9 +127,9 @@ module Rake
127
127
  task :clobber => ["clobber_#{name}"]
128
128
 
129
129
  desc name == :assets ? "Clean old assets" : "Clean old #{name} assets"
130
- task "clean_#{name}", [:keep] do |t, args|
130
+ task "clean_#{name}" do
131
131
  with_logger do
132
- manifest.clean(Integer(args.keep || self.keep))
132
+ manifest.clean(keep)
133
133
  end
134
134
  end
135
135
 
data/lib/sprockets.rb CHANGED
@@ -10,23 +10,13 @@ module Sprockets
10
10
 
11
11
  # Processing
12
12
  autoload :Bundle, 'sprockets/bundle'
13
- autoload :ClosureCompressor, 'sprockets/closure_compressor'
14
13
  autoload :CoffeeScriptTemplate, 'sprockets/coffee_script_template'
15
14
  autoload :Context, 'sprockets/context'
16
15
  autoload :DirectiveProcessor, 'sprockets/directive_processor'
17
- autoload :EcoTemplate, 'sprockets/eco_template'
18
- autoload :EjsTemplate, 'sprockets/ejs_template'
19
- autoload :ERBTemplate, 'sprockets/erb_template'
20
- autoload :JstProcessor, 'sprockets/jst_processor'
21
- autoload :SassCompressor, 'sprockets/sass_compressor'
22
- autoload :SassTemplate, 'sprockets/sass_template'
23
- autoload :ScssTemplate, 'sprockets/sass_template'
24
- autoload :UglifierCompressor, 'sprockets/uglifier_compressor'
25
- autoload :YUICompressor, 'sprockets/yui_compressor'
16
+ autoload :FileReader, 'sprockets/file_reader'
26
17
 
27
18
  # Internal utilities
28
19
  autoload :ArgumentError, 'sprockets/errors'
29
- autoload :AssetURI, 'sprockets/asset_uri'
30
20
  autoload :Cache, 'sprockets/cache'
31
21
  autoload :ContentTypeMismatch, 'sprockets/errors'
32
22
  autoload :DigestUtils, 'sprockets/digest_utils'
@@ -34,48 +24,52 @@ module Sprockets
34
24
  autoload :Error, 'sprockets/errors'
35
25
  autoload :FileNotFound, 'sprockets/errors'
36
26
  autoload :HTTPUtils, 'sprockets/http_utils'
37
- autoload :LazyProcessor, 'sprockets/lazy_processor'
38
27
  autoload :PathUtils, 'sprockets/path_utils'
39
28
  autoload :Utils, 'sprockets/utils'
40
29
 
30
+ require 'sprockets/processor_utils'
31
+ extend ProcessorUtils
32
+
41
33
  # Extend Sprockets module to provide global registry
42
34
  require 'sprockets/configuration'
43
35
  require 'sprockets/context'
36
+ require 'digest/sha2'
44
37
  extend Configuration
45
38
 
46
- @root = File.expand_path('..', __FILE__).freeze
47
- @paths = [].freeze
48
- @mime_types = {}.freeze
49
- @mime_exts = {}.freeze
50
- @encodings = {}.freeze
51
- @engines = {}.freeze
52
- @engine_mime_types = {}.freeze
53
- @transformers = Hash.new { |h, k| {}.freeze }.freeze
54
- @inverted_transformers = Hash.new { |h, k| {}.freeze }.freeze
55
- @preprocessors = Hash.new { |h, k| [].freeze }.freeze
56
- @postprocessors = Hash.new { |h, k| [].freeze }.freeze
57
- @bundle_reducers = Hash.new { |h, k| {}.freeze }.freeze
58
- @bundle_processors = Hash.new { |h, k| [].freeze }.freeze
59
- @compressors = Hash.new { |h, k| {}.freeze }.freeze
60
- @context_class = Context
61
- @version = ''
62
-
63
- # Set the default digest
64
- require 'digest/sha2'
65
- @digest_class = Digest::SHA256
39
+ self.config = {
40
+ bundle_processors: Hash.new { |h, k| [].freeze }.freeze,
41
+ bundle_reducers: Hash.new { |h, k| {}.freeze }.freeze,
42
+ compressors: Hash.new { |h, k| {}.freeze }.freeze,
43
+ dependencies: Set.new.freeze,
44
+ dependency_resolvers: {}.freeze,
45
+ digest_class: Digest::SHA256,
46
+ engine_mime_types: {}.freeze,
47
+ engines: {}.freeze,
48
+ mime_exts: {}.freeze,
49
+ mime_types: {}.freeze,
50
+ paths: [].freeze,
51
+ postprocessors: Hash.new { |h, k| [].freeze }.freeze,
52
+ preprocessors: Hash.new { |h, k| [].freeze }.freeze,
53
+ registered_transformers: Hash.new { |h, k| {}.freeze }.freeze,
54
+ root: File.expand_path('..', __FILE__).freeze,
55
+ transformers: Hash.new { |h, k| {}.freeze }.freeze,
56
+ version: ""
57
+ }.freeze
58
+
59
+ @context_class = Context
66
60
 
67
61
  require 'logger'
68
62
  @logger = Logger.new($stderr)
69
63
  @logger.level = Logger::FATAL
70
64
 
71
65
  # Common asset text types
72
- register_mime_type 'application/javascript', extensions: ['.js'], charset: EncodingUtils::DETECT_UNICODE
73
- register_mime_type 'application/json', extensions: ['.json'], charset: EncodingUtils::DETECT_UNICODE
66
+ register_mime_type 'application/javascript', extensions: ['.js'], charset: :unicode
67
+ register_mime_type 'application/json', extensions: ['.json'], charset: :unicode
74
68
  register_mime_type 'application/xml', extensions: ['.xml']
75
- register_mime_type 'text/css', extensions: ['.css'], charset: EncodingUtils::DETECT_CSS
76
- register_mime_type 'text/html', extensions: ['.html', '.htm'], charset: EncodingUtils::DETECT_HTML
69
+ register_mime_type 'text/css', extensions: ['.css'], charset: :css
70
+ register_mime_type 'text/html', extensions: ['.html', '.htm'], charset: :html
77
71
  register_mime_type 'text/plain', extensions: ['.txt', '.text']
78
- register_mime_type 'text/yaml', extensions: ['.yml', '.yaml'], charset: EncodingUtils::DETECT_UNICODE
72
+ register_mime_type 'text/yaml', extensions: ['.yml', '.yaml'], charset: :unicode
79
73
 
80
74
  # Common image types
81
75
  register_mime_type 'image/x-icon', extensions: ['.ico']
@@ -103,14 +97,13 @@ module Sprockets
103
97
  register_mime_type 'application/x-font-ttf', extensions: ['.ttf']
104
98
  register_mime_type 'application/font-woff', extensions: ['.woff']
105
99
 
106
- # HTTP content encodings
107
- register_encoding :deflate, EncodingUtils::DEFLATE
108
- register_encoding :gzip, EncodingUtils::GZIP
109
- register_encoding :base64, EncodingUtils::BASE64
110
-
111
100
  require 'sprockets/directive_processor'
112
- register_preprocessor 'text/css', DirectiveProcessor
113
- register_preprocessor 'application/javascript', DirectiveProcessor
101
+ register_preprocessor 'text/css', DirectiveProcessor.new(
102
+ comments: ["//", ["/*", "*/"]]
103
+ )
104
+ register_preprocessor 'application/javascript', DirectiveProcessor.new(
105
+ comments: ["//", ["/*", "*/"]] + ["#", ["###", "###"]]
106
+ )
114
107
 
115
108
  require 'sprockets/bundle'
116
109
  register_bundle_processor 'application/javascript', Bundle
@@ -120,31 +113,44 @@ module Sprockets
120
113
  register_bundle_metadata_reducer 'application/javascript', :data, Utils.method(:concat_javascript_sources)
121
114
  register_bundle_metadata_reducer '*/*', :links, :+
122
115
 
123
- register_compressor 'text/css', :sass, LazyProcessor.new { SassCompressor }
124
- register_compressor 'text/css', :scss, LazyProcessor.new { SassCompressor }
125
- register_compressor 'text/css', :yui, LazyProcessor.new { YUICompressor }
126
- register_compressor 'application/javascript', :closure, LazyProcessor.new { ClosureCompressor }
127
- register_compressor 'application/javascript', :uglifier, LazyProcessor.new { UglifierCompressor }
128
- register_compressor 'application/javascript', :uglify, LazyProcessor.new { UglifierCompressor }
129
- register_compressor 'application/javascript', :yui, LazyProcessor.new { YUICompressor }
116
+ register_compressor 'text/css', :sass, autoload_processor(:SassCompressor, 'sprockets/sass_compressor')
117
+ register_compressor 'text/css', :scss, autoload_processor(:SassCompressor, 'sprockets/sass_compressor')
118
+ register_compressor 'text/css', :yui, autoload_processor(:YUICompressor, 'sprockets/yui_compressor')
119
+ register_compressor 'application/javascript', :closure, autoload_processor(:ClosureCompressor, 'sprockets/closure_compressor')
120
+ register_compressor 'application/javascript', :uglifier, autoload_processor(:UglifierCompressor, 'sprockets/uglifier_compressor')
121
+ register_compressor 'application/javascript', :uglify, autoload_processor(:UglifierCompressor, 'sprockets/uglifier_compressor')
122
+ register_compressor 'application/javascript', :yui, autoload_processor(:YUICompressor, 'sprockets/yui_compressor')
130
123
 
131
124
  # Mmm, CoffeeScript
132
- register_mime_type 'text/coffeescript', extensions: ['.coffee']
133
- register_engine '.coffee', LazyProcessor.new { CoffeeScriptTemplate }, mime_type: 'application/javascript'
125
+ register_engine '.coffee', autoload_processor(:CoffeeScriptProcessor, 'sprockets/coffee_script_processor'), mime_type: 'application/javascript'
134
126
 
135
127
  # JST engines
136
- register_mime_type 'text/eco', extensions: ['.eco']
137
- register_mime_type 'text/ejs', extensions: ['.ejs']
138
- register_engine '.jst', LazyProcessor.new { JstProcessor }, mime_type: 'application/javascript'
139
- register_engine '.eco', LazyProcessor.new { EcoTemplate }, mime_type: 'application/javascript'
140
- register_engine '.ejs', LazyProcessor.new { EjsTemplate }, mime_type: 'application/javascript'
128
+ register_engine '.jst', autoload_processor(:JstProcessor, 'sprockets/jst_processor'), mime_type: 'application/javascript'
129
+ register_engine '.eco', autoload_processor(:EcoProcessor, 'sprockets/eco_processor'), mime_type: 'application/javascript'
130
+ register_engine '.ejs', autoload_processor(:EjsProcessor, 'sprockets/ejs_processor'), mime_type: 'application/javascript'
141
131
 
142
132
  # CSS engines
143
- register_mime_type 'text/sass', extensions: ['.sass']
144
- register_mime_type 'text/scss', extensions: ['.scss']
145
- register_engine '.sass', LazyProcessor.new { SassTemplate }, mime_type: 'text/css'
146
- register_engine '.scss', LazyProcessor.new { ScssTemplate }, mime_type: 'text/css'
133
+ register_engine '.sass', autoload_processor(:SassProcessor, 'sprockets/sass_processor'), mime_type: 'text/css'
134
+ register_engine '.scss', autoload_processor(:ScssProcessor, 'sprockets/sass_processor'), mime_type: 'text/css'
147
135
 
148
136
  # Other
149
- register_engine '.erb', LazyProcessor.new { ERBTemplate }, mime_type: 'text/plain'
137
+ register_engine '.erb', autoload_processor(:ERBProcessor, 'sprockets/erb_processor'), mime_type: 'text/plain'
138
+
139
+ register_dependency_resolver 'environment-version' do |env|
140
+ env.version
141
+ end
142
+ register_dependency_resolver 'environment-paths' do |env|
143
+ env.paths
144
+ end
145
+ register_dependency_resolver 'file-digest' do |env, str|
146
+ env.file_digest(env.parse_file_digest_uri(str))
147
+ end
148
+ register_dependency_resolver 'processors' do |env, str|
149
+ env.resolve_processors_cache_key_uri(str)
150
+ end
151
+
152
+ depend_on 'environment-version'
153
+ depend_on 'environment-paths'
150
154
  end
155
+
156
+ require 'sprockets/legacy'
@@ -1,6 +1,5 @@
1
- require 'base64'
2
1
  require 'fileutils'
3
- require 'pathname'
2
+ require 'sprockets/digest_utils'
4
3
 
5
4
  module Sprockets
6
5
  class Asset
@@ -49,13 +48,6 @@ module Sprockets
49
48
  # Public: Returns String path of asset.
50
49
  attr_reader :filename
51
50
 
52
- # Deprecated: Use #filename instead.
53
- #
54
- # Returns Pathname.
55
- def pathname
56
- @pathname ||= Pathname.new(filename)
57
- end
58
-
59
51
  # Internal: Unique asset object ID.
60
52
  #
61
53
  # Returns a String.
@@ -97,36 +89,6 @@ module Sprockets
97
89
  metadata[:included]
98
90
  end
99
91
 
100
- # Deprecated: Expand asset into an `Array` of parts.
101
- #
102
- # Appending all of an assets body parts together should give you
103
- # the asset's contents as a whole.
104
- #
105
- # This allows you to link to individual files for debugging
106
- # purposes.
107
- #
108
- # Use Asset#included instead. Keeping a full copy of the bundle's processed
109
- # assets in memory (and in cache) is expensive and redundant. The common use
110
- # case is to relink to the assets anyway.
111
- #
112
- # Returns Array of Assets.
113
- def to_a
114
- if metadata[:included]
115
- metadata[:included].map { |uri| @environment.load(uri) }
116
- else
117
- [self]
118
- end
119
- end
120
-
121
- # Deprecated: Get all required Assets.
122
- #
123
- # See Asset#to_a
124
- #
125
- # Returns Array of Assets.
126
- def dependencies
127
- to_a.reject { |a| a.filename.eql?(self.filename) }
128
- end
129
-
130
92
  # Public: Return `String` of concatenated source.
131
93
  #
132
94
  # Returns String.
@@ -146,15 +108,6 @@ module Sprockets
146
108
  source
147
109
  end
148
110
 
149
- # Public: HTTP encoding for Asset, "deflate", "gzip", etc.
150
- #
151
- # Note: This is not the Ruby Encoding of the source. See Asset#charset.
152
- #
153
- # Returns a String or nil if encoding is "identity".
154
- def encoding
155
- metadata[:encoding]
156
- end
157
-
158
111
  # Public: Get charset of source.
159
112
  #
160
113
  # Returns a String charset name or nil if binary.
@@ -168,15 +121,6 @@ module Sprockets
168
121
  end
169
122
  alias_method :bytesize, :length
170
123
 
171
- # Deprecated: Returns Time of the last time the source was modified.
172
- #
173
- # Time resolution is normalized to the nearest second.
174
- #
175
- # Returns Time.
176
- def mtime
177
- Time.at(@mtime)
178
- end
179
-
180
124
  # Public: Returns String hexdigest of source.
181
125
  def hexdigest
182
126
  DigestUtils.pack_hexdigest(metadata[:digest])
@@ -231,10 +175,7 @@ module Sprockets
231
175
  #
232
176
  # Returns String.
233
177
  def inspect
234
- "#<#{self.class}:#{id} " +
235
- "filename=#{filename.inspect}, " +
236
- "digest=#{digest.inspect}" +
237
- ">"
178
+ "#<#{self.class}:#{object_id.to_s(16)} #{uri.inspect}>"
238
179
  end
239
180
 
240
181
  # Public: Implements Object#hash so Assets can be used as a Hash key or
@@ -0,0 +1,48 @@
1
+ module Sprockets
2
+ # Internal: Used for lazy loading processors.
3
+ #
4
+ # Libraries should not use lazily loaded processors. They are only needed
5
+ # internally by Sprockets since it has optionally dependencies such as
6
+ # CoffeeScript that may not be available in the gem environment.
7
+ class AutoloadProcessor
8
+ # Initialize AutoloadProcessor wrapper
9
+ #
10
+ # See ProcessorUtils.autoload_processor for constructor method.
11
+ #
12
+ # mod - Parent Module of processor class/module
13
+ # name - Symbol name of processor class/module
14
+ def initialize(mod, name)
15
+ @mod = mod
16
+ @name = name.to_sym
17
+ end
18
+
19
+ # Full name of module.
20
+ #
21
+ # Returns String.
22
+ def name
23
+ "#{@mod}::#{@name}"
24
+ end
25
+
26
+ # Check if target constant is already loaded.
27
+ #
28
+ # Returns Boolean.
29
+ def const_loaded?
30
+ @mod.autoload?(@name)
31
+ end
32
+
33
+ # Delegate to processor#cache_key
34
+ def cache_key
35
+ load_processor.cache_key if load_processor.respond_to?(:cache_key)
36
+ end
37
+
38
+ # Delegate to processor#call
39
+ def call(*args)
40
+ load_processor.call(*args)
41
+ end
42
+
43
+ private
44
+ def load_processor
45
+ @processor ||= @mod.const_get(@name)
46
+ end
47
+ end
48
+ end
@@ -1,14 +1,12 @@
1
- require 'sprockets/asset_uri'
2
1
  require 'sprockets/asset'
3
2
  require 'sprockets/bower'
4
3
  require 'sprockets/cache'
5
4
  require 'sprockets/configuration'
6
5
  require 'sprockets/digest_utils'
7
6
  require 'sprockets/errors'
8
- require 'sprockets/http_utils'
9
- require 'sprockets/legacy'
10
7
  require 'sprockets/loader'
11
8
  require 'sprockets/path_digest_utils'
9
+ require 'sprockets/path_dependency_utils'
12
10
  require 'sprockets/path_utils'
13
11
  require 'sprockets/resolve'
14
12
  require 'sprockets/server'
@@ -16,12 +14,11 @@ require 'sprockets/server'
16
14
  module Sprockets
17
15
  # `Base` class for `Environment` and `Cached`.
18
16
  class Base
19
- include PathDigestUtils, PathUtils, HTTPUtils, DigestUtils
17
+ include PathUtils, PathDependencyUtils, PathDigestUtils, DigestUtils
20
18
  include Configuration
21
19
  include Server
22
20
  include Resolve, Loader
23
21
  include Bower
24
- include Legacy
25
22
 
26
23
  # Get persistent cache store
27
24
  attr_reader :cache
@@ -61,7 +58,8 @@ module Sprockets
61
58
 
62
59
  # Find asset by logical path or expanded path.
63
60
  def find_asset(path, options = {})
64
- if uri = locate(path, options)
61
+ uri, _ = resolve(path, options.merge(compat: false))
62
+ if uri
65
63
  load(uri)
66
64
  end
67
65
  end
@@ -12,9 +12,9 @@ module Sprockets
12
12
  # load_path - String environment path
13
13
  # logical_path - String path relative to base
14
14
  #
15
- # Returns nothing.
16
- def resolve_alternates(load_path, logical_path, &block)
17
- super
15
+ # Returns candiate filenames.
16
+ def resolve_alternates(load_path, logical_path)
17
+ candidates, deps = super
18
18
 
19
19
  # bower.json can only be nested one level deep
20
20
  if !logical_path.index('/')
@@ -26,12 +26,15 @@ module Sprockets
26
26
  filename = filenames.detect { |fn| self.file?(fn) }
27
27
 
28
28
  if filename
29
- read_bower_main(dirname, filename, &block)
29
+ deps << build_file_digest_uri(filename)
30
+ read_bower_main(dirname, filename) do |path|
31
+ candidates << path
32
+ end
30
33
  end
31
34
  end
32
35
  end
33
36
 
34
- nil
37
+ return candidates, deps
35
38
  end
36
39
 
37
40
  # Internal: Read bower.json's main directive.
@@ -1,4 +1,5 @@
1
- require 'sprockets/asset_uri'
1
+ require 'set'
2
+ require 'sprockets/utils'
2
3
 
3
4
  module Sprockets
4
5
  # Internal: Bundle processor takes a single file asset and prepends all the
@@ -15,25 +16,20 @@ module Sprockets
15
16
  env = input[:environment]
16
17
  type = input[:content_type]
17
18
 
18
- # TODO: Rebuilding this URI is a bit of a smell
19
- processed_uri = AssetURI.build(input[:filename], type: type, skip_bundle: true)
19
+ processed_uri = env.build_asset_uri(input[:filename], type: type, skip_bundle: true)
20
20
 
21
- cache = Hash.new do |h, uri|
22
- h[uri] = env.load(uri)
23
- end
24
-
25
- find_required = proc { |uri| cache[uri].metadata[:required] }
21
+ find_required = proc { |uri| env.load(uri).metadata[:required] }
26
22
  required = Utils.dfs(processed_uri, &find_required)
27
- stubbed = Utils.dfs(cache[processed_uri].metadata[:stubbed], &find_required)
23
+ stubbed = Utils.dfs(env.load(processed_uri).metadata[:stubbed], &find_required)
28
24
  required.subtract(stubbed)
29
- assets = required.map { |uri| cache[uri] }
25
+ assets = required.map { |uri| env.load(uri) }
30
26
 
31
- dependency_paths = Set.new
27
+ dependencies = Set.new(input[:metadata][:dependencies])
32
28
  (required + stubbed).each do |uri|
33
- dependency_paths += cache[uri].metadata[:dependency_paths]
29
+ dependencies.merge(env.load(uri).metadata[:dependencies])
34
30
  end
35
31
 
36
- env.process_bundle_reducers(assets, env.unwrap_bundle_reducers(type)).merge(dependency_paths: dependency_paths, included: assets.map(&:uri))
32
+ env.process_bundle_reducers(assets, env.load_bundle_reducers(type)).merge(dependencies: dependencies, included: assets.map(&:uri))
37
33
  end
38
34
  end
39
35
  end