Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
dd69eb5
Remove response buildeer
ndelvalle Jun 15, 2020
4d527de
Remove response buildeer
ndelvalle Jun 15, 2020
7c33df2
Merge branch 'master' into remove-response-handler
ndelvalle Jun 29, 2020
e8f2b60
Merge branch 'master' into remove-response-handler
ndelvalle Jul 6, 2020
3554d6e
Merge branch 'master' into remove-response-handler
ndelvalle Jul 13, 2020
dd6da1c
Merge branch 'master' into remove-response-handler
ndelvalle Jul 20, 2020
c42df0c
Merge branch 'master' into remove-response-handler
ndelvalle Jul 27, 2020
c0c0351
Merge branch 'master' into remove-response-handler
ndelvalle Aug 3, 2020
33996ee
Merge branch 'master' into remove-response-handler
ndelvalle Aug 15, 2020
3c669c1
Merge branch 'master' into remove-response-handler
ndelvalle Aug 18, 2020
f854865
build(deps-dev): Bump tsdx from 0.13.2 to 0.13.3
dependabot-preview[bot] Aug 24, 2020
dfbd637
build(deps-dev): Bump np from 6.4.0 to 6.5.0
dependabot-preview[bot] Aug 31, 2020
1c4a91b
build(deps-dev): Bump husky from 4.2.5 to 4.3.0
dependabot-preview[bot] Sep 7, 2020
d901387
build(deps-dev): Bump @types/jest from 26.0.10 to 26.0.13
dependabot-preview[bot] Sep 7, 2020
22133b4
build(deps-dev): Bump node-fetch from 2.6.0 to 2.6.1
dependabot-preview[bot] Sep 8, 2020
ea96c47
build(deps-dev): Bump @types/jest from 26.0.13 to 26.0.14
dependabot-preview[bot] Sep 21, 2020
738233f
build(deps): Bump query-string from 6.13.1 to 6.13.2
dependabot-preview[bot] Sep 14, 2020
5aab64d
build(deps): Bump query-string from 6.13.2 to 6.13.3
dependabot-preview[bot] Sep 28, 2020
0fe893c
Refactor API
ndelvalle Oct 1, 2020
f86d1a9
Update tests and trae implementation
ndelvalle Oct 5, 2020
4cd4714
Update lint warnings
ndelvalle Oct 5, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3,959 changes: 1,551 additions & 2,408 deletions package-lock.json

Large diffs are not rendered by default.

13 changes: 7 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,26 @@
"node": ">=10"
},
"dependencies": {
"query-string": "^6.11.1"
"merge": "^1.2.1",
"query-string": "^6.13.3"
},
"devDependencies": {
"@types/body-parser": "^1.19.0",
"@types/connect": "^3.4.33",
"@types/jest": "^26.0.10",
"@types/jest": "^26.0.14",
"@types/node-fetch": "^2.5.5",
"@types/query-string": "^6.3.0",
"body-parser": "^1.19.0",
"connect": "^3.7.0",
"coveralls": "^3.0.9",
"fetch-mock": "^9.10.7",
"http-shutdown": "^1.2.2",
"husky": "^4.2.3",
"husky": "^4.3.0",
"nock": "^13.0.4",
"node-fetch": "^2.6.0",
"np": "^6.2.2",
"node-fetch": "^2.6.1",
"np": "^6.5.0",
"rollup-plugin-filesize": "^6.2.1",
"tsdx": "^0.13.0",
"tsdx": "^0.13.3",
"tslib": "^2.0.0",
"typescript": "^3.8.3"
},
Expand Down
24 changes: 0 additions & 24 deletions src/create-request-body.ts

This file was deleted.

96 changes: 0 additions & 96 deletions src/create-response.ts

This file was deleted.

16 changes: 16 additions & 0 deletions src/error.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// https://reddit.com/r/typescript/comments/9u9107/extends_error_not_working/e92juau/?utm_source=reddit&utm_medium=web2x&context=3
// https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work
export class TraeError extends Error {
__proto__ = Error;

public statusText?: string;
public status?: number;

constructor(statusText: string, status: number) {
super(statusText);
this.statusText = statusText;
this.status = status;

Object.setPrototypeOf(this, TraeError.prototype);
}
}
51 changes: 0 additions & 51 deletions src/guards.ts

This file was deleted.

106 changes: 104 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,105 @@
import createTrae from './trae';
// @ts-nocheck

export default createTrae;
import { format as formatUrl } from './url';
import { TraeSettings, TraeResponse } from './types';
// import { merge } from './utils';
import { TraeError } from './error';
import merge from 'merge';

function createTrae(providedConfig: Partial<TraeSettings> = {}) {
// TODO: Implement Object.freeze with TS
const defaults: TraeSettings = {
before: (conf: RequestInit) => conf,
after: (res: any) => res,
headers: {},
...providedConfig,
};

// TODO: Fix TS
if (providedConfig.json) {
defaults.headers['Content-Type'] = 'application/json';
}

async function request(endpoint: string, settings: TraeSettings) {
// TODO: We should extract some attributes to avoid exposing unnecessary
// data to the before middleware and fetch function.
// Example: 'middleware' attribute.

const url = formatUrl(settings.url, endpoint, settings.params);
const options = defaults.before(settings);
const res: TraeResponse = await fetch(url, options);

if (!res.ok) {
throw new TraeError(res.statusText, res.status);
}

if (settings.json) {
res.data = await res.json();
}

return defaults.after(res, settings);
}

function create(instanceConfig: Partial<TraeSettings>) {
return createTrae(merge({}, defaults, instanceConfig));
}

function get(endpoint: string, requestConfig?: RequestInit) {
const settings: TraeSettings = merge(defaults, requestConfig);
return request(endpoint, { ...settings, method: 'GET' });
}

function remove(endpoint: string, requestConfig?: RequestInit) {
const settings: TraeSettings = merge(defaults, requestConfig);
return request(endpoint, { ...settings, method: 'DELETE' });
}

function head(endpoint: string, requestConfig?: RequestInit) {
const settings: TraeSettings = merge(defaults, requestConfig);
return request(endpoint, { ...settings, method: 'HEAD' });
}

function post(endpoint: string, body: BodyInit, requestConfig?: RequestInit) {
const settings: TraeSettings = merge(defaults, requestConfig);
return request(endpoint, {
...settings,
method: 'POST',
body: settings.json ? JSON.stringify(body) : body,
});
}

function put(endpoint: string, body: BodyInit, requestConfig?: RequestInit) {
const settings: TraeSettings = merge(defaults, requestConfig);
return request(endpoint, {
...settings,
method: 'PUT',
body: settings.json ? JSON.stringify(body) : body,
});
}

function patch(
endpoint: string,
body: BodyInit,
requestConfig?: RequestInit,
) {
const settings: TraeSettings = merge(defaults, requestConfig);
return request(endpoint, {
...settings,
method: 'PATCH',
body: settings.json ? JSON.stringify(body) : body,
});
}

return {
create,
get,
delete: remove,
head,
post,
put,
patch,
config: defaults,
};
}

export default createTrae();
Loading