From 93b8778972422eb03ee23eff2e83e309cb669606 Mon Sep 17 00:00:00 2001 From: David Diaz Date: Sun, 22 Nov 2020 18:03:55 -0600 Subject: [PATCH] Cleaning up. This is still a very rought draft. --- package-lock.json | 46 +++++++++++++++++++ package.json | 1 + ...namic-values.js => beau-dynamic-values.ts} | 0 .../{beau-modifiers.js => beau-modifiers.ts} | 0 src/__mocks__/{beau-std.js => beau-std.ts} | 0 ...se-native.js => request-promise-native.ts} | 0 src/__tests__/plugins.spec.ts | 6 +-- src/beau.ts | 6 +-- src/plugins.ts | 9 ++-- src/request.ts | 2 +- src/requestCache.ts | 2 +- src/shared.ts | 10 ++-- 12 files changed, 65 insertions(+), 17 deletions(-) rename src/__mocks__/{beau-dynamic-values.js => beau-dynamic-values.ts} (100%) rename src/__mocks__/{beau-modifiers.js => beau-modifiers.ts} (100%) rename src/__mocks__/{beau-std.js => beau-std.ts} (100%) rename src/__mocks__/{request-promise-native.js => request-promise-native.ts} (100%) diff --git a/package-lock.json b/package-lock.json index 64b14d6..1807196 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1555,6 +1555,12 @@ "@types/responselike": "*" } }, + "@types/caseless": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", + "dev": true + }, "@types/deepmerge": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@types/deepmerge/-/deepmerge-2.2.0.tgz", @@ -1658,6 +1664,40 @@ "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==", "dev": true }, + "@types/request": { + "version": "2.48.5", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.5.tgz", + "integrity": "sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==", + "dev": true, + "requires": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + }, + "dependencies": { + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/request-promise-native": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@types/request-promise-native/-/request-promise-native-1.0.17.tgz", + "integrity": "sha512-05/d0WbmuwjtGMYEdHIBZ0tqMJJQ2AD9LG2F6rKNBGX1SSFR27XveajH//2N/XYtual8T9Axwl+4v7oBtPUZqg==", + "dev": true, + "requires": { + "@types/request": "*" + } + }, "@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -1673,6 +1713,12 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "@types/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", + "dev": true + }, "@types/yargs": { "version": "15.0.10", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.10.tgz", diff --git a/package.json b/package.json index 1123703..c4b6396 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@types/deepmerge": "2.2.0", "@types/jest": "26.0.15", "@types/js-yaml": "3.12.5", + "@types/request-promise-native": "1.0.17", "jest": "26.6.3", "jest-watch-typeahead": "0.6.1", "np": "7.0.0", diff --git a/src/__mocks__/beau-dynamic-values.js b/src/__mocks__/beau-dynamic-values.ts similarity index 100% rename from src/__mocks__/beau-dynamic-values.js rename to src/__mocks__/beau-dynamic-values.ts diff --git a/src/__mocks__/beau-modifiers.js b/src/__mocks__/beau-modifiers.ts similarity index 100% rename from src/__mocks__/beau-modifiers.js rename to src/__mocks__/beau-modifiers.ts diff --git a/src/__mocks__/beau-std.js b/src/__mocks__/beau-std.ts similarity index 100% rename from src/__mocks__/beau-std.js rename to src/__mocks__/beau-std.ts diff --git a/src/__mocks__/request-promise-native.js b/src/__mocks__/request-promise-native.ts similarity index 100% rename from src/__mocks__/request-promise-native.js rename to src/__mocks__/request-promise-native.ts diff --git a/src/__tests__/plugins.spec.ts b/src/__tests__/plugins.spec.ts index d62fb7c..06e3e89 100644 --- a/src/__tests__/plugins.spec.ts +++ b/src/__tests__/plugins.spec.ts @@ -4,11 +4,11 @@ import RequestCache from '../requestCache' const requireg = require('requireg') describe(`Beau's plugin system`, () => { - let request - let plugins + let request: Request + let plugins: Plugins beforeEach(() => { - plugins = new Plugins([{ Modifiers: [Object] }, 'DynamicValues'], []) + plugins = new Plugins([{ Modifiers: [{}] }, 'DynamicValues'], []) }) it('should load all plugins', () => { diff --git a/src/beau.ts b/src/beau.ts index 273525c..1da910f 100644 --- a/src/beau.ts +++ b/src/beau.ts @@ -1,15 +1,14 @@ import { moduleVersion } from './shared' import RequestList from './requestList' import Config, { BeauConfig } from './config' - -const deepmerge = require('deepmerge') +import * as deepmerge from 'deepmerge' export default class Beau { config: Config requests: RequestList constructor(doc: BeauConfig, env = {}) { - doc.environment = deepmerge(doc.environment, env) + doc.environment = deepmerge(doc.environment ?? {}, env) this.config = new Config(doc) this.requests = new RequestList(this.config) @@ -22,4 +21,3 @@ export default class Beau { } } } - diff --git a/src/plugins.ts b/src/plugins.ts index d3d3561..11ff220 100644 --- a/src/plugins.ts +++ b/src/plugins.ts @@ -1,6 +1,6 @@ import vm = require('vm') -import requireg = require('requireg') -import deepmerge = require('deepmerge') +import * as requireg from 'requireg' +import * as deepmerge from 'deepmerge' import { toKebabCase, dynamicValueRegex, replaceInObject } from './shared' import { isPlainObject } from 'is-plain-object' import { RequestObject, UObjectString } from './config' @@ -19,7 +19,10 @@ export default class Plugins { context: vm.Context autoload: string[] = [] - constructor(plugins: UObjectString[] = [], autoload = ['std']) { + constructor( + plugins: Array = [], + autoload = ['std'] + ) { this.registry = { preRequestModifiers: [], postRequestModifiers: [], diff --git a/src/request.ts b/src/request.ts index d0cc7e5..635a2da 100644 --- a/src/request.ts +++ b/src/request.ts @@ -1,4 +1,4 @@ -import request = require('request-promise-native') +import * as request from 'request-promise-native' import RequestCache from './requestCache' import Plugins from './plugins' diff --git a/src/requestCache.ts b/src/requestCache.ts index ce6aff4..a73ed60 100644 --- a/src/requestCache.ts +++ b/src/requestCache.ts @@ -8,7 +8,7 @@ export default class RequestCache { return typeof this.$cache[key] !== 'undefined' } - add(key: string, value: { [key: string]: any }) { + add(key: string, value: any) { this.$cache[key] = value } diff --git a/src/shared.ts b/src/shared.ts index fd9b871..8d6dc4b 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -22,8 +22,8 @@ export const isEmptyObject = (obj: object) => export const removeOptionalKeys = function ( obj: object, optionalValues: string[] -): typeof obj { - let result = {} +): Partial { + let result: { [key: string]: any } = {} Object.entries(obj).forEach(([key, value]) => { if (optionalValues.includes(key) && isEmptyObject(value)) { @@ -43,10 +43,10 @@ export const toKebabCase = function (str: string) { .toLowerCase() } -export const replaceInObject = function ( - obj: T, +export const replaceInObject = function ( + obj: { [key: string]: any }, fn: (arg0: string) => string -): T | null | {} | string { +): typeof obj | null | {} | string { if (obj === null) { return null }