Skip to content

Commit 1f7b082

Browse files
authored
feat: export urllib types (#5127)
fix cnpm/cnpmcore#370
1 parent 4995628 commit 1f7b082

File tree

5 files changed

+44
-14
lines changed

5 files changed

+44
-14
lines changed

.github/workflows/nodejs.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ jobs:
1616
with:
1717
os: 'ubuntu-latest, macos-latest, windows-latest'
1818
version: '14, 16, 18'
19-
install: 'npm install --legacy-peer-deps --no-package-lock --no-fund'
19+
install: 'npm i -g npminstall && npminstall'

index.d.ts

+25-7
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@ import {
1414
EggLoggerOptions,
1515
EggContextLogger,
1616
} from 'egg-logger';
17-
import { RequestOptions2 as RequestOptions, HttpClientResponse } from 'urllib';
1817
import {
19-
RequestURL, RequestOptions as RequestOptionsNext,
18+
RequestOptions2 as RequestOptionsOld,
19+
HttpClientResponse as HttpClientResponseOld,
20+
} from 'urllib';
21+
import {
22+
RequestURL,
23+
RequestOptions as RequestOptionsNext,
2024
HttpClientResponse as HttpClientResponseNext,
2125
} from 'urllib-next';
2226
import {
@@ -49,13 +53,27 @@ declare module 'egg' {
4953
// Remove specific property from the specific class
5054
type RemoveSpecProp<T, P> = Pick<T, Exclude<keyof T, P>>;
5155

56+
// Usage:
57+
// ```ts
58+
// import { HttpClientRequestURL, HttpClientRequestOptions, HttpClientResponse } from 'egg';
59+
// async function request(url: HttpClientRequestURL, options: HttpClientRequestOptions): Promise<HttpClientResponse> {
60+
// return await app.httpclient.request(url, options);
61+
// }
62+
// ```
63+
export type HttpClientRequestURL = RequestURL;
64+
export type HttpClientRequestOptions = RequestOptionsNext;
65+
export type HttpClientResponse<T = any> = HttpClientResponseNext<T>;
66+
5267
// Compatible with both urllib@2 and urllib@3 RequestOptions to request
5368
export interface EggHttpClient extends EventEmitter {
54-
request<T = any>(url: RequestURL): Promise<HttpClientResponse<T> | HttpClientResponseNext>;
55-
request<T = any>(url: RequestURL, options: RequestOptions | RequestOptionsNext): Promise<HttpClientResponse<T> | HttpClientResponseNext>;
56-
curl<T = any>(url: RequestURL): Promise<HttpClientResponse<T> | HttpClientResponseNext>;
57-
curl<T = any>(url: RequestURL, options: RequestOptions | RequestOptionsNext): Promise<HttpClientResponse<T> | HttpClientResponseNext>;
69+
request<T = any>(url: HttpClientRequestURL): Promise<HttpClientResponseOld<T> | HttpClientResponse<T>>;
70+
request<T = any>(url: HttpClientRequestURL, options: RequestOptionsOld | HttpClientRequestOptions):
71+
Promise<HttpClientResponseOld<T> | HttpClientResponse<T>>;
72+
curl<T = any>(url: HttpClientRequestURL): Promise<HttpClientResponseOld<T> | HttpClientResponse<T>>;
73+
curl<T = any>(url: HttpClientRequestURL, options: RequestOptionsOld | HttpClientRequestOptions):
74+
Promise<HttpClientResponseOld<T> | HttpClientResponse<T>>;
5875
}
76+
5977
interface EggHttpConstructor {
6078
new(app: Application): EggHttpClient;
6179
}
@@ -278,7 +296,7 @@ declare module 'egg' {
278296
/** https.Agent */
279297
httpsAgent?: HttpClientBaseConfig;
280298
/** Default request args for httpclient */
281-
request?: RequestOptions;
299+
request?: HttpClientRequestOptions | RequestOptionsOld;
282300
/** Whether enable dns cache */
283301
enableDNSCache?: boolean;
284302
/** Enable proxy request, default is false. */

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@
6969
"dumi": "^1.1.47",
7070
"dumi-theme-egg": "^1.2.2",
7171
"egg-bin": "^5",
72-
"egg-mock": "^5.4.0",
72+
"egg-mock": "^5.9.2",
7373
"egg-plugin-puml": "^2.4.0",
74-
"egg-tracer": "^1.1.0",
74+
"egg-tracer": "^2.0.0",
7575
"egg-view-nunjucks": "^2.3.0",
7676
"eslint": "^8.23.1",
7777
"eslint-config-egg": "^12.0.0",

test/app/extend/request.test.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ describe('test/app/extend/request.test.js', () => {
341341
accept: 'text/html',
342342
},
343343
url: '/',
344-
});
344+
}, { reuseCtxStorage: false });
345345
context.type = 'application/json';
346346
assert(context.request.acceptJSON === true);
347347
});
@@ -352,8 +352,8 @@ describe('test/app/extend/request.test.js', () => {
352352
accept: 'application/json',
353353
},
354354
url: '/',
355-
});
356-
assert(context.request.acceptJSON === true);
355+
}, { reuseCtxStorage: false });
356+
assert.equal(context.request.acceptJSON, true);
357357
});
358358

359359
it('should false when do not accept json', async () => {
@@ -362,7 +362,7 @@ describe('test/app/extend/request.test.js', () => {
362362
accept: 'text/html',
363363
},
364364
url: '/',
365-
});
365+
}, { reuseCtxStorage: false });
366366
const request = context.request;
367367
assert(request.acceptJSON === false);
368368
});

test/fixtures/apps/app-ts-type-check/normal.ts

+12
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ import {
1010
PowerPartial,
1111
Singleton,
1212
start,
13+
HttpClientRequestURL,
14+
HttpClientRequestOptions,
15+
HttpClientResponse,
1316
} from 'egg';
1417

1518
// base context class
@@ -82,6 +85,15 @@ agent.httpclient.request('http://127.0.0.1', { method: 'GET' }).catch(() => {});
8285
agent.logger.info(agent.Service);
8386
agent.logger.info(agent.Controller);
8487

88+
async function request<T = any>(url: HttpClientRequestURL, options: HttpClientRequestOptions): Promise<HttpClientResponse<T>> {
89+
const response = await agent.httpclient.request<T>(url, options);
90+
return response as HttpClientResponse<T>;
91+
}
92+
93+
request<{ name: 'string' }>('http://127.0.0.1', {}).then(response => {
94+
console.log(response.data.name);
95+
});
96+
8597
// single process mode
8698
start({ baseDir: __dirname,ignoreWarning: true}).then(app=>{
8799
const port= 1002;

0 commit comments

Comments
 (0)