yapm
Version:
package manager for io.js (npm fork)
49 lines (44 loc) • 1.3 kB
JavaScript
var Path = require('path')
var read = require('../utils').read
var write = require('../utils').write
var stat = require('../utils').fs.stat
module.exports.read = function(path, cb) {
read(Path.join(path, 'index.js'), 'utf8', function(err, data) {
if (err) return cb(err)
data = parseIndex(data)
if (data == null) {
var er = Error('no package info here')
er.code = 'ENOENT'
return cb(er)
}
cb(null, data)
})
}
module.exports.write = function(path, object, cb) {
// think about this as "not implemented", but this is what npm does
write(Path.join(path, 'package.json'), JSON.stringify(object, null, 2) + '\n', cb)
}
module.exports.stat = function(path, cb) {
read(path, function(err, data) {
if (err) return cb(err)
stat(Path.join(path, 'index.js'), function(er, stat) {
if (stat) stat.file = Path.join(path, 'index.js')
cb(er, stat)
})
})
}
// /**package { "name": "foo", "version": "1.2.3", ... } **/
function parseIndex (data) {
data = data.split(/^\/\*\*package(?:\s|$)/m)
if (data.length < 2) return null
data = data[1]
data = data.split(/\*\*\/$/m)
if (data.length < 2) return null
data = data[0]
data = data.replace(/^\s*\*/mg, "")
try {
return JSON.parse(data)
} catch (er) {
return null
}
}