sprockets-bumble_d 1.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 +7 -0
- data/lib/sprockets/bumble_d.rb +12 -0
- data/lib/sprockets/bumble_d/config.rb +33 -0
- data/lib/sprockets/bumble_d/dsl.rb +19 -0
- data/lib/sprockets/bumble_d/errors.rb +8 -0
- data/lib/sprockets/bumble_d/railtie.rb +46 -0
- data/lib/sprockets/bumble_d/resolver.rb +29 -0
- data/lib/sprockets/bumble_d/transformer.rb +89 -0
- data/lib/sprockets/bumble_d/version.rb +5 -0
- metadata +103 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e344b1743d35a046b99bbc04c8e28345d7d41214
|
4
|
+
data.tar.gz: 307b8f0365ae245ab881b5cff1f75d9163beaf9b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6a751efa6deee7bb1b77e4acbf1acb7aee4d4063c91fd5746f184fe4ef58d51fe8329dedea49ff185997d62f355eb1bcce2e1551c2ca3616e4e235712f25e4d9
|
7
|
+
data.tar.gz: a539c07de181232403dffc71c06f9b8c887e0b97a7c38d94757b40678e0ebed5f91201231ce2628dda3b78d646e23857d566d9850ed5dd93a754ad4c6b85d0c3
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rails/railtie'
|
2
|
+
require 'schmooze'
|
3
|
+
require 'sprockets'
|
4
|
+
require 'sprockets/bumble_d/dsl'
|
5
|
+
require 'sprockets/bumble_d/errors'
|
6
|
+
require 'sprockets/bumble_d/railtie'
|
7
|
+
require 'sprockets/bumble_d/version'
|
8
|
+
|
9
|
+
module Sprockets
|
10
|
+
module BumbleD
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'sprockets/bumble_d/errors'
|
2
|
+
|
3
|
+
module Sprockets
|
4
|
+
module BumbleD
|
5
|
+
class Config
|
6
|
+
attr_accessor :babel_options, :babel_config_version, :root_dir, :transform_to_umd
|
7
|
+
attr_reader :globals_map
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@globals_map = {}.freeze
|
11
|
+
@transform_to_umd = true
|
12
|
+
@babel_options = {
|
13
|
+
presets: ['es2015'],
|
14
|
+
plugins: ['external-helpers']
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def configure
|
19
|
+
yield self
|
20
|
+
end
|
21
|
+
|
22
|
+
def register_globals(globals_map)
|
23
|
+
duplicate_keys = @globals_map.keys & globals_map.keys
|
24
|
+
unless duplicate_keys.empty?
|
25
|
+
error_message = "Duplicate keys registered: #{duplicate_keys}"
|
26
|
+
raise ConflictingGlobalRegistrationError, error_message
|
27
|
+
end
|
28
|
+
|
29
|
+
@globals_map = @globals_map.merge(globals_map).freeze
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Sprockets
|
2
|
+
module BumbleD
|
3
|
+
module DSL
|
4
|
+
def configure_sprockets_bumble_d(&block)
|
5
|
+
initializer 'configure_sprockets_bumble_d',
|
6
|
+
before: 'sprockets-bumble_d.configure_transformer' do |app|
|
7
|
+
app.config.sprockets_bumble_d.configure(&block)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def register_umd_globals(module_name, globals_map)
|
12
|
+
initializer "#{module_name}.register_umd_globals",
|
13
|
+
before: 'sprockets-bumble_d.configure_transformer' do |app|
|
14
|
+
app.config.sprockets_bumble_d.register_globals(globals_map)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'sprockets/bumble_d/config'
|
2
|
+
require 'sprockets/bumble_d/transformer'
|
3
|
+
|
4
|
+
module Sprockets
|
5
|
+
module BumbleD
|
6
|
+
class Railtie < ::Rails::Railtie
|
7
|
+
config.before_configuration do
|
8
|
+
config.sprockets_bumble_d = Config.new
|
9
|
+
end
|
10
|
+
|
11
|
+
initializer 'sprockets-bumble_d.configure_transformer' do |app|
|
12
|
+
bumble_d_config = app.config.sprockets_bumble_d
|
13
|
+
root_dir = bumble_d_config.root_dir
|
14
|
+
babel_config_version = bumble_d_config.babel_config_version
|
15
|
+
babel_plugins = bumble_d_config.babel_options[:plugins]
|
16
|
+
|
17
|
+
if bumble_d_config.transform_to_umd
|
18
|
+
babel_plugins += [
|
19
|
+
['transform-es2015-modules-umd', {
|
20
|
+
exactGlobals: true,
|
21
|
+
globals: bumble_d_config.globals_map
|
22
|
+
}]
|
23
|
+
]
|
24
|
+
end
|
25
|
+
|
26
|
+
options = bumble_d_config.babel_options.merge(
|
27
|
+
plugins: babel_plugins,
|
28
|
+
root_dir: root_dir,
|
29
|
+
babel_config_version: babel_config_version
|
30
|
+
)
|
31
|
+
es6_transformer = Transformer.new(options)
|
32
|
+
|
33
|
+
# Using the deprecated register_engine rather than register_mime_type
|
34
|
+
# and register_transformer because otherwise .es6 files that aren't
|
35
|
+
# in the precompile list will get unnecessarily compiled. See
|
36
|
+
# https://github.com/rails/sprockets/issues/384
|
37
|
+
Sprockets.register_engine(
|
38
|
+
'.es6',
|
39
|
+
es6_transformer,
|
40
|
+
mime_type: 'application/javascript',
|
41
|
+
silence_deprecation: true
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Sprockets
|
2
|
+
module BumbleD
|
3
|
+
class Resolver
|
4
|
+
def initialize(babel)
|
5
|
+
@babel = babel
|
6
|
+
end
|
7
|
+
|
8
|
+
def resolve_plugins(plugins)
|
9
|
+
resolve_them(plugins, type: 'Plugin')
|
10
|
+
end
|
11
|
+
|
12
|
+
def resolve_presets(presets)
|
13
|
+
resolve_them(presets, type: 'Preset')
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def resolve_them(plugins_or_presets, type:)
|
19
|
+
plugins_or_presets.map do |item|
|
20
|
+
if item.is_a?(Array)
|
21
|
+
[@babel.send("resolve#{type}", item[0]), item[1]]
|
22
|
+
else
|
23
|
+
@babel.send("resolve#{type}", item)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'schmooze/base'
|
2
|
+
require 'sprockets/path_utils'
|
3
|
+
require 'sprockets/bumble_d/errors'
|
4
|
+
require 'sprockets/bumble_d/resolver'
|
5
|
+
require 'sprockets/bumble_d/version'
|
6
|
+
|
7
|
+
module Sprockets
|
8
|
+
module BumbleD
|
9
|
+
class Transformer
|
10
|
+
class BabelBridge < Schmooze::Base
|
11
|
+
dependencies babel: 'babel-core'
|
12
|
+
|
13
|
+
method :resolvePlugin, 'babel.resolvePlugin'
|
14
|
+
method :resolvePreset, 'babel.resolvePreset'
|
15
|
+
method :transform, 'babel.transform'
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_reader :cache_key
|
19
|
+
|
20
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
21
|
+
def initialize(options)
|
22
|
+
@options = options.dup
|
23
|
+
@root_dir = @options.delete(:root_dir)
|
24
|
+
babel_config_version = @options.delete(:babel_config_version)
|
25
|
+
|
26
|
+
unless @root_dir && File.directory?(@root_dir)
|
27
|
+
error_message =
|
28
|
+
'You must provide the `root_dir` directory from which ' \
|
29
|
+
'node modules are to be resolved'
|
30
|
+
raise RootDirectoryDoesNotExistError, error_message
|
31
|
+
end
|
32
|
+
|
33
|
+
resolver = Resolver.new(babel)
|
34
|
+
plugins = @options[:plugins]
|
35
|
+
presets = @options[:presets]
|
36
|
+
@options[:plugins] = resolver.resolve_plugins(plugins) if plugins.is_a?(Array)
|
37
|
+
@options[:presets] = resolver.resolve_presets(presets) if presets.is_a?(Array)
|
38
|
+
|
39
|
+
@cache_key = [
|
40
|
+
self.class.name,
|
41
|
+
VERSION,
|
42
|
+
babel_config_version,
|
43
|
+
@options
|
44
|
+
].freeze
|
45
|
+
end
|
46
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
47
|
+
|
48
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
49
|
+
def call(input)
|
50
|
+
data = input[:data]
|
51
|
+
|
52
|
+
result = input[:cache].fetch(cache_key_from_input(input)) do
|
53
|
+
filename_relative = Sprockets::PathUtils.split_subpath(
|
54
|
+
input[:load_path],
|
55
|
+
input[:filename]
|
56
|
+
)
|
57
|
+
|
58
|
+
options = {
|
59
|
+
moduleIds: true,
|
60
|
+
sourceRoot: input[:load_path],
|
61
|
+
moduleRoot: nil,
|
62
|
+
filename: input[:filename],
|
63
|
+
filenameRelative: filename_relative,
|
64
|
+
ast: false
|
65
|
+
}.merge(@options)
|
66
|
+
|
67
|
+
if options[:moduleIds] && options[:moduleRoot]
|
68
|
+
options[:moduleId] ||= File.join(options[:moduleRoot], input[:name])
|
69
|
+
elsif options[:moduleIds]
|
70
|
+
options[:moduleId] ||= input[:name]
|
71
|
+
end
|
72
|
+
|
73
|
+
babel.transform(data, options)
|
74
|
+
end
|
75
|
+
|
76
|
+
{ data: result['code'] }
|
77
|
+
end
|
78
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
79
|
+
|
80
|
+
def cache_key_from_input(input)
|
81
|
+
@cache_key + [input[:filename]] + [input[:data]]
|
82
|
+
end
|
83
|
+
|
84
|
+
def babel
|
85
|
+
@babel ||= BabelBridge.new(@root_dir)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sprockets-bumble_d
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Richard Macklin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: railties
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.2.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '6.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 4.2.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '6.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: schmooze
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - '='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.1.6
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - '='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.1.6
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: sprockets
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.5'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3.5'
|
61
|
+
description: |2
|
62
|
+
Babel + UMD = BumbleD
|
63
|
+
Facilitate incremental migration of a large Sprockets-powered javascript
|
64
|
+
codebase to ES6 modules by transforming them to UMD modules that preserve
|
65
|
+
your existing global references.
|
66
|
+
email:
|
67
|
+
executables: []
|
68
|
+
extensions: []
|
69
|
+
extra_rdoc_files: []
|
70
|
+
files:
|
71
|
+
- lib/sprockets/bumble_d.rb
|
72
|
+
- lib/sprockets/bumble_d/config.rb
|
73
|
+
- lib/sprockets/bumble_d/dsl.rb
|
74
|
+
- lib/sprockets/bumble_d/errors.rb
|
75
|
+
- lib/sprockets/bumble_d/railtie.rb
|
76
|
+
- lib/sprockets/bumble_d/resolver.rb
|
77
|
+
- lib/sprockets/bumble_d/transformer.rb
|
78
|
+
- lib/sprockets/bumble_d/version.rb
|
79
|
+
homepage: https://github.com/rmacklin/sprockets-bumble_d
|
80
|
+
licenses:
|
81
|
+
- MIT
|
82
|
+
metadata: {}
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 2.6.10
|
100
|
+
signing_key:
|
101
|
+
specification_version: 4
|
102
|
+
summary: Let Sprockets use Babel to transpile ES6 modules to UMD
|
103
|
+
test_files: []
|