sprockets-iife 1.1.0 → 1.1.1
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/lib/sprockets-iife.rb +5 -2
- data/lib/sprockets-iife/bundle_processor.rb +34 -0
- data/lib/sprockets-iife/item_processor.rb +79 -0
- data/lib/sprockets-iife/railtie.rb +1 -2
- data/lib/sprockets-iife/utils.rb +23 -0
- data/lib/sprockets-iife/version.rb +1 -1
- data/lib/sprockets-iife/wrap.rb +2 -9
- data/test/fixtures/javascripts/mixedbundle.coffee +0 -1
- data/test/fixtures/javascripts/mixedbundle/bar.coffee +3 -0
- data/test/test-sprockets-iife.rb +10 -4
- metadata +5 -3
- data/lib/sprockets-iife/processor.rb +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc9c42d81e929c3447ccd9d074e7359dec690652
|
4
|
+
data.tar.gz: 36c33c227d7493971368b18078ca0bd5f44c2da4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1438e7d82e2a29efcfacb889e67b60efed30a4045734e407e131af506ac359ab8f034c518dc75956bc5acd1ca3f9d0355c85bcfb65dc196f85115f6dce3ffbe4
|
7
|
+
data.tar.gz: c25d1c3bfff8429fe6254f50608308ff3840e52ec4807295b35d3de9956978dbab14913b8b1c30a9887167dc407f75f7227e1daa24e0b23275703c0a63289169
|
data/lib/sprockets-iife.rb
CHANGED
@@ -3,5 +3,8 @@
|
|
3
3
|
|
4
4
|
require 'sprockets'
|
5
5
|
require 'sprockets-iife/wrap'
|
6
|
-
require 'sprockets-iife/
|
7
|
-
require 'sprockets-iife/
|
6
|
+
require 'sprockets-iife/template'
|
7
|
+
require 'sprockets-iife/utils'
|
8
|
+
require 'sprockets-iife/item_processor'
|
9
|
+
require 'sprockets-iife/bundle_processor'
|
10
|
+
require 'sprockets-iife/railtie'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module SprocketsIIFE
|
5
|
+
class BundleProcessor
|
6
|
+
def initialize(script_path, &block)
|
7
|
+
@script_path = script_path
|
8
|
+
@script_source = block.call
|
9
|
+
end
|
10
|
+
|
11
|
+
def render(_, _)
|
12
|
+
self.class.wrap(@script_path, @script_source)
|
13
|
+
end
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def call(input)
|
17
|
+
script_path = input[:filename]
|
18
|
+
script_source = input[:data]
|
19
|
+
context = input[:environment].context_class.new(input)
|
20
|
+
context.metadata.merge(data: wrap(script_path, script_source))
|
21
|
+
end
|
22
|
+
|
23
|
+
def wrap(script_path, script_source)
|
24
|
+
script_iife_path = SprocketsIIFE::Utils.build_iife_path(script_path)
|
25
|
+
|
26
|
+
if File.readable?(script_iife_path) && SprocketsIIFE::Utils.bundle?(script_path)
|
27
|
+
SprocketsIIFE::Template.new(script_iife_path, script_source).result
|
28
|
+
else
|
29
|
+
script_source
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module SprocketsIIFE
|
5
|
+
class ItemProcessor
|
6
|
+
def initialize(script_path, &block)
|
7
|
+
@script_path = script_path
|
8
|
+
@script_source = block.call
|
9
|
+
end
|
10
|
+
|
11
|
+
def render(script_context, _)
|
12
|
+
script_path = @script_path
|
13
|
+
script_source = @script_source
|
14
|
+
script_iife_path = SprocketsIIFE::Utils.build_iife_path(script_path)
|
15
|
+
|
16
|
+
if File.readable?(script_iife_path) && !SprocketsIIFE::Utils.bundle?(script_path)
|
17
|
+
script_context.depend_on(script_iife_path)
|
18
|
+
|
19
|
+
# noinspection RubyResolve
|
20
|
+
script_requires = script_context._required_paths.to_a
|
21
|
+
script_source_included = false
|
22
|
+
|
23
|
+
script_assets = script_requires.map do |path|
|
24
|
+
if path.include?(script_path)
|
25
|
+
script_source_included = true
|
26
|
+
script_source
|
27
|
+
else
|
28
|
+
script_context.environment.find_asset(path)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
script_assets << script_source unless script_source_included
|
33
|
+
|
34
|
+
script_source = script_assets.map(&:to_s).join('')
|
35
|
+
|
36
|
+
script_context._required_paths.clear
|
37
|
+
|
38
|
+
SprocketsIIFE.wrap(script_path, script_source)
|
39
|
+
else
|
40
|
+
script_source
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class << self
|
45
|
+
def call(input)
|
46
|
+
script_path = input[:filename]
|
47
|
+
script_source = input[:data]
|
48
|
+
script_iife_path = SprocketsIIFE::Utils.build_iife_path(script_path)
|
49
|
+
script_context = input[:environment].context_class.new(input)
|
50
|
+
|
51
|
+
if File.readable?(script_iife_path) && !SprocketsIIFE::Utils.bundle?(script_path)
|
52
|
+
script_context.depend_on(script_iife_path)
|
53
|
+
|
54
|
+
script_requires = script_context.metadata[:required]
|
55
|
+
script_source_included = false
|
56
|
+
|
57
|
+
script_assets = script_requires.map do |uri|
|
58
|
+
if uri.include?(script_path)
|
59
|
+
script_source_included = true
|
60
|
+
script_source
|
61
|
+
else
|
62
|
+
# noinspection RubyResolve
|
63
|
+
script_context.environment.load(uri)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
script_assets << script_source unless script_source_included
|
68
|
+
|
69
|
+
script_source = script_assets.map(&:to_s).join('')
|
70
|
+
|
71
|
+
script_context.metadata.merge(required: [].to_set,
|
72
|
+
data: SprocketsIIFE.wrap(script_path, script_source))
|
73
|
+
else
|
74
|
+
script_context.metadata.merge(data: script_source)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -7,7 +7,7 @@ module SprocketsIIFE
|
|
7
7
|
class Railtie < Rails::Railtie
|
8
8
|
def configure_assets(app)
|
9
9
|
if config.respond_to?(:assets) && config.assets.respond_to?(:configure)
|
10
|
-
# Rails 4.x
|
10
|
+
# Rails 4.x 5.x
|
11
11
|
config.assets.configure { |env| yield(env) }
|
12
12
|
else
|
13
13
|
# Rails 3.2
|
@@ -19,7 +19,6 @@ module SprocketsIIFE
|
|
19
19
|
configure_assets(app) do |env|
|
20
20
|
# Sprockets 2, 3, and 4
|
21
21
|
env.register_bundle_processor 'application/javascript', SprocketsIIFE::BundleProcessor
|
22
|
-
env.register_mime_type 'application/javascript', extensions: ['.js']
|
23
22
|
env.register_postprocessor 'application/javascript', SprocketsIIFE::ItemProcessor
|
24
23
|
end
|
25
24
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module SprocketsIIFE
|
5
|
+
module Utils
|
6
|
+
class << self
|
7
|
+
def bundle?(script_name_or_path)
|
8
|
+
script_name = "#{File.basename(script_name_or_path, '.*')}.js"
|
9
|
+
Rails.application.config.assets.precompile.any? do |x|
|
10
|
+
case x
|
11
|
+
when String then x == script_name
|
12
|
+
when Regexp then x =~ script_name
|
13
|
+
else false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def build_iife_path(script_path)
|
19
|
+
File.join(File.dirname(script_path), "#{File.basename(script_path, '.*')}-iife.js.erb")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/sprockets-iife/wrap.rb
CHANGED
@@ -1,18 +1,11 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require 'sprockets-iife/template'
|
5
|
-
|
6
4
|
module SprocketsIIFE
|
7
5
|
class << self
|
8
6
|
def wrap(script_path, script_source)
|
9
|
-
script_iife_path =
|
10
|
-
|
11
|
-
if File.readable?(script_iife_path)
|
12
|
-
Template.new(script_iife_path, script_source).result
|
13
|
-
else
|
14
|
-
script_source
|
15
|
-
end
|
7
|
+
script_iife_path = SprocketsIIFE::Utils.build_iife_path(script_path)
|
8
|
+
SprocketsIIFE::Template.new(script_iife_path, script_source).result
|
16
9
|
end
|
17
10
|
end
|
18
11
|
end
|
data/test/test-sprockets-iife.rb
CHANGED
@@ -50,13 +50,19 @@ class SprocketsIIFETest < Test::Unit::TestCase
|
|
50
50
|
expected = <<-JAVASCRIPT.squish
|
51
51
|
(function(/* mixedbundle-iife */) {
|
52
52
|
(function() { mixedbundle.coffee(); }).call(this);
|
53
|
+
|
53
54
|
foo.js();
|
55
|
+
|
54
56
|
(function(/* bar-iife */) {
|
55
|
-
(function() {
|
56
|
-
|
57
|
-
|
58
|
-
|
57
|
+
(function() {
|
58
|
+
bar.coffee();
|
59
|
+
}).call(this);
|
60
|
+
|
61
|
+
(function(/* baz-iife */) {
|
62
|
+
baz.js();
|
63
|
+
}).call(this);
|
59
64
|
}).call(this);
|
65
|
+
|
60
66
|
}).call(this);
|
61
67
|
JAVASCRIPT
|
62
68
|
assert_equal expected, app.assets['mixedbundle.js'].to_s.squish
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sprockets-iife
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yaroslav Konoplov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sprockets
|
@@ -117,9 +117,11 @@ files:
|
|
117
117
|
- gemfiles/rails_4_with_sprockets_3.gemfile
|
118
118
|
- gemfiles/rails_5.gemfile
|
119
119
|
- lib/sprockets-iife.rb
|
120
|
-
- lib/sprockets-iife/
|
120
|
+
- lib/sprockets-iife/bundle_processor.rb
|
121
|
+
- lib/sprockets-iife/item_processor.rb
|
121
122
|
- lib/sprockets-iife/railtie.rb
|
122
123
|
- lib/sprockets-iife/template.rb
|
124
|
+
- lib/sprockets-iife/utils.rb
|
123
125
|
- lib/sprockets-iife/version.rb
|
124
126
|
- lib/sprockets-iife/wrap.rb
|
125
127
|
- sprockets-iife.gemspec
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
module SprocketsIIFE
|
5
|
-
class AbstractProcessor
|
6
|
-
def initialize(script_path, &block)
|
7
|
-
@script_path = script_path
|
8
|
-
@script_source = block.call
|
9
|
-
end
|
10
|
-
|
11
|
-
def render(_, _)
|
12
|
-
self.class.wrap(@script_path, @script_source)
|
13
|
-
end
|
14
|
-
|
15
|
-
class << self
|
16
|
-
def call(input)
|
17
|
-
script_path = input[:filename]
|
18
|
-
script_source = input[:data]
|
19
|
-
context = input[:environment].context_class.new(input)
|
20
|
-
context.metadata.merge(data: wrap(script_path, script_source))
|
21
|
-
end
|
22
|
-
|
23
|
-
def wrap(script_path, script_source)
|
24
|
-
raise NotImplementedError
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class ItemProcessor < AbstractProcessor
|
30
|
-
class << self
|
31
|
-
def wrap(script_path, script_source)
|
32
|
-
script_name = "#{File.basename(script_path, '.*')}.js"
|
33
|
-
seems_to_be_a_bundle = Rails.application.config.assets.precompile.any? do |x|
|
34
|
-
case x
|
35
|
-
when String then x == script_name
|
36
|
-
when Regexp then x =~ script_name
|
37
|
-
else false
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
if seems_to_be_a_bundle
|
42
|
-
script_source
|
43
|
-
else
|
44
|
-
SprocketsIIFE.wrap(script_path, script_source)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
class BundleProcessor < AbstractProcessor
|
51
|
-
class << self
|
52
|
-
def wrap(script_path, script_source)
|
53
|
-
SprocketsIIFE.wrap(script_path, script_source)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|