Skip to content

Commit 72e7011

Browse files
authored
Merge pull request #1548 from microsoft/feat/profile_compression
feat: disable default compression
2 parents 8f7f78f + 8ed62c2 commit 72e7011

12 files changed

+110
-37
lines changed

packages/http/fetch/src/browser/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export * from "../httpClient";
1313
export * from "../middlewares/middleware";
1414
export * from "../middlewares/chaosHandler";
1515
export * from "../middlewares/customFetchHandler";
16+
export * from "../middlewares/compressionHandler";
1617
export * from "../middlewares/headersInspectionHandler";
1718
export * from "../middlewares/parametersNameDecodingHandler";
1819
export * from "../middlewares/redirectHandler";
@@ -21,6 +22,7 @@ export * from "../middlewares/userAgentHandler";
2122
export * from "../middlewares/urlReplaceHandler";
2223
export * from "../middlewares/options/chaosHandlerOptions";
2324
export * from "../middlewares/options/chaosStrategy";
25+
export * from "../middlewares/options/compressionHandlerOptions";
2426
export * from "../middlewares/options/headersInspectionOptions";
2527
export * from "../middlewares/options/parametersNameDecodingOptions";
2628
export * from "../middlewares/options/redirectHandlerOptions";

packages/http/fetch/src/httpClient.ts

+4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ export class HttpClient {
3131
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
3232
middlewares.push(new CustomFetchHandler(customFetch as any));
3333
}
34+
// eslint-disable-next-line no-console
35+
console.debug("Registered middlewares: " + middlewares.map((m) => m.constructor.name).join(", "));
36+
// eslint-disable-next-line no-console
37+
console.debug("Hint: To improve performance, use MiddlewareFactory.getPerformanceMiddlewares(customFetch) instead of MiddlewareFactory.getDefaultMiddlewares(customFetch)");
3438

3539
// Set the middleware chain
3640
this.setMiddleware(...middlewares);

packages/http/fetch/src/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export * from "./httpClient";
1313
export * from "./middlewares/middleware";
1414
export * from "./middlewares/chaosHandler";
1515
export * from "./middlewares/customFetchHandler";
16+
export * from "./middlewares/compressionHandler";
1617
export * from "./middlewares/headersInspectionHandler";
1718
export * from "./middlewares/parametersNameDecodingHandler";
1819
export * from "./middlewares/redirectHandler";
@@ -21,6 +22,7 @@ export * from "./middlewares/userAgentHandler";
2122
export * from "./middlewares/urlReplaceHandler";
2223
export * from "./middlewares/options/chaosHandlerOptions";
2324
export * from "./middlewares/options/chaosStrategy";
25+
export * from "./middlewares/options/compressionHandlerOptions";
2426
export * from "./middlewares/options/headersInspectionOptions";
2527
export * from "./middlewares/options/parametersNameDecodingOptions";
2628
export * from "./middlewares/options/redirectHandlerOptions";

packages/http/fetch/src/middlewares/browser/middlewareFactory.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,17 @@ export class MiddlewareFactory {
2727
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
2828
public static getDefaultMiddlewares(customFetch: (request: string, init: RequestInit) => Promise<Response> = (...args) => fetch(...args) as any): Middleware[] {
2929
// Browsers handles redirection automatically and do not require the redirectionHandler
30-
return [new RetryHandler(), new ParametersNameDecodingHandler(), new UserAgentHandler(), new CompressionHandler(), new HeadersInspectionHandler(), new UrlReplaceHandler(), new CustomFetchHandler(customFetch)];
30+
return [new RetryHandler(), new ParametersNameDecodingHandler(), new UserAgentHandler(), new HeadersInspectionHandler(), new UrlReplaceHandler(), new CustomFetchHandler(customFetch)];
31+
}
32+
/**
33+
* @param customFetch - The custom fetch implementation
34+
* Returns the default middleware chain + performance middleware
35+
* @returns an array of the middleware handlers of the default + performance middleware chain
36+
*/
37+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
38+
public static getPerformanceMiddlewares(customFetch: (request: string, init: RequestInit) => Promise<Response> = (...args) => fetch(...args) as any): Middleware[] {
39+
const middlewares = MiddlewareFactory.getDefaultMiddlewares(customFetch);
40+
middlewares.splice(middlewares.length - 3, 0, new CompressionHandler()); // insert CompressionHandler before HeadersInspectionHandler
41+
return middlewares;
3142
}
3243
}

packages/http/fetch/src/middlewares/middlewareFactory.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,17 @@ export class MiddlewareFactory {
2727
*/
2828
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
2929
public static getDefaultMiddlewares(customFetch: (request: string, init: RequestInit) => Promise<Response> = (...args) => fetch(...args) as any): Middleware[] {
30-
return [new RetryHandler(), new RedirectHandler(), new ParametersNameDecodingHandler(), new UserAgentHandler(), new CompressionHandler(), new HeadersInspectionHandler(), new UrlReplaceHandler(), new CustomFetchHandler(customFetch)];
30+
return [new RetryHandler(), new RedirectHandler(), new ParametersNameDecodingHandler(), new UserAgentHandler(), new HeadersInspectionHandler(), new UrlReplaceHandler(), new CustomFetchHandler(customFetch)];
31+
}
32+
/**
33+
* @param customFetch - The custom fetch implementation
34+
* Returns the default middleware chain + performance middleware
35+
* @returns an array of the middleware handlers of the default + performance middleware chain
36+
*/
37+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
38+
public static getPerformanceMiddlewares(customFetch: (request: string, init: RequestInit) => Promise<Response> = (...args) => fetch(...args) as any): Middleware[] {
39+
const middlewares = MiddlewareFactory.getDefaultMiddlewares(customFetch);
40+
middlewares.splice(middlewares.length - 3, 0, new CompressionHandler()); // insert CompressionHandler before HeadersInspectionHandler
41+
return middlewares;
3142
}
3243
}

packages/http/fetch/src/middlewares/options/chaosHandlerOptions.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const ChaosHandlerOptionsKey = "ChaosHandlerOptionsKey";
1919
*/
2020
export interface ChaosHandlerOptions {
2121
/**
22-
* Speficies the base url path for the destination server, used when relative paths are preffered to strip out paths
22+
* Specifies the base url path for the destination server, used when relative paths are preferred to strip out paths
2323
*/
2424
baseUrl?: string;
2525
/**

packages/http/fetch/test/browser/httpClient.ts

+23-10
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77

88
import { assert, describe, it } from "vitest";
99

10-
import { CustomFetchHandler, HeadersInspectionHandler, HttpClient, Middleware, ParametersNameDecodingHandler, RedirectHandler, RetryHandler, UrlReplaceHandler, UserAgentHandler } from "../../src";
10+
import { CustomFetchHandler, HeadersInspectionHandler, HttpClient, MiddlewareFactory, ParametersNameDecodingHandler, RedirectHandler, RetryHandler, UrlReplaceHandler, UserAgentHandler, CompressionHandler } from "../../src";
1111
import { DummyFetchHandler } from "../common/middleware/dummyFetchHandler";
12-
import { CompressionHandler } from "../../src/middlewares/compressionHandler";
1312

1413
describe("browser - HTTPClient.ts", () => {
1514
describe("constructor", () => {
@@ -40,10 +39,9 @@ describe("browser - HTTPClient.ts", () => {
4039
assert.isTrue(next instanceof RedirectHandler);
4140
assert.isTrue(next?.next instanceof ParametersNameDecodingHandler);
4241
assert.isTrue(next?.next?.next instanceof UserAgentHandler);
43-
assert.isTrue(next?.next?.next?.next instanceof CompressionHandler);
44-
assert.isTrue(next?.next?.next?.next?.next instanceof HeadersInspectionHandler);
45-
assert.isTrue(next?.next?.next?.next?.next?.next instanceof UrlReplaceHandler);
46-
assert.isTrue(next?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
42+
assert.isTrue(next?.next?.next?.next instanceof HeadersInspectionHandler);
43+
assert.isTrue(next?.next?.next?.next?.next instanceof UrlReplaceHandler);
44+
assert.isTrue(next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
4745
});
4846

4947
it("Should set default middleware array with customFetchHandler if middleware parameter is undefined && customFetch is defined", () => {
@@ -57,10 +55,9 @@ describe("browser - HTTPClient.ts", () => {
5755
assert.isTrue(next instanceof RedirectHandler);
5856
assert.isTrue(next?.next instanceof ParametersNameDecodingHandler);
5957
assert.isTrue(next?.next?.next instanceof UserAgentHandler);
60-
assert.isTrue(next?.next?.next?.next instanceof CompressionHandler);
61-
assert.isTrue(next?.next?.next?.next?.next instanceof HeadersInspectionHandler);
62-
assert.isTrue(next?.next?.next?.next?.next?.next instanceof UrlReplaceHandler);
63-
assert.isTrue(next?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
58+
assert.isTrue(next?.next?.next?.next instanceof HeadersInspectionHandler);
59+
assert.isTrue(next?.next?.next?.next?.next instanceof UrlReplaceHandler);
60+
assert.isTrue(next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
6461
});
6562

6663
it("Should set to default fetch handler middleware array if middleware parameter is null && customFetch is undefined", () => {
@@ -78,5 +75,21 @@ describe("browser - HTTPClient.ts", () => {
7875
assert.equal(client["customFetch"], dummyCustomFetch);
7976
assert.isTrue(client["middleware"]?.next?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
8077
});
78+
79+
it("Should set performance middleware for the http client", () => {
80+
const client = new HttpClient(null, ...MiddlewareFactory.getPerformanceMiddlewares());
81+
82+
assert.isNotNull(client["middleware"]);
83+
const next = client["middleware"].next;
84+
85+
assert.isTrue(client["middleware"] instanceof RetryHandler);
86+
assert.isTrue(next instanceof RedirectHandler);
87+
assert.isTrue(next?.next instanceof ParametersNameDecodingHandler);
88+
assert.isTrue(next?.next?.next instanceof UserAgentHandler);
89+
assert.isTrue(next?.next?.next?.next instanceof CompressionHandler);
90+
assert.isTrue(next?.next?.next?.next?.next instanceof HeadersInspectionHandler);
91+
assert.isTrue(next?.next?.next?.next?.next?.next instanceof UrlReplaceHandler);
92+
assert.isTrue(next?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
93+
});
8194
});
8295
});

packages/http/fetch/test/browser/kiotaClientFactory.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import { assert, describe, it } from "vitest";
99

1010
import { CustomFetchHandler, HeadersInspectionHandler, KiotaClientFactory, ParametersNameDecodingHandler, RedirectHandler, RetryHandler, UrlReplaceHandler, UserAgentHandler } from "../../src";
11-
import { CompressionHandler } from "../../src/middlewares/compressionHandler";
1211

1312
describe("browser - KiotaClientFactory", () => {
1413
it("Should return the http client", () => {
@@ -20,9 +19,8 @@ describe("browser - KiotaClientFactory", () => {
2019
assert.isTrue(middleware?.next instanceof RedirectHandler);
2120
assert.isTrue(middleware?.next?.next instanceof ParametersNameDecodingHandler);
2221
assert.isTrue(middleware?.next?.next?.next instanceof UserAgentHandler);
23-
assert.isTrue(middleware?.next?.next?.next?.next instanceof CompressionHandler);
24-
assert.isTrue(middleware?.next?.next?.next?.next?.next instanceof HeadersInspectionHandler);
25-
assert.isTrue(middleware?.next?.next?.next?.next?.next?.next instanceof UrlReplaceHandler);
26-
assert.isTrue(middleware?.next?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
22+
assert.isTrue(middleware?.next?.next?.next?.next instanceof HeadersInspectionHandler);
23+
assert.isTrue(middleware?.next?.next?.next?.next?.next instanceof UrlReplaceHandler);
24+
assert.isTrue(middleware?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
2725
});
2826
});

packages/http/fetch/test/browser/middlewareFactory.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,22 @@
66
*/
77

88
import { assert, describe, it } from "vitest";
9-
import { CustomFetchHandler, HeadersInspectionHandler, MiddlewareFactory, ParametersNameDecodingHandler, RedirectHandler, RetryHandler, UrlReplaceHandler, UserAgentHandler } from "../../src";
10-
import { CompressionHandler } from "../../src/middlewares/compressionHandler";
9+
import { CustomFetchHandler, HeadersInspectionHandler, MiddlewareFactory, ParametersNameDecodingHandler, RedirectHandler, RetryHandler, UrlReplaceHandler, UserAgentHandler, CompressionHandler } from "../../src";
1110

1211
describe("browser - MiddlewareFactory", () => {
1312
it("Should return the default pipeline", () => {
1413
const defaultMiddleWareArray = MiddlewareFactory.getDefaultMiddlewares();
14+
assert.equal(defaultMiddleWareArray.length, 7);
15+
assert.isTrue(defaultMiddleWareArray[0] instanceof RetryHandler);
16+
assert.isTrue(defaultMiddleWareArray[1] instanceof RedirectHandler);
17+
assert.isTrue(defaultMiddleWareArray[2] instanceof ParametersNameDecodingHandler);
18+
assert.isTrue(defaultMiddleWareArray[3] instanceof UserAgentHandler);
19+
assert.isTrue(defaultMiddleWareArray[4] instanceof HeadersInspectionHandler);
20+
assert.isTrue(defaultMiddleWareArray[5] instanceof UrlReplaceHandler);
21+
assert.isTrue(defaultMiddleWareArray[6] instanceof CustomFetchHandler);
22+
});
23+
it("Should return the performance pipeline", () => {
24+
const defaultMiddleWareArray = MiddlewareFactory.getPerformanceMiddlewares();
1525
assert.equal(defaultMiddleWareArray.length, 8);
1626
assert.isTrue(defaultMiddleWareArray[0] instanceof RetryHandler);
1727
assert.isTrue(defaultMiddleWareArray[1] instanceof RedirectHandler);

packages/http/fetch/test/node/MiddlewareFactory.ts

+13-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,23 @@
77

88
import { assert, describe, it } from "vitest";
99

10-
import { CustomFetchHandler, HeadersInspectionHandler, MiddlewareFactory, ParametersNameDecodingHandler, RedirectHandler, RetryHandler, UrlReplaceHandler, UserAgentHandler } from "../../src";
11-
import { CompressionHandler } from "../../src/middlewares/compressionHandler";
10+
import { CustomFetchHandler, HeadersInspectionHandler, MiddlewareFactory, ParametersNameDecodingHandler, RedirectHandler, RetryHandler, UrlReplaceHandler, UserAgentHandler, CompressionHandler } from "../../src";
1211

1312
describe("node - MiddlewareFactory", () => {
1413
it("Should return the default pipeline", () => {
1514
const defaultMiddleWareArray = MiddlewareFactory.getDefaultMiddlewares();
15+
assert.equal(defaultMiddleWareArray.length, 7);
16+
17+
assert.isTrue(defaultMiddleWareArray[0] instanceof RetryHandler);
18+
assert.isTrue(defaultMiddleWareArray[1] instanceof RedirectHandler);
19+
assert.isTrue(defaultMiddleWareArray[2] instanceof ParametersNameDecodingHandler);
20+
assert.isTrue(defaultMiddleWareArray[3] instanceof UserAgentHandler);
21+
assert.isTrue(defaultMiddleWareArray[4] instanceof HeadersInspectionHandler);
22+
assert.isTrue(defaultMiddleWareArray[5] instanceof UrlReplaceHandler);
23+
assert.isTrue(defaultMiddleWareArray[6] instanceof CustomFetchHandler);
24+
});
25+
it("Should return the performance pipeline", () => {
26+
const defaultMiddleWareArray = MiddlewareFactory.getPerformanceMiddlewares();
1627
assert.equal(defaultMiddleWareArray.length, 8);
1728

1829
assert.isTrue(defaultMiddleWareArray[0] instanceof RetryHandler);

packages/http/fetch/test/node/httpClient.ts

+23-10
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77

88
import { assert, describe, it } from "vitest";
99

10-
import { CustomFetchHandler, HeadersInspectionHandler, HttpClient, ParametersNameDecodingHandler, RedirectHandler, RetryHandler, UrlReplaceHandler, UserAgentHandler } from "../../src";
10+
import { CustomFetchHandler, HeadersInspectionHandler, HttpClient, MiddlewareFactory, ParametersNameDecodingHandler, RedirectHandler, RetryHandler, UrlReplaceHandler, UserAgentHandler, CompressionHandler } from "../../src";
1111
import { DummyFetchHandler } from "../common/middleware/dummyFetchHandler";
12-
import { CompressionHandler } from "../../src/middlewares/compressionHandler";
1312

1413
describe("node - HTTPClient.ts", () => {
1514
describe("constructor", () => {
@@ -40,10 +39,9 @@ describe("node - HTTPClient.ts", () => {
4039
assert.isTrue(next instanceof RedirectHandler);
4140
assert.isTrue(next?.next instanceof ParametersNameDecodingHandler);
4241
assert.isTrue(next?.next?.next instanceof UserAgentHandler);
43-
assert.isTrue(next?.next?.next?.next instanceof CompressionHandler);
44-
assert.isTrue(next?.next?.next?.next?.next instanceof HeadersInspectionHandler);
45-
assert.isTrue(next?.next?.next?.next?.next?.next instanceof UrlReplaceHandler);
46-
assert.isTrue(next?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
42+
assert.isTrue(next?.next?.next?.next instanceof HeadersInspectionHandler);
43+
assert.isTrue(next?.next?.next?.next?.next instanceof UrlReplaceHandler);
44+
assert.isTrue(next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
4745
});
4846

4947
it("Should set default middleware array with customFetchHandler if middleware parameter is undefined && customFetch is defined", () => {
@@ -58,10 +56,9 @@ describe("node - HTTPClient.ts", () => {
5856
assert.isTrue(next instanceof RedirectHandler);
5957
assert.isTrue(next?.next instanceof ParametersNameDecodingHandler);
6058
assert.isTrue(next?.next?.next instanceof UserAgentHandler);
61-
assert.isTrue(next?.next?.next?.next instanceof CompressionHandler);
62-
assert.isTrue(next?.next?.next?.next?.next instanceof HeadersInspectionHandler);
63-
assert.isTrue(next?.next?.next?.next?.next?.next instanceof UrlReplaceHandler);
64-
assert.isTrue(next?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
59+
assert.isTrue(next?.next?.next?.next instanceof HeadersInspectionHandler);
60+
assert.isTrue(next?.next?.next?.next?.next instanceof UrlReplaceHandler);
61+
assert.isTrue(next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
6562
});
6663

6764
it("Should set to default fetch handler middleware array if middleware parameter is null && customFetch is undefined", () => {
@@ -78,5 +75,21 @@ describe("node - HTTPClient.ts", () => {
7875
assert.isDefined(client["middleware"]);
7976
assert.equal(client["customFetch"], dummyCustomFetch);
8077
});
78+
79+
it("Should set performance middleware for the http client", () => {
80+
const client = new HttpClient(null, ...MiddlewareFactory.getPerformanceMiddlewares());
81+
82+
assert.isNotNull(client["middleware"]);
83+
const next = client["middleware"].next;
84+
85+
assert.isTrue(client["middleware"] instanceof RetryHandler);
86+
assert.isTrue(next instanceof RedirectHandler);
87+
assert.isTrue(next?.next instanceof ParametersNameDecodingHandler);
88+
assert.isTrue(next?.next?.next instanceof UserAgentHandler);
89+
assert.isTrue(next?.next?.next?.next instanceof CompressionHandler);
90+
assert.isTrue(next?.next?.next?.next?.next instanceof HeadersInspectionHandler);
91+
assert.isTrue(next?.next?.next?.next?.next?.next instanceof UrlReplaceHandler);
92+
assert.isTrue(next?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
93+
});
8194
});
8295
});

packages/http/fetch/test/node/kiotaClientFactory.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import { assert, describe, it } from "vitest";
99
import { CustomFetchHandler, HeadersInspectionHandler, KiotaClientFactory, ParametersNameDecodingHandler, RedirectHandler, RetryHandler, UrlReplaceHandler, UserAgentHandler } from "../../src";
10-
import { CompressionHandler } from "../../src/middlewares/compressionHandler";
1110

1211
describe("browser - KiotaClientFactory", () => {
1312
it("Should return the http client", () => {
@@ -19,10 +18,9 @@ describe("browser - KiotaClientFactory", () => {
1918
assert.isTrue(middleware?.next instanceof RedirectHandler);
2019
assert.isTrue(middleware?.next?.next instanceof ParametersNameDecodingHandler);
2120
assert.isTrue(middleware?.next?.next?.next instanceof UserAgentHandler);
22-
assert.isTrue(middleware?.next?.next?.next?.next instanceof CompressionHandler);
23-
assert.isTrue(middleware?.next?.next?.next?.next?.next instanceof HeadersInspectionHandler);
24-
assert.isTrue(middleware?.next?.next?.next?.next?.next?.next instanceof UrlReplaceHandler);
25-
assert.isTrue(middleware?.next?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
21+
assert.isTrue(middleware?.next?.next?.next?.next instanceof HeadersInspectionHandler);
22+
assert.isTrue(middleware?.next?.next?.next?.next?.next instanceof UrlReplaceHandler);
23+
assert.isTrue(middleware?.next?.next?.next?.next?.next?.next instanceof CustomFetchHandler);
2624
});
2725

2826
it("Should maintain the middleware array order", () => {

0 commit comments

Comments
 (0)