From 1f002e6ff5ed9758c0dd34ad0ac6cc47ddbdc0d9 Mon Sep 17 00:00:00 2001 From: Marton Lederer Date: Tue, 21 Jul 2020 11:43:15 +0200 Subject: [PATCH] Fix instance --- README.md | 23 +++++++++++++++-------- lib/main.ts | 20 +++++++++++--------- lib/src/Requester.ts | 6 +++++- tests/mod_test.ts | 24 ++++++++++++------------ 4 files changed, 43 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 9ed8160..b8c0591 100644 --- a/README.md +++ b/README.md @@ -26,20 +26,20 @@ You can also access all requests with their respective lowercase shortcuts ```ts - const { res, err } = await summon.post('https://example.com/post', { // you can also use shortcuts to response and error (res, err) + const { res } = await summon.post('https://example.com/post', { // you can also use shortcuts to response and error (res, err) title: 'test', description: 'This is a test description for a new post' }) // or - const { res, err } = await summon.put(...) - const { res, err } = await summon.delete(...) - const { res, err } = await summon.patch(...) - const { res, err } = await summon.options(...) - const { res, err } = await summon.head(...) - const { res, err } = await summon.connect(...) - const { res, err } = await summon.trace(...) + const { res } = await summon.put(...) + const { res } = await summon.delete(...) + const { res } = await summon.patch(...) + const { res } = await summon.options(...) + const { res } = await summon.head(...) + const { res } = await summon.connect(...) + const { res } = await summon.trace(...) ``` ## Summon API @@ -79,6 +79,13 @@ }) ``` + +### Instance + You can create an instance of summon with the `create()` function + ```ts + const INSTANCE = summon.create({ baseURL: 'https://api.github.com/' }) + ``` + # License Licensed under the [MIT License](https://github.com/MartonDev/summon/blob/master/LICENSE) Contributions are welcome. \ No newline at end of file diff --git a/lib/main.ts b/lib/main.ts index b52f19d..47c9fc7 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -4,6 +4,8 @@ import { doRequest } from './src/Requester.ts' // summon API export async function summon (urlOrConfig: string | IRequest, config?: IRequest): Promise { + console.log(summon.defaultConfig); + if(config !== undefined && typeof urlOrConfig === 'string') // the url parameter is acutally used return doRequest(Object.assign({}, summon.defaultConfig, { urlOrConfig }, config)) // overwriting the default values else if(typeof urlOrConfig !== 'string') // the url parameter is not acutally used, but as a config @@ -15,19 +17,19 @@ export async function summon (urlOrConfig: string | IRequest, config?: IRequest) // shortcuts summon.get = async (url: string, config?: IRequest): Promise => doRequest(Object.assign({}, { url }, config, { method: 'get' })) -summon.post = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, summon.defaultConfig, { url }, config, { method: 'post', data })) -summon.delete = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, summon.defaultConfig, { url }, config, { method: 'delete', data })) -summon.put = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, summon.defaultConfig, { url }, config, { method: 'put', data })) -summon.options = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, summon.defaultConfig, { url }, config, { method: 'options', data })) -summon.head = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, summon.defaultConfig, { url }, config, { method: 'head', data })) -summon.connect = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, summon.defaultConfig, { url }, config, { method: 'connect', data })) -summon.trace = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, summon.defaultConfig, { url }, config, { method: 'trace', data })) -summon.patch = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, summon.defaultConfig, { url }, config, { method: 'patch', data })) +summon.post = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, { url }, config, { method: 'post', data })) +summon.delete = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, { url }, config, { method: 'delete', data })) +summon.put = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, { url }, config, { method: 'put', data })) +summon.options = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, { url }, config, { method: 'options', data })) +summon.head = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, { url }, config, { method: 'head', data })) +summon.connect = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, { url }, config, { method: 'connect', data })) +summon.trace = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, { url }, config, { method: 'trace', data })) +summon.patch = async (url: string, data?: IData | string | FormData, config?: IRequest): Promise => doRequest(Object.assign({}, { url }, config, { method: 'patch', data })) // create an instace of summon summon.create = (config?: IRequest) => { - const summonInstance = Object.assign({}, summon) + const summonInstance = summon summonInstance.defaultConfig = Object.assign({}, summon.defaultConfig, config) // add a default config for the instance overriding the summon default with user specified one diff --git a/lib/src/Requester.ts b/lib/src/Requester.ts index 943af01..ddd56ac 100644 --- a/lib/src/Requester.ts +++ b/lib/src/Requester.ts @@ -25,11 +25,15 @@ export async function doRequest ({ url = '/' // using base url ? - if(baseURL) + if(baseURL) { + if(url.includes('://')) throw new Error('Base URL is already given, counting url as an URI. You cannot use a protocol with an URI.') // if there is a base url, we count the url field as an URI, so it cannot have a protocol else url = concatURL(baseURL, url) // concat base url with the URI string + + }else if(!url.includes('://')) + throw new Error(`No base URL for URI ${ url }`) // method exists ? if(method) { diff --git a/tests/mod_test.ts b/tests/mod_test.ts index 72e98d5..6713a36 100644 --- a/tests/mod_test.ts +++ b/tests/mod_test.ts @@ -86,35 +86,35 @@ Deno.test({ }) Deno.test({ - - name: 'Test summon shortcuts #1 - GET request\n', + + name: 'Test summon instance #1 - GET request\n', async fn () { - let { response, error } = await summon.get('https://api.github.com/repos/nestdotland/nest.land') + const INSTANCE = summon.create({ baseURL: 'https://api.github.com/users' }) + + let { response, error } = await INSTANCE({ url: '/MartonDev' }) if(error) throw new Error(JSON.stringify(error)) else if(response) - console.log(`Got response. The nest.land repo has ${ response.data.stargazers_count } starts, ${ response.data.forks_count } forks and is written in ${ response.data.language }.`) + console.log(`Marton Lederer has ${ response.data.public_repos } public repos`) } - + }) Deno.test({ - - name: 'Test summon instance #1 - GET request\n', + + name: 'Test summon shortcuts #1 - GET request\n', async fn () { - const INSTANCE = summon.create({ baseURL: 'https://api.github.com' }) - - let { response, error } = await INSTANCE.get('users/MartonDev') + let { response, error } = await summon.get('https://api.github.com/repos/nestdotland/nest.land') if(error) throw new Error(JSON.stringify(error)) else if(response) - console.log(`Marton Lederer has ${ response.data.public_repos } public repos`) + console.log(`Got response. The nest.land repo has ${ response.data.stargazers_count } starts, ${ response.data.forks_count } forks and is written in ${ response.data.language }.`) } - + }) \ No newline at end of file