From 73b332fdfcd3d2676e0f4dacc6a9e019cdd11bc0 Mon Sep 17 00:00:00 2001 From: "Amir.Tugi@Gmail.com" Date: Tue, 22 May 2018 09:00:28 +0300 Subject: [PATCH 1/6] Add decleration file for express-paginate --- .../express-paginate-tests.ts | 26 +++++++++++++++++++ types/express-paginate/index.d.ts | 21 +++++++++++++++ types/express-paginate/tsconfig.json | 22 ++++++++++++++++ types/express-paginate/tslint.json | 1 + 4 files changed, 70 insertions(+) create mode 100644 types/express-paginate/express-paginate-tests.ts create mode 100644 types/express-paginate/index.d.ts create mode 100644 types/express-paginate/tsconfig.json create mode 100644 types/express-paginate/tslint.json 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" } From 061b46150a4bbcf406a7494663944c6350d80aaa Mon Sep 17 00:00:00 2001 From: "Amir.Tugi@Gmail.com" Date: Tue, 22 May 2018 10:16:14 +0300 Subject: [PATCH 2/6] Add fixes for strictFunctionType --- types/express-paginate/express-paginate-tests.ts | 2 +- types/express-paginate/index.d.ts | 14 +++++++++----- types/express-paginate/tsconfig.json | 1 + 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/types/express-paginate/express-paginate-tests.ts b/types/express-paginate/express-paginate-tests.ts index 5847bf2b1b..d31c70362c 100644 --- a/types/express-paginate/express-paginate-tests.ts +++ b/types/express-paginate/express-paginate-tests.ts @@ -7,7 +7,7 @@ const app = express(); app.use(paginate.middleware(10, 50)) -app.get('/users', async (req: paginate.PaginatedRequest, res, next) => { +app.get('/users', async (req, res, next) => { // req.skip should be available return findAndCountAll({limit: req.query.limit, offset: req.skip}) .then(results => { diff --git a/types/express-paginate/index.d.ts b/types/express-paginate/index.d.ts index 7352dbee95..94411c2fe4 100644 --- a/types/express-paginate/index.d.ts +++ b/types/express-paginate/index.d.ts @@ -5,16 +5,20 @@ import * as express from 'express'; +declare global { + namespace Express { + export interface Request { + skip?: number, + offset?: number, + } + } +} + 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; diff --git a/types/express-paginate/tsconfig.json b/types/express-paginate/tsconfig.json index 61a6c089fc..9370f2106b 100644 --- a/types/express-paginate/tsconfig.json +++ b/types/express-paginate/tsconfig.json @@ -7,6 +7,7 @@ "noImplicitAny": true, "noImplicitThis": true, "strictNullChecks": true, + "strictFunctionTypes": true, "baseUrl": "../", "typeRoots": [ "../" From bfdbdd2d6dcb2f9a484ac3c8142c6a7a8f3f3c7b Mon Sep 17 00:00:00 2001 From: "Amir.Tugi@Gmail.com" Date: Tue, 22 May 2018 10:35:04 +0300 Subject: [PATCH 3/6] Mark limit and maxLimit as optional --- types/express-paginate/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/express-paginate/index.d.ts b/types/express-paginate/index.d.ts index 94411c2fe4..403bd92979 100644 --- a/types/express-paginate/index.d.ts +++ b/types/express-paginate/index.d.ts @@ -19,7 +19,7 @@ interface PageElement { url: typeof href; } -export function middleware(limit: number, maxLimit: number): (req: express.Request, res: express.Response, next: express.NextFunction) => void; +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[]; From 571f1889da6d4220551c2b877d2ad24ef40865c5 Mon Sep 17 00:00:00 2001 From: "Amir.Tugi@Gmail.com" Date: Tue, 22 May 2018 15:23:39 +0300 Subject: [PATCH 4/6] Fix tests --- types/express-paginate/express-paginate-tests.ts | 4 ++-- types/express-paginate/index.d.ts | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/types/express-paginate/express-paginate-tests.ts b/types/express-paginate/express-paginate-tests.ts index d31c70362c..20f1a0a558 100644 --- a/types/express-paginate/express-paginate-tests.ts +++ b/types/express-paginate/express-paginate-tests.ts @@ -5,7 +5,7 @@ declare function findAndCountAll(params: object): Promise<{count: number, rows: const app = express(); -app.use(paginate.middleware(10, 50)) +app.use(paginate.middleware(10, 50)); app.get('/users', async (req, res, next) => { // req.skip should be available @@ -22,5 +22,5 @@ app.get('/users', async (req, res, next) => { hasNextPages: paginate.hasNextPages(req)(pageCount), pages: paginate.getArrayPages(req)(3, pageCount, req.query.page) }); - }).catch(err => next(err)) + }).catch(next); }); diff --git a/types/express-paginate/index.d.ts b/types/express-paginate/index.d.ts index 403bd92979..1f722d1b28 100644 --- a/types/express-paginate/index.d.ts +++ b/types/express-paginate/index.d.ts @@ -2,19 +2,20 @@ // Project: https://github.com/niftylettuce/express-paginate // Definitions by: My Self // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.7 import * as express from 'express'; declare global { namespace Express { - export interface Request { - skip?: number, - offset?: number, + interface Request { + skip?: number; + offset?: number; } } } -interface PageElement { +export interface PageElement { number: number; url: typeof href; } From c1e00e25e96757183996545fd546cd74b38e7e4e Mon Sep 17 00:00:00 2001 From: "Amir.Tugi@Gmail.com" Date: Tue, 22 May 2018 17:32:22 +0300 Subject: [PATCH 5/6] Fill correct metadata --- types/express-paginate/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/express-paginate/index.d.ts b/types/express-paginate/index.d.ts index 1f722d1b28..b816d11b1b 100644 --- a/types/express-paginate/index.d.ts +++ b/types/express-paginate/index.d.ts @@ -1,6 +1,6 @@ // Type definitions for express-paginate 1.0 // Project: https://github.com/niftylettuce/express-paginate -// Definitions by: My Self +// Definitions by: Amir Tugendhaft // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.7 From 81089459ca8d9791e469fe0e51fbb75c70ce28b0 Mon Sep 17 00:00:00 2001 From: "Amir.Tugi@Gmail.com" Date: Wed, 23 May 2018 10:59:20 +0300 Subject: [PATCH 6/6] CR Fix --- types/express-paginate/express-paginate-tests.ts | 2 +- types/express-paginate/index.d.ts | 2 +- types/express-paginate/tsconfig.json | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/types/express-paginate/express-paginate-tests.ts b/types/express-paginate/express-paginate-tests.ts index 20f1a0a558..ddd87ce441 100644 --- a/types/express-paginate/express-paginate-tests.ts +++ b/types/express-paginate/express-paginate-tests.ts @@ -1,4 +1,4 @@ -import * as express from 'express'; +import express from 'express'; import * as paginate from 'express-paginate'; declare function findAndCountAll(params: object): Promise<{count: number, rows: object[]}>; diff --git a/types/express-paginate/index.d.ts b/types/express-paginate/index.d.ts index b816d11b1b..638ae944ad 100644 --- a/types/express-paginate/index.d.ts +++ b/types/express-paginate/index.d.ts @@ -4,7 +4,7 @@ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.7 -import * as express from 'express'; +import express = require("express"); declare global { namespace Express { diff --git a/types/express-paginate/tsconfig.json b/types/express-paginate/tsconfig.json index 9370f2106b..d524beee7a 100644 --- a/types/express-paginate/tsconfig.json +++ b/types/express-paginate/tsconfig.json @@ -8,6 +8,7 @@ "noImplicitThis": true, "strictNullChecks": true, "strictFunctionTypes": true, + "esModuleInterop": true, "baseUrl": "../", "typeRoots": [ "../"