Merge pull request #5935 from TheBay0r/addRestIODefinitions

Added definitions for rest-io
This commit is contained in:
Horiuchi_H
2015-09-25 16:39:16 +09:00
2 changed files with 166 additions and 0 deletions
+18
View File
@@ -0,0 +1,18 @@
/// <reference path="rest-io.d.ts" />
import express = require('express');
import restIO = require('rest-io');
import mongoose = require('mongoose');
var app = express();
// register the express app with rest.io
restIO.restIO(app, {
resources: __dirname + '/resources'
});
mongoose.connect('mongodb://localhost:27017/test');
app.listen(3000, function () {
console.log('Server has started under port: 3000');
});
module.exports = app;
+148
View File
@@ -0,0 +1,148 @@
// Type definitions for rest-io 4.0
// Project: https://github.com/EnoF/rest-io
// Definitions by: Andy Tang <https://github.com/EnoF>, Stefan Schacherl <https://github.com/TheBay0r>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../express/express.d.ts" />
/// <reference path="../mongoose/mongoose.d.ts" />
declare module 'rest-io' {
import {Router, Application, Response, Request} from 'express';
import {Mongoose, Schema, Model, Document, Types, Promise} from 'mongoose';
function restIO(app: Application, config?: IRestIOConfig): RestIO;
export interface RestIO {
resource: ResourceModule
}
export interface IRestIOConfig {
resources: string;
db?: Mongoose;
}
export interface ResourceModule {
Resource: Resource;
AuthorizedResource: AuthorizedResource;
authorizedResource: AuthorizedResourceModule;
UserResource: UserResource;
SubResource: SubResource;
}
export class Resource {
baseUrl: string;
url: string;
parameterizedUrl: string;
model: Model<Document>;
resDef: IResource;
parentResource: Resource;
router: Router;
app: Application;
db: Mongoose;
paramId: string;
parentRef: string;
populate: string;
constructor(resDef: IResource);
createModel(resDef: IResource): Model<Document>;
toClassName(name: string): string;
setupRoutes(): void;
getAll(req: Request, res: Response): void;
buildParentSearch(req: Request): any;
getById(req: Request, res: Response): void;
create(req: Request, res: Response): void;
update(req: Request, res: Response): void;
del(req: Request, res: Response): void;
errorHandler(err: Error, res: Response): void;
}
export interface IResource {
name: string;
model: any;
parentRef?: string;
populate?: string;
plural?: string;
parentResource?: Resource;
}
export interface AuthorizedResourceModule {
AuthorizedResource: AuthorizedResource
ROLES: Roles
}
export interface Roles {
USER: string;
SUPER_USER: string;
MODERATOR: string;
ADMIN: string;
}
export class AuthorizedResource extends Resource {
methodAccess: IMethodAccess;
maxDays: number;
permissions: IMethodAccess;
isTokenExpired(createdAt: Date): boolean;
getRoles(id: string): Promise<Document>;
hasAuthorizedRole(roles: Array<any>, authorizedRoles: Array<string>): boolean;
hasAccessRightsDefined(req: Request, authorizedRoles: Array<string>): boolean;
isAuthorized(req: Request, authorizedRoles: Array<string>): boolean;
sendUnauthorized(error: Error, res: Response): void;
}
export interface IMethodAccess {
getAll: Array<string>;
getById: Array<string>;
create: Array<string>;
update: Array<string>;
del: Array<string>;
}
export class UserResource extends AuthorizedResource {
ensureBaseUserModel(model: any): void;
createRoleModel(): void;
isSelf(req: Request): boolean;
login(req: Request, res: Response): void;
}
export class SubResource extends Resource {
constructor(resDef: ISubResource);
createProjectionQuery(req: Request): any;
createPullQuery(req: Request): any;
createFindQuery(req: Request): any;
createSubUpdateQuery(req: Request): any;
}
export interface ISubResource {
name: string;
plural?: string;
parentResource: Resource;
populate?: string;
}
}