Skip to content

Commit

Permalink
feat: add type declaration file
Browse files Browse the repository at this point in the history
  • Loading branch information
Cweili committed May 10, 2019
1 parent 920d74e commit 146fcfc
Show file tree
Hide file tree
Showing 2 changed files with 178 additions and 11 deletions.
63 changes: 52 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,16 +204,57 @@ reqJSON.use((context, next) => {

Context contains these attributes:

* `path`
* `method`
* `url`
* `data`
* `options`
* `status` (response only)
* `response` (response only)
* `headers` (setting for request, getting for response)
* `header` (alias to `headers`)
* `xhr`
```js
/**
* The path to use for the request, with parameters defined.
*/
path: string

/**
* The HTTP method to use for the request (e.g. "POST", "GET", "PUT", "DELETE").
*/
method: string

/**
* The URL to which the request is sent.
*/
url: string

/**
* The data to be sent.
*/
data: any

/**
* The options to use for the request.
*/
options: object

/**
* The HTTP status of the response. Only available when the request completes.
*/
status?: number

/**
* The parsed response. Only available when the request completes.
*/
response?: string | object

/**
* The request headers before the request is sent, the response headers when the request completes.
*/
headers: object

/**
* Alias to `headers`
*/
header: object

/**
* The original XMLHttpRequest object.
*/
xhr: XMLHttpRequest
```

### Reject when status 4xx or 5xx

Expand All @@ -235,7 +276,7 @@ reqJSON.use((context, next) => {
return next()
.then(() => {
if (context.status >= 400) {
throw new Error(context.response);
throw new Error(context.response);
}
});
});
Expand Down
126 changes: 126 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
declare namespace ReqJSON {
interface HTTPMethod {
/**
* Send HTTP request.
*
* @param data The data to be sent.
* @param options The options to use for each requests to the resource.
*/
(data?: any, options?: object): Promise<string | object>
}

interface ShortHandMethod {
/**
* Send HTTP request.
*
* @param path The path to use for the request, with parameters defined.
* @param data The data to be sent.
* @param options The options to use for each requests to the resource.
*/
(path?: string, data?: any, options?: object): Promise<string | object>
}

interface RESTfulMethods {
get: HTTPMethod
post: HTTPMethod
put: HTTPMethod
delete: HTTPMethod
}

/**
* ReqJSON request context
*/
interface Context {
/**
* The path to use for the request, with parameters defined.
*/
path: string

/**
* The HTTP method to use for the request (e.g. "POST", "GET", "PUT", "DELETE").
*/
method: string

/**
* The URL to which the request is sent.
*/
url: string

/**
* The data to be sent.
*/
data: any

/**
* The options to use for the request.
*/
options: object

/**
* The HTTP status of the response. Only available when the request completes.
*/
status?: number

/**
* The parsed response. Only available when the request completes.
*/
response?: string | object

/**
* The request headers before the request is sent, the response headers when the request completes.
*/
headers: object

/**
* Alias to `headers`
*/
header: object

/**
* The original XMLHttpRequest object.
*/
xhr: XMLHttpRequest
}

interface Middleware extends Function {
/**
* ReqJSON middleware, similar to Koa.js middleware.
*
* @param context ReqJSON request context
* @param next ReqJSON Middleware
*/
(context?: Context, next?: Middleware): any
}
}

declare class ReqJSON {
/**
* Create a new ReqJSON instance
*/
constructor();

/**
* Define a RESTful resource.
*
* @param path The path to use for the request, with parameters defined.
* @param options The options to use for each requests to the resource.
*/
resource(
path: string,
options: object
): ReqJSON.RESTfulMethods

/**
* Register a ReqJSON middleware
*
* @param middleware A ReqJSON middleware
*/
use(middleware: ReqJSON.Middleware): this

get: ReqJSON.ShortHandMethod
post: ReqJSON.ShortHandMethod
put: ReqJSON.ShortHandMethod
delete: ReqJSON.ShortHandMethod
}

export = ReqJSON

0 comments on commit 146fcfc

Please sign in to comment.