modulr 0.6.0 → 0.7.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.
- data/README.markdown +1 -0
- data/VERSION +1 -1
- data/bin/modulrize +5 -1
- data/lib/modulr/collector.rb +67 -53
- data/lib/modulr/global_export_collector.rb +35 -37
- data/lib/modulr/sync_collector.rb +13 -10
- metadata +3 -3
data/README.markdown
CHANGED
@@ -55,6 +55,7 @@ Options are as follows:
|
|
55
55
|
--global-export[=GLOBAL_VAR] If GLOBAL_VAR is specified and only one module is being processed, exports it to the GLOBAL_VAR global variable.
|
56
56
|
If GLOBAL_VAR is specified and multiple modules are being processed, exports each one of them as a property of GLOBAL_VAR.
|
57
57
|
If GLOBAL_VAR isn't specified, exports the module to global variables corresponding to their identifier.
|
58
|
+
--main-module=MAIN_MODULE Set the identifier of the main module (available through `require.main`).
|
58
59
|
--sync Load all dependencies synchronously.
|
59
60
|
--dependency-graph[=OUTPUT] Create a dependency graph of the module.
|
60
61
|
-h, --help Show this message.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.7.0
|
data/bin/modulrize
CHANGED
@@ -31,10 +31,14 @@ opts = OptionParser.new do |opts|
|
|
31
31
|
options[:minify] = minify
|
32
32
|
end
|
33
33
|
|
34
|
-
opts.on('--global-export[=GLOBAL_VAR]', 'If GLOBAL_VAR is specified and only one module is being processed,
|
34
|
+
opts.on('--global-export[=GLOBAL_VAR]', 'If GLOBAL_VAR is specified and only one module is being processed, export it to the GLOBAL_VAR global variable.', 'If GLOBAL_VAR is specified and multiple modules are being processed, export each one of them as a property of GLOBAL_VAR.', 'If GLOBAL_VAR isn\'t specified, export the module to global variables corresponding to their identifier.') do |global|
|
35
35
|
options[:global] = global || true
|
36
36
|
end
|
37
37
|
|
38
|
+
opts.on('--main-module=MAIN_MODULE', 'Set the identifier of the main module (available through `require.main`).') do |main_module|
|
39
|
+
options[:main_module] = main_module
|
40
|
+
end
|
41
|
+
|
38
42
|
opts.on('--sync', 'Load all dependencies synchronously.') do |global|
|
39
43
|
options[:sync] = true
|
40
44
|
end
|
data/lib/modulr/collector.rb
CHANGED
@@ -3,12 +3,23 @@ module Modulr
|
|
3
3
|
attr_reader :modules, :top_level_modules
|
4
4
|
|
5
5
|
def initialize(options = {})
|
6
|
+
@options = options
|
6
7
|
@root = options[:root]
|
7
8
|
@lazy_eval = options[:lazy_eval]
|
8
9
|
@modules = []
|
9
10
|
@top_level_modules = []
|
10
11
|
end
|
11
12
|
|
13
|
+
def to_js(buffer = '')
|
14
|
+
buffer << globals
|
15
|
+
buffer << "\n(function() {"
|
16
|
+
buffer << lib
|
17
|
+
buffer << transport
|
18
|
+
reorder_top_level_modules
|
19
|
+
buffer << requires
|
20
|
+
buffer << "})();\n"
|
21
|
+
end
|
22
|
+
|
12
23
|
def parse_file(path)
|
13
24
|
parse_files(path)
|
14
25
|
end
|
@@ -20,66 +31,69 @@ module Modulr
|
|
20
31
|
end
|
21
32
|
end
|
22
33
|
|
23
|
-
|
24
|
-
modules.clear
|
25
|
-
top_level_modules.clear
|
26
|
-
end
|
27
|
-
private :reset
|
28
|
-
|
29
|
-
def module_from_path(path)
|
30
|
-
identifier = File.basename(path, '.js')
|
31
|
-
root = @root || File.dirname(path)
|
32
|
-
JSModule.new(identifier, root, path)
|
33
|
-
end
|
34
|
-
private :module_from_path
|
35
|
-
|
36
|
-
def add_module_from_path(path)
|
37
|
-
js_module = module_from_path(path)
|
38
|
-
top_level_modules << js_module
|
39
|
-
collect_dependencies(js_module)
|
40
|
-
js_module
|
41
|
-
end
|
42
|
-
private :add_module_from_path
|
43
|
-
|
44
|
-
def to_js(buffer = '')
|
45
|
-
buffer << globals
|
46
|
-
buffer << "\n(function() {"
|
47
|
-
buffer << lib
|
48
|
-
buffer << transport
|
49
|
-
buffer << requires
|
50
|
-
buffer << "})();\n"
|
51
|
-
end
|
34
|
+
private
|
52
35
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
36
|
+
def reset
|
37
|
+
modules.clear
|
38
|
+
top_level_modules.clear
|
39
|
+
end
|
40
|
+
|
41
|
+
def main_module?
|
42
|
+
!!main_module
|
43
|
+
end
|
44
|
+
|
45
|
+
def main_module
|
46
|
+
if mm_id = @options[:main_module]
|
47
|
+
@top_level_modules.find { |m| m.id == mm_id }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def reorder_top_level_modules
|
52
|
+
if mm = main_module
|
53
|
+
index = top_level_modules.index(mm)
|
54
|
+
top_level_modules[index] = top_level_modules[0]
|
55
|
+
top_level_modules[0] = mm
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def module_from_path(path)
|
60
|
+
identifier = File.basename(path, '.js')
|
61
|
+
root = @root || File.dirname(path)
|
62
|
+
JSModule.new(identifier, root, path)
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_module_from_path(path)
|
66
|
+
js_module = module_from_path(path)
|
67
|
+
top_level_modules << js_module
|
68
|
+
collect_dependencies(js_module)
|
69
|
+
js_module
|
70
|
+
end
|
71
|
+
|
72
|
+
def lib
|
73
|
+
src = File.read(PATH_TO_MODULR_JS)
|
74
|
+
"#{src}\nvar require = modulr.require, module = require.main;\n"
|
75
|
+
end
|
58
76
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
private :requires
|
77
|
+
def requires
|
78
|
+
top_level_modules.map { |m| m.ensure }.join("\n")
|
79
|
+
end
|
63
80
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
private :globals
|
81
|
+
def globals
|
82
|
+
''
|
83
|
+
end
|
68
84
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
85
|
+
def transport
|
86
|
+
pairs = modules.map do |m|
|
87
|
+
if lazy_eval_module?(m)
|
88
|
+
value = m.escaped_src
|
89
|
+
else
|
90
|
+
value = m.factory
|
91
|
+
end
|
92
|
+
"\n'#{m.id}': #{value}"
|
75
93
|
end
|
76
|
-
"
|
94
|
+
"require.define({#{pairs.join(', ')}\n});"
|
77
95
|
end
|
78
|
-
"require.define({#{pairs.join(', ')}\n});"
|
79
|
-
end
|
80
|
-
private :transport
|
81
96
|
|
82
|
-
private
|
83
97
|
def collect_dependencies(js_module)
|
84
98
|
js_module.dependencies.each do |dependency|
|
85
99
|
unless modules.include?(dependency)
|
@@ -1,53 +1,51 @@
|
|
1
1
|
module Modulr
|
2
2
|
class GlobalExportCollector < SyncCollector
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
private
|
5
|
+
def global_var_name
|
6
|
+
@options[:global]
|
7
|
+
end
|
8
|
+
|
9
|
+
def use_module_id_as_var_name?
|
10
|
+
@options[:global] == true
|
11
|
+
end
|
12
|
+
|
13
|
+
def globals
|
14
|
+
if use_module_id_as_var_name?
|
15
|
+
top_level_modules.map { |m| define_global_var(m.id) }.join
|
16
|
+
else
|
17
|
+
define_global_var(global_var_name)
|
18
|
+
end
|
14
19
|
end
|
15
|
-
end
|
16
|
-
private :globals
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
def define_global_var(var_name)
|
22
|
+
if var_name.include?('.')
|
23
|
+
props = var_name.split('.')
|
24
|
+
str = props.shift
|
25
|
+
results = "var #{str};"
|
26
|
+
props.each do |prop|
|
27
|
+
results << "\n#{str} = #{str} || {};"
|
28
|
+
str << ".#{prop}"
|
29
|
+
end
|
30
|
+
"#{results}\n#{str};\n"
|
31
|
+
else
|
32
|
+
"var #{var_name};\n"
|
26
33
|
end
|
27
|
-
"#{results}\n#{str};\n"
|
28
|
-
else
|
29
|
-
"var #{global};\n"
|
30
34
|
end
|
31
|
-
end
|
32
|
-
private :define_global
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
if top_level_modules.size == 1 #export to named global
|
41
|
-
"\n #{@global} = require('#{top_level_modules.first.id}');"
|
36
|
+
def requires
|
37
|
+
if use_module_id_as_var_name?
|
38
|
+
top_level_modules.map { |m| "\n #{m.id} = require('#{m.id}');" }.join
|
39
|
+
elsif top_level_modules.size == 1
|
40
|
+
#export to named global
|
41
|
+
"\n #{global_var_name} = require('#{top_level_modules.first.id}');"
|
42
42
|
else
|
43
43
|
#export to props of named global
|
44
|
-
top_level_modules.inject("\n#{
|
45
|
-
str << "\n #{
|
44
|
+
top_level_modules.inject("\n#{global_var_name} = {};") do |str, m|
|
45
|
+
str << "\n #{global_var_name}.#{m.id} = require('#{m.id}');"
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
|
-
end
|
50
|
-
private :requires
|
51
49
|
|
52
50
|
end
|
53
51
|
end
|
@@ -5,15 +5,18 @@ module Modulr
|
|
5
5
|
modules << js_module unless modules.include?(js_module)
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
8
|
+
private
|
9
|
+
def lib
|
10
|
+
output = File.read(PATH_TO_MODULR_SYNC_JS)
|
11
|
+
if top_level_modules.size > 1 && !main_module?
|
12
|
+
output << "\nvar module = {};\n"
|
13
|
+
output << "\nrequire.main = module;\n"
|
14
|
+
end
|
15
|
+
output
|
16
|
+
end
|
17
|
+
|
18
|
+
def requires
|
19
|
+
top_level_modules.map { |m| "\n require('#{m.id}');" }.join
|
20
|
+
end
|
18
21
|
end
|
19
22
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 7
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.7.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Tobie Langel
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-11-01 00:00:00 +01:00
|
18
18
|
default_executable: modulrize
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|