167 lines
7.0 KiB
JavaScript
167 lines
7.0 KiB
JavaScript
"use strict";
|
|
var __extends = (this && this.__extends) || (function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf ||
|
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
return extendStatics(d, b);
|
|
};
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
})();
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var PhysicalGFSManager_1 = require("../../../manager/v1/PhysicalGFSManager");
|
|
var PhysicalResource_1 = require("./PhysicalResource");
|
|
var PhysicalFolder_1 = require("./PhysicalFolder");
|
|
var PhysicalFile_1 = require("./PhysicalFile");
|
|
var Workflow_1 = require("../../../helper/Workflow");
|
|
var Errors_1 = require("../../../Errors");
|
|
var path = require("path");
|
|
var fs = require("fs");
|
|
var PhysicalGateway = /** @class */ (function (_super) {
|
|
__extends(PhysicalGateway, _super);
|
|
function PhysicalGateway(rootPath, customName, parent, fsManager) {
|
|
var _this = _super.call(this, rootPath, parent, fsManager ? fsManager : new PhysicalGFSManager_1.PhysicalGFSManager()) || this;
|
|
_this.customName = customName;
|
|
_this.cache = {
|
|
'/': _this
|
|
};
|
|
return _this;
|
|
}
|
|
PhysicalGateway.prototype.webName = function (callback) {
|
|
if (this.customName)
|
|
callback(null, this.customName);
|
|
else
|
|
_super.prototype.webName.call(this, callback);
|
|
};
|
|
PhysicalGateway.prototype.listChildren = function (parent, rpath, callback) {
|
|
var _this = this;
|
|
if (rpath.lastIndexOf('/') !== rpath.length - 1)
|
|
rpath += '/';
|
|
fs.readdir(parent.realPath, function (e, list) {
|
|
if (e) {
|
|
callback(e);
|
|
return;
|
|
}
|
|
new Workflow_1.Workflow()
|
|
.each(list, function (file, cb) {
|
|
var resourcePath = rpath + file;
|
|
var resource = _this.cache[resourcePath];
|
|
var realPath = path.join(parent.realPath, file);
|
|
if (resource) {
|
|
cb(null, resource);
|
|
return;
|
|
}
|
|
fs.stat(realPath, function (e, stat) {
|
|
if (e) {
|
|
cb(e);
|
|
return;
|
|
}
|
|
if (stat.isFile())
|
|
resource = new PhysicalFile_1.PhysicalFile(realPath, parent, _this.fsManager);
|
|
else
|
|
resource = new PhysicalFolder_1.PhysicalFolder(realPath, parent, _this.fsManager);
|
|
resource.deleteOnMoved = true;
|
|
_this.cache[resourcePath] = resource;
|
|
cb(null, resource);
|
|
});
|
|
})
|
|
.error(callback)
|
|
.done(function (resources) { return callback(null, resources); });
|
|
});
|
|
};
|
|
PhysicalGateway.prototype.find = function (path, callback, forceRefresh) {
|
|
var _this = this;
|
|
if (forceRefresh === void 0) { forceRefresh = false; }
|
|
var resource = this.cache[path.toString()];
|
|
if (forceRefresh || !resource) {
|
|
var parentPath_1 = path.getParent();
|
|
this.find(parentPath_1, function (e, parent) {
|
|
if (e) {
|
|
callback(e);
|
|
return;
|
|
}
|
|
parent.getChildren(function (e, actualChildren) {
|
|
if (e) {
|
|
callback(e);
|
|
return;
|
|
}
|
|
_this.listChildren(parent, parentPath_1.toString(), function (e, children) {
|
|
if (e) {
|
|
callback(e);
|
|
return;
|
|
}
|
|
actualChildren
|
|
.filter(function (c) { return c.constructor !== PhysicalResource_1.PhysicalResource && c.constructor !== PhysicalFile_1.PhysicalFile && c.constructor !== PhysicalFolder_1.PhysicalFolder; })
|
|
.forEach(function (c) { return children.push(c); });
|
|
parent.children.children = children;
|
|
new Workflow_1.Workflow()
|
|
.each(children, function (child, cb) {
|
|
child.webName(function (e, name) {
|
|
cb(e, !e && name === path.fileName() ? child : null);
|
|
});
|
|
})
|
|
.error(callback)
|
|
.done(function (matchingChildren) {
|
|
for (var _i = 0, matchingChildren_1 = matchingChildren; _i < matchingChildren_1.length; _i++) {
|
|
var child = matchingChildren_1[_i];
|
|
if (child) {
|
|
callback(null, child);
|
|
return;
|
|
}
|
|
}
|
|
callback(Errors_1.Errors.ResourceNotFound);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
else
|
|
callback(null, resource);
|
|
};
|
|
PhysicalGateway.prototype.gateway = function (arg, path, callback) {
|
|
var _this = this;
|
|
var updateChildren = function (r, cb) {
|
|
_this.listChildren(r, path.toString(), function (e, children) {
|
|
if (!e) {
|
|
r.children.children
|
|
.filter(function (c) { return c.constructor !== PhysicalResource_1.PhysicalResource && c.constructor !== PhysicalFile_1.PhysicalFile && c.constructor !== PhysicalFolder_1.PhysicalFolder; })
|
|
.forEach(function (c) { return children.push(c); });
|
|
r.children.children = children;
|
|
}
|
|
cb(e);
|
|
});
|
|
};
|
|
if (path.isRoot()) {
|
|
updateChildren(this, function (e) {
|
|
callback(e, _this);
|
|
});
|
|
return;
|
|
}
|
|
this.find(path, function (e, r) {
|
|
if (e) {
|
|
callback(e);
|
|
return;
|
|
}
|
|
r.type(function (e, type) {
|
|
if (e) {
|
|
callback(e);
|
|
return;
|
|
}
|
|
if (type.isFile) {
|
|
callback(e, r);
|
|
return;
|
|
}
|
|
updateChildren(r, function (e) {
|
|
callback(e, r);
|
|
});
|
|
});
|
|
});
|
|
};
|
|
return PhysicalGateway;
|
|
}(PhysicalFolder_1.PhysicalFolder));
|
|
exports.PhysicalGateway = PhysicalGateway;
|