sprockets-commoner 0.5.1 → 0.6.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 +4 -4
- data/CHANGELOG.md +4 -0
- data/js/babel-plugin-sprockets-commoner-internal/index.js +4 -15
- data/js/babel-plugin-sprockets-commoner-internal/path-to-identifier.js +11 -0
- data/lib/sprockets/commoner.rb +1 -0
- data/lib/sprockets/commoner/bundle.rb +39 -13
- data/lib/sprockets/commoner/processor.rb +10 -10
- data/lib/sprockets/commoner/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5d2ada3e40387a555b4b1be5c0284eeb8b82078
|
4
|
+
data.tar.gz: 00145faf36173d45a06d3fd4e8bd840b31a80c72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 609da3bec1c0a44a191105feafbe84e29bea5d299651c391b58b2fa8b76c867afccb1e44e4c8b7fe41d596305a6d955515a72a545d544cf313e2ae17fdec4f36
|
7
|
+
data.tar.gz: a46ce177fc4f3d19aa70c1bb872526da7251dc59866df310b2ccacd7064395f938c4cb1990c3a39407d66a926c96a0b752276ee8863918c5b13119300f22186a
|
data/CHANGELOG.md
CHANGED
@@ -28,6 +28,7 @@ var dirname = require('path').dirname;
|
|
28
28
|
var join = require('path').join;
|
29
29
|
var resolve = require('browser-resolve').sync;
|
30
30
|
var emptyModule = join(__dirname, 'node_modules', 'browser-resolve', 'empty.js');
|
31
|
+
var pathToIdentifier = require('./path-to-identifier');
|
31
32
|
|
32
33
|
module.exports = function (context) {
|
33
34
|
var t = context.types;
|
@@ -106,19 +107,6 @@ module.exports = function (context) {
|
|
106
107
|
return null;
|
107
108
|
}
|
108
109
|
|
109
|
-
|
110
|
-
// Transform a path into a variable name
|
111
|
-
function pathToIdentifier(path) {
|
112
|
-
var escapedPath = path.replace(rootRegex, '').replace(/[^a-zA-Z0-9_]/g, function (match) {
|
113
|
-
if (match === '/') {
|
114
|
-
return '$';
|
115
|
-
} else {
|
116
|
-
return '_';
|
117
|
-
}
|
118
|
-
});
|
119
|
-
return '__commoner_module__' + escapedPath;
|
120
|
-
}
|
121
|
-
|
122
110
|
function resolveTarget(file, path, ensureTargetIsProcessed) {
|
123
111
|
var name = void 0;
|
124
112
|
if (opts.globals != null && (name = opts.globals[path]) != null) {
|
@@ -145,7 +133,7 @@ module.exports = function (context) {
|
|
145
133
|
file.metadata.targetsToProcess.push(resolvedPath);
|
146
134
|
}
|
147
135
|
// Otherwise we just look for the module by referencing its Special Identifier™.
|
148
|
-
return pathToIdentifier(resolvedPath);
|
136
|
+
return pathToIdentifier(resolvedPath.replace(rootRegex, ''));
|
149
137
|
}
|
150
138
|
}
|
151
139
|
}
|
@@ -265,10 +253,11 @@ module.exports = function (context) {
|
|
265
253
|
state.file.metadata.commonerEnabled = true;
|
266
254
|
|
267
255
|
var node = path.node;
|
268
|
-
var identifier = pathToIdentifier(state.file.opts.filename);
|
256
|
+
var identifier = pathToIdentifier(state.file.opts.filename.replace(rootRegex, ''));
|
269
257
|
var expose = findExpose(node.directives);
|
270
258
|
if (expose != null) {
|
271
259
|
node.body.push(exposeTemplate(t.identifier(expose)));
|
260
|
+
state.file.metadata.globalIdentifier = expose;
|
272
261
|
}
|
273
262
|
|
274
263
|
// Transform module to a variable assignment.
|
@@ -0,0 +1,11 @@
|
|
1
|
+
// Transform a path into a variable name
|
2
|
+
module.exports = function pathToIdentifier(path) {
|
3
|
+
var escapedPath = path.replace(/[^a-zA-Z0-9_]/g, function (match) {
|
4
|
+
if (match === '/') {
|
5
|
+
return '$';
|
6
|
+
} else {
|
7
|
+
return '_';
|
8
|
+
}
|
9
|
+
});
|
10
|
+
return '__commoner_module__' + escapedPath;
|
11
|
+
};
|
data/lib/sprockets/commoner.rb
CHANGED
@@ -10,6 +10,7 @@ module Sprockets
|
|
10
10
|
register_postprocessor 'application/javascript', ::Sprockets::Commoner::Processor
|
11
11
|
register_transformer 'application/json', 'application/javascript', ::Sprockets::Commoner::JSONProcessor
|
12
12
|
register_bundle_metadata_reducer 'application/javascript', :commoner_enabled, false, :|
|
13
|
+
register_bundle_metadata_reducer 'application/javascript', :commoner_required, Set.new, :+
|
13
14
|
register_bundle_metadata_reducer 'application/javascript', :commoner_used_helpers, Set.new, :+
|
14
15
|
register_bundle_processor 'application/javascript', ::Sprockets::Commoner::Bundle
|
15
16
|
end
|
@@ -3,20 +3,27 @@ require 'schmooze'
|
|
3
3
|
module Sprockets
|
4
4
|
module Commoner
|
5
5
|
class Bundle < Schmooze::Base
|
6
|
+
|
7
|
+
InaccessibleStubbedFileError = Class.new(::StandardError)
|
8
|
+
|
9
|
+
JS_PACKAGE_PATH = File.expand_path('../../../js', __dir__)
|
10
|
+
|
6
11
|
dependencies generator: 'babel-generator.default',
|
7
12
|
babelHelpers: 'babel-helpers',
|
8
|
-
t: 'babel-types'
|
13
|
+
t: 'babel-types',
|
14
|
+
pathToIdentifier: 'babel-plugin-sprockets-commoner-internal/path-to-identifier'
|
9
15
|
|
10
|
-
method :
|
11
|
-
function(helpers) {
|
12
|
-
|
16
|
+
method :generate_header, <<-JS
|
17
|
+
function(helpers, globalIdentifiers) {
|
18
|
+
var declarators = helpers.map(function(helper) {
|
19
|
+
return t.variableDeclarator(t.identifier('__commoner_helper__' + helper), babelHelpers.get(helper));
|
20
|
+
}).concat(globalIdentifiers.map(function(item) {
|
21
|
+
return t.variableDeclarator(t.identifier(pathToIdentifier(item[0])), t.identifier(item[1]));
|
22
|
+
}));
|
23
|
+
if (declarators.length === 0) {
|
13
24
|
return '';
|
14
25
|
}
|
15
|
-
var declaration = t.variableDeclaration('var',
|
16
|
-
helpers.map(function(helper) {
|
17
|
-
return t.variableDeclarator(t.identifier('__commoner_helper__' + helper), babelHelpers.get(helper));
|
18
|
-
})
|
19
|
-
);
|
26
|
+
var declaration = t.variableDeclaration('var', declarators);
|
20
27
|
return generator(declaration).code;
|
21
28
|
}
|
22
29
|
JS
|
@@ -34,21 +41,40 @@ JS
|
|
34
41
|
OUTRO = <<-JS.freeze
|
35
42
|
}();
|
36
43
|
JS
|
44
|
+
def initialize(root)
|
45
|
+
super(root, 'NODE_PATH' => JS_PACKAGE_PATH)
|
46
|
+
end
|
47
|
+
|
37
48
|
def self.instance(env)
|
38
49
|
@instance ||= new(env.root)
|
39
50
|
end
|
40
51
|
|
41
52
|
def self.call(input)
|
42
|
-
|
53
|
+
env = input[:environment]
|
54
|
+
instance(env).call(input)
|
43
55
|
end
|
44
56
|
|
45
57
|
def call(input)
|
46
58
|
return unless input[:metadata][:commoner_enabled]
|
59
|
+
env = input[:environment]
|
60
|
+
# Get the filenames of all the assets that are included in the bundle
|
61
|
+
assets_in_bundle = Set.new(input[:metadata][:included]) { |uri| env.load(uri).filename }
|
62
|
+
# Subtract the assets in the bundle from those that are required. The missing assets were excluded through stubbing.
|
63
|
+
assets_missing = input[:metadata][:commoner_required] - assets_in_bundle
|
64
|
+
|
65
|
+
global_identifiers = assets_missing.map do |filename|
|
66
|
+
uri, _ = env.resolve(filename, type: input[:content_type], pipeline: :self, compat: false)
|
67
|
+
asset = env.load(uri)
|
68
|
+
# Retrieve the global variable the file is exposed through
|
69
|
+
global = asset.metadata[:commoner_global_identifier]
|
70
|
+
raise InaccessibleStubbedFileError, "#{filename} is stubbed in #{input[:filename]} but doesn't define a global. Add an 'expose' directive." if global.nil?
|
71
|
+
[filename.slice(env.root.size + 1, filename.size), global]
|
72
|
+
end
|
47
73
|
|
48
|
-
used_helpers = input[:metadata][:commoner_used_helpers]
|
49
|
-
|
74
|
+
used_helpers = input[:metadata][:commoner_used_helpers].to_a
|
75
|
+
header_code = generate_header(used_helpers, global_identifiers)
|
50
76
|
{
|
51
|
-
data: "#{PRELUDE}#{
|
77
|
+
data: "#{PRELUDE}#{header_code}\n#{input[:data]}#{OUTRO}"
|
52
78
|
}
|
53
79
|
end
|
54
80
|
end
|
@@ -87,19 +87,17 @@ module Sprockets
|
|
87
87
|
babel_config = babelrc_data(filename)
|
88
88
|
result = transform(input[:data], options(input), commoner_options(input))
|
89
89
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
end
|
90
|
+
commoner_required = Set.new(input[:metadata][:commoner_required])
|
91
|
+
result['metadata']['targetsToProcess'].each do |t|
|
92
|
+
unless should_process?(t)
|
93
|
+
raise ExcludedFileError, "#{t} was imported from #{filename} but this file won't be processed by Sprockets::Commoner"
|
95
94
|
end
|
95
|
+
commoner_required.add(t)
|
96
96
|
end
|
97
97
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
@required.insert(insertion_index, asset)
|
102
|
-
end
|
98
|
+
result['metadata']['required'].each do |r|
|
99
|
+
asset = resolve(r, accept: input[:content_type], pipeline: :self)
|
100
|
+
@required.insert(insertion_index, asset)
|
103
101
|
end
|
104
102
|
|
105
103
|
{
|
@@ -107,6 +105,8 @@ module Sprockets
|
|
107
105
|
dependencies: @dependencies,
|
108
106
|
required: Set.new(@required),
|
109
107
|
|
108
|
+
commoner_global_identifier: result['metadata']['globalIdentifier'],
|
109
|
+
commoner_required: commoner_required,
|
110
110
|
commoner_used_helpers: Set.new(input[:metadata][:commoner_used_helpers]) + result['metadata']['usedHelpers'],
|
111
111
|
commoner_enabled: input[:metadata][:commoner_enabled] | result['metadata']['commonerEnabled'],
|
112
112
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sprockets-commoner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bouke van der Bijl
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sprockets
|
@@ -153,6 +153,7 @@ files:
|
|
153
153
|
- js/babel-plugin-sprockets-commoner-internal/node_modules/resolve/lib/sync.js
|
154
154
|
- js/babel-plugin-sprockets-commoner-internal/node_modules/resolve/package.json
|
155
155
|
- js/babel-plugin-sprockets-commoner-internal/package.json
|
156
|
+
- js/babel-plugin-sprockets-commoner-internal/path-to-identifier.js
|
156
157
|
- lib/sprockets/commoner.rb
|
157
158
|
- lib/sprockets/commoner/bundle.rb
|
158
159
|
- lib/sprockets/commoner/json_processor.rb
|