diff --git a/types/express-paginate/express-paginate-tests.ts b/types/express-paginate/express-paginate-tests.ts new file mode 100644 index 0000000000..5847bf2b1b --- /dev/null +++ b/types/express-paginate/express-paginate-tests.ts @@ -0,0 +1,26 @@ +import * as express from 'express'; +import * as paginate from 'express-paginate'; + +declare function findAndCountAll(params: object): Promise<{count: number, rows: object[]}>; + +const app = express(); + +app.use(paginate.middleware(10, 50)) + +app.get('/users', async (req: paginate.PaginatedRequest, res, next) => { + // req.skip should be available + return findAndCountAll({limit: req.query.limit, offset: req.skip}) + .then(results => { + const itemCount = results.count; + const pageCount = Math.ceil(results.count / req.query.limit); + res.render('users/all_users', { + users: results.rows, + pageCount, + itemCount, + currentPageHref: paginate.href(req)(false, req.params), + // Instead of exposing this to the html template, we'll test this here and pass a static number + hasNextPages: paginate.hasNextPages(req)(pageCount), + pages: paginate.getArrayPages(req)(3, pageCount, req.query.page) + }); + }).catch(err => next(err)) +}); diff --git a/types/express-paginate/index.d.ts b/types/express-paginate/index.d.ts new file mode 100644 index 0000000000..7352dbee95 --- /dev/null +++ b/types/express-paginate/index.d.ts @@ -0,0 +1,21 @@ +// Type definitions for express-paginate 1.0 +// Project: https://github.com/niftylettuce/express-paginate +// Definitions by: My Self +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +import * as express from 'express'; + +interface PageElement { + number: number; + url: typeof href; +} + +export interface PaginatedRequest extends express.Request { + skip: number; + offset: number; +} + +export function middleware(limit: number, maxLimit: number): (req: express.Request, res: express.Response, next: express.NextFunction) => void; +export function hasNextPages(req: express.Request): (pageCount: number) => boolean; +export function href(req: express.Request): (prev: object | boolean, params: object) => string; +export function getArrayPages(req: express.Request): (limit: number, pageCount: number, currentPage: number) => PageElement[]; diff --git a/types/express-paginate/tsconfig.json b/types/express-paginate/tsconfig.json new file mode 100644 index 0000000000..61a6c089fc --- /dev/null +++ b/types/express-paginate/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "express-paginate-tests.ts" + ] +} diff --git a/types/express-paginate/tslint.json b/types/express-paginate/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/express-paginate/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }