sprockets 4.0.0.beta2 → 4.0.0.beta3
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +25 -13
- data/lib/rake/sprocketstask.rb +1 -0
- data/lib/sprockets.rb +4 -2
- data/lib/sprockets/asset.rb +1 -0
- data/lib/sprockets/autoload.rb +1 -0
- data/lib/sprockets/autoload/babel.rb +1 -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 +1 -0
- data/lib/sprockets/autoload/sass.rb +1 -0
- data/lib/sprockets/autoload/sassc.rb +1 -0
- data/lib/sprockets/autoload/uglifier.rb +1 -0
- data/lib/sprockets/autoload/yui.rb +1 -0
- data/lib/sprockets/babel_processor.rb +3 -1
- data/lib/sprockets/base.rb +3 -2
- data/lib/sprockets/bower.rb +1 -0
- data/lib/sprockets/bundle.rb +1 -0
- data/lib/sprockets/cache.rb +4 -1
- data/lib/sprockets/cache/file_store.rb +1 -0
- data/lib/sprockets/cache/memory_store.rb +1 -0
- data/lib/sprockets/cache/null_store.rb +1 -0
- data/lib/sprockets/cached_environment.rb +4 -3
- data/lib/sprockets/closure_compressor.rb +3 -1
- data/lib/sprockets/coffee_script_processor.rb +2 -1
- data/lib/sprockets/compressing.rb +19 -0
- data/lib/sprockets/configuration.rb +1 -0
- data/lib/sprockets/context.rb +3 -2
- data/lib/sprockets/dependencies.rb +1 -0
- data/lib/sprockets/digest_utils.rb +64 -41
- data/lib/sprockets/directive_processor.rb +15 -10
- data/lib/sprockets/eco_processor.rb +1 -0
- data/lib/sprockets/ejs_processor.rb +1 -0
- data/lib/sprockets/encoding_utils.rb +1 -0
- data/lib/sprockets/environment.rb +3 -2
- data/lib/sprockets/erb_processor.rb +1 -0
- data/lib/sprockets/errors.rb +1 -0
- data/lib/sprockets/file_reader.rb +1 -0
- data/lib/sprockets/http_utils.rb +1 -0
- data/lib/sprockets/jsminc_compressor.rb +1 -0
- data/lib/sprockets/jst_processor.rb +1 -0
- data/lib/sprockets/loader.rb +2 -1
- data/lib/sprockets/manifest.rb +1 -0
- data/lib/sprockets/manifest_utils.rb +1 -0
- data/lib/sprockets/mime.rb +1 -0
- data/lib/sprockets/path_dependency_utils.rb +1 -0
- data/lib/sprockets/path_digest_utils.rb +1 -0
- data/lib/sprockets/path_utils.rb +18 -13
- data/lib/sprockets/paths.rb +1 -0
- data/lib/sprockets/preprocessors/default_source_map.rb +1 -0
- data/lib/sprockets/processing.rb +1 -0
- data/lib/sprockets/processor_utils.rb +15 -3
- data/lib/sprockets/resolve.rb +2 -1
- data/lib/sprockets/sass_cache_store.rb +1 -0
- data/lib/sprockets/sass_compressor.rb +1 -0
- data/lib/sprockets/sass_functions.rb +1 -0
- data/lib/sprockets/sass_importer.rb +1 -0
- data/lib/sprockets/sass_processor.rb +15 -3
- data/lib/sprockets/sassc_compressor.rb +4 -1
- data/lib/sprockets/sassc_processor.rb +5 -0
- data/lib/sprockets/server.rb +2 -1
- data/lib/sprockets/source_map_comment_processor.rb +1 -0
- data/lib/sprockets/source_map_processor.rb +9 -2
- data/lib/sprockets/source_map_utils.rb +1 -0
- data/lib/sprockets/transformers.rb +1 -0
- data/lib/sprockets/uglifier_compressor.rb +9 -12
- data/lib/sprockets/unloaded_asset.rb +1 -0
- data/lib/sprockets/uri_tar.rb +3 -4
- data/lib/sprockets/uri_utils.rb +2 -1
- data/lib/sprockets/utils.rb +25 -11
- data/lib/sprockets/utils/gzip.rb +1 -0
- data/lib/sprockets/version.rb +2 -1
- data/lib/sprockets/yui_compressor.rb +1 -0
- metadata +2 -2
data/lib/sprockets/resolve.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'set'
|
2
3
|
require 'sprockets/http_utils'
|
3
4
|
require 'sprockets/path_dependency_utils'
|
@@ -46,7 +47,7 @@ module Sprockets
|
|
46
47
|
uri, deps = resolve(path, **kargs)
|
47
48
|
|
48
49
|
unless uri
|
49
|
-
message = "couldn't find file '#{path}'"
|
50
|
+
message = String.new("couldn't find file '#{path}'")
|
50
51
|
|
51
52
|
if relative_path?(path) && kargs[:base_path]
|
52
53
|
load_path, _ = paths_split(config[:paths], kargs[:base_path])
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'rack/utils'
|
2
3
|
require 'sprockets/autoload'
|
3
4
|
require 'sprockets/source_map_utils'
|
@@ -81,7 +82,10 @@ module Sprockets
|
|
81
82
|
|
82
83
|
map = SourceMapUtils.combine_source_maps(
|
83
84
|
input[:metadata][:map],
|
84
|
-
|
85
|
+
expand_map_sources(
|
86
|
+
SourceMapUtils.decode_json_source_map(map.to_json(css_uri: '', type: :inline))["mappings"],
|
87
|
+
input[:environment]
|
88
|
+
)
|
85
89
|
)
|
86
90
|
|
87
91
|
# Track all imported files
|
@@ -94,6 +98,16 @@ module Sprockets
|
|
94
98
|
context.metadata.merge(data: css, sass_dependencies: sass_dependencies, map: map)
|
95
99
|
end
|
96
100
|
|
101
|
+
private
|
102
|
+
|
103
|
+
def expand_map_sources(mapping, env)
|
104
|
+
mapping.each do |map|
|
105
|
+
uri, _ = env.resolve!(map[:source], pipeline: :source)
|
106
|
+
source_path = env.load(uri).digest_path
|
107
|
+
map[:source] = source_path
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
97
111
|
# Public: Build the cache store to be used by the Sass engine.
|
98
112
|
#
|
99
113
|
# input - the input hash.
|
@@ -104,7 +118,6 @@ module Sprockets
|
|
104
118
|
def build_cache_store(input, version)
|
105
119
|
CacheStore.new(input[:cache], version)
|
106
120
|
end
|
107
|
-
private :build_cache_store
|
108
121
|
|
109
122
|
def merge_options(options)
|
110
123
|
defaults = @sass_config.dup
|
@@ -116,7 +129,6 @@ module Sprockets
|
|
116
129
|
options.merge!(defaults)
|
117
130
|
options
|
118
131
|
end
|
119
|
-
private :merge_options
|
120
132
|
|
121
133
|
# Public: Functions injected into Sass context during Sprockets evaluation.
|
122
134
|
#
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'sprockets/autoload'
|
2
3
|
require 'sprockets/sass_compressor'
|
3
4
|
require 'base64'
|
@@ -14,7 +15,9 @@ module Sprockets
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def call(input)
|
17
|
-
|
18
|
+
# SassC requires the template to be modifiable
|
19
|
+
input_data = input[:data].frozen? ? input[:data].dup : input[:data]
|
20
|
+
data = Autoload::SassC::Engine.new(input_data, @options.merge(filename: 'filename')).render
|
18
21
|
|
19
22
|
match_data = data.match(/(.*)\n\/\*# sourceMappingURL=data:application\/json;base64,(.+) \*\//m)
|
20
23
|
css, map = match_data[1], Base64.decode64(match_data[2])
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'sprockets/sass_processor'
|
2
3
|
require 'base64'
|
3
4
|
|
@@ -33,6 +34,10 @@ module Sprockets
|
|
33
34
|
change_source(SourceMapUtils.decode_json_source_map(map)["mappings"], input[:source_path])
|
34
35
|
)
|
35
36
|
|
37
|
+
engine.dependencies.each do |dependency|
|
38
|
+
context.metadata[:dependencies] << URIUtils.build_file_digest_uri(dependency.filename)
|
39
|
+
end
|
40
|
+
|
36
41
|
context.metadata.merge(data: css, map: map)
|
37
42
|
end
|
38
43
|
|
data/lib/sprockets/server.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'set'
|
2
3
|
require 'time'
|
3
4
|
require 'rack/utils'
|
@@ -234,7 +235,7 @@ module Sprockets
|
|
234
235
|
headers = {}
|
235
236
|
|
236
237
|
# Set caching headers
|
237
|
-
headers["Cache-Control"] = "public"
|
238
|
+
headers["Cache-Control"] = String.new("public")
|
238
239
|
headers["ETag"] = %("#{etag}")
|
239
240
|
|
240
241
|
# If the request url contains a fingerprint, set a long
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'set'
|
2
3
|
|
3
4
|
module Sprockets
|
@@ -20,6 +21,12 @@ module Sprockets
|
|
20
21
|
asset = env.load(uri)
|
21
22
|
map = asset.metadata[:map] || []
|
22
23
|
|
24
|
+
# TODO: Because of the default piplene hack we have to apply dependencies
|
25
|
+
# from compiled asset to the source map, otherwise the source map cache
|
26
|
+
# will never detect the changes from directives
|
27
|
+
dependencies = Set.new(input[:metadata][:dependencies])
|
28
|
+
dependencies.merge(asset.metadata[:dependencies])
|
29
|
+
|
23
30
|
map.map { |m| m[:source] }.uniq.compact.each do |source|
|
24
31
|
# TODO: Resolve should expect fingerprints
|
25
32
|
fingerprint = source[/-([0-9a-f]{7,128})\.[^.]+\z/, 1]
|
@@ -29,12 +36,12 @@ module Sprockets
|
|
29
36
|
path = source
|
30
37
|
end
|
31
38
|
uri, _ = env.resolve!(path)
|
32
|
-
links <<
|
39
|
+
links << uri
|
33
40
|
end
|
34
41
|
|
35
42
|
json = env.encode_json_source_map(map, filename: asset.logical_path)
|
36
43
|
|
37
|
-
{ data: json, links: links }
|
44
|
+
{ data: json, links: links, dependencies: dependencies }
|
38
45
|
end
|
39
46
|
end
|
40
47
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'sprockets/autoload'
|
2
3
|
require 'sprockets/digest_utils'
|
3
4
|
require 'sprockets/source_map_utils'
|
@@ -16,7 +17,7 @@ module Sprockets
|
|
16
17
|
# Sprockets::UglifierCompressor.new(comments: :copyright)
|
17
18
|
#
|
18
19
|
class UglifierCompressor
|
19
|
-
VERSION = '
|
20
|
+
VERSION = '3'
|
20
21
|
|
21
22
|
# Public: Return singleton instance with default options.
|
22
23
|
#
|
@@ -36,27 +37,23 @@ module Sprockets
|
|
36
37
|
attr_reader :cache_key
|
37
38
|
|
38
39
|
def initialize(options = {})
|
39
|
-
|
40
|
-
if Autoload::Uglifier::DEFAULTS[:copyright]
|
41
|
-
# Uglifier < 2.x
|
42
|
-
options[:copyright] ||= false
|
43
|
-
else
|
44
|
-
# Uglifier >= 2.x
|
45
|
-
options[:copyright] ||= :none
|
46
|
-
end
|
40
|
+
options[:comments] ||= :none
|
47
41
|
|
48
|
-
@
|
42
|
+
@options = options
|
49
43
|
@cache_key = "#{self.class.name}:#{Autoload::Uglifier::VERSION}:#{VERSION}:#{DigestUtils.digest(options)}".freeze
|
50
44
|
end
|
51
45
|
|
52
46
|
def call(input)
|
53
|
-
|
47
|
+
if Autoload::Uglifier::VERSION.to_i < 2
|
48
|
+
raise "uglifier 1.x is no longer supported, please upgrade to 2.x"
|
49
|
+
end
|
50
|
+
@uglifier ||= Autoload::Uglifier.new(@options)
|
54
51
|
|
52
|
+
js, map = @uglifier.compile_with_map(input[:data])
|
55
53
|
map = SourceMapUtils.combine_source_maps(
|
56
54
|
input[:metadata][:map],
|
57
55
|
SourceMapUtils.decode_json_source_map(map)["mappings"]
|
58
56
|
)
|
59
|
-
|
60
57
|
{ data: js, map: map }
|
61
58
|
end
|
62
59
|
end
|
data/lib/sprockets/uri_tar.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'sprockets/path_utils'
|
2
3
|
|
3
4
|
module Sprockets
|
@@ -14,10 +15,8 @@ module Sprockets
|
|
14
15
|
@env = env
|
15
16
|
uri = uri.to_s
|
16
17
|
if uri.include?("://".freeze)
|
17
|
-
|
18
|
-
@scheme
|
19
|
-
@scheme << "://".freeze
|
20
|
-
@path = uri_array.join("".freeze)
|
18
|
+
@scheme, _, @path = uri.partition("://".freeze)
|
19
|
+
@scheme << "://".freeze
|
21
20
|
else
|
22
21
|
@scheme = "".freeze
|
23
22
|
@path = uri
|
data/lib/sprockets/uri_utils.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'uri'
|
2
3
|
|
3
4
|
module Sprockets
|
@@ -57,7 +58,7 @@ module Sprockets
|
|
57
58
|
#
|
58
59
|
# Returns String.
|
59
60
|
def join_file_uri(scheme, host, path, query)
|
60
|
-
str = "#{scheme}://"
|
61
|
+
str = String.new("#{scheme}://")
|
61
62
|
str << host if host
|
62
63
|
path = "/#{path}" unless path.start_with?("/".freeze)
|
63
64
|
str << URI::Generic::DEFAULT_PARSER.escape(path)
|
data/lib/sprockets/utils.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'set'
|
2
3
|
|
3
4
|
module Sprockets
|
@@ -75,16 +76,19 @@ module Sprockets
|
|
75
76
|
def string_end_with_semicolon?(str)
|
76
77
|
i = str.size - 1
|
77
78
|
while i >= 0
|
78
|
-
c = str[i]
|
79
|
+
c = str[i].ord
|
79
80
|
i -= 1
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
81
|
+
|
82
|
+
# Need to compare against the ordinals because the string can be UTF_8 or UTF_32LE encoded
|
83
|
+
# 0x0A == "\n"
|
84
|
+
# 0x20 == " "
|
85
|
+
# 0x09 == "\t"
|
86
|
+
# 0x3B == ";"
|
87
|
+
unless c == 0x0A || c == 0x20 || c == 0x09
|
88
|
+
return c === 0x3B
|
86
89
|
end
|
87
90
|
end
|
91
|
+
|
88
92
|
true
|
89
93
|
end
|
90
94
|
|
@@ -96,11 +100,21 @@ module Sprockets
|
|
96
100
|
#
|
97
101
|
# Returns buf String.
|
98
102
|
def concat_javascript_sources(buf, source)
|
99
|
-
if
|
100
|
-
buf <<
|
101
|
-
|
103
|
+
if source.bytesize > 0
|
104
|
+
buf << source
|
105
|
+
|
106
|
+
# If the source contains non-ASCII characters, indexing on it becomes O(N).
|
107
|
+
# This will lead to O(N^2) performance in string_end_with_semicolon?, so we should use 32 bit encoding to make sure indexing stays O(1)
|
108
|
+
source = source.encode(Encoding::UTF_32LE) unless source.ascii_only?
|
109
|
+
|
110
|
+
if !string_end_with_semicolon?(source)
|
111
|
+
buf << ";\n"
|
112
|
+
elsif source[source.size - 1].ord != 0x0A
|
113
|
+
buf << "\n"
|
114
|
+
end
|
102
115
|
end
|
103
|
-
|
116
|
+
|
117
|
+
buf
|
104
118
|
end
|
105
119
|
|
106
120
|
# Internal: Inject into target module for the duration of the block.
|
data/lib/sprockets/utils/gzip.rb
CHANGED
data/lib/sprockets/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sprockets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.
|
4
|
+
version: 4.0.0.beta3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Stephenson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-08-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|