| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | const pth = require("path");module.exports = function (/*String*/ path, /*Utils object*/ { fs }) {    var _path = path || "",        _obj = newAttr(),        _stat = null;    function newAttr() {        return {            directory: false,            readonly: false,            hidden: false,            executable: false,            mtime: 0,            atime: 0        };    }    if (_path && fs.existsSync(_path)) {        _stat = fs.statSync(_path);        _obj.directory = _stat.isDirectory();        _obj.mtime = _stat.mtime;        _obj.atime = _stat.atime;        _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner        _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right        _obj.hidden = pth.basename(_path)[0] === ".";    } else {        console.warn("Invalid path: " + _path);    }    return {        get directory() {            return _obj.directory;        },        get readOnly() {            return _obj.readonly;        },        get hidden() {            return _obj.hidden;        },        get mtime() {            return _obj.mtime;        },        get atime() {            return _obj.atime;        },        get executable() {            return _obj.executable;        },        decodeAttributes: function () {},        encodeAttributes: function () {},        toJSON: function () {            return {                path: _path,                isDirectory: _obj.directory,                isReadOnly: _obj.readonly,                isHidden: _obj.hidden,                isExecutable: _obj.executable,                mTime: _obj.mtime,                aTime: _obj.atime            };        },        toString: function () {            return JSON.stringify(this.toJSON(), null, "\t");        }    };};
 |