Skip to content

Commit 2e25df7

Browse files
committed
feat(*) Adds @deprecated deco to mark method as deprecated
1 parent 0c064e3 commit 2e25df7

File tree

7 files changed

+50
-9
lines changed

7 files changed

+50
-9
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
| Statements | Branches | Functions | Lines |
77
| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ----------------------------------- |
8-
| ![Statements](https://img.shields.io/badge/Coverage-96.51%25-brightgreen.svg "Make me better!") | ![Branches](https://img.shields.io/badge/Coverage-86.78%25-yellow.svg "Make me better!") | ![Functions](https://img.shields.io/badge/Coverage-88.99%25-yellow.svg "Make me better!") | ![Lines](https://img.shields.io/badge/Coverage-96.51%25-brightgreen.svg "Make me better!") |
8+
| ![Statements](https://img.shields.io/badge/Coverage-96.59%25-brightgreen.svg "Make me better!") | ![Branches](https://img.shields.io/badge/Coverage-86.4%25-yellow.svg "Make me better!") | ![Functions](https://img.shields.io/badge/Coverage-89.19%25-yellow.svg "Make me better!") | ![Lines](https://img.shields.io/badge/Coverage-96.59%25-brightgreen.svg "Make me better!") |
99

1010
> A declarative and [axios](https://github.com/axios/axios) based retrofit implementation for JavaScript and TypeScript.
1111

src/baseService.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,14 @@ export class BaseService {
180180
}
181181
// timeout
182182
config.timeout = this.__meta__[methodName].timeout || this._timeout;
183+
// deprecated
184+
if (this.__meta__[methodName].deprecated) {
185+
let hint = `[warning] Deprecated method: "${methodName}". `;
186+
if (this.__meta__[methodName].deprecatedHint) {
187+
hint += this.__meta__[methodName].deprecatedHint;
188+
}
189+
console.warn(hint);
190+
}
183191
// mix in config set by @Config
184192
config = {
185193
...config,
@@ -373,20 +381,17 @@ export class ServiceBuilder {
373381
return this;
374382
}
375383

376-
// 单例模式
377384
public setStandalone(standalone: boolean | AxiosInstance): ServiceBuilder {
378385
this._standalone = standalone;
379386
return this;
380387
}
381388

382-
// 插入请求拦截器
383389
public setRequestInterceptors(...interceptors: Array<RequestInterceptorFunction | RequestInterceptor>)
384390
: ServiceBuilder {
385391
this._requestInterceptors.push(...interceptors);
386392
return this;
387393
}
388394

389-
// 插入应答拦截器
390395
public setResponseInterceptors(...interceptors: Array<ResponseInterceptorFunction | ResponseInterceptor>)
391396
: ServiceBuilder {
392397
this._responseInterceptors.push(...interceptors);
@@ -429,8 +434,8 @@ export class ServiceBuilder {
429434
}
430435

431436
class HttpClient {
432-
private axios: AxiosInstance = axios;
433-
private standalone: boolean = false;
437+
private readonly axios: AxiosInstance = axios;
438+
private readonly standalone: boolean = false;
434439

435440
constructor(builder: ServiceBuilder) {
436441
if (builder.standalone === true) {

src/decorators.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,3 +448,17 @@ export const GraphQLVariables = (target: any, methodName: string, paramIndex: nu
448448
ensureMeta(target, methodName);
449449
target.__meta__[methodName].gqlVariablesIndex = paramIndex;
450450
};
451+
452+
/**
453+
* Mark method as deprecated
454+
* @param hint
455+
* @sample @Deprecated("This method is deprecated on version 2.0, please use xxx.")
456+
* @constructor
457+
*/
458+
export const Deprecated = (hint?: string) => {
459+
return (target: any, methodName: string, descriptor: PropertyDescriptor) => {
460+
ensureMeta(target, methodName);
461+
target.__meta__[methodName].deprecated = true;
462+
target.__meta__[methodName].deprecatedHint = hint;
463+
};
464+
};

test/dataResolver.test.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
import * as fs from "fs";
12
import {
2-
BaseDataResolver, FormUrlencodedResolver, MultiPartResolver, JsonResolver, TextXmlResolver, DataResolverFactory,
3+
BaseDataResolver,
4+
FormUrlencodedResolver,
5+
MultiPartResolver,
6+
JsonResolver,
7+
TextXmlResolver,
8+
DataResolverFactory,
39
} from "../src/dataResolver";
4-
import * as fs from "fs";
510

611
describe("Test data resolver.", () => {
712
test("Test BaseDataResolver.", async () => {

test/fixture/fixtures.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {
22
GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS, BasePath, Header, Queries, Headers, Path, Query, QueryMap, Body,
33
FormUrlEncoded, Field, FieldMap, Multipart, ResponseType, Part, PartDescriptor, BaseService, Response, HeaderMap,
4-
RequestTransformer, ResponseTransformer, Timeout, ResponseStatus, Config, GraphQL, GraphQLVariables
4+
RequestTransformer, ResponseTransformer, Timeout, ResponseStatus, Config, GraphQL, GraphQLVariables, Deprecated,
55
} from "../../src";
66

77
export const TEST_SERVER_HOST = "http://localhost";
@@ -75,6 +75,10 @@ export class UserService extends BaseService {
7575

7676
@OPTIONS("/users/{userId}")
7777
async optionsUser(@Header("X-Token") token: string, @Path("userId") userId: number): Promise<Response> { return <Response>{} };
78+
79+
@GET("/users/{userId}/pets")
80+
@Deprecated("This method is deprecated on version v2.")
81+
async getUserPets(@Header("X-Token") token: string, @Path("userId") userId: number): Promise<Response> { return <Response>{} };
7882
}
7983

8084
@BasePath(API_PREFIX)

test/fixture/server.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,7 @@ app.post("/graphql", async function (req, res) {
141141
}
142142
});
143143
});
144+
145+
app.get("/api/v1/users/:userId/pets", function (req, res) {
146+
res.status(200).json({});
147+
});

test/ts-retrofit.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,4 +635,13 @@ describe("Test ts-retrofit.", () => {
635635
expect(err.response.status).toEqual(404);
636636
}
637637
});
638+
639+
test("Test `@Deprecated` decorator.", async () => {
640+
const userId = 1;
641+
const userService = new ServiceBuilder()
642+
.setEndpoint(TEST_SERVER_ENDPOINT)
643+
.build(UserService);
644+
const response = await userService.getUserPets(TOKEN, userId);
645+
expect(response.config.url).toEqual(`${TEST_SERVER_ENDPOINT}${API_PREFIX}/users/1/pets`);
646+
});
638647
});

0 commit comments

Comments
 (0)