From 1a960fa91d1758d65dc9e5f1028c9ecb28f4fd6a Mon Sep 17 00:00:00 2001 From: Fatih Altinok Date: Fri, 6 Dec 2019 17:33:14 +0300 Subject: [PATCH] Add typescript declaration Closes #22 --- example/app.ts | 34 ++++++++++++++++++++++++ lib/index.d.ts | 40 ++++++++++++++++++++++++++++ lib/index.js | 2 +- package-lock.json | 68 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 ++ 5 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 example/app.ts create mode 100644 lib/index.d.ts diff --git a/example/app.ts b/example/app.ts new file mode 100644 index 0000000..eb5c5e4 --- /dev/null +++ b/example/app.ts @@ -0,0 +1,34 @@ +import express, { Express } from "express"; +import Keyv from "keyv"; +import { Tgl, middleware, router, Toggle } from "tgl"; + +const toggles: Toggle[] = [ + { + name: "universal", + description: "Do we address the world, or the whole universe?", + defaultValue: false + }, + { + name: "lasers", + description: "Enable lasers!!!", + defaultValue: true + } +]; +const storage: Keyv = new Keyv(); +const tgl: Tgl = new Tgl({ toggles, storage }); + +tgl.get("hello"); +tgl.set("hello", true); + +const app: Express = express(); + +app.use(middleware(tgl)); + +app.get("/", (req, res) => { + const universal = req.tgl.get("universal"); + res.send(universal ? "Hello, universe!" : "Hello, world!"); +}); + +app.use("/tgl", router(tgl)); + +module.exports = app; diff --git a/lib/index.d.ts b/lib/index.d.ts new file mode 100644 index 0000000..72a85bd --- /dev/null +++ b/lib/index.d.ts @@ -0,0 +1,40 @@ +declare namespace Express { + interface Request extends TglRequest {} +} + +declare interface TglRequest { + tgl?: Tgl; +} + +declare module "tgl" { + import express from "express"; + import Keyv from "keyv"; + + export interface Toggle { + name: string; + description: string; + defaultValue: boolean; + } + + export function middleware(tgl: Tgl): express.Handler; + + export function router(tgl: Tgl): express.Router; + + export class Tgl { + constructor({ + toggles, + storage, + interval + }: { + toggles: Toggle[]; + storage: Keyv; + interval?: number; + }); + + toggles: boolean[]; + + get(key: string): boolean; + + set(key: string, value: boolean): Promise; + } +} diff --git a/lib/index.js b/lib/index.js index caa4e68..e66ed7f 100644 --- a/lib/index.js +++ b/lib/index.js @@ -25,7 +25,7 @@ class Tgl { async set(key, value) { this._cache[key] = value; - return this._storage.set(key, value); + await this._storage.set(key, value); } get(key) { diff --git a/package-lock.json b/package-lock.json index 66fe540..03481de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -452,6 +452,42 @@ "@babel/types": "^7.3.0" } }, + "@types/body-parser": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", + "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.32", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", + "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.2.tgz", + "integrity": "sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.0.tgz", + "integrity": "sha512-Xnub7w57uvcBqFdIGoRg1KhNOeEj0vB6ykUM7uFWyxvbdE89GFyqgmUcanAriMr4YOxNFZBAWkfcWIb4WBPt3g==", + "requires": { + "@types/node": "*", + "@types/range-parser": "*" + } + }, "@types/istanbul-lib-coverage": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", @@ -477,6 +513,38 @@ "@types/istanbul-lib-report": "*" } }, + "@types/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-OxT2IEeRdwvoUyp8n1v1hTIFzATb3NQYN8OHv/XbXRHiF2DXwKyzoI4UUaQgwZkRflLaSgyttat+RfWgsKIMIQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/mime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", + "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" + }, + "@types/node": { + "version": "12.12.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz", + "integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA==" + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" + }, + "@types/serve-static": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", + "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, "@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", diff --git a/package.json b/package.json index 21d612f..78dcd3f 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,8 @@ "license": "MIT", "dependencies": { "@keyv/sqlite": "^2.0.1", + "@types/express": "^4.17.2", + "@types/keyv": "^3.1.0", "body-parser": "^1.19.0", "express": "^4.17.1", "keyv": "^4.0.0"