Skip to content

Commit

Permalink
Merge pull request #31 from kvendrik/feature/improve-getaborttoken
Browse files Browse the repository at this point in the history
improves getAbortToken
  • Loading branch information
kvendrik committed Jun 23, 2018
2 parents 1f32483 + 8d1a278 commit 64f27aa
Show file tree
Hide file tree
Showing 10 changed files with 53 additions and 11 deletions.
17 changes: 9 additions & 8 deletions src/FetchREST.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import queryObjectToString, {QueryObject} from './queryObjectToString';
import {
queryObjectToString,
QueryObject,
createUniqueIDFactory,
} from './utilities';

export type Payload = RequestInit['body'] | object;

Expand Down Expand Up @@ -26,6 +30,8 @@ export type GlobalRequestOptionsGetter = () => GlobalRequestOptions;

export type Middleware = (response: Promise<Response>) => Promise<Response>;

const getUniqueAbortToken = createUniqueIDFactory('abort-token');

export default class FetchREST {
private globalOptions: GlobalRequestOptions | GlobalRequestOptionsGetter;
private requestMiddleware: Middleware;
Expand Down Expand Up @@ -88,14 +94,9 @@ export default class FetchREST {
}
}

// eslint-disable-next-line class-methods-use-this
getAbortToken() {
let token = '';
while (token === '' || this.abortControllers[token]) {
token = Math.random()
.toString(36)
.substring(2, 15);
}
return token;
return getUniqueAbortToken();
}

private request(
Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ export {
GlobalRequestOptionsGetter,
Middleware,
} from './FetchREST';
export {QueryObject} from './queryObjectToString';
export {QueryObject} from './utilities';
10 changes: 8 additions & 2 deletions src/tests/FetchREST.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -760,8 +760,14 @@ describe('getAbortToken', () => {
const fetchRest = new FetchREST({
apiUrl: 'https://api.github.com',
});
const token = fetchRest.getAbortToken();
expect(typeof token).toBe('string');

const tokens = [];

for (let i = 0; i < 10; i += 1) {
const newToken = fetchRest.getAbortToken();
expect(tokens).not.toContain(newToken);
tokens.push(newToken);
}
});
});

Expand Down
7 changes: 7 additions & 0 deletions src/utilities/createUniqueIDFactory/createUniqueIDFactory.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export default function createUniqueIDFactory(prefix: string) {
let index = 0;
return () => {
index += 1;
return `${prefix}${index}`;
};
}
1 change: 1 addition & 0 deletions src/utilities/createUniqueIDFactory/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export {default} from './createUniqueIDFactory';
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import createUniqueIDFactory from '../createUniqueIDFactory';

describe('createUniqueIDFactory', () => {
it('returns a new function that returns a string', () => {
const factory = createUniqueIDFactory('unique-token');
expect(typeof factory()).toBe('string');
});

it('prefixes the number with the given prefix', () => {
const factory = createUniqueIDFactory('unique-token');
expect(factory()).toBe('unique-token1');
});

it('increases the appended number every time its called', () => {
const factory = createUniqueIDFactory('unique-token');
expect(factory()).toBe('unique-token1');
expect(factory()).toBe('unique-token2');
expect(factory()).toBe('unique-token3');
expect(factory()).toBe('unique-token4');
});
});
5 changes: 5 additions & 0 deletions src/utilities/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export {
default as queryObjectToString,
QueryObject,
} from './queryObjectToString';
export {default as createUniqueIDFactory} from './createUniqueIDFactory';
1 change: 1 addition & 0 deletions src/utilities/queryObjectToString/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export {default, QueryObject} from './queryObjectToString';
File renamed without changes.
File renamed without changes.

0 comments on commit 64f27aa

Please sign in to comment.