UNPKG

browserfs

Version:

A filesystem in your browser!

70 lines 11 kB
"use strict"; var node_fs_stats_1 = require('../core/node_fs_stats'); var Inode = (function () { function Inode(id, size, mode, atime, mtime, ctime) { this.id = id; this.size = size; this.mode = mode; this.atime = atime; this.mtime = mtime; this.ctime = ctime; } Inode.prototype.toStats = function () { return new node_fs_stats_1["default"]((this.mode & 0xF000) === node_fs_stats_1.FileType.DIRECTORY ? node_fs_stats_1.FileType.DIRECTORY : node_fs_stats_1.FileType.FILE, this.size, this.mode, new Date(this.atime), new Date(this.mtime), new Date(this.ctime)); }; Inode.prototype.getSize = function () { return 30 + this.id.length; }; Inode.prototype.toBuffer = function (buff) { if (buff === void 0) { buff = new Buffer(this.getSize()); } buff.writeUInt32LE(this.size, 0); buff.writeUInt16LE(this.mode, 4); buff.writeDoubleLE(this.atime, 6); buff.writeDoubleLE(this.mtime, 14); buff.writeDoubleLE(this.ctime, 22); buff.write(this.id, 30, this.id.length, 'ascii'); return buff; }; Inode.prototype.update = function (stats) { var hasChanged = false; if (this.size !== stats.size) { this.size = stats.size; hasChanged = true; } if (this.mode !== stats.mode) { this.mode = stats.mode; hasChanged = true; } var atimeMs = stats.atime.getTime(); if (this.atime !== atimeMs) { this.atime = atimeMs; hasChanged = true; } var mtimeMs = stats.mtime.getTime(); if (this.mtime !== mtimeMs) { this.mtime = mtimeMs; hasChanged = true; } var ctimeMs = stats.ctime.getTime(); if (this.ctime !== ctimeMs) { this.ctime = ctimeMs; hasChanged = true; } return hasChanged; }; Inode.fromBuffer = function (buffer) { if (buffer === undefined) { throw new Error("NO"); } return new Inode(buffer.toString('ascii', 30), buffer.readUInt32LE(0), buffer.readUInt16LE(4), buffer.readDoubleLE(6), buffer.readDoubleLE(14), buffer.readDoubleLE(22)); }; Inode.prototype.isFile = function () { return (this.mode & 0xF000) === node_fs_stats_1.FileType.FILE; }; Inode.prototype.isDirectory = function () { return (this.mode & 0xF000) === node_fs_stats_1.FileType.DIRECTORY; }; return Inode; }()); module.exports = Inode; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2VuZXJpYy9pbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsOEJBQXlDLHVCQUF1QixDQUFDLENBQUE7QUFLakU7SUFDRSxlQUFtQixFQUFVLEVBQ3BCLElBQVksRUFDWixJQUFZLEVBQ1osS0FBYSxFQUNiLEtBQWEsRUFDYixLQUFhO1FBTEgsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsVUFBSyxHQUFMLEtBQUssQ0FBUTtJQUFJLENBQUM7SUFLcEIsdUJBQU8sR0FBZDtRQUNFLE1BQU0sQ0FBQyxJQUFJLDBCQUFLLENBQ2QsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLHdCQUFRLENBQUMsU0FBUyxHQUFHLHdCQUFRLENBQUMsU0FBUyxHQUFHLHdCQUFRLENBQUMsSUFBSSxFQUNoRixJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBS00sdUJBQU8sR0FBZDtRQUVFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQztJQUtNLHdCQUFRLEdBQWYsVUFBZ0IsSUFBNkM7UUFBN0Msb0JBQTZDLEdBQTdDLFdBQXVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FB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QUFiO1FBQ0UsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyx3QkFBUSxDQUFDLElBQUksQ0FBQztJQUNoRCxDQUFDO0lBS00sMkJBQVcsR0FBbEI7UUFDRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLHdCQUFRLENBQUMsU0FBUyxDQUFDO0lBQ3JELENBQUM7SUFDSCxZQUFDO0FBQUQsQ0FBQyxBQWpIRCxJQWlIQztBQUVELGlCQUFTLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVmYXVsdCBhcyBTdGF0cywgRmlsZVR5cGV9IGZyb20gJy4uL2NvcmUvbm9kZV9mc19zdGF0cyc7XG5cbi8qKlxuICogR2VuZXJpYyBpbm9kZSBkZWZpbml0aW9uIHRoYXQgY2FuIGVhc2lseSBiZSBzZXJpYWxpemVkLlxuICovXG5jbGFzcyBJbm9kZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpZDogc3RyaW5nLFxuICAgIHB1YmxpYyBzaXplOiBudW1iZXIsXG4gICAgcHVibGljIG1vZGU6IG51bWJlcixcbiAgICBwdWJsaWMgYXRpbWU6IG51bWJlcixcbiAgICBwdWJsaWMgbXRpbWU6IG51bWJlcixcbiAgICBwdWJsaWMgY3RpbWU6IG51bWJlcikgeyB9XG5cbiAgLyoqXG4gICAqIEhhbmR5IGZ1bmN0aW9uIHRoYXQgY29udmVydHMgdGhlIElub2RlIHRvIGEgTm9kZSBTdGF0cyBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgdG9TdGF0cygpOiBTdGF0cyB7XG4gICAgcmV0dXJuIG5ldyBTdGF0cyhcbiAgICAgICh0aGlzLm1vZGUgJiAweEYwMDApID09PSBGaWxlVHlwZS5ESVJFQ1RPUlkgPyBGaWxlVHlwZS5ESVJFQ1RPUlkgOiBGaWxlVHlwZS5GSUxFLFxuICAgICAgdGhpcy5zaXplLCB0aGlzLm1vZGUsIG5ldyBEYXRlKHRoaXMuYXRpbWUpLCBuZXcgRGF0ZSh0aGlzLm10aW1lKSwgbmV3IERhdGUodGhpcy5jdGltZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2l6ZSBvZiB0aGlzIElub2RlLCBpbiBieXRlcy5cbiAgICovXG4gIHB1YmxpYyBnZXRTaXplKCk6IG51bWJlciB7XG4gICAgLy8gQVNTVU1QVElPTjogSUQgaXMgQVNDSUkgKDEgYnl0ZSBwZXIgY2hhcikuXG4gICAgcmV0dXJuIDMwICsgdGhpcy5pZC5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBpbm9kZSBpbnRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLlxuICAgKi9cbiAgcHVibGljIHRvQnVmZmVyKGJ1ZmY6IE5vZGVCdWZmZXIgPSBuZXcgQnVmZmVyKHRoaXMuZ2V0U2l6ZSgpKSk6IE5vZGVCdWZmZXIge1xuICAgIGJ1ZmYud3JpdGVVSW50MzJMRSh0aGlzLnNpemUsIDApO1xuICAgIGJ1ZmYud3JpdGVVSW50MTZMRSh0aGlzLm1vZGUsIDQpO1xuICAgIGJ1ZmYud3JpdGVEb3VibGVMRSh0aGlzLmF0aW1lLCA2KTtcbiAgICBidWZmLndyaXRlRG91YmxlTEUodGhpcy5tdGltZSwgMTQpO1xuICAgIGJ1ZmYud3JpdGVEb3VibGVMRSh0aGlzLmN0aW1lLCAyMik7XG4gICAgYnVmZi53cml0ZSh0aGlzLmlkLCAzMCwgdGhpcy5pZC5sZW5ndGgsICdhc2NpaScpO1xuICAgIHJldHVybiBidWZmO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIElub2RlIHVzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIHN0YXRzIG9iamVjdC4gVXNlZCBieSBmaWxlXG4gICAqIHN5c3RlbXMgYXQgc3luYyB0aW1lLCBlLmcuOlxuICAgKiAtIFByb2dyYW0gb3BlbnMgZmlsZSBhbmQgZ2V0cyBhIEZpbGUgb2JqZWN0LlxuICAgKiAtIFByb2dyYW0gbXV0YXRlcyBmaWxlLiBGaWxlIG9iamVjdCBpcyByZXNwb25zaWJsZSBmb3IgbWFpbnRhaW5pbmdcbiAgICogICBtZXRhZGF0YSBjaGFuZ2VzIGxvY2FsbHkgLS0gdHlwaWNhbGx5IGluIGEgU3RhdHMgb2JqZWN0LlxuICAgKiAtIFByb2dyYW0gY2xvc2VzIGZpbGUuIEZpbGUgb2JqZWN0J3MgbWV0YWRhdGEgY2hhbmdlcyBhcmUgc3luY2VkIHdpdGggdGhlXG4gICAqICAgZmlsZSBzeXN0ZW0uXG4gICAqIEByZXR1cm4gVHJ1ZSBpZiBhbnkgY2hhbmdlcyBoYXZlIG9jY3VycmVkLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZShzdGF0czogU3RhdHMpOiBib29sZWFuIHtcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNpemUgIT09IHN0YXRzLnNpemUpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IHN0YXRzLnNpemU7XG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb2RlICE9PSBzdGF0cy5tb2RlKSB7XG4gICAgICB0aGlzLm1vZGUgPSBzdGF0cy5tb2RlO1xuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGF0aW1lTXMgPSBzdGF0cy5hdGltZS5nZXRUaW1lKCk7XG4gICAgaWYgKHRoaXMuYXRpbWUgIT09IGF0aW1lTXMpIHtcbiAgICAgIHRoaXMuYXRpbWUgPSBhdGltZU1zO1xuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG10aW1lTXMgPSBzdGF0cy5tdGltZS5nZXRUaW1lKCk7XG4gICAgaWYgKHRoaXMubXRpbWUgIT09IG10aW1lTXMpIHtcbiAgICAgIHRoaXMubXRpbWUgPSBtdGltZU1zO1xuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGN0aW1lTXMgPSBzdGF0cy5jdGltZS5nZXRUaW1lKCk7XG4gICAgaWYgKHRoaXMuY3RpbWUgIT09IGN0aW1lTXMpIHtcbiAgICAgIHRoaXMuY3RpbWUgPSBjdGltZU1zO1xuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGJ1ZmZlciBpbnRvIGFuIElub2RlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQnVmZmVyKGJ1ZmZlcjogTm9kZUJ1ZmZlcik6IElub2RlIHtcbiAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5PXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IElub2RlKGJ1ZmZlci50b1N0cmluZygnYXNjaWknLCAzMCksXG4gICAgICBidWZmZXIucmVhZFVJbnQzMkxFKDApLFxuICAgICAgYnVmZmVyLnJlYWRVSW50MTZMRSg0KSxcbiAgICAgIGJ1ZmZlci5yZWFkRG91YmxlTEUoNiksXG4gICAgICBidWZmZXIucmVhZERvdWJsZUxFKDE0KSxcbiAgICAgIGJ1ZmZlci5yZWFkRG91YmxlTEUoMjIpXG4gICAgKTtcbiAgfVxuXG4gIC8vIFhYWDogQ29waWVkIGZyb20gU3RhdHMuIFNob3VsZCByZWNvbmNpbGUgdGhlc2UgdHdvIGludG8gc29tZXRoaW5nIG1vcmVcbiAgLy8gICAgICBjb21wYWN0LlxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIFtCb29sZWFuXSBUcnVlIGlmIHRoaXMgaXRlbSBpcyBhIGZpbGUuXG4gICAqL1xuICBwdWJsaWMgaXNGaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5tb2RlICYgMHhGMDAwKSA9PT0gRmlsZVR5cGUuRklMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIFtCb29sZWFuXSBUcnVlIGlmIHRoaXMgaXRlbSBpcyBhIGRpcmVjdG9yeS5cbiAgICovXG4gIHB1YmxpYyBpc0RpcmVjdG9yeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMubW9kZSAmIDB4RjAwMCkgPT09IEZpbGVUeXBlLkRJUkVDVE9SWTtcbiAgfVxufVxuXG5leHBvcnQgPSBJbm9kZTtcbiJdfQ==