@mvx/mvc
Version:
@mvx/mvc is mvc framework on server, base on koa, @tsdi frameworks
1,687 lines (1,485 loc) • 109 kB
JavaScript
'use strict';
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var tslib = _interopDefault(require('tslib'));
var ioc = _interopDefault(require('@tsdi/ioc'));
var boot = _interopDefault(require('@tsdi/boot'));
var stream = _interopDefault(require('stream'));
var fs = _interopDefault(require('fs'));
var path = _interopDefault(require('path'));
var aop = _interopDefault(require('@tsdi/aop'));
var koaJson = _interopDefault(require('koa-json'));
var platformServer = _interopDefault(require('@tsdi/platform-server'));
var koaBodyparser = _interopDefault(require('koa-bodyparser'));
var koaLogger = _interopDefault(require('koa-logger'));
var koaStatic = _interopDefault(require('koa-static'));
var koaViews = _interopDefault(require('koa-views'));
var koaHelmet = _interopDefault(require('koa-helmet'));
var koaCompose = _interopDefault(require('koa-compose'));
var https = _interopDefault(require('https'));
var koa = _interopDefault(require('koa'));
var core = _interopDefault(require('@tsdi/core'));
var logs = _interopDefault(require('@tsdi/logs'));
var platformServerBoot = _interopDefault(require('@tsdi/platform-server-boot'));
var platformServerLogs = _interopDefault(require('@tsdi/platform-server-logs'));
var http = _interopDefault(require('http'));
var koaMount = _interopDefault(require('koa-mount'));
function unwrapExports (x) {
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
var IContext = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.ContextToken = void 0;
/**
* mvc service middleware context.
*/
exports.ContextToken = ioc.tokenId('MVC_SERVICE_CONTEXT');
});
unwrapExports(IContext);
var IContext_1 = IContext.ContextToken;
var IConfiguration = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfigurationToken = void 0;
/**
* configuration token.
*/
exports.ConfigurationToken = new ioc.InjectToken('MVX_Configuration');
});
unwrapExports(IConfiguration);
var IConfiguration_1 = IConfiguration.ConfigurationToken;
var exps = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.routeSart = void 0;
exports.routeSart = /^\//;
});
unwrapExports(exps);
var exps_1 = exps.routeSart;
var RequestMethod_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseRequestMethod = exports.methodToString = exports.RequestMethod = void 0;
/**
* request method.
*/
var RequestMethod;
(function (RequestMethod) {
/**
* Get method.
*/
RequestMethod[RequestMethod["Get"] = 1] = "Get";
/**
* Post method.
*/
RequestMethod[RequestMethod["Post"] = 2] = "Post";
/**
* Put method.
*/
RequestMethod[RequestMethod["Put"] = 3] = "Put";
/**
* Delete method.
*/
RequestMethod[RequestMethod["Delete"] = 4] = "Delete";
/**
* Options method.
*/
RequestMethod[RequestMethod["Options"] = 5] = "Options";
/**
* Head method.
*/
RequestMethod[RequestMethod["Head"] = 6] = "Head";
/**
* Patch method.
*/
RequestMethod[RequestMethod["Patch"] = 7] = "Patch";
})(RequestMethod = exports.RequestMethod || (exports.RequestMethod = {}));
/**
* convert method to string.
*
* @export
* @param {RequestMethod} [method]
* @returns {string}
*/
function methodToString(method) {
if (ioc.isString(method)) {
return method.toUpperCase();
}
switch (method) {
case RequestMethod.Get:
return 'GET';
case RequestMethod.Post:
return 'POST';
case RequestMethod.Put:
return 'PUT';
case RequestMethod.Delete:
return 'DELETE';
case RequestMethod.Options:
return 'OPTIONS';
case RequestMethod.Head:
return 'HEAD';
case RequestMethod.Patch:
return 'PATCH';
default:
return '';
}
}
exports.methodToString = methodToString;
/**
* parse string to RequestMethod
*
* @export
* @param {string} [method]
* @returns {RequestMethod}
*/
function parseRequestMethod(method) {
method = (method || '').toUpperCase();
switch (method) {
case 'GET':
return RequestMethod.Get;
case 'POST':
return RequestMethod.Post;
case 'PUT':
return RequestMethod.Put;
case 'DELETE':
return RequestMethod.Delete;
case 'OPTIONS':
return RequestMethod.Options;
case 'HEAD':
return RequestMethod.Head;
case 'PATCH':
return RequestMethod.Patch;
default:
return null;
}
}
exports.parseRequestMethod = parseRequestMethod;
});
unwrapExports(RequestMethod_1);
var RequestMethod_2 = RequestMethod_1.parseRequestMethod;
var RequestMethod_3 = RequestMethod_1.methodToString;
var RequestMethod_4 = RequestMethod_1.RequestMethod;
var decorators = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.Put = exports.Post = exports.Patch = exports.Delete = exports.Get = exports.Options = exports.Head = exports.Route = exports.createRouteDecorator = exports.Middleware = exports.Cors = exports.createCorsDecorator = exports.Controller = exports.Authorization = exports.MvcModule = void 0;
/**
* MvcModule Decorator, definde class as mvc module.
*
* @MvcModule
*/
exports.MvcModule = boot.createDIModuleDecorator('MvcModule', null, function (metadata) {
// static main.
if (ioc.isClass(metadata.type) && ioc.isFunction(metadata.type['main'])) {
setTimeout(function () {
metadata.type['main'](metadata);
}, 100);
}
return metadata;
});
/**
* Authorization decorator, define class or method need auth check.
*
* @Authorization
*/
exports.Authorization = ioc.createClassMethodDecorator('Authorization', [
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isArray(arg)) {
ctx.metadata.middlewares = arg;
ctx.next(next);
}
else {
ctx.metadata.role = arg;
ctx.next(next);
}
},
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isString(arg)) {
ctx.metadata.role = arg;
}
}
]);
/**
* Controller decorator, define the class as mvc controller.
* @Controller
*/
exports.Controller = ioc.createClassDecorator('Controller', [
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isString(arg)) {
ctx.metadata.routePrefix = arg;
ctx.next(next);
}
},
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isArray(arg)) {
ctx.metadata.middlewares = arg;
ctx.next(next);
}
else {
ctx.next(next, false);
}
}
], function (meta) {
if (!exps.routeSart.test(meta.routePrefix)) {
meta.routePrefix = '/' + meta.routePrefix;
}
}, true);
/**
* Cors Decorator, define controller class or controller method support cors.
* @Cors
* @param name
* @param actions
* @param metadataExtends
*/
function createCorsDecorator(name, actions, metadataExtends) {
return ioc.createClassMethodDecorator(name, tslib.__spreadArrays((actions || []), [
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isString(arg)) {
ctx.metadata.allowMethods = arg;
ctx.next(next);
}
else if (ioc.isArray(arg)) {
var allowMethods = arg;
ctx.metadata.allowMethods = allowMethods.filter(function (m) { return !ioc.isUndefined(m) && m !== null; });
ctx.next(next);
}
},
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isNumber(arg)) {
ctx.metadata.maxAge = arg;
ctx.next(next);
}
},
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isArray(arg)) {
var allowHeaders = arg;
ctx.metadata.allowHeaders = allowHeaders.filter(function (h) { return !!h; });
ctx.next(next);
}
}
]), metadataExtends);
}
exports.createCorsDecorator = createCorsDecorator;
/**
* Cors Decorator, define controller class or controller method support cors.
* @Cors
*/
exports.Cors = createCorsDecorator('Cors');
/**
* Middleware Decorator, definde class as mvc middleware.
*
* @Middleware
*/
exports.Middleware = ioc.createClassDecorator('Middleware', null, function (metadata) {
metadata.singleton = true;
if (metadata.name) {
metadata.provide = metadata.name;
}
if (!metadata.scope) {
metadata.scope = 'global';
}
});
/**
* create route decorator.
*
* @export
* @template T
* @param {RequestMethod} [method]
* @param { MetadataExtends<T>} [metaExtends]
*/
function createRouteDecorator(method, actions, metaExtends) {
return ioc.createMethodDecorator('Route', tslib.__spreadArrays((actions || []), [
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isString(arg)) {
ctx.metadata.route = arg;
ctx.next(next);
}
},
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isArray(arg)) {
ctx.metadata.middlewares = arg;
ctx.next(next);
}
else if (ioc.isString(arg)) {
ctx.metadata.contentType = arg;
ctx.next(next);
}
else if (ioc.isNumber(arg)) {
ctx.metadata.method = arg;
}
},
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isNumber(arg)) {
ctx.metadata.method = arg;
}
else {
ctx.metadata.contentType = arg;
ctx.next(next);
}
},
function (ctx, next) {
var arg = ctx.currArg;
if (ioc.isNumber(arg)) {
ctx.metadata.method = arg;
}
}
]), function (metadata) {
if (metaExtends) {
metaExtends(metadata);
}
if (!exps.routeSart.test(metadata.route)) {
metadata.route = '/' + metadata.route;
}
if (method) {
metadata.method = method;
}
else if (!metadata.method) {
metadata.method = RequestMethod_1.RequestMethod.Get;
}
return metadata;
});
}
exports.createRouteDecorator = createRouteDecorator;
/**
* route decorator. define the controller method as an route.
*
* @Route
*/
exports.Route = createRouteDecorator();
/**
* Head decorator. define the route method as head.
*
* @Head
*/
exports.Head = createRouteDecorator(RequestMethod_1.RequestMethod.Head);
/**
* Options decorator. define the route method as an options.
*
* @Options
*/
exports.Options = createRouteDecorator(RequestMethod_1.RequestMethod.Options);
/**
* Get decorator. define the route method as get.
*
* @Get
*/
exports.Get = createRouteDecorator(RequestMethod_1.RequestMethod.Get);
/**
* Delete decorator. define the route method as delete.
*
* @Delete
*/
exports.Delete = createRouteDecorator(RequestMethod_1.RequestMethod.Delete);
/**
* Patch decorator. define the route method as patch.
*
* @Patch
*/
exports.Patch = createRouteDecorator(RequestMethod_1.RequestMethod.Patch);
/**
* Post decorator. define the route method as post.
*
* @Post
*/
exports.Post = createRouteDecorator(RequestMethod_1.RequestMethod.Post);
/**
* Put decorator. define the route method as put.
*
* @Put
*/
exports.Put = createRouteDecorator(RequestMethod_1.RequestMethod.Put);
});
unwrapExports(decorators);
var decorators_1 = decorators.Put;
var decorators_2 = decorators.Post;
var decorators_3 = decorators.Patch;
var decorators_4 = decorators.Delete;
var decorators_5 = decorators.Get;
var decorators_6 = decorators.Options;
var decorators_7 = decorators.Head;
var decorators_8 = decorators.Route;
var decorators_9 = decorators.createRouteDecorator;
var decorators_10 = decorators.Middleware;
var decorators_11 = decorators.Cors;
var decorators_12 = decorators.createCorsDecorator;
var decorators_13 = decorators.Controller;
var decorators_14 = decorators.Authorization;
var decorators_15 = decorators.MvcModule;
var HttpError_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpError = void 0;
/**
* http error
*
* @export
* @class HttpError
* @extends {Error}
*/
var HttpError = /** @class */ (function (_super) {
tslib.__extends(HttpError, _super);
function HttpError(status, message) {
var _this = _super.call(this) || this;
_this.status = status;
_this.message = ioc.isArray(message) ? message.join('\n') : message;
Error.captureStackTrace(_this);
return _this;
}
HttpError.prototype.toString = function () {
return "Http Error: " + this.status + ", " + this.message;
};
HttpError.ρAnn = function () {
return { "name": "HttpError" };
};
return HttpError;
}(Error));
exports.HttpError = HttpError;
});
unwrapExports(HttpError_1);
var HttpError_2 = HttpError_1.HttpError;
var BadRequestError_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.BadRequestError = void 0;
/**
* bad request error.
*
* @export
* @class BadRequestError
* @extends {HttpError}
*/
var BadRequestError = /** @class */ (function (_super) {
tslib.__extends(BadRequestError, _super);
function BadRequestError(message) {
if (message === void 0) { message = 'Bad Request'; }
return _super.call(this, 400, message) || this;
}
BadRequestError.ρAnn = function () {
return { "name": "BadRequestError" };
};
return BadRequestError;
}(HttpError_1.HttpError));
exports.BadRequestError = BadRequestError;
});
unwrapExports(BadRequestError_1);
var BadRequestError_2 = BadRequestError_1.BadRequestError;
var ForbiddenError_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.ForbiddenError = void 0;
/**
* forbidden error.
*
* @export
* @class ForbiddenError
* @extends {HttpError}
*/
var ForbiddenError = /** @class */ (function (_super) {
tslib.__extends(ForbiddenError, _super);
function ForbiddenError(message) {
if (message === void 0) { message = 'Request Forbidden'; }
return _super.call(this, 403, message) || this;
}
ForbiddenError.ρAnn = function () {
return { "name": "ForbiddenError" };
};
return ForbiddenError;
}(HttpError_1.HttpError));
exports.ForbiddenError = ForbiddenError;
});
unwrapExports(ForbiddenError_1);
var ForbiddenError_2 = ForbiddenError_1.ForbiddenError;
var InternalServerError_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.InternalServerError = void 0;
/**
* internal server error.
*
* @export
* @class InternalServerError
* @extends {HttpError}
*/
var InternalServerError = /** @class */ (function (_super) {
tslib.__extends(InternalServerError, _super);
function InternalServerError(message) {
if (message === void 0) { message = 'Internal Server Error'; }
return _super.call(this, 500, message) || this;
}
InternalServerError.ρAnn = function () {
return { "name": "InternalServerError" };
};
return InternalServerError;
}(HttpError_1.HttpError));
exports.InternalServerError = InternalServerError;
});
unwrapExports(InternalServerError_1);
var InternalServerError_2 = InternalServerError_1.InternalServerError;
var MethodNotAllowedError_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.MethodNotAllowedError = void 0;
/**
* method not allowed error.
*
* @export
* @class MethodNotAllowedError
* @extends {HttpError}
*/
var MethodNotAllowedError = /** @class */ (function (_super) {
tslib.__extends(MethodNotAllowedError, _super);
function MethodNotAllowedError(message) {
if (message === void 0) { message = 'Method Not Allowed'; }
return _super.call(this, 405, message) || this;
}
MethodNotAllowedError.ρAnn = function () {
return { "name": "MethodNotAllowedError" };
};
return MethodNotAllowedError;
}(HttpError_1.HttpError));
exports.MethodNotAllowedError = MethodNotAllowedError;
});
unwrapExports(MethodNotAllowedError_1);
var MethodNotAllowedError_2 = MethodNotAllowedError_1.MethodNotAllowedError;
var NotAcceptableError_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.NotAcceptableError = void 0;
/**
* not acceptable error.
*
* @export
* @class NotAcceptableError
* @extends {HttpError}
*/
var NotAcceptableError = /** @class */ (function (_super) {
tslib.__extends(NotAcceptableError, _super);
function NotAcceptableError(message) {
if (message === void 0) { message = 'Not Acceptable'; }
return _super.call(this, 406, message) || this;
}
NotAcceptableError.ρAnn = function () {
return { "name": "NotAcceptableError" };
};
return NotAcceptableError;
}(HttpError_1.HttpError));
exports.NotAcceptableError = NotAcceptableError;
});
unwrapExports(NotAcceptableError_1);
var NotAcceptableError_2 = NotAcceptableError_1.NotAcceptableError;
var NotFoundError_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.NotFoundError = void 0;
/**
* not found error.
*
* @export
* @class NotFoundError
* @extends {HttpError}
*/
var NotFoundError = /** @class */ (function (_super) {
tslib.__extends(NotFoundError, _super);
function NotFoundError(message) {
if (message === void 0) { message = 'Not Found'; }
return _super.call(this, 404, message) || this;
}
NotFoundError.ρAnn = function () {
return { "name": "NotFoundError" };
};
return NotFoundError;
}(HttpError_1.HttpError));
exports.NotFoundError = NotFoundError;
});
unwrapExports(NotFoundError_1);
var NotFoundError_2 = NotFoundError_1.NotFoundError;
var UnauthorizedError_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.UnauthorizedError = void 0;
/**
* unauthorized error.
*
* @export
* @class UnauthorizedError
* @extends {HttpError}
*/
var UnauthorizedError = /** @class */ (function (_super) {
tslib.__extends(UnauthorizedError, _super);
function UnauthorizedError(message) {
if (message === void 0) { message = 'Unauthorized'; }
return _super.call(this, 401, message) || this;
}
UnauthorizedError.ρAnn = function () {
return { "name": "UnauthorizedError" };
};
return UnauthorizedError;
}(HttpError_1.HttpError));
exports.UnauthorizedError = UnauthorizedError;
});
unwrapExports(UnauthorizedError_1);
var UnauthorizedError_2 = UnauthorizedError_1.UnauthorizedError;
var errors = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
tslib.__exportStar(HttpError_1, exports);
tslib.__exportStar(BadRequestError_1, exports);
tslib.__exportStar(ForbiddenError_1, exports);
tslib.__exportStar(InternalServerError_1, exports);
tslib.__exportStar(MethodNotAllowedError_1, exports);
tslib.__exportStar(NotAcceptableError_1, exports);
tslib.__exportStar(NotFoundError_1, exports);
tslib.__exportStar(UnauthorizedError_1, exports);
});
unwrapExports(errors);
var metadata = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
});
unwrapExports(metadata);
var IMiddleware = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.MiddlewareTypes = exports.bindMiddlewareName = exports.isMiddlewareFunc = void 0;
/**
* middlware check.
*
* @export
* @template T
* @param {*} target
* @returns {target is MiddlewareFunc}
*/
function isMiddlewareFunc(target) {
return ioc.isFunction(target) && ioc.isString(target.middleName);
}
exports.isMiddlewareFunc = isMiddlewareFunc;
/**
* bind middleware name.
*
* @export
* @param {Function} middleware
* @param {string} name
* @returns {MiddlewareFunc}
*/
function bindMiddlewareName(middleware, name) {
var middle = middleware;
middle.middleName = name;
return middle;
}
exports.bindMiddlewareName = bindMiddlewareName;
/**
* default middleware types.
*
* @export
* @enum {number}
*/
var MiddlewareTypes;
(function (MiddlewareTypes) {
MiddlewareTypes["Helmet"] = "helmet";
MiddlewareTypes["BodyParser"] = "bodyParser";
MiddlewareTypes["Cors"] = "Cors";
MiddlewareTypes["Csrf"] = "Csrf";
MiddlewareTypes["Json"] = "json";
MiddlewareTypes["Logger"] = "logger";
MiddlewareTypes["Session"] = "session";
MiddlewareTypes["Content"] = "content";
MiddlewareTypes["View"] = "view";
MiddlewareTypes["Router"] = "router";
})(MiddlewareTypes = exports.MiddlewareTypes || (exports.MiddlewareTypes = {}));
});
unwrapExports(IMiddleware);
var IMiddleware_1 = IMiddleware.MiddlewareTypes;
var IMiddleware_2 = IMiddleware.bindMiddlewareName;
var IMiddleware_3 = IMiddleware.isMiddlewareFunc;
var MvcMiddleware_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.CompositeMiddleware = exports.MvcMiddleware = void 0;
/**
* middleware
*
* @export
* @abstract
* @class Middleware
* @extends {Handle<MvcContext>}
* @implements {IMiddleware}
*/
var MvcMiddleware = /** @class */ (function (_super) {
tslib.__extends(MvcMiddleware, _super);
function MvcMiddleware() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* get injector of current message queue.
*/
MvcMiddleware.prototype.getInjector = function () {
return this._injector();
};
MvcMiddleware.ρAnn = function () {
return { "name": "MvcMiddleware" };
};
tslib.__decorate([
ioc.Inject(ioc.InjectorProxyToken),
tslib.__metadata("design:type", Function)
], MvcMiddleware.prototype, "_injector", void 0);
return MvcMiddleware;
}(boot.Handle));
exports.MvcMiddleware = MvcMiddleware;
/**
* composite middleware.
*
* @export
* @class CompositeMiddleware
* @extends {Handles<IContext>}
*/
var CompositeMiddleware = /** @class */ (function (_super) {
tslib.__extends(CompositeMiddleware, _super);
function CompositeMiddleware() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* get injector of current message queue.
*/
CompositeMiddleware.prototype.getInjector = function () {
return this._injector();
};
CompositeMiddleware.prototype.find = function (filter) {
return this.handles.find(function (item) { return filter(item); });
};
/**
* use handle before
*
* @param {HandleType} handle
* @param {HandleType} [before]
* @returns {this}
* @memberof LifeScope
*/
CompositeMiddleware.prototype.useBefore = function (handle, before) {
if (ioc.isString(before)) {
var beforehdl = this.find(function (h) { return h.middleName === before; });
_super.prototype.useBefore.call(this, handle, beforehdl);
}
else {
_super.prototype.useBefore.call(this, handle, before);
}
return this;
};
/**
* use handle after.
*
* @param {HandleType} handle
* @param {HandleType} [after]
* @returns {this}
* @memberof LifeScope
*/
CompositeMiddleware.prototype.useAfter = function (handle, after) {
if (ioc.isString(after)) {
var afterhdl = this.find(function (h) { return h.middleName === after; });
_super.prototype.useAfter.call(this, handle, afterhdl);
}
else {
_super.prototype.useAfter.call(this, handle, after);
}
return this;
};
CompositeMiddleware.prototype.registerHandle = function (HandleType) {
if (ioc.isClass(HandleType)) {
this.getInjector().registerType(HandleType);
}
return this;
};
CompositeMiddleware.prototype.toHandle = function (handleType) {
var _a, _b, _c, _d;
if (handleType instanceof ioc.Action) {
return handleType.toAction();
}
else if (ioc.isClass(handleType)) {
var ist = (_a = this.getInjector().get(handleType)) !== null && _a !== void 0 ? _a : this.getInjector().getContainer().getTypeReflects().getInjector(handleType).getInstance(handleType);
return (_b = ist === null || ist === void 0 ? void 0 : ist.toAction) === null || _b === void 0 ? void 0 : _b.call(ist);
}
else if (ioc.isToken(handleType)) {
return (_d = (_c = this.getInjector().get(handleType)) === null || _c === void 0 ? void 0 : _c.toAction) === null || _d === void 0 ? void 0 : _d.call(_c);
}
else if (ioc.isFunction(handleType)) {
return handleType;
}
return null;
};
CompositeMiddleware.ρAnn = function () {
return { "name": "CompositeMiddleware", "params": { "find": ["filter"], "useBefore": ["handle", "before"], "useAfter": ["handle", "after"], "registerHandle": ["HandleType"], "toHandle": ["handleType"] } };
};
tslib.__decorate([
ioc.Inject(ioc.InjectorProxyToken),
tslib.__metadata("design:type", Function)
], CompositeMiddleware.prototype, "_injector", void 0);
CompositeMiddleware = tslib.__decorate([
ioc.Injectable()
], CompositeMiddleware);
return CompositeMiddleware;
}(boot.Handles));
exports.CompositeMiddleware = CompositeMiddleware;
});
unwrapExports(MvcMiddleware_1);
var MvcMiddleware_2 = MvcMiddleware_1.CompositeMiddleware;
var MvcMiddleware_3 = MvcMiddleware_1.MvcMiddleware;
var MvcMiddlewares_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.MvcMiddlewares = void 0;
/**
* mvc middlewares.
*
* @export
* @class MvcMiddlewares
* @extends {CompositeMiddleware}
*/
var MvcMiddlewares = /** @class */ (function (_super) {
tslib.__extends(MvcMiddlewares, _super);
function MvcMiddlewares() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* setup root in koa.
*
* @param {MvcContext} mvcContext
* @memberof MvcMiddlewares
*/
MvcMiddlewares.prototype.setup = function (mvcContext) {
var _this = this;
mvcContext.getKoa().use(function (ctx, next) { return tslib.__awaiter(_this, void 0, void 0, function () {
return tslib.__generator(this, function (_a) {
switch (_a.label) {
case 0:
ctx.mvcContext = mvcContext;
if (!ctx.getInjector) {
ctx.getInjector = function () { return mvcContext.injector; };
}
mvcContext.app = ctx.app;
return [4 /*yield*/, this.execute(ctx)];
case 1:
_a.sent();
return [4 /*yield*/, next()];
case 2: return [2 /*return*/, _a.sent()];
}
});
}); });
};
MvcMiddlewares.ρAnn = function () {
return { "name": "MvcMiddlewares", "params": { "setup": ["mvcContext"] } };
};
MvcMiddlewares.ρNPT = true;
MvcMiddlewares = tslib.__decorate([
ioc.Singleton()
], MvcMiddlewares);
return MvcMiddlewares;
}(MvcMiddleware_1.CompositeMiddleware));
exports.MvcMiddlewares = MvcMiddlewares;
});
unwrapExports(MvcMiddlewares_1);
var MvcMiddlewares_2 = MvcMiddlewares_1.MvcMiddlewares;
var MiddlewareRegister_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.MiddlewareRegister = void 0;
/**
* middleware register.
*
* @export
* @class MiddlewareRegister
*/
var MiddlewareRegister = /** @class */ (function () {
function MiddlewareRegister() {
this.map = new Map();
}
MiddlewareRegister.prototype.set = function (key, val) {
this.map.set(key, val);
};
/**
* setup middleware.
*
* @param {ICoreInjector} injector
* @memberof MiddlewareRegister
*/
MiddlewareRegister.prototype.setup = function (injector) {
this.map.forEach(function (meta, middle) {
var middlewares = injector.getInstance(MvcMiddlewares_1.MvcMiddlewares);
if (meta.regIn) {
var comp = meta.regIn;
if (!injector.has(comp)) {
injector.register(comp);
}
middlewares = injector.get(comp);
}
if (meta.before) {
middlewares.useBefore(middle, meta.before);
}
else if (meta.after) {
middlewares.useAfter(middle, meta.after);
}
else {
middlewares.use(middle);
}
});
};
MiddlewareRegister.ρAnn = function () {
return { "name": "MiddlewareRegister", "params": { "set": ["key", "val"], "setup": ["injector"] } };
};
MiddlewareRegister.ρNPT = true;
tslib.__decorate([
tslib.__param(0, ioc.Inject(ioc.INJECTOR)),
tslib.__metadata("design:type", Function),
tslib.__metadata("design:paramtypes", [Object]),
tslib.__metadata("design:returntype", void 0)
], MiddlewareRegister.prototype, "setup", null);
MiddlewareRegister = tslib.__decorate([
ioc.Singleton(),
tslib.__metadata("design:paramtypes", [])
], MiddlewareRegister);
return MiddlewareRegister;
}());
exports.MiddlewareRegister = MiddlewareRegister;
});
unwrapExports(MiddlewareRegister_1);
var MiddlewareRegister_2 = MiddlewareRegister_1.MiddlewareRegister;
var ResultValue_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.ResultValue = void 0;
/**
* controller method return result type.
*
* @export
* @abstract
* @class ResultValue
*/
var ResultValue = /** @class */ (function () {
function ResultValue(contentType) {
this.contentType = contentType;
}
ResultValue.ρAnn = function () {
return { "name": "ResultValue" };
};
return ResultValue;
}());
exports.ResultValue = ResultValue;
});
unwrapExports(ResultValue_1);
var ResultValue_2 = ResultValue_1.ResultValue;
var FileResult_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.FileResult = void 0;
/**
* controller method return result type of file.
*
* @export
* @class FileResult
*/
var FileResult = /** @class */ (function (_super) {
tslib.__extends(FileResult, _super);
function FileResult(file, options) {
var _this = _super.call(this, (options === null || options === void 0 ? void 0 : options.contentType) || 'application/octet-stream') || this;
_this.file = file;
_this.options = options;
return _this;
}
FileResult.prototype.sendValue = function (ctx) {
return tslib.__awaiter(this, void 0, void 0, function () {
var file, confige, filepath;
return tslib.__generator(this, function (_a) {
file = this.file;
ctx.type = this.contentType;
if (this.options && this.options.filename) {
ctx.attachment(this.options.filename, this.options.disposition);
}
confige = ctx.mvcContext.getConfiguration();
if (ioc.isString(file)) {
filepath = (path.isAbsolute(file) || !confige.baseURL) ? file : path.join(confige.baseURL, file);
if (fs.existsSync(filepath)) {
ctx.body = fs.createReadStream(filepath);
}
}
else if (file instanceof Buffer) {
ctx.body = file;
}
else if (file instanceof stream.Stream) {
ctx.body = file;
}
return [2 /*return*/];
});
});
};
FileResult.ρAnn = function () {
return { "name": "FileResult" };
};
return FileResult;
}(ResultValue_1.ResultValue));
exports.FileResult = FileResult;
});
unwrapExports(FileResult_1);
var FileResult_2 = FileResult_1.FileResult;
var JsonResult_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.JsonResult = void 0;
/**
* controller method return result type of json.
* context type 'application/json'
*
* @export
* @class JsonResult
*/
var JsonResult = /** @class */ (function (_super) {
tslib.__extends(JsonResult, _super);
function JsonResult(data) {
var _this = _super.call(this, 'application/json') || this;
_this.data = data;
return _this;
}
JsonResult.prototype.sendValue = function (ctx) {
return tslib.__awaiter(this, void 0, void 0, function () {
return tslib.__generator(this, function (_a) {
ctx.type = this.contentType;
ctx.body = this.data || {};
return [2 /*return*/];
});
});
};
JsonResult.ρAnn = function () {
return { "name": "JsonResult" };
};
return JsonResult;
}(ResultValue_1.ResultValue));
exports.JsonResult = JsonResult;
});
unwrapExports(JsonResult_1);
var JsonResult_2 = JsonResult_1.JsonResult;
var RedirectResult_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.RedirectResult = void 0;
/**
* redirect url
*
* @export
* @class RedirectResult
* @extends {ResultValue}
*/
var RedirectResult = /** @class */ (function (_super) {
tslib.__extends(RedirectResult, _super);
function RedirectResult(url, alt) {
var _this = _super.call(this, 'text/html') || this;
_this.url = url;
_this.alt = alt;
return _this;
}
RedirectResult.prototype.sendValue = function (ctx) {
return tslib.__awaiter(this, void 0, void 0, function () {
return tslib.__generator(this, function (_a) {
return [2 /*return*/, ctx.redirect(this.url, this.alt)];
});
});
};
RedirectResult.ρAnn = function () {
return { "name": "RedirectResult" };
};
return RedirectResult;
}(ResultValue_1.ResultValue));
exports.RedirectResult = RedirectResult;
});
unwrapExports(RedirectResult_1);
var RedirectResult_2 = RedirectResult_1.RedirectResult;
var ViewResult_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.ViewResult = void 0;
/**
* controller method return result type of view.
* context type 'text/html'
*
* @export
* @class ViewResult
*/
var ViewResult = /** @class */ (function (_super) {
tslib.__extends(ViewResult, _super);
function ViewResult(name, model) {
var _this = _super.call(this, 'text/html') || this;
_this.name = name;
_this.model = model;
return _this;
}
ViewResult.prototype.sendValue = function (ctx) {
return tslib.__awaiter(this, void 0, void 0, function () {
return tslib.__generator(this, function (_a) {
if (!ctx.render) {
return [2 /*return*/, Promise.reject('view engin middleware no configed!')];
}
else {
ctx.type = this.contentType;
return [2 /*return*/, ctx.render(this.name, this.model)];
}
});
});
};
ViewResult.ρAnn = function () {
return { "name": "ViewResult" };
};
return ViewResult;
}(ResultValue_1.ResultValue));
exports.ViewResult = ViewResult;
});
unwrapExports(ViewResult_1);
var ViewResult_2 = ViewResult_1.ViewResult;
var RouteChecker_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.RouteChecker = void 0;
var urlReg = /\/((\w|%|\.))+\.\w+$/;
var noParms = /\/\s*$/;
var hasParms = /\?\S*$/;
var subStart = /^\s*\/|\?/;
var RouteChecker = /** @class */ (function (_super) {
tslib.__extends(RouteChecker, _super);
function RouteChecker() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.assertUrlRegExp = urlReg;
return _this;
}
RouteChecker.prototype.isRoute = function (ctxUrl) {
return !this.assertUrlRegExp.test(ctxUrl);
};
RouteChecker.prototype.getReqRoute = function (ctx) {
var reqUrl = this.vaildify(ctx.url, true);
var config = ctx.mvcContext.getConfiguration();
if (config.routePrefix) {
return reqUrl.replace(config.routePrefix, '');
}
return reqUrl;
};
RouteChecker.prototype.vaildify = function (routePath, foreNull) {
if (foreNull === void 0) { foreNull = false; }
if (foreNull && routePath === '/') {
routePath = '';
}
if (noParms.test(routePath)) {
routePath = routePath.substring(0, routePath.lastIndexOf('/'));
}
if (hasParms.test(routePath)) {
routePath = routePath.substring(0, routePath.lastIndexOf('?'));
}
return routePath;
};
RouteChecker.prototype.isActiveRoute = function (ctx, route) {
var routeUrl = this.getReqRoute(ctx);
if (route === '' || route === routeUrl) {
return true;
}
return routeUrl.startsWith(route) && subStart.test(routeUrl.substring(route.length));
};
RouteChecker.ρAnn = function () {
return { "name": "RouteChecker", "params": { "isRoute": ["ctxUrl"], "getReqRoute": ["ctx"], "vaildify": ["routePath", "foreNull"], "isActiveRoute": ["ctx", "route"] } };
};
RouteChecker = tslib.__decorate([
ioc.Singleton()
], RouteChecker);
return RouteChecker;
}(ioc.IocCoreService));
exports.RouteChecker = RouteChecker;
});
unwrapExports(RouteChecker_1);
var RouteChecker_2 = RouteChecker_1.RouteChecker;
var Route = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.MvcRoute = exports.RouteUrlArgToken = void 0;
exports.RouteUrlArgToken = ioc.tokenId('route_url');
var MvcRoute = /** @class */ (function (_super) {
tslib.__extends(MvcRoute, _super);
function MvcRoute(url) {
var _this = _super.call(this) || this;
if (url) {
_this.metaUrl = url;
}
return _this;
}
Object.defineProperty(MvcRoute.prototype, "url", {
get: function () {
if (!this._url) {
this._url = this.vaildify(this.metaUrl, true);
}
return this._url;
},
set: function (val) {
this._url = val;
},
enumerable: false,
configurable: true
});
MvcRoute.prototype.getChecker = function () {
if (!this.checker) {
this.checker = this.getInjector().get(RouteChecker_1.RouteChecker);
}
return this.checker;
};
MvcRoute.prototype.getReqRoute = function (ctx) {
return this.getChecker().getReqRoute(ctx);
};
MvcRoute.prototype.vaildify = function (routePath, foreNull) {
if (foreNull === void 0) { foreNull = false; }
return this.getChecker().vaildify(routePath, foreNull);
};
MvcRoute.prototype.match = function (ctx) {
if (ctx.status && ctx.status !== 404) {
return false;
}
return this.getChecker().isActiveRoute(ctx, this.url);
};
MvcRoute.prototype.execute = function (ctx, next) {
return tslib.__awaiter(this, void 0, void 0, function () {
return tslib.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.match(ctx)) return [3 /*break*/, 2];
return [4 /*yield*/, this.navigate(ctx, next)];
case 1:
_a.sent();
return [3 /*break*/, 4];
case 2: return [4 /*yield*/, next()];
case 3: return [2 /*return*/, _a.sent()];
case 4: return [2 /*return*/];
}
});
});
};
MvcRoute.prototype.toHandle = function (handleType) {
var _a, _b, _c, _d;
if (handleType instanceof ioc.Action) {
return handleType.toAction();
}
else if (ioc.isClass(handleType)) {
var ist = (_a = this.getInjector().get(handleType)) !== null && _a !== void 0 ? _a : this.getInjector().getContainer().getTypeReflects().getInjector(handleType).getInstance(handleType);
return (_b = ist === null || ist === void 0 ? void 0 : ist.toAction) === null || _b === void 0 ? void 0 : _b.call(ist);
}
else if (ioc.isToken(handleType)) {
return (_d = (_c = this.getInjector().get(handleType)) === null || _c === void 0 ? void 0 : _c.toAction) === null || _d === void 0 ? void 0 : _d.call(_c);
}
else if (ioc.isFunction(handleType)) {
return handleType;
}
return null;
};
MvcRoute.ρAnn = function () {
return { "name": "MvcRoute", "params": { "constructor": ["url"], "getReqRoute": ["ctx"], "vaildify": ["routePath", "foreNull"], "match": ["ctx"], "execute": ["ctx", "next"], "navigate": ["ctx", "next"], "toHandle": ["handleType"] } };
};
MvcRoute.ρNPT = true;
MvcRoute = tslib.__decorate([
ioc.Abstract(),
tslib.__metadata("design:paramtypes", [String])
], MvcRoute);
return MvcRoute;
}(MvcMiddleware_1.MvcMiddleware));
exports.MvcRoute = MvcRoute;
});
unwrapExports(Route);
var Route_1 = Route.MvcRoute;
var Route_2 = Route.RouteUrlArgToken;
var Router_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.Router = void 0;
var Router = /** @class */ (function (_super) {
tslib.__extends(Router, _super);
function Router() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.sorted = false;
return _this;
}
Router.prototype.vaild = function (ctx) {
return (!ctx.status || ctx.status === 404) && this.isRouteUrl(ctx.url);
};
Router.prototype.execute = function (ctx, next) {
return tslib.__awaiter(this, void 0, void 0, function () {
return tslib.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.sorted) {
this.handles = this.handles.sort(function (a, b) {
if (a instanceof Route.MvcRoute && b instanceof Route.MvcRoute) {
return (b.url || '').length - (a.url || '').length;
}
return -1;
});
this.resetFuncs();
this.sorted = true;
}
return [4 /*yield*/, _super.prototype.execute.call(this, ctx)];
case 1:
_a.sent();
if (!next) return [3 /*break*/, 3];
return [4 /*yield*/, next()];
case 2: return [2 /*return*/, _a.sent()];
case 3: return [2 /*return*/];
}
});
});
};
Router.prototype.getChecker = function () {
return this.getInjector().get(RouteChecker_1.RouteChecker);
};
Router.prototype.isRouteUrl = function (route) {
return this.getChecker().isRoute(route);
};
Router.prototype.routes = function () {
var _this = this;
var routes = [];
for (var _i = 0; _i < arguments.length; _i++) {
routes[_i] = arguments[_i];
}
routes.forEach(function (r) { return _this.use(r); });
this.sorted = false;
return this;
};
Router.ρAnn = function () {
return { "name": "Router", "params": { "vaild": ["ctx"], "execute": ["ctx", "next"], "isRouteUrl": ["route"], "routes": ["routes"] } };
};
Router.ρNPT = true;
Router = tslib.__decorate([
ioc.Singleton()
], Router);
return Router;
}(MvcMiddleware_1.CompositeMiddleware));
exports.Router = Router;
});
unwrapExports(Router_1);
var Router_2 = Router_1.Router;
var AuthorizationService_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthorizationService = void 0;
var AuthorizationService = /** @class */ (function () {
function AuthorizationService() {
}
AuthorizationService.ρAnn = function () {
return { "name": "AuthorizationService", "params": { "getAuthMiddlewares": ["ctx", "controller", "propertyKey"] } };
};
AuthorizationService = tslib.__decorate([
ioc.Abstract()
], AuthorizationService);
return AuthorizationService;
}());
exports.AuthorizationService = AuthorizationService;
});
unwrapExports(AuthorizationService_1);
var AuthorizationService_2 = AuthorizationService_1.AuthorizationService;
/*!
* vary
* Copyright(c) 2014-2017 Douglas Christopher Wilson
* MIT Licensed
*/
/**
* Module exports.
*/
var vary_1 = vary;
var append_1 = append;
/**
* RegExp to match field-name in RFC 7230 sec 3.2
*
* field-name = token
* token = 1*tchar
* tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
* / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
* / DIGIT / ALPHA
* ; any VCHAR, except delimiters
*/
var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
/**
* Append a field to a vary header.
*
* @param {String} header
* @param {String|Array} field
* @return {String}
* @public
*/
function append (header, field) {
if (typeof header !== 'string') {
throw new TypeError('header argument is required')
}
if (!field) {
throw new TypeError('field argument is required')
}
// get fields array
var fields = !Array.isArray(field)
? parse(String(field))
: field;
// assert on invalid field names
for (var j = 0; j < fields.length; j++) {
if (!FIELD_NAME_REGEXP.test(fields[j])) {
throw new TypeError('field argument contains an invalid header name')
}
}
// existing, unspecified vary
if (header === '*') {
return header
}
// enumerate current values
var val = header;
var vals = parse(header.toLowerCase());
// unspecified vary
if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) {
return '*'
}
for (var i = 0; i < fields.length; i++) {
var fld = fields[i].toLowerCase();
// append value (case-preserving)
if (vals.indexOf(fld) === -1) {
vals.push(fld);
val = val
? val + ', ' + fields[i]
: fields[i];
}
}
return val
}
/**
* Parse a vary header into an array.
*
* @param {String} header
* @return {Array}
* @private
*/
function parse (header) {
var end = 0;
var list = [];
var start = 0;
// gather tokens
for (var i = 0, len = header.length; i < len; i++) {
switch (header.charCodeAt(i)) {
case 0x20: /* */
if (start === end) {
start = end = i + 1;
}
break
case 0x2c: /* , */
list.push(header.substring(start, end));
start = end = i + 1;
break
default:
end = i + 1;
break
}
}
// final token
list.push(header.substring(start, end));
return list
}
/**
* Mark that a request is varied on a header field.
*
* @param {Object} res
* @param {String|Array} field
* @public
*/
function vary (res, field) {
if (!res || !res.getHeader || !res.setHeader) {
// quack quack
throw new TypeError('res argument is required')
}
// get existing header
var val = res.getHeader('Vary') || '';
var header = Array.isArray(val)
? val.join(', ')
: String(val);
// set new header
if ((val = append(header, field))) {
res.setHeader('Vary', val);
}
}
vary_1.append = append_1;
var ControllerRoute_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.ControllerRoute = exports.RouteControllerMiddlewar