@ahoo-wang/fetcher-decorator 0.9.5 → 0.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -284,6 +284,51 @@ class UserService {
284
284
  }
285
285
  ```
286
286
 
287
+ ### Result Extractors
288
+
289
+ Result extractors are used to process and extract data from different types of responses or results in the application.
290
+ They allow you to customize how the response from an HTTP request is processed and returned.
291
+
292
+ #### Available Result Extractors
293
+
294
+ - **ExchangeResultExtractor**: Returns the original FetchExchange object
295
+ - **ResponseResultExtractor**: Returns the response object from FetchExchange (default)
296
+ - **JsonResultExtractor**: Parses the response content as JSON format
297
+ - **TextResultExtractor**: Parses the response content as text format
298
+ - **ServerSentEventStreamResultExtractor**: Extracts server-sent event stream from FetchExchange
299
+ - **CommandResultEventStreamResultExtractor**: Extracts command result event stream from FetchExchange
300
+
301
+ #### Using Result Extractors
302
+
303
+ You can specify a result extractor at the class level or method level:
304
+
305
+ ```typescript
306
+ import { ResultExtractors } from '@ahoo-wang/fetcher-decorator';
307
+
308
+ @api('/users', { resultExtractor: ResultExtractors.Json })
309
+ class UserService {
310
+ // Uses class-level JSON result extractor
311
+ @get('/{id}')
312
+ getUser(@path() id: number): Promise<User> {
313
+ throw new Error('Implementation will be generated automatically.');
314
+ }
315
+
316
+ // Overrides with ServerSentEventStream result extractor
317
+ @get('/events', { resultExtractor: ResultExtractors.ServerSentEventStream })
318
+ getUserEvents(): Promise<ServerSentEventStream> {
319
+ throw new Error('Implementation will be generated automatically.');
320
+ }
321
+
322
+ // Uses CommandResultEventStream result extractor for command handling
323
+ @post('/commands', {
324
+ resultExtractor: ResultExtractors.CommandResultEventStream,
325
+ })
326
+ executeCommand(@body() command: Command): Promise<CommandResultEventStream> {
327
+ throw new Error('Implementation will be generated automatically.');
328
+ }
329
+ }
330
+ ```
331
+
287
332
  ## 🧪 Testing
288
333
 
289
334
  ```bash
package/README.zh-CN.md CHANGED
@@ -277,6 +277,51 @@ class UserService {
277
277
  }
278
278
  ```
279
279
 
280
+ ### 结果提取器
281
+
282
+ 结果提取器用于处理和提取应用程序中不同类型响应或结果的数据。
283
+ 它们允许您自定义如何处理和返回 HTTP 请求的响应。
284
+
285
+ #### 可用的结果提取器
286
+
287
+ - **ExchangeResultExtractor**: 返回原始的 FetchExchange 对象
288
+ - **ResponseResultExtractor**: 返回 FetchExchange 中的响应对象(默认)
289
+ - **JsonResultExtractor**: 将响应内容解析为 JSON 格式
290
+ - **TextResultExtractor**: 将响应内容解析为文本格式
291
+ - **ServerSentEventStreamResultExtractor**: 从 FetchExchange 中提取服务器发送事件流
292
+ - **CommandResultEventStreamResultExtractor**: 从 FetchExchange 中提取命令结果事件流
293
+
294
+ #### 使用结果提取器
295
+
296
+ 您可以在类级别或方法级别指定结果提取器:
297
+
298
+ ```typescript
299
+ import { ResultExtractors } from '@ahoo-wang/fetcher-decorator';
300
+
301
+ @api('/users', { resultExtractor: ResultExtractors.Json })
302
+ class UserService {
303
+ // 使用类级别的 JSON 结果提取器
304
+ @get('/{id}')
305
+ getUser(@path() id: number): Promise<User> {
306
+ throw new Error('实现将自动生成');
307
+ }
308
+
309
+ // 使用 ServerSentEventStream 结果提取器覆盖
310
+ @get('/events', { resultExtractor: ResultExtractors.ServerSentEventStream })
311
+ getUserEvents(): Promise<ServerSentEventStream> {
312
+ throw new Error('实现将自动生成');
313
+ }
314
+
315
+ // 使用 CommandResultEventStream 结果提取器处理命令
316
+ @post('/commands', {
317
+ resultExtractor: ResultExtractors.CommandResultEventStream,
318
+ })
319
+ executeCommand(@body() command: Command): Promise<CommandResultEventStream> {
320
+ throw new Error('实现将自动生成');
321
+ }
322
+ }
323
+ ```
324
+
280
325
  ## 🧪 测试
281
326
 
282
327
  ```bash
@@ -1,4 +1,6 @@
1
- import { RequestHeaders, RequestHeadersCapable, TimeoutCapable } from '@ahoo-wang/fetcher';
1
+ import { Fetcher, RequestHeaders, RequestHeadersCapable, TimeoutCapable } from '@ahoo-wang/fetcher';
2
+ import { ResultExtractorCapable } from './resultExtractor';
3
+ import { FetcherCapable } from './fetcherCapable';
2
4
  /**
3
5
  * Metadata for class-level API configuration.
4
6
  *
@@ -6,7 +8,7 @@ import { RequestHeaders, RequestHeadersCapable, TimeoutCapable } from '@ahoo-wan
6
8
  * These settings will be used as defaults for all endpoints within the class unless overridden
7
9
  * at the method level.
8
10
  */
9
- export interface ApiMetadata extends TimeoutCapable, RequestHeadersCapable {
11
+ export interface ApiMetadata extends TimeoutCapable, RequestHeadersCapable, ResultExtractorCapable, FetcherCapable {
10
12
  /**
11
13
  * Base path for all endpoints in the class.
12
14
  *
@@ -35,7 +37,7 @@ export interface ApiMetadata extends TimeoutCapable, RequestHeadersCapable {
35
37
  * This allows you to specify which fetcher instance should be used for requests
36
38
  * from this API class. The fetcher must be registered with the FetcherRegistrar.
37
39
  */
38
- fetcher?: string;
40
+ fetcher?: string | Fetcher;
39
41
  }
40
42
  export declare const API_METADATA_KEY: unique symbol;
41
43
  export declare function api(basePath?: string, metadata?: Omit<ApiMetadata, 'basePath'>): <T extends new (...args: any[]) => any>(constructor: T) => T;
@@ -1 +1 @@
1
- {"version":3,"file":"apiDecorator.d.ts","sourceRoot":"","sources":["../src/apiDecorator.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,cAAc,EACf,MAAM,oBAAoB,CAAC;AAI5B,OAAO,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,WAAW,WAAY,SAAQ,cAAc,EAAE,qBAAqB;IACxE;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,gBAAgB,eAAyB,CAAC;AAwDvD,wBAAgB,GAAG,CACjB,QAAQ,GAAE,MAAW,EACrB,QAAQ,GAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAM,IAE3B,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,aAAa,CAAC,KAAG,CAAC,CAgB3E"}
1
+ {"version":3,"file":"apiDecorator.d.ts","sourceRoot":"","sources":["../src/apiDecorator.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,OAAO,EACP,cAAc,EACd,qBAAqB,EACrB,cAAc,EACf,MAAM,oBAAoB,CAAC;AAI5B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,WAAY,SAAQ,cAAc,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,cAAc;IAChH;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,gBAAgB,eAAyB,CAAC;AAwDvD,wBAAgB,GAAG,CACjB,QAAQ,GAAE,MAAW,EACrB,QAAQ,GAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAM,IAE3B,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,aAAa,CAAC,KAAG,CAAC,CAgB3E"}
@@ -1,12 +1,13 @@
1
1
  import { HttpMethod } from '@ahoo-wang/fetcher';
2
2
  import { ApiMetadata } from './apiDecorator';
3
+ import { ResultExtractorCapable } from './resultExtractor';
3
4
  /**
4
5
  * Metadata for HTTP endpoints.
5
6
  *
6
7
  * Defines the configuration options for individual HTTP endpoints (methods).
7
8
  * These settings will override any corresponding class-level settings from ApiMetadata.
8
9
  */
9
- export interface EndpointMetadata extends ApiMetadata {
10
+ export interface EndpointMetadata extends ApiMetadata, ResultExtractorCapable {
10
11
  /**
11
12
  * HTTP method for the endpoint.
12
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"endpointDecorator.d.ts","sourceRoot":"","sources":["../src/endpointDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,kBAAkB,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD;;;;OAIG;IACH,MAAM,EAAE,UAAU,CAAC;IAEnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,qBAAqB,eAA8B,CAAC;AAEjE,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,UAAU,EAClB,IAAI,GAAE,MAAW,EACjB,QAAQ,GAAE,sBAA2B,IAEpB,QAAQ,MAAM,EAAE,aAAa,MAAM,GAAG,MAAM,KAAG,IAAI,CAcrE;AAED,wBAAgB,GAAG,CAAC,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,sBAA2B,YAhBjD,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CAkBrE;AAED,wBAAgB,IAAI,CAAC,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,sBAA2B,YApBlD,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CAsBrE;AAED,wBAAgB,GAAG,CAAC,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,sBAA2B,YAxBjD,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CA0BrE;AAED,wBAAgB,GAAG,CAAC,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,sBAA2B,YA5BjD,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CA8BrE;AAED,wBAAgB,KAAK,CACnB,IAAI,GAAE,MAAW,EACjB,QAAQ,GAAE,sBAA2B,YAlCZ,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CAqCrE;AAED,wBAAgB,IAAI,CAAC,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,sBAA2B,YAvClD,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CAyCrE;AAED,wBAAgB,OAAO,CACrB,IAAI,GAAE,MAAW,EACjB,QAAQ,GAAE,sBAA2B,YA7CZ,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CAgDrE"}
1
+ {"version":3,"file":"endpointDecorator.d.ts","sourceRoot":"","sources":["../src/endpointDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAmB,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,WAAW,gBAAiB,SAAQ,WAAW,EAAE,sBAAsB;IAC3E;;;;OAIG;IACH,MAAM,EAAE,UAAU,CAAC;IAEnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,qBAAqB,eAA8B,CAAC;AAEjE,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,UAAU,EAClB,IAAI,GAAE,MAAW,EACjB,QAAQ,GAAE,sBAA2B,IAErB,QAAQ,MAAM,EAAE,aAAa,MAAM,GAAG,MAAM,KAAG,IAAI,CAcpE;AAED,wBAAgB,GAAG,CAAC,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,sBAA2B,YAhBlD,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CAkBpE;AAED,wBAAgB,IAAI,CAAC,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,sBAA2B,YApBnD,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CAsBpE;AAED,wBAAgB,GAAG,CAAC,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,sBAA2B,YAxBlD,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CA0BpE;AAED,wBAAgB,GAAG,CAAC,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,sBAA2B,YA5BlD,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CA8BpE;AAED,wBAAgB,KAAK,CACnB,IAAI,GAAE,MAAW,EACjB,QAAQ,GAAE,sBAA2B,YAlCb,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CAqCpE;AAED,wBAAgB,IAAI,CAAC,IAAI,GAAE,MAAW,EAAE,QAAQ,GAAE,sBAA2B,YAvCnD,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CAyCpE;AAED,wBAAgB,OAAO,CACrB,IAAI,GAAE,MAAW,EACjB,QAAQ,GAAE,sBAA2B,YA7Cb,MAAM,eAAe,MAAM,GAAG,MAAM,KAAG,IAAI,CAgDpE"}
@@ -0,0 +1,21 @@
1
+ import { Fetcher } from '@ahoo-wang/fetcher';
2
+ /**
3
+ * Interface that defines a capability for objects that can have a fetcher.
4
+ * This interface is typically used to mark components or objects that can perform fetching operations
5
+ * and may need access to fetcher functionality.
6
+ */
7
+ export interface FetcherCapable {
8
+ /**
9
+ * Optional fetcher property that can be either a string identifier or a Fetcher instance.
10
+ * When present, this property indicates the fetcher associated with the implementing object.
11
+ */
12
+ fetcher?: string | Fetcher;
13
+ }
14
+ /**
15
+ * Gets a Fetcher instance based on the provided fetcher parameter.
16
+ *
17
+ * @param fetcher - A string identifier or Fetcher instance to resolve
18
+ * @returns A Fetcher instance if found, undefined otherwise
19
+ */
20
+ export declare function getFetcher(fetcher?: string | Fetcher): Fetcher | undefined;
21
+ //# sourceMappingURL=fetcherCapable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcherCapable.d.ts","sourceRoot":"","sources":["../src/fetcherCapable.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAoB,MAAM,oBAAoB,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAS1E"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './apiDecorator';
2
2
  export * from './endpointDecorator';
3
+ export * from './fetcherCapable';
3
4
  export * from './parameterDecorator';
4
5
  export * from './reflection';
5
6
  export * from './requestExecutor';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}