Skip to content

Commit

Permalink
add png optimizer
Browse files Browse the repository at this point in the history
  • Loading branch information
pgherveou committed Mar 7, 2013
1 parent 3633606 commit bef57d0
Show file tree
Hide file tree
Showing 18 changed files with 189 additions and 34 deletions.
7 changes: 5 additions & 2 deletions lib/builders/Builder.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 40 additions & 0 deletions lib/builders/Css.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

49 changes: 49 additions & 0 deletions lib/builders/Png.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions lib/builders/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions lib/config.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 18 additions & 20 deletions lib/project.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "squid",
"description": "build utility for compiling coffee, stylus, jade files",
"author": "Pierre-Guillaume Herveou <pgherveou@gmail.com>",
"version": "0.1.4",
"version": "0.1.6",
"homepage": "http://pgherveou.github.com/squid/",
"repository": {
"type": "git",
Expand All @@ -17,6 +17,8 @@
"coffee-script" : "1.x",
"jade" : "0.x",
"handlebars" : "1.x",
"csslint" : "0.x",
"optipng" : "0.x",
"findr" : "0.x",
"mkdirp" : "0.x",
"moment" : "2.x",
Expand Down
6 changes: 3 additions & 3 deletions src/lib/builders/Builder.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ exports.Builder = class Builder
@srcDir = path.resolve @config.src
@outDir = path.resolve @config.out

buildPath: (source, outDir) =>
buildPath: (source, outDir = @outDir) =>
ext = @outExt or path.extname(source)
fileName = path.basename(source, path.extname(source)) + @outExt
fileDir = path.dirname(source)
Expand All @@ -51,10 +51,10 @@ exports.Builder = class Builder

# if new, write code in file
write: (newCode, src, cb) ->
file = @buildPath src, @outDir
file = @buildPath src
fs.readFile file, 'utf8', (err, oldCode) =>
return cb null, file, null if newCode is oldCode
file = @buildPath src, @outDir
file = @buildPath src
mkdirp path.dirname(file), 0o0755, (err) =>
return cb new BuildError(file, err) if err
fs.writeFile file, newCode, (err) =>
Expand Down
24 changes: 24 additions & 0 deletions src/lib/builders/Css.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
path = require 'path'
{CSSLint} = require 'csslint'
{Builder, BuildError} = require './Builder'

module.exports = class CSSBuilder extends Builder

fileExt: '.css'
outExt : '.css'

constructor: ->
super
@cssConfig = @config.builders.css

_build: (file, code, refresh, cb) ->
error = CSSLint.verify(code).messages
.filter((msg)-> msg.type is 'error')
.map((msg) -> "line #{msg.line}: #{msg.message}")
.join '\n'

return cb new BuildError(file, error) if error
@write code, file, cb



27 changes: 27 additions & 0 deletions src/lib/builders/Png.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
path = require 'path'
fs = require 'fs'
mkdirp = require 'mkdirp'
OptiPng = require 'optipng'
{Builder, BuildError} = require './Builder'

optimizer = new OptiPng

module.exports = class CSSBuilder extends Builder

fileExt: '.png'
outExt : '.png'

constructor: ->
super
@pngConfig = @config.builders.png

build: (src, refresh, cb) ->
out = @buildPath src
mkdirp path.dirname(out), 0o0755, (err) =>
return cb new BuildError(out, err) if err
srcStream = fs.createReadStream src
outStream = fs.createWriteStream out
srcStream.pipe(optimizer).pipe(outStream)
outStream.on 'close', cb


4 changes: 3 additions & 1 deletion src/lib/builders/index.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ builders.push new require './Coffee'
builders.push new require './Stylus'
builders.push new require './Jade'
builders.push new require './Json'
builders.push new require './Handlebars'
builders.push new require './Handlebars'
builders.push new require './Css'
builders.push new require './Png'
1 change: 1 addition & 0 deletions src/lib/config.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ config =
js: {}
json: {}
coffee: {}
css: {}
handlebars:
wrap: 'commonJS'
jade:
Expand Down
15 changes: 8 additions & 7 deletions src/lib/project.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -51,21 +51,22 @@ class Project extends EventEmitter
@emit('build', src) if not err and newCode

liveBuildAll: (fileItems, cb) =>
files = (file for file of fileItems)
files = Object.keys fileItems
errors = []

for file in files
files.forEach (file) =>
if builder = @buildFactory.get(file)
code = fs.readFileSync file, 'utf8'
builder.scan file, code

# build all
buildFile = (file, cb) =>
builder = @buildFactory.get(file)
return cb null unless builder
builder.build file, false, (err) ->
errors.push err if err
cb null
return cb null unless builder = @buildFactory.get(file)
fs.stat builder.buildPath(file), (err, stat) ->
return cb null if not err and stat.mtime.getTime() > fileItems[file].mtime.getTime()
builder.build file, false, (err) ->
errors.push err if err
cb null

async.forEach files, buildFile, =>
cb(errors if errors.length)
Expand Down
Binary file added src/tests/apple.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/tests/test-css.css
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.foo {font-size: 12px;}
Binary file added tests/apple.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions tests/test-css.css
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.foo {font-size: 12px;}
1 change: 1 addition & 0 deletions tests/test-jade.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
jade = require('jade');
if (jade.runtime) {jade = jade.runtime;}
module.exports = function anonymous(locals, attrs, escape, rethrow, merge) {
attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;
var buf = [];
Expand Down

0 comments on commit bef57d0

Please sign in to comment.