antfarm
Version:
File automation framework for ants.
168 lines (166 loc) • 13.2 kB
JavaScript
;
var mime = require("mime-types"), fileExtension = require("file-extension"), node_path = require("path"), fs = require("fs"), filesize = require("filesize");
var File = (function () {
/**
* File constructor
* @param e
* @param path
*/
function File(e, path) {
this.e = e;
this._path = path;
// verify _path leads to a valid, readable file, handle error if not
this.getStatistics();
}
/**
* Refresh the file statistics after a rename or modification.
*/
File.prototype.getStatistics = function () {
var f = this;
f._contentType = mime.lookup(f.path);
f._extension = fileExtension(f.path);
f._basename = node_path.basename(f.path);
f._dirname = node_path.dirname(f.path);
try {
f._sizeBytes = fs.statSync(f.path).size;
}
catch (err) {
f.e.log(2, "Couldn't determine sizeBytes with statSync. " + err, f);
f._sizeBytes = 0;
}
};
Object.defineProperty(File.prototype, "name", {
/**
* Get the _basename.
* @returns {string}
*/
get: function () {
return this._basename;
},
/**
* Set a new file _name.
* @param filename
*/
set: function (filename) {
this._basename = filename;
},
enumerable: true,
configurable: true
});
Object.defineProperty(File.prototype, "nameProper", {
/**
* Get the file _name of the job without the file extension.
* @returns {string}
*/
get: function () {
return node_path.basename(this.basename, node_path.extname(this.basename));
},
enumerable: true,
configurable: true
});
Object.defineProperty(File.prototype, "dirname", {
/**
* Get the top level directory _name.
* @returns {string}
*/
get: function () {
return this._dirname;
},
enumerable: true,
configurable: true
});
Object.defineProperty(File.prototype, "path", {
/**
* Get the complete directory _path.
* @returns {string}
*/
get: function () {
return this._path;
},
/**
* Set the complete directory _path.
* @param path
*/
set: function (path) {
this._path = path;
this.getStatistics();
},
enumerable: true,
configurable: true
});
Object.defineProperty(File.prototype, "contentType", {
/**
* Get the content-type of the file.
* @returns {string}
*/
get: function () {
return this._contentType;
},
enumerable: true,
configurable: true
});
Object.defineProperty(File.prototype, "extension", {
/**
* Get the file extension.
* @returns {string}
*/
get: function () {
return this._extension;
},
enumerable: true,
configurable: true
});
Object.defineProperty(File.prototype, "basename", {
/**
* Get the _basename.
* @returns {string}
*/
get: function () {
return this._basename;
},
enumerable: true,
configurable: true
});
Object.defineProperty(File.prototype, "sizeBytes", {
get: function () {
return this._sizeBytes;
},
enumerable: true,
configurable: true
});
Object.defineProperty(File.prototype, "size", {
get: function () {
return filesize(this.sizeBytes);
},
enumerable: true,
configurable: true
});
/**
* Renames the local job file to the current _name.
*/
File.prototype.renameLocal = function () {
var f = this;
var new_path = f.dirname + node_path.sep + f.name;
fs.renameSync(f.path, new_path);
f.path = new_path;
f.getStatistics();
};
/**
* Deletes the local file.
* @returns {boolean}
*/
File.prototype.removeLocal = function () {
var f = this;
try {
fs.unlinkSync(f.path);
return true;
}
catch (e) {
f.e.log(3, "File \"" + f.path + "\" could not be deleted. " + e, f);
return false;
}
};
return File;
}());
exports.File = File;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFDO0FBQUQsQ0FwSkEsQUFvSkMsSUFBQTtBQXBKWSxZQUFJLE9Bb0poQixDQUFBIiwiZmlsZSI6ImxpYi9qb2IvZmlsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gXCIuLi9lbnZpcm9ubWVudC9lbnZpcm9ubWVudFwiO1xuXG5jb25zdCAgIG1pbWUgPSByZXF1aXJlKFwibWltZS10eXBlc1wiKSxcbiAgICAgICAgZmlsZUV4dGVuc2lvbiA9IHJlcXVpcmUoXCJmaWxlLWV4dGVuc2lvblwiKSxcbiAgICAgICAgbm9kZV9wYXRoID0gcmVxdWlyZShcInBhdGhcIiksXG4gICAgICAgIGZzID0gcmVxdWlyZShcImZzXCIpLFxuICAgICAgICBmaWxlc2l6ZSA9IHJlcXVpcmUoXCJmaWxlc2l6ZVwiKTtcblxuZXhwb3J0IGNsYXNzIEZpbGUge1xuXG4gICAgcHJvdGVjdGVkIF9wYXRoOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9kaXJuYW1lOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9iYXNlbmFtZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfY29udGVudFR5cGU6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2V4dGVuc2lvbjogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfc2l6ZUJ5dGVzOiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIGU6IEVudmlyb25tZW50O1xuXG4gICAgLyoqXG4gICAgICogRmlsZSBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSBlXG4gICAgICogQHBhcmFtIHBhdGhcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihlOiBFbnZpcm9ubWVudCwgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZSA9IGU7XG4gICAgICAgIHRoaXMuX3BhdGggPSBwYXRoO1xuXG4gICAgICAgIC8vIHZlcmlmeSBfcGF0aCBsZWFkcyB0byBhIHZhbGlkLCByZWFkYWJsZSBmaWxlLCBoYW5kbGUgZXJyb3IgaWYgbm90XG5cbiAgICAgICAgdGhpcy5nZXRTdGF0aXN0aWNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVmcmVzaCB0aGUgZmlsZSBzdGF0aXN0aWNzIGFmdGVyIGEgcmVuYW1lIG9yIG1vZGlmaWNhdGlvbi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0U3RhdGlzdGljcygpIHtcbiAgICAgICAgbGV0IGYgPSB0aGlzO1xuICAgICAgICBmLl9jb250ZW50VHlwZSA9IG1pbWUubG9va3VwKGYucGF0aCk7XG4gICAgICAgIGYuX2V4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb24oZi5wYXRoKTtcbiAgICAgICAgZi5fYmFzZW5hbWUgPSBub2RlX3BhdGguYmFzZW5hbWUoZi5wYXRoKTtcbiAgICAgICAgZi5fZGlybmFtZSA9IG5vZGVfcGF0aC5kaXJuYW1lKGYucGF0aCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmLl9zaXplQnl0ZXMgPSBmcy5zdGF0U3luYyhmLnBhdGgpLnNpemU7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZi5lLmxvZygyLCBgQ291bGRuJ3QgZGV0ZXJtaW5lIHNpemVCeXRlcyB3aXRoIHN0YXRTeW5jLiAke2Vycn1gLCBmKTtcbiAgICAgICAgICAgIGYuX3NpemVCeXRlcyA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIF9iYXNlbmFtZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VuYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBhIG5ldyBmaWxlIF9uYW1lLlxuICAgICAqIEBwYXJhbSBmaWxlbmFtZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgbmFtZShmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2Jhc2VuYW1lID0gZmlsZW5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBmaWxlIF9uYW1lIG9mIHRoZSBqb2Igd2l0aG91dCB0aGUgZmlsZSBleHRlbnNpb24uXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5hbWVQcm9wZXIoKSB7XG4gICAgICAgIHJldHVybiBub2RlX3BhdGguYmFzZW5hbWUodGhpcy5iYXNlbmFtZSwgbm9kZV9wYXRoLmV4dG5hbWUodGhpcy5iYXNlbmFtZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSBfbmFtZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlybmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpcm5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjb21wbGV0ZSBkaXJlY3RvcnkgX3BhdGguXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29tcGxldGUgZGlyZWN0b3J5IF9wYXRoLlxuICAgICAqIEBwYXJhbSBwYXRoXG4gICAgICovXG4gICAgcHVibGljIHNldCBwYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5nZXRTdGF0aXN0aWNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjb250ZW50LXR5cGUgb2YgdGhlIGZpbGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRlbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudFR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBmaWxlIGV4dGVuc2lvbi5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXh0ZW5zaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0ZW5zaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgX2Jhc2VuYW1lLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgcHVibGljIGdldCBiYXNlbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VuYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2l6ZUJ5dGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZUJ5dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGZpbGVzaXplKHRoaXMuc2l6ZUJ5dGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIHRoZSBsb2NhbCBqb2IgZmlsZSB0byB0aGUgY3VycmVudCBfbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVuYW1lTG9jYWwoKSB7XG4gICAgICAgIGxldCBmID0gdGhpcztcbiAgICAgICAgbGV0IG5ld19wYXRoID0gZi5kaXJuYW1lICsgbm9kZV9wYXRoLnNlcCArIGYubmFtZTtcbiAgICAgICAgZnMucmVuYW1lU3luYyhmLnBhdGgsIG5ld19wYXRoKTtcbiAgICAgICAgZi5wYXRoID0gbmV3X3BhdGg7XG4gICAgICAgIGYuZ2V0U3RhdGlzdGljcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgdGhlIGxvY2FsIGZpbGUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUxvY2FsKCkge1xuICAgICAgICBsZXQgZiA9IHRoaXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy51bmxpbmtTeW5jKGYucGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZi5lLmxvZygzLCBgRmlsZSBcIiR7Zi5wYXRofVwiIGNvdWxkIG5vdCBiZSBkZWxldGVkLiAke2V9YCwgZik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbn0iXX0=