lib/file.js (38 lines of code) (raw):
const path = require('path');
const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs-extra'));
class File {
/**
* @param {content} path
* @param {content} [content]
*/
constructor(path, content) {
this.path = path;
this.content = content;
}
get filename() {
return path.basename(this.path);
}
get basename() {
const filename = this.filename;
return filename.substr(0, filename.lastIndexOf('.'));
}
get extension() {
return path.extname(this.filename).substr(1);
}
get dirname() {
return path.basename(this.dirpath);
}
get dirpath() {
return path.dirname(this.path);
}
/**
* @param {string} filepath
* @return {Promise<File>}
*/
static create(filepath) {
return File.read(filepath).then(content => new File(filepath, content));
}
/**
* @param {string} filepath
* @return {Promise<string>}
*/
static read(filepath) {
return fs.readFileAsync(filepath, 'utf-8');
}
/**
* @param {string} dest
* @return {Promise}
*/
copy(dest) {
return fs.copyAsync(this.path, dest);
}
/**
* @param {string} dest
* @return {Promise}
*/
write(dest) {
return fs.outputFile(dest, this.content);
}
}
module.exports = File;