diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-02-11 21:44:38 +0100 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-02-11 21:44:38 +0100 |
commit | 669f3b39849890c48171d807225cd6eaa3c9086b (patch) | |
tree | bc07fefc4e13ac8f737174166ac1d19512379298 /lib/utils | |
parent | e7eed2abbe91fa44bd071819123bd9ea04d1702a (diff) | |
download | gitbook-669f3b39849890c48171d807225cd6eaa3c9086b.zip gitbook-669f3b39849890c48171d807225cd6eaa3c9086b.tar.gz gitbook-669f3b39849890c48171d807225cd6eaa3c9086b.tar.bz2 |
Add base for normalizing html
Diffstat (limited to 'lib/utils')
-rw-r--r-- | lib/utils/command.js | 27 | ||||
-rw-r--r-- | lib/utils/images.js | 27 | ||||
-rw-r--r-- | lib/utils/promise.js | 12 |
3 files changed, 65 insertions, 1 deletions
diff --git a/lib/utils/command.js b/lib/utils/command.js index f395fa1..4269d6c 100644 --- a/lib/utils/command.js +++ b/lib/utils/command.js @@ -13,7 +13,32 @@ function exec(command, options) { return Promise.nfcall(childProcess.exec, command, options); } +// Spawn an executable +function spawn(command, args, options) { + if (!isAvailable) { + return Promise.reject(new Error('Command execution is not possible on this platform')); + } + + var d = Promise.deferred(); + var child = childProcess.spawn(command, args, options); + + child.on('error', function(error) { + return d.reject(error); + }); + + child.on('close', function(code) { + if (code === 0) { + d.resolve(); + } else { + d.reject(new Error('Error with command "'+command+'"')); + } + }); + + return d.promise; +} + module.exports = { isAvailable: isAvailable, - exec: exec + exec: exec, + spawn: spawn }; diff --git a/lib/utils/images.js b/lib/utils/images.js new file mode 100644 index 0000000..3ba0f1f --- /dev/null +++ b/lib/utils/images.js @@ -0,0 +1,27 @@ +var fs = require('fs'); + +var Promise = require('./promise'); +var command = require('./command'); +var error = require('./error'); + +// Convert a svg file to a pmg +function convertSVGToPNG(source, dest, options) { + if (!command.isAvailable) return Promise.reject(new Error('Could not convert SVG in this platform')); + if (!fs.existsSync(source)) return Promise.reject(new error.FileNotFoundError({ filename: source })); + + return command.spawn('svgexport', [source, dest]) + .fail(function(err) { + if (err.code == 'ENOENT') err = new Error('Need to install "svgexport" using "npm install svgexport -g"'); + throw err; + }) + .then(function() { + if (fs.existsSync(dest)) return; + + throw new Error('Error converting '+source+' into '+dest); + }); +} + +module.exports = { + convertSVGToPNG: convertSVGToPNG, + INVALID: ['.svg'] +};
\ No newline at end of file diff --git a/lib/utils/promise.js b/lib/utils/promise.js index 82f4a60..adcc1c3 100644 --- a/lib/utils/promise.js +++ b/lib/utils/promise.js @@ -32,7 +32,19 @@ function some(arr, iter) { }, Q()); } +// Map an array using an async (promised) iterator +function map(arr, iter) { + return reduce(arr, function(prev, entry, i) { + return Q(iter(entry, i)) + .then(function(out) { + prev.push(out); + return prev; + }); + }, []); +} + module.exports = Q; module.exports.reduce = reduce; +module.exports.map = map; module.exports.serie = serie; module.exports.some = some; |