-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
174 additions
and
142 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,16 @@ | ||
#!/usr/bin/env node | ||
'use strict'; | ||
/* eslint-disable no-console, no-process-exit */ | ||
if (process.argv.length !== 3) { | ||
console.error('Usage: npm-assets <dest>'); | ||
process.exit(1); | ||
} | ||
|
||
require('../')(process.cwd(), process.argv[2], function done(err) { | ||
if (err) { | ||
console.error('Error occurred while copying assets:'); | ||
console.error(err.toString()); | ||
process.exit(1); | ||
console.error('Error occurred while copying assets:'); | ||
console.error(err.toString()); | ||
process.exit(1); | ||
} | ||
process.exit(0); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,132 +1,134 @@ | ||
var fs = require('fs'), | ||
path = require('path'), | ||
findModules = require('find-modules'), | ||
async = require('async'), | ||
mkdirp = require('mkdirp'); | ||
|
||
'use strict'; | ||
var fs = require('fs'); | ||
var path = require('path'); | ||
var findModules = require('find-modules'); | ||
var async = require('async'); | ||
var mkdirp = require('mkdirp'); | ||
module.exports = copyAssets; | ||
copyAssets.find = findAssets; | ||
|
||
function copyAssets(root, dest, callback) { | ||
var assets; | ||
findAssets(root, found); | ||
|
||
function found(err, a) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
var assets = null; | ||
findAssets(root, found); | ||
|
||
assets = a; | ||
assets.forEach(function(asset) { | ||
asset.dest = path.join(dest, asset.name); | ||
}); | ||
assets = assets.filter(function(asset, i, total) { | ||
for (var n = 0; n < total.length; n+=1) { | ||
if(total[n].dest === asset.dest) { | ||
return n === i; | ||
} | ||
} | ||
}); | ||
createDirs(assets, created); | ||
function found(err, foundAssets) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
|
||
function created(err) { | ||
if (err) { | ||
return callback(err); | ||
assets = foundAssets; | ||
assets.forEach(function addDestToAssetObject(asset) { | ||
asset.dest = path.join(dest, asset.name); | ||
}); | ||
assets = assets.filter(function uniqueDests(asset, i, total) { | ||
for (var n = 0; n < total.length; n += 1) { | ||
if (total[n].dest === asset.dest) { | ||
return n === i; | ||
} | ||
|
||
copyFiles(assets, callback); | ||
} | ||
}); | ||
createDirs(assets, created); | ||
} | ||
|
||
function created(err) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
|
||
copyFiles(assets, callback); | ||
} | ||
} | ||
|
||
function createDirs(assets, callback) { | ||
var dirs = assets | ||
.map(function(a) { return path.dirname(a.dest); }) | ||
.filter(function (value, i, total) { return total.indexOf(value) === i; }); | ||
|
||
async.forEach(dirs, mkdirp, callback); | ||
var dirs = assets | ||
.map(function getDestinationDir(asset) { | ||
return path.dirname(asset.dest); | ||
}) | ||
.filter(function uniqueDests(value, i, total) { | ||
return total.indexOf(value) === i; | ||
}); | ||
async.forEach(dirs, mkdirp, callback); | ||
} | ||
|
||
function copyFiles(assets, callback) { | ||
async.forEach(assets, copy, callback); | ||
async.forEach(assets, copy, callback); | ||
} | ||
|
||
function copy(asset, callback) { | ||
var isDone = false, | ||
input = fs.createReadStream(asset.path), | ||
output = fs.createWriteStream(asset.dest); | ||
input.pipe(output); | ||
input.on('error', done); | ||
output.on('error', done); | ||
output.on('finish', done); | ||
|
||
function done(err) { | ||
if (!isDone) { | ||
isDone = true; | ||
callback(err); | ||
} | ||
var isDone = false; | ||
var input = fs.createReadStream(asset.path); | ||
var output = fs.createWriteStream(asset.dest); | ||
input.pipe(output); | ||
input.on('error', done); | ||
output.on('error', done); | ||
output.on('finish', done); | ||
|
||
function done(err) { | ||
if (!isDone) { | ||
isDone = true; | ||
return callback(err); | ||
} | ||
} | ||
} | ||
|
||
function findAssets(dir, callback) { | ||
findModules(dir, foundModules); | ||
findModules(dir, foundModules); | ||
|
||
function foundModules(err, modules) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
|
||
modules.push(dir); | ||
async.map(modules, getAssets, done); | ||
function foundModules(err, modules) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
|
||
function done(err, assets) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
modules.push(dir); | ||
async.map(modules, getAssets, done); | ||
} | ||
|
||
assets = assets.reduce( | ||
function(all, a) { return all.concat(a); }, []); | ||
callback(null, assets); | ||
function done(err, assets) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
|
||
assets = assets.reduce(function reduceAssets(all, currentSet) { | ||
return all.concat(currentSet); | ||
}, []); | ||
callback(null, assets); | ||
} | ||
} | ||
|
||
function getAssets(dir, callback) { | ||
var pkg = path.join(dir, 'package.json'); | ||
var pkg = path.join(dir, 'package.json'); | ||
fs.exists(pkg, checked); | ||
|
||
fs.exists(pkg, checked); | ||
function checked(exists) { | ||
if (!exists) { | ||
return callback(null, []); | ||
} | ||
|
||
function checked(exists) { | ||
if (!exists) { | ||
return callback(null, []); | ||
} | ||
fs.readFile(pkg, 'utf8', read); | ||
} | ||
|
||
fs.readFile(pkg, 'utf8', read); | ||
function read(err, contents) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
|
||
function read(err, contents) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
|
||
try { | ||
contents = JSON.parse(contents); | ||
} catch (e) { | ||
return callback(new Error('Error parsing "' + pkg + '"')); | ||
} | ||
try { | ||
contents = JSON.parse(contents); | ||
} catch (error) { | ||
return callback(new Error('Error parsing "' + pkg + '"')); | ||
} | ||
|
||
var assets = contents.assets; | ||
if (!Array.isArray(assets)) { | ||
return callback(null, []); | ||
} | ||
var assets = contents.assets; | ||
if (!Array.isArray(assets)) { | ||
return callback(null, []); | ||
} | ||
|
||
assets = assets.map(function(name) { | ||
return { | ||
name: name, | ||
path: path.join(dir, name) | ||
}; | ||
}); | ||
assets = assets.map(function mapAssetDescription(name) { | ||
return { | ||
name: name, | ||
path: path.join(dir, name), | ||
}; | ||
}); | ||
|
||
callback(null, assets); | ||
} | ||
callback(null, assets); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.