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>)


248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/closure/compiler.rb', line 248

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



231
232
233
234
235
236
237
238
239
# File 'lib/closure/compiler.rb', line 231

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



169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/closure/compiler.rb', line 169

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>)


193
194
195
196
197
198
199
200
# File 'lib/closure/compiler.rb', line 193

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>)


186
187
188
# File 'lib/closure/compiler.rb', line 186

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>)


217
218
219
220
221
222
223
224
# File 'lib/closure/compiler.rb', line 217

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>)


205
206
207
208
209
210
211
212
# File 'lib/closure/compiler.rb', line 205

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