From 3e769c3a185a7edad846c2a7cbb8171fda1c7d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20B=C5=82a=C5=BCejewicz=20=28Peter=20Blazejewicz=29?= Date: Fri, 28 Aug 2020 01:40:32 +0200 Subject: [PATCH] feat(express-simple-locale): new definition (#46833) Definition types for Express middleware: - definition file - tests https://www.npmjs.com/package/express-simple-locale https://github.com/n26/express-simple-locale#options Thanks! --- .../express-simple-locale-tests.ts | 19 +++++++ types/express-simple-locale/index.d.ts | 56 +++++++++++++++++++ types/express-simple-locale/tsconfig.json | 23 ++++++++ types/express-simple-locale/tslint.json | 1 + 4 files changed, 99 insertions(+) create mode 100644 types/express-simple-locale/express-simple-locale-tests.ts create mode 100644 types/express-simple-locale/index.d.ts create mode 100644 types/express-simple-locale/tsconfig.json create mode 100644 types/express-simple-locale/tslint.json diff --git a/types/express-simple-locale/express-simple-locale-tests.ts b/types/express-simple-locale/express-simple-locale-tests.ts new file mode 100644 index 0000000000..853926f386 --- /dev/null +++ b/types/express-simple-locale/express-simple-locale-tests.ts @@ -0,0 +1,19 @@ +import express = require('express'); +import locale = require('express-simple-locale'); + +const localeMiddlewareOptions = { + key: 'userLocale', + supportedLocales: ['en', 'fr', 'it', 'es', 'de'], + defaultLocale: 'en', + cookieName: 'c00ki3z', + queryParams: ['locale', 'lang'], +}; + +express() + .use(locale()) + .use(locale({})) + .use(locale(localeMiddlewareOptions)) + .use((request, response, next) => { + request.userLocale; // $ExpectType string + next(); + }); diff --git a/types/express-simple-locale/index.d.ts b/types/express-simple-locale/index.d.ts new file mode 100644 index 0000000000..253aabdf63 --- /dev/null +++ b/types/express-simple-locale/index.d.ts @@ -0,0 +1,56 @@ +// Type definitions for express-simple-locale 0.3 +// Project: https://github.com/n26/express-simple-locale#readme +// Definitions by: Piotr Błażejewicz +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +import express = require('express'); +import { RequestHandler } from 'express'; + +declare module 'express-serve-static-core' { + interface Request { + userLocale: locale.ShortLocale; + } +} + +/** + * A simple Express middleware to guess the short-locale of a user. + * It then saves the found locale on the request for further usage. + */ +declare function locale(options?: locale.Options): RequestHandler; + +declare namespace locale { + /** + * @see {@link https://github.com/n26/express-simple-locale#options} + */ + interface Options { + /** + * the key to save locale to on the request + * @default 'locale' + */ + key?: string; + /** + * available locales for the app + * @default [] + */ + supportedLocales?: string[]; + /** + * locale to fallback to + * @default 'en' + */ + defaultLocale?: string; + /** + * cookie to try getting the locale from + * @default 'locale' + */ + cookieName?: string; + /** + * the query parameter(s) to look the locale from + * @default ['locale'] + */ + queryParams?: string | string[]; + } + + /** The short-locale of a user */ + type ShortLocale = string; +} + +export = locale; diff --git a/types/express-simple-locale/tsconfig.json b/types/express-simple-locale/tsconfig.json new file mode 100644 index 0000000000..1db977894e --- /dev/null +++ b/types/express-simple-locale/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "express-simple-locale-tests.ts" + ] +} diff --git a/types/express-simple-locale/tslint.json b/types/express-simple-locale/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/express-simple-locale/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }