Class: Closure::Compiler::Util

Inherits:
Object
  • Object
show all
Defined in:
lib/closure/compiler.rb

Overview

Closure Script extends compiler.jar by transforming the arguments in novel ways. The most obvious augmentation is to support –ns for compiling namespaces. We can also expand paths to a new base, work with modules, and much more. These all will directly modify args.

Class Method Summary collapse

Class Method Details

.arg_values(args, options) ⇒ Array<String>

Extracts the values for a options in the arguments. Use Array#last to emulate compiler.jar for single options. Will collect from an array of options.

Parameters:

  • args (Array<String>)
  • options (String|Array<String>)

    One or more options.

Returns:

  • (Array<String>)


242
243
244
245
246
247
248
249
250
251
252
253
# File 'lib/closure/compiler.rb', line 242

def self.arg_values(args, options)
  options = [options].flatten unless options.kind_of? Array
  values = []
  args_index = 0
  while args_index < args.length
    if options.include? args[args_index]
      values << args[args_index+1]
    end
    args_index = args_index + 2
  end
  values
end

.augment(args, sources, env = {}) ⇒ Array<Hash>

Main function to convert –ns arguments into –js arguments. Returns module info when modules are processed.

Parameters:

  • args (Array<String>)

Returns:

  • (Array<Hash>)

    mods



225
226
227
228
229
230
231
232
233
# File 'lib/closure/compiler.rb', line 225

def self.augment(args, sources, env={})
  mods = extract_modules args
  if mods
    module_augment args, sources, mods, env
  else
    namespace_augment args, sources, [], env
  end
  mods
end

.expand_paths(args, base) ⇒ Array<String>

Expands all filesystem argument values to a specified folder.

Parameters:

  • args (Array<String>)

Returns:

  • (Array<String>)

    args



163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/closure/compiler.rb', line 163

def self.expand_paths(args, base)
  file_options = INPUT_OPTIONS + OUTPUT_OPTIONS
  args_index = 0
  while args_index < args.length
    option, value = args[args_index, 2]
    value = File.expand_path value, base
    if file_options.include? option
      args[args_index+1] = value
    end
    args_index = args_index + 2
  end
  args
end

.module_info(mods, var = 'MODULE_INFO') ⇒ Object

The javascript snippet for module info

Parameters:

  • mods (Array<Hash>)


187
188
189
190
191
192
193
194
# File 'lib/closure/compiler.rb', line 187

def self.module_info(mods, var = 'MODULE_INFO')
  js = "var #{var} = {"
  js += mods.map do |mod|
    reqs = mod[:requires].map{ |r| r.dump }
    "#{mod[:name].dump}: [#{reqs.join ', '}]"
  end.join ', '
  js += "};\n"
end

.module_path(path, var = 'MODULE_PATH') ⇒ Object

The javascript snippet for module info

Parameters:

  • mods (Array<Hash>)


180
181
182
# File 'lib/closure/compiler.rb', line 180

def self.module_path(path, var = 'MODULE_PATH')
  js = "var #{var} = #{path.dump};\n"
end

.module_uris_compiled(mods, sources, prefix, var = 'MODULE_URIS') ⇒ Object

The javascript snippet for compiled module file locations

Parameters:

  • mods (Array<Hash>)


211
212
213
214
215
216
217
218
# File 'lib/closure/compiler.rb', line 211

def self.module_uris_compiled(mods, sources, prefix, var = 'MODULE_URIS')
  js = "var #{var} = {\n"
  js += mods.map do |mod|
    file = sources.src_for prefix + mod[:name] + '.js'
    "#{mod[:name].dump}: [#{file.dump}]"
  end.join ",\n"
  js += "\n};\n"
end

.module_uris_raw(mods, sources, var = 'MODULE_URIS') ⇒ Object

The javascript snippet for raw module file locations

Parameters:

  • mods (Array<Hash>)


199
200
201
202
203
204
205
206
# File 'lib/closure/compiler.rb', line 199

def self.module_uris_raw(mods, sources, var = 'MODULE_URIS')
  js = "var #{var} = {\n"
  js += mods.map do |mod|
    files = mod[:files].map{ |r| (sources.src_for r).dump }
    "#{mod[:name].dump}: [\n#{files.join ",\n"}]"
  end.join ",\n"
  js += "\n};\n"
end