diff --git a/.gitignore b/.gitignore index 135829c..d6adb06 100644 --- a/.gitignore +++ b/.gitignore @@ -206,4 +206,7 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk -# End of https://www.toptal.com/developers/gitignore/api/node,macos,windows,visualstudiocode \ No newline at end of file +# End of https://www.toptal.com/developers/gitignore/api/node,macos,windows,visualstudiocode + +# Snyk cacke +.dccache diff --git a/package-lock.json b/package-lock.json index a357581..b0d146c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@what3words/api", - "version": "4.0.4", + "version": "4.0.6-tt-7263", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@what3words/api", - "version": "4.0.4", + "version": "4.0.6-tt-7263", "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@testing-library/react": "^12.1.3", @@ -38,6 +38,14 @@ "peerDependencies": { "axios": "^0.21.2", "cross-fetch": "^3.1.5" + }, + "peerDependenciesMeta": { + "axios": { + "optional": true + }, + "cross-fetch": { + "optional": true + } } }, "node_modules/@babel/code-frame": { @@ -1597,6 +1605,7 @@ "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "optional": true, "peer": true, "dependencies": { "follow-redirects": "^1.14.0" @@ -2132,6 +2141,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "optional": true, "peer": true, "dependencies": { "node-fetch": "2.6.7" @@ -3258,6 +3268,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "optional": true, "peer": true, "engines": { "node": ">=4.0" @@ -5655,6 +5666,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "optional": true, "peer": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -5675,18 +5687,21 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "optional": true, "peer": true }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "optional": true, "peer": true }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "optional": true, "peer": true, "dependencies": { "tr46": "~0.0.3", @@ -9002,6 +9017,7 @@ "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "optional": true, "peer": true, "requires": { "follow-redirects": "^1.14.0" @@ -9424,6 +9440,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "optional": true, "peer": true, "requires": { "node-fetch": "2.6.7" @@ -10268,6 +10285,7 @@ "version": "1.14.5", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", + "optional": true, "peer": true }, "foreground-child": { @@ -12010,6 +12028,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "optional": true, "peer": true, "requires": { "whatwg-url": "^5.0.0" @@ -12019,18 +12038,21 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "optional": true, "peer": true }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "optional": true, "peer": true }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "optional": true, "peer": true, "requires": { "tr46": "~0.0.3", diff --git a/package.json b/package.json index d9949e6..51d1e3f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": false, "name": "@what3words/api", - "version": "4.0.5", + "version": "4.0.6", "description": "what3words JavaScript API", "homepage": "https://github.com/what3words/w3w-node-wrapper#readme", "main": "dist/index.js", @@ -27,6 +27,14 @@ "axios": "^0.21.2", "cross-fetch": "^3.1.5" }, + "peerDependenciesMeta": { + "axios": { + "optional": true + }, + "cross-fetch": { + "optional": true + } + }, "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", "@testing-library/react": "^12.1.3", diff --git a/src/lib/transport/axios.ts b/src/lib/transport/axios.ts index 07c7254..8443262 100644 --- a/src/lib/transport/axios.ts +++ b/src/lib/transport/axios.ts @@ -1,9 +1,10 @@ -import axios from 'axios'; +import { AxiosResponse } from 'axios'; import type { Transport, TransportResponse } from './model'; import { ClientRequest } from '../client'; import { errorHandler } from './error'; export function axiosTransport(): Transport { + const axios = require('axios'); return async function axiosTransport( req: ClientRequest ): Promise> { @@ -16,7 +17,7 @@ export function axiosTransport(): Transport { params, }; return await axios(options) - .then(res => { + .then((res: AxiosResponse) => { const response = errorHandler({ status: res.status, statusText: res.statusText, @@ -25,7 +26,7 @@ export function axiosTransport(): Transport { }); return response; }) - .catch(err => { + .catch((err: any) => { if (err.isAxiosError) errorHandler({ status: err.response?.status || err.status || 500, diff --git a/src/lib/transport/fetch.ts b/src/lib/transport/fetch.ts index a8aa14c..1c06d06 100644 --- a/src/lib/transport/fetch.ts +++ b/src/lib/transport/fetch.ts @@ -1,10 +1,10 @@ -import fetch from 'cross-fetch'; import type { Transport, TransportResponse } from './model'; import { ClientRequest } from '../client'; import { errorHandler } from './error'; import { searchParams } from '../serializer'; export function fetchTransport(): Transport { + const fetch = require('cross-fetch'); return async function fetchTransport( req: ClientRequest ): Promise> { diff --git a/src/lib/transport/index.ts b/src/lib/transport/index.ts index 337f8b9..19e7480 100644 --- a/src/lib/transport/index.ts +++ b/src/lib/transport/index.ts @@ -2,4 +2,3 @@ export * from './axios'; export * from './error'; export * from './fetch'; export * from './model'; -export * from './parse'; diff --git a/src/lib/transport/parse.ts b/src/lib/transport/parse.ts deleted file mode 100644 index f6db82d..0000000 --- a/src/lib/transport/parse.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Transport } from './model'; -import { axiosTransport } from './axios'; -import { fetchTransport } from './fetch'; - -export function getTransport( - transport?: 'axios' | 'fetch' | Transport -): Transport { - return typeof transport === 'function' - ? transport - : transport === 'axios' - ? axiosTransport() - : fetchTransport(); -} diff --git a/src/service.ts b/src/service.ts index 7a31dec..5fd880e 100644 --- a/src/service.ts +++ b/src/service.ts @@ -18,7 +18,7 @@ import type { LocationGeoJsonResponse, LocationJsonResponse, } from './client'; -import { ApiClientConfiguration, getTransport } from './lib'; +import { ApiClientConfiguration } from './lib'; import type { Transport } from './lib'; export type What3wordsService = { @@ -48,9 +48,9 @@ export type What3wordsService = { export function what3words( apiKey?: string, config?: ApiClientConfiguration, - opts?: { transport: 'fetch' | 'axios' | Transport } + opts?: { transport: Transport } ): What3wordsService { - const transport = getTransport(opts?.transport); + const transport = opts?.transport || require('./lib').fetchTransport(); const autosuggestClient = new AutosuggestClient(apiKey, config, transport); const availableLanguagesClient = new AvailableLanguagesClient( apiKey, diff --git a/test/service.spec.ts b/test/service.spec.ts index 4d04003..0119e46 100644 --- a/test/service.spec.ts +++ b/test/service.spec.ts @@ -5,6 +5,7 @@ import what3words, { ApiClientConfiguration, ApiVersion, searchParams, + axiosTransport, } from '../src'; import { What3wordsService } from '../src/service'; @@ -120,7 +121,7 @@ describe('what3words', () => { describe('Axios Transport', () => { let input: string; beforeEach(() => { - service = what3words(apiKey, config, { transport: 'axios' }); + service = what3words(apiKey, config, { transport: axiosTransport() }); input = CHANCE.string(); nock(`${config.host!}/${config.apiVersion}`) .get(`/autosuggest?${searchParams({ input, key: apiKey })}`)