2025-10-01 19:55:38 +02:00

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;