From 595ef76a3b0b95a12a11d96ff164a38879644121 Mon Sep 17 00:00:00 2001 From: Shaun Luttin Date: Wed, 1 Nov 2017 14:19:59 -0700 Subject: [PATCH] Add Resource.js typings --- types/resourcejs/index.d.ts | 106 +++++++++++++++++++++++++++ types/resourcejs/resourcejs-tests.ts | 19 +++++ types/resourcejs/tsconfig.json | 23 ++++++ types/resourcejs/tslint.json | 3 + 4 files changed, 151 insertions(+) create mode 100644 types/resourcejs/index.d.ts create mode 100644 types/resourcejs/resourcejs-tests.ts create mode 100644 types/resourcejs/tsconfig.json create mode 100644 types/resourcejs/tslint.json diff --git a/types/resourcejs/index.d.ts b/types/resourcejs/index.d.ts new file mode 100644 index 0000000000..d260ca2361 --- /dev/null +++ b/types/resourcejs/index.d.ts @@ -0,0 +1,106 @@ +// Type definitions for resourcejs 1.9 +// Project: https://github.com/travist/resourcejs +// Definitions by: Shaun Luttin +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.2 + +import express = require("express"); +import mongoose = require("mongoose"); + +export = resourcejs; + +declare function resourcejs( + app: express.Application, + route: string, + modelName: string, + model: mongoose.Model): resourcejs.ResourceEndpoint; + +declare namespace resourcejs { + type HttpHandler = (req: Request, res: Response, next: express.NextFunction) => void; + + type MethodBuild = (options?: T) => ResourceEndpoint; + + interface RestOptions extends HttpMethodOptions { + beforePut?: HttpHandler; + beforePatch?: HttpHandler; + beforePost?: HttpHandler; + beforeIndex?: HttpHandler; + beforeGet?: HttpHandler; + afterPut?: HttpHandler; + afterPatch?: HttpHandler; + afterPost?: HttpHandler; + afterIndex?: HttpHandler; + afterGet?: HttpHandler; + } + + interface VirtualOptions extends HttpMethodOptions { + path?: string; + } + + interface HttpMethodOptions { + before?: HttpHandler; + after?: HttpHandler; + } + + /** + * We manually generated this interface by looking an resource like this: + * const resource = Resource(app, route, name, model); + * console.log(resource); + */ + interface ResourceEndpoint { + model: mongoose.Model; + modelName: string; + name: string; + route: string; + methods: string[]; + __swagger: any; + register: ( + app: express.Application, + method: string, + path: string, + callback: (...args: any[]) => any, + last: (...args: any[]) => any, + options: object) => any; + + respond: HttpHandler; + setResponse: HttpHandler; + getMethodOptions: (method: string, options: object) => object; + rest: MethodBuild; + getParamQuery: (req: Request, name: string) => any; + getFindQuery: (req: Request) => object; + index: MethodBuild; + get: MethodBuild; + virtual: MethodBuild; + post: MethodBuild; + put: MethodBuild; + patch: MethodBuild; + delete: MethodBuild; + swagger: MethodBuild; + } + + interface Request extends express.Request { + skipResource: boolean; + noResponse: boolean; + query: any; + countQuery: any; + modelQuery: any; + skipDelete: boolean; + } + + interface Response extends express.Response { + resource: Resource; + } + + interface Resource { + status: number; + error: Error; + item: mongoose.Document | mongoose.Document[]; + } + + interface Error { + message: string; + path: string; + name: string; + errors: Error[]; + } +} diff --git a/types/resourcejs/resourcejs-tests.ts b/types/resourcejs/resourcejs-tests.ts new file mode 100644 index 0000000000..b3d2604933 --- /dev/null +++ b/types/resourcejs/resourcejs-tests.ts @@ -0,0 +1,19 @@ +import express = require("express"); +import resourcejs = require("resourcejs"); +import mongoose = require("mongoose"); + +const app = express(); +const route = "the-route"; +const resourceName = "the-resource-name"; + +const schema = new mongoose.Schema({}); +const model = mongoose.model(resourceName, schema); + +resourcejs(app, route, resourceName, model) + .get() + .post() + .delete() + .put() + .patch() + .index() + .rest(); diff --git a/types/resourcejs/tsconfig.json b/types/resourcejs/tsconfig.json new file mode 100644 index 0000000000..ca71c00a1a --- /dev/null +++ b/types/resourcejs/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "resourcejs-tests.ts" + ] +} diff --git a/types/resourcejs/tslint.json b/types/resourcejs/tslint.json new file mode 100644 index 0000000000..f93cf8562a --- /dev/null +++ b/types/resourcejs/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "dtslint/dt.json" +}