Skip to content

Commit

Permalink
feat: added isAxiosCacheInterceptor function
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurfiorette committed Dec 31, 2021
1 parent e6a9d12 commit c32c452
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 4 deletions.
15 changes: 15 additions & 0 deletions src/cache/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import type { CacheInstance, CacheProperties } from './cache';

export type CacheOptions = Partial<CacheInstance> & Partial<CacheProperties>;

const symbolKey = Symbol();

/**
* Apply the caching interceptors for a already created axios instance.
*
Expand Down Expand Up @@ -87,10 +89,23 @@ export function setupCache(
axiosCache.requestInterceptor.use();
axiosCache.responseInterceptor.use();

// @ts-expect-error - internal only
axiosCache[symbolKey] = 1;

return axiosCache;
}

/** @deprecated */
export const useCache = setupCache as unknown as 'use setupCache instead';
/** @deprecated */
export const createCache = setupCache as unknown as 'use setupCache instead';

/**
* Detects if the given parameter has caching enabled. The only way to this return true is
* by using the {@link setupCache} function.
*
* @param axios The axios instance to use
* @returns True if the axios instance is using the caching interceptor
*/
export const isAxiosCacheInterceptor = (axios: any): axios is AxiosCacheInstance =>
!!axios && !!axios[symbolKey];
7 changes: 6 additions & 1 deletion src/index.browser.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
/** Index file for webpack and cdn usage */

export { createCache, setupCache, useCache } from './cache/create';
export {
createCache,
isAxiosCacheInterceptor,
setupCache,
useCache
} from './cache/create';
export { BrowserAxiosStorage } from './storage/browser';
export { MemoryAxiosStorage } from './storage/memory';
export { AxiosStorage } from './storage/storage';
7 changes: 6 additions & 1 deletion src/index.development.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
/** Index file for webpack and cdn usage */

export { createCache, setupCache, useCache } from './cache/create';
export {
createCache,
isAxiosCacheInterceptor,
setupCache,
useCache
} from './cache/create';
export { BrowserAxiosStorage } from './storage/browser';
export { MemoryAxiosStorage } from './storage/memory';
export { AxiosStorage } from './storage/storage';
Expand Down
4 changes: 3 additions & 1 deletion test/bundle.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { setupCache } from '../src/cache/create';
import { isAxiosCacheInterceptor, setupCache } from '../src/cache/create';
import { BrowserAxiosStorage } from '../src/storage/browser';
import { MemoryAxiosStorage } from '../src/storage/memory';
import { AxiosStorage } from '../src/storage/storage';
Expand All @@ -8,6 +8,7 @@ describe('test bundle imports', () => {
const bundle = await import('../src/index.browser');

expect(bundle.setupCache).toBe(setupCache);
expect(bundle.isAxiosCacheInterceptor).toBe(isAxiosCacheInterceptor);
expect(bundle.AxiosStorage).toBe(AxiosStorage);
expect(bundle.BrowserAxiosStorage).toBe(BrowserAxiosStorage);
expect(bundle.MemoryAxiosStorage).toBe(MemoryAxiosStorage);
Expand All @@ -22,6 +23,7 @@ describe('test bundle imports', () => {
expect(console.warn).toHaveBeenCalledTimes(1);

expect(bundle.setupCache).toBe(setupCache);
expect(bundle.isAxiosCacheInterceptor).toBe(isAxiosCacheInterceptor);
expect(bundle.AxiosStorage).toBe(AxiosStorage);
expect(bundle.BrowserAxiosStorage).toBe(BrowserAxiosStorage);
expect(bundle.MemoryAxiosStorage).toBe(MemoryAxiosStorage);
Expand Down
16 changes: 15 additions & 1 deletion test/cache/create.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Axios from 'axios';
import { setupCache } from '../../src/cache/create';
import { isAxiosCacheInterceptor, setupCache } from '../../src/cache/create';

describe('tests header interpreter', () => {
it('tests argument composition', () => {
Expand All @@ -11,4 +11,18 @@ describe('tests header interpreter', () => {
expect(withConfig).not.toBeUndefined();
expect(withConfig.defaults.cache.ttl).toBe(1234);
});

it('tests isAxiosCacheInterceptor', () => {
expect(isAxiosCacheInterceptor(void 0)).toBe(false);
expect(isAxiosCacheInterceptor(1)).toBe(false);
expect(isAxiosCacheInterceptor('a')).toBe(false);
expect(isAxiosCacheInterceptor({})).toBe(false);
expect(isAxiosCacheInterceptor(Axios)).toBe(false);
expect(isAxiosCacheInterceptor(() => 0)).toBe(false);
expect(isAxiosCacheInterceptor(null)).toBe(false);
expect(isAxiosCacheInterceptor(undefined)).toBe(false);
expect(isAxiosCacheInterceptor({ a: 1, b: 'a' })).toBe(false);

expect(isAxiosCacheInterceptor(setupCache(Axios.create()))).toBe(true);
});
});

0 comments on commit c32c452

Please sign in to comment.