sprockets 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +68 -0
- data/README.md +397 -408
- data/bin/sprockets +12 -7
- data/lib/rake/sprocketstask.rb +3 -2
- data/lib/sprockets/add_source_map_comment_to_asset_processor.rb +60 -0
- data/lib/sprockets/asset.rb +19 -23
- data/lib/sprockets/autoload/babel.rb +8 -0
- data/lib/sprockets/autoload/closure.rb +1 -0
- data/lib/sprockets/autoload/coffee_script.rb +1 -0
- data/lib/sprockets/autoload/eco.rb +1 -0
- data/lib/sprockets/autoload/ejs.rb +1 -0
- data/lib/sprockets/autoload/jsminc.rb +8 -0
- data/lib/sprockets/autoload/sass.rb +1 -0
- data/lib/sprockets/autoload/sassc.rb +8 -0
- data/lib/sprockets/autoload/uglifier.rb +1 -0
- data/lib/sprockets/autoload/yui.rb +1 -0
- data/lib/sprockets/autoload/zopfli.rb +7 -0
- data/lib/sprockets/autoload.rb +5 -0
- data/lib/sprockets/babel_processor.rb +66 -0
- data/lib/sprockets/base.rb +59 -11
- data/lib/sprockets/bower.rb +5 -2
- data/lib/sprockets/bundle.rb +44 -4
- data/lib/sprockets/cache/file_store.rb +32 -7
- data/lib/sprockets/cache/memory_store.rb +9 -0
- data/lib/sprockets/cache/null_store.rb +8 -0
- data/lib/sprockets/cache.rb +42 -5
- data/lib/sprockets/cached_environment.rb +14 -19
- data/lib/sprockets/closure_compressor.rb +6 -11
- data/lib/sprockets/coffee_script_processor.rb +19 -5
- data/lib/sprockets/compressing.rb +62 -2
- data/lib/sprockets/configuration.rb +3 -7
- data/lib/sprockets/context.rb +98 -23
- data/lib/sprockets/dependencies.rb +9 -8
- data/lib/sprockets/digest_utils.rb +104 -60
- data/lib/sprockets/directive_processor.rb +45 -35
- data/lib/sprockets/eco_processor.rb +3 -2
- data/lib/sprockets/ejs_processor.rb +3 -2
- data/lib/sprockets/encoding_utils.rb +8 -4
- data/lib/sprockets/environment.rb +9 -4
- data/lib/sprockets/erb_processor.rb +28 -21
- data/lib/sprockets/errors.rb +1 -1
- data/lib/sprockets/exporters/base.rb +72 -0
- data/lib/sprockets/exporters/file_exporter.rb +24 -0
- data/lib/sprockets/exporters/zlib_exporter.rb +33 -0
- data/lib/sprockets/exporters/zopfli_exporter.rb +14 -0
- data/lib/sprockets/exporting.rb +73 -0
- data/lib/sprockets/file_reader.rb +1 -0
- data/lib/sprockets/http_utils.rb +26 -6
- data/lib/sprockets/jsminc_compressor.rb +32 -0
- data/lib/sprockets/jst_processor.rb +11 -10
- data/lib/sprockets/loader.rb +236 -69
- data/lib/sprockets/manifest.rb +97 -44
- data/lib/sprockets/manifest_utils.rb +9 -6
- data/lib/sprockets/mime.rb +8 -42
- data/lib/sprockets/npm.rb +52 -0
- data/lib/sprockets/path_dependency_utils.rb +3 -11
- data/lib/sprockets/path_digest_utils.rb +2 -1
- data/lib/sprockets/path_utils.rb +106 -21
- data/lib/sprockets/paths.rb +1 -0
- data/lib/sprockets/preprocessors/default_source_map.rb +49 -0
- data/lib/sprockets/processing.rb +31 -51
- data/lib/sprockets/processor_utils.rb +81 -15
- data/lib/sprockets/resolve.rb +182 -95
- data/lib/sprockets/sass_cache_store.rb +1 -0
- data/lib/sprockets/sass_compressor.rb +21 -17
- data/lib/sprockets/sass_functions.rb +1 -0
- data/lib/sprockets/sass_importer.rb +1 -0
- data/lib/sprockets/sass_processor.rb +45 -17
- data/lib/sprockets/sassc_compressor.rb +56 -0
- data/lib/sprockets/sassc_processor.rb +297 -0
- data/lib/sprockets/server.rb +57 -34
- data/lib/sprockets/source_map_processor.rb +66 -0
- data/lib/sprockets/source_map_utils.rb +483 -0
- data/lib/sprockets/transformers.rb +63 -35
- data/lib/sprockets/uglifier_compressor.rb +23 -20
- data/lib/sprockets/unloaded_asset.rb +139 -0
- data/lib/sprockets/uri_tar.rb +99 -0
- data/lib/sprockets/uri_utils.rb +15 -14
- data/lib/sprockets/utils/gzip.rb +99 -0
- data/lib/sprockets/utils.rb +43 -59
- data/lib/sprockets/version.rb +2 -1
- data/lib/sprockets/yui_compressor.rb +5 -14
- data/lib/sprockets.rb +103 -33
- metadata +151 -22
- data/LICENSE +0 -21
- data/lib/sprockets/coffee_script_template.rb +0 -6
- data/lib/sprockets/eco_template.rb +0 -6
- data/lib/sprockets/ejs_template.rb +0 -6
- data/lib/sprockets/engines.rb +0 -81
- data/lib/sprockets/erb_template.rb +0 -6
- data/lib/sprockets/legacy.rb +0 -314
- data/lib/sprockets/legacy_proc_processor.rb +0 -35
- data/lib/sprockets/legacy_tilt_processor.rb +0 -29
- data/lib/sprockets/sass_template.rb +0 -7
data/lib/sprockets/legacy.rb
DELETED
@@ -1,314 +0,0 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
require 'sprockets/asset'
|
3
|
-
require 'sprockets/base'
|
4
|
-
require 'sprockets/cached_environment'
|
5
|
-
require 'sprockets/context'
|
6
|
-
require 'sprockets/manifest'
|
7
|
-
require 'sprockets/resolve'
|
8
|
-
|
9
|
-
module Sprockets
|
10
|
-
autoload :CoffeeScriptTemplate, 'sprockets/coffee_script_template'
|
11
|
-
autoload :EcoTemplate, 'sprockets/eco_template'
|
12
|
-
autoload :EjsTemplate, 'sprockets/ejs_template'
|
13
|
-
autoload :ERBTemplate, 'sprockets/erb_template'
|
14
|
-
autoload :SassTemplate, 'sprockets/sass_template'
|
15
|
-
autoload :ScssTemplate, 'sprockets/sass_template'
|
16
|
-
|
17
|
-
# Deprecated
|
18
|
-
Index = CachedEnvironment
|
19
|
-
|
20
|
-
class Base
|
21
|
-
include Resolve
|
22
|
-
|
23
|
-
# Deprecated: Change default return type of resolve() to return 2.x
|
24
|
-
# compatible plain filename String. 4.x will always return an Asset URI
|
25
|
-
# and a set of file system dependencies that had to be read to compute the
|
26
|
-
# result.
|
27
|
-
#
|
28
|
-
# 2.x
|
29
|
-
#
|
30
|
-
# resolve("foo.js")
|
31
|
-
# # => "/path/to/app/javascripts/foo.js"
|
32
|
-
#
|
33
|
-
# 3.x
|
34
|
-
#
|
35
|
-
# resolve("foo.js")
|
36
|
-
# # => "/path/to/app/javascripts/foo.js"
|
37
|
-
#
|
38
|
-
# resolve("foo.js", compat: true)
|
39
|
-
# # => "/path/to/app/javascripts/foo.js"
|
40
|
-
#
|
41
|
-
# resolve("foo.js", compat: false)
|
42
|
-
# # => [
|
43
|
-
# # "file:///path/to/app/javascripts/foo.js?type=application/javascript"
|
44
|
-
# # #<Set: {"file-digest:/path/to/app/javascripts/foo.js"}>
|
45
|
-
# # ]
|
46
|
-
#
|
47
|
-
# 4.x
|
48
|
-
#
|
49
|
-
# resolve("foo.js")
|
50
|
-
# # => [
|
51
|
-
# # "file:///path/to/app/javascripts/foo.js?type=application/javascript"
|
52
|
-
# # #<Set: {"file-digest:/path/to/app/javascripts/foo.js"}>
|
53
|
-
# # ]
|
54
|
-
#
|
55
|
-
def resolve_with_compat(path, options = {})
|
56
|
-
options = options.dup
|
57
|
-
if options.delete(:compat) { true }
|
58
|
-
uri, _ = resolve_without_compat(path, options)
|
59
|
-
if uri
|
60
|
-
path, _ = parse_asset_uri(uri)
|
61
|
-
path
|
62
|
-
else
|
63
|
-
nil
|
64
|
-
end
|
65
|
-
else
|
66
|
-
resolve_without_compat(path, options)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
alias_method :resolve_without_compat, :resolve
|
70
|
-
alias_method :resolve, :resolve_with_compat
|
71
|
-
|
72
|
-
# Deprecated: Iterate over all logical paths with a matcher.
|
73
|
-
#
|
74
|
-
# Remove from 4.x.
|
75
|
-
#
|
76
|
-
# args - List of matcher objects.
|
77
|
-
#
|
78
|
-
# Returns Enumerator if no block is given.
|
79
|
-
def each_logical_path(*args, &block)
|
80
|
-
return to_enum(__method__, *args) unless block_given?
|
81
|
-
|
82
|
-
filters = args.flatten.map { |arg| Manifest.compile_match_filter(arg) }
|
83
|
-
logical_paths.each do |a, b|
|
84
|
-
if filters.any? { |f| f.call(a, b) }
|
85
|
-
if block.arity == 2
|
86
|
-
yield a, b
|
87
|
-
else
|
88
|
-
yield a
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
nil
|
94
|
-
end
|
95
|
-
|
96
|
-
# Deprecated: Enumerate over all logical paths in the environment.
|
97
|
-
#
|
98
|
-
# Returns an Enumerator of [logical_path, filename].
|
99
|
-
def logical_paths
|
100
|
-
return to_enum(__method__) unless block_given?
|
101
|
-
|
102
|
-
seen = Set.new
|
103
|
-
|
104
|
-
paths.each do |load_path|
|
105
|
-
stat_tree(load_path).each do |filename, stat|
|
106
|
-
next unless stat.file?
|
107
|
-
|
108
|
-
path = split_subpath(load_path, filename)
|
109
|
-
path, mime_type, _, _ = parse_path_extnames(path)
|
110
|
-
path = normalize_logical_path(path)
|
111
|
-
path += mime_types[mime_type][:extensions].first if mime_type
|
112
|
-
|
113
|
-
if !seen.include?(path)
|
114
|
-
yield path, filename
|
115
|
-
seen << path
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
nil
|
121
|
-
end
|
122
|
-
|
123
|
-
def cache_get(key)
|
124
|
-
cache.get(key)
|
125
|
-
end
|
126
|
-
|
127
|
-
def cache_set(key, value)
|
128
|
-
cache.set(key, value)
|
129
|
-
end
|
130
|
-
|
131
|
-
private
|
132
|
-
# Deprecated: Seriously.
|
133
|
-
def matches_filter(filters, logical_path, filename)
|
134
|
-
return true if filters.empty?
|
135
|
-
|
136
|
-
filters.any? do |filter|
|
137
|
-
if filter.is_a?(Regexp)
|
138
|
-
filter.match(logical_path)
|
139
|
-
elsif filter.respond_to?(:call)
|
140
|
-
if filter.arity == 1
|
141
|
-
filter.call(logical_path)
|
142
|
-
else
|
143
|
-
filter.call(logical_path, filename.to_s)
|
144
|
-
end
|
145
|
-
else
|
146
|
-
File.fnmatch(filter.to_s, logical_path)
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
# URI.unescape is deprecated on 1.9. We need to use URI::Parser
|
152
|
-
# if its available.
|
153
|
-
if defined? URI::DEFAULT_PARSER
|
154
|
-
def unescape(str)
|
155
|
-
str = URI::DEFAULT_PARSER.unescape(str)
|
156
|
-
str.force_encoding(Encoding.default_internal) if Encoding.default_internal
|
157
|
-
str
|
158
|
-
end
|
159
|
-
else
|
160
|
-
def unescape(str)
|
161
|
-
URI.unescape(str)
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
class Asset
|
167
|
-
# Deprecated: Use #filename instead.
|
168
|
-
#
|
169
|
-
# Returns Pathname.
|
170
|
-
def pathname
|
171
|
-
@pathname ||= Pathname.new(filename)
|
172
|
-
end
|
173
|
-
|
174
|
-
# Deprecated: Expand asset into an `Array` of parts.
|
175
|
-
#
|
176
|
-
# Appending all of an assets body parts together should give you
|
177
|
-
# the asset's contents as a whole.
|
178
|
-
#
|
179
|
-
# This allows you to link to individual files for debugging
|
180
|
-
# purposes.
|
181
|
-
#
|
182
|
-
# Use Asset#included instead. Keeping a full copy of the bundle's processed
|
183
|
-
# assets in memory (and in cache) is expensive and redundant. The common use
|
184
|
-
# case is to relink to the assets anyway.
|
185
|
-
#
|
186
|
-
# Returns Array of Assets.
|
187
|
-
def to_a
|
188
|
-
if metadata[:included]
|
189
|
-
metadata[:included].map { |uri| @environment.load(uri) }
|
190
|
-
else
|
191
|
-
[self]
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
# Deprecated: Get all required Assets.
|
196
|
-
#
|
197
|
-
# See Asset#to_a
|
198
|
-
#
|
199
|
-
# Returns Array of Assets.
|
200
|
-
def dependencies
|
201
|
-
to_a.reject { |a| a.filename.eql?(self.filename) }
|
202
|
-
end
|
203
|
-
|
204
|
-
# Deprecated: Returns Time of the last time the source was modified.
|
205
|
-
#
|
206
|
-
# Time resolution is normalized to the nearest second.
|
207
|
-
#
|
208
|
-
# Returns Time.
|
209
|
-
def mtime
|
210
|
-
Time.at(@mtime)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
class Context
|
215
|
-
# Deprecated: Change default return type of resolve() to return 2.x
|
216
|
-
# compatible plain filename String. 4.x will always return an Asset URI.
|
217
|
-
#
|
218
|
-
# 2.x
|
219
|
-
#
|
220
|
-
# resolve("foo.js")
|
221
|
-
# # => "/path/to/app/javascripts/foo.js"
|
222
|
-
#
|
223
|
-
# 3.x
|
224
|
-
#
|
225
|
-
# resolve("foo.js")
|
226
|
-
# # => "/path/to/app/javascripts/foo.js"
|
227
|
-
#
|
228
|
-
# resolve("foo.js", compat: true)
|
229
|
-
# # => "/path/to/app/javascripts/foo.js"
|
230
|
-
#
|
231
|
-
# resolve("foo.js", compat: false)
|
232
|
-
# # => "file:///path/to/app/javascripts/foo.js?type=application/javascript"
|
233
|
-
#
|
234
|
-
# 4.x
|
235
|
-
#
|
236
|
-
# resolve("foo.js")
|
237
|
-
# # => "file:///path/to/app/javascripts/foo.js?type=application/javascript"
|
238
|
-
#
|
239
|
-
def resolve_with_compat(path, options = {})
|
240
|
-
options = options.dup
|
241
|
-
|
242
|
-
# Support old :content_type option, prefer :accept going forward
|
243
|
-
if type = options.delete(:content_type)
|
244
|
-
type = self.content_type if type == :self
|
245
|
-
options[:accept] ||= type
|
246
|
-
end
|
247
|
-
|
248
|
-
if options.delete(:compat) { true }
|
249
|
-
uri = resolve_without_compat(path, options)
|
250
|
-
path, _ = environment.parse_asset_uri(uri)
|
251
|
-
path
|
252
|
-
else
|
253
|
-
resolve_without_compat(path, options)
|
254
|
-
end
|
255
|
-
end
|
256
|
-
alias_method :resolve_without_compat, :resolve
|
257
|
-
alias_method :resolve, :resolve_with_compat
|
258
|
-
end
|
259
|
-
|
260
|
-
class Manifest
|
261
|
-
# Deprecated: Compile logical path matching filter into a proc that can be
|
262
|
-
# passed to logical_paths.select(&proc).
|
263
|
-
#
|
264
|
-
# compile_match_filter(proc { |logical_path|
|
265
|
-
# File.extname(logical_path) == '.js'
|
266
|
-
# })
|
267
|
-
#
|
268
|
-
# compile_match_filter(/application.js/)
|
269
|
-
#
|
270
|
-
# compile_match_filter("foo/*.js")
|
271
|
-
#
|
272
|
-
# Returns a Proc or raise a TypeError.
|
273
|
-
def self.compile_match_filter(filter)
|
274
|
-
# If the filter is already a proc, great nothing to do.
|
275
|
-
if filter.respond_to?(:call)
|
276
|
-
filter
|
277
|
-
# If the filter is a regexp, wrap it in a proc that tests it against the
|
278
|
-
# logical path.
|
279
|
-
elsif filter.is_a?(Regexp)
|
280
|
-
proc { |logical_path| filter.match(logical_path) }
|
281
|
-
elsif filter.is_a?(String)
|
282
|
-
# If its an absolute path, detect the matching full filename
|
283
|
-
if PathUtils.absolute_path?(filter)
|
284
|
-
proc { |logical_path, filename| filename == filter.to_s }
|
285
|
-
else
|
286
|
-
# Otherwise do an fnmatch against the logical path.
|
287
|
-
proc { |logical_path| File.fnmatch(filter.to_s, logical_path) }
|
288
|
-
end
|
289
|
-
else
|
290
|
-
raise TypeError, "unknown filter type: #{filter.inspect}"
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
def self.simple_logical_path?(str)
|
295
|
-
str.is_a?(String) &&
|
296
|
-
!PathUtils.absolute_path?(str) &&
|
297
|
-
str !~ /\*|\*\*|\?|\[|\]|\{|\}/
|
298
|
-
end
|
299
|
-
|
300
|
-
# Deprecated: Filter logical paths in environment. Useful for selecting what
|
301
|
-
# files you want to compile.
|
302
|
-
#
|
303
|
-
# Returns an Enumerator.
|
304
|
-
def filter_logical_paths(*args)
|
305
|
-
filters = args.flatten.map { |arg| self.class.compile_match_filter(arg) }
|
306
|
-
environment.cached.logical_paths.select do |a, b|
|
307
|
-
filters.any? { |f| f.call(a, b) }
|
308
|
-
end
|
309
|
-
end
|
310
|
-
|
311
|
-
# Deprecated alias.
|
312
|
-
alias_method :find_logical_paths, :filter_logical_paths
|
313
|
-
end
|
314
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'delegate'
|
2
|
-
|
3
|
-
module Sprockets
|
4
|
-
# Deprecated: Wraps legacy process Procs with new processor call signature.
|
5
|
-
#
|
6
|
-
# Will be removed in Sprockets 4.x.
|
7
|
-
#
|
8
|
-
# LegacyProcProcessor.new(:compress,
|
9
|
-
# proc { |context, data| data.gsub(...) })
|
10
|
-
#
|
11
|
-
class LegacyProcProcessor < Delegator
|
12
|
-
def initialize(name, proc)
|
13
|
-
@name = name
|
14
|
-
@proc = proc
|
15
|
-
end
|
16
|
-
|
17
|
-
def __getobj__
|
18
|
-
@proc
|
19
|
-
end
|
20
|
-
|
21
|
-
def name
|
22
|
-
"Sprockets::LegacyProcProcessor (#{@name})"
|
23
|
-
end
|
24
|
-
|
25
|
-
def to_s
|
26
|
-
name
|
27
|
-
end
|
28
|
-
|
29
|
-
def call(input)
|
30
|
-
context = input[:environment].context_class.new(input)
|
31
|
-
data = @proc.call(context, input[:data])
|
32
|
-
context.metadata.merge(data: data)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'delegate'
|
2
|
-
|
3
|
-
module Sprockets
|
4
|
-
# Deprecated: Wraps legacy engine and process Tilt templates with new
|
5
|
-
# processor call signature.
|
6
|
-
#
|
7
|
-
# Will be removed in Sprockets 4.x.
|
8
|
-
#
|
9
|
-
# LegacyTiltProcessor.new(Tilt::CoffeeScriptProcessor)
|
10
|
-
#
|
11
|
-
class LegacyTiltProcessor < Delegator
|
12
|
-
def initialize(klass)
|
13
|
-
@klass = klass
|
14
|
-
end
|
15
|
-
|
16
|
-
def __getobj__
|
17
|
-
@klass
|
18
|
-
end
|
19
|
-
|
20
|
-
def call(input)
|
21
|
-
filename = input[:filename]
|
22
|
-
data = input[:data]
|
23
|
-
context = input[:environment].context_class.new(input)
|
24
|
-
|
25
|
-
data = @klass.new(filename) { data }.render(context)
|
26
|
-
context.metadata.merge(data: data)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|