Skip to content

Commit

Permalink
feat: 脱离axios
Browse files Browse the repository at this point in the history
BREAKING CHANGE: 不在主动引入axios,使用时需要手动AxiosRequestTemplate.useAxios(axios)
  • Loading branch information
mengxinssfd committed Aug 6, 2022
1 parent 8d1f6c5 commit 46a46b7
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 12 deletions.
2 changes: 2 additions & 0 deletions __test__/AxiosRequestTemplate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import { routers } from './mock-server';
import { StatusHandlers, AxiosRequestTemplate, CustomConfig } from '../src';

jest.mock('axios');
import './utils';

const map = new Map<string, Function>();
const mockCreate = (/*config: AxiosRequestConfig*/) => {
// console.log(config);
Expand Down
1 change: 1 addition & 0 deletions __test__/Other.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// 其他域名请求
import { StatusHandlers, AxiosRequestTemplate, CustomConfig } from '../src';
import './utils';

interface MyCustomConfig extends CustomConfig {
p1?: number;
Expand Down
1 change: 1 addition & 0 deletions __test__/Primary.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// 主域名请求
import { StatusHandlers, AxiosRequestTemplate } from '../src';
import './utils';

const statusHandlers: StatusHandlers = {
200: async (config, res, data) => {
Expand Down
2 changes: 1 addition & 1 deletion __test__/cacheConfig.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useMockAxios, routers } from './mock-server';
useMockAxios(routers);
import { AxiosRequestTemplate, CustomConfig } from '../src';

import './utils';
describe('mock cacheConfig', () => {
test('empty global', async () => {
const req = new AxiosRequestTemplate();
Expand Down
6 changes: 4 additions & 2 deletions __test__/utils.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { AxiosRequestConfig, AxiosResponse } from 'axios';
import { ResType } from '../src';
import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';
import { ResType, AxiosRequestTemplate } from '../src';

AxiosRequestTemplate.useAxios(axios);
export async function sleep(delay: number) {
return new Promise<void>((res) => {
setTimeout(() => res(), delay);
Expand All @@ -17,6 +18,7 @@ export function mockAxiosResponse(
status,
};
}

/*export function mockAxiosError(
requestConfig: AxiosRequestConfig,
data: any,
Expand Down
15 changes: 10 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,22 @@
"name": "request-template",
"version": "0.1.8",
"description": "请求模板封装",
"main": "dist/index.js",
"main": "dist/index.cjs.js",
"module": "dist/index.js",
"typings": "./types/",
"sideEffects": false,
"files": [
"dist/*.js",
"types/*"
"types/*",
"CHANGELOG.md"
],
"scripts": {
"test": "jest",
"cov": "jest --coverage",
"build": "tsc --build tsconfig.build.json",
"del-dist": "rimraf dist",
"build:esm": "tsc --build tsconfig.build.json",
"build:cjs": "esbuild --bundle src/index.ts --format=cjs --outfile=dist/index.cjs.js",
"build": "run-s del-dist build:cjs build:esm apie",
"babel": "babel dist --out-dir dist",
"type-check": "tsc --noEmit",
"pub": "npm publish",
Expand All @@ -24,7 +29,6 @@
"prepublish": "tsc --build tsconfig.build.json",
"realease": "run-s check-all build babel pub",
"apie": "api-extractor run",
"build:cjs": "esbuild --bundle src/index.ts --minify --format=cjs --outfile=dist/index.cjs.js",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
},
"repository": {
Expand All @@ -43,7 +47,7 @@
"devDependencies": {
"@babel/cli": "^7.17.6",
"@babel/core": "^7.17.9",
"@microsoft/api-extractor": "^7.28.2",
"@microsoft/api-extractor": "^7.29.0",
"@types/jest": "^27.4.1",
"@typescript-eslint/eslint-plugin": "^5.19.0",
"@typescript-eslint/parser": "^5.19.0",
Expand All @@ -56,6 +60,7 @@
"jest": "^27.5.1",
"npm-run-all": "^4.1.5",
"prettier": "^2.6.2",
"rimraf": "^3.0.2",
"ts-jest": "^27.1.4",
"tslib": "^2.3.1",
"typescript": "^4.6.3"
Expand Down
15 changes: 11 additions & 4 deletions src/AxiosRequestTemplate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@ import type {
Configs,
StatusHandlers,
} from './types';
import axios, {
import type {
AxiosInstance,
AxiosPromise,
AxiosRequestConfig,
AxiosResponse,
Method,
Canceler,
AxiosError,
AxiosStatic,
} from 'axios';
import { Cache } from './Cache';
import { Context, CustomCacheConfig, RetryContext } from './types';
Expand All @@ -25,6 +26,12 @@ import { mergeObj } from './utils';
* 自定义配置可继承CustomConfig实现
*/
export class AxiosRequestTemplate<CC extends CustomConfig = CustomConfig> {
protected static axios: AxiosStatic;

static useAxios(axios: AxiosStatic) {
AxiosRequestTemplate.axios = axios;
}

/**
* axios实例
*/
Expand Down Expand Up @@ -65,7 +72,7 @@ export class AxiosRequestTemplate<CC extends CustomConfig = CustomConfig> {
*/
protected init() {
// 1、保存基础配置
this.axiosIns = axios.create(this.globalConfigs.requestConfig);
this.axiosIns = AxiosRequestTemplate.axios.create(this.globalConfigs.requestConfig);
// 2、缓存初始化
this.cache = new Cache();
}
Expand Down Expand Up @@ -109,7 +116,7 @@ export class AxiosRequestTemplate<CC extends CustomConfig = CustomConfig> {
*/
protected handleCanceler(ctx: Context<CC>) {
const { requestConfig, customConfig, clearSet } = ctx;
const { cancel, token } = axios.CancelToken.source();
const { cancel, token } = AxiosRequestTemplate.axios.CancelToken.source();
requestConfig.cancelToken = token;
const tag = customConfig.tag;

Expand Down Expand Up @@ -379,7 +386,7 @@ export class AxiosRequestTemplate<CC extends CustomConfig = CustomConfig> {
* 使isCancel支持子类覆盖
*/
protected isCancel(value: any) {
return axios.isCancel(value);
return AxiosRequestTemplate.axios.isCancel(value);
}

/**
Expand Down

0 comments on commit 46a46b7

Please sign in to comment.