4chan/js/minify.rb
2025-04-17 14:46:47 -05:00

74 lines
1.6 KiB
Ruby

#!/usr/bin/env ruby
# encoding: utf-8
require 'json'
require 'net/http'
if !ARGV[0]
puts 'usage: minify.rb filename'
exit!
end
def minify_js
api_url = 'http://closure-compiler.appspot.com/compile'
filename = ARGV[0]
out_dir = File.expand_path(File.dirname(__FILE__))
out_file = out_dir + '/' + filename.split('-')[0] + '.js'
puts 'Compiling...'
resp = Net::HTTP.post_form(URI(api_url), {
output_format: 'json',
output_info: [ 'compiled_code', 'warnings', 'errors', 'statistics' ],
compilation_level: 'SIMPLE_OPTIMIZATIONS',
language: 'ECMASCRIPT5',
js_code: File.open(filename, 'r:UTF-8') { |f| f.read }
})
if resp.kind_of?(Net::HTTPSuccess)
data = JSON.parse(resp.body, symbolize_names: true)
if data[:serverErrors]
puts 'Server errors:'
data[:serverErrors].each do |err|
puts " #{err[:error]} (#{err[:code]})"
end
exit!
end
if data[:errors]
puts 'Errors:'
data[:errors].each do |err|
puts " #{err[:error]} (#{err[:lineno]}, #{err[:charno]})"
end
exit!
end
if data[:warnings]
puts 'Warnings:'
data[:warnings].each do |err|
puts " #{err[:warning]} (#{err[:lineno]}, #{err[:charno]})"
end
end
if data[:statistics]
puts 'Statistics:'
data[:statistics].each do |k, v|
puts " #{k}: #{v}"
end
end
puts 'Writing...'
File.open(out_file, 'wb') do |f|
f.write(data[:compiledCode])
end
else
puts "Bad status code: #{resp}"
end
puts 'Done'
end
minify_js