From 3bbe35a4cfdf09bd2a87ed660bf918131679da19 Mon Sep 17 00:00:00 2001 From: Horiuchi_H Date: Tue, 28 Jun 2016 18:28:02 +0900 Subject: [PATCH] feat: update `request-promise` type definition to v3 (#9855) --- request-promise/request-promise-tests.ts | 58 +++++++++++---- request-promise/request-promise.d.ts | 95 ++++++++++++++++++------ 2 files changed, 118 insertions(+), 35 deletions(-) diff --git a/request-promise/request-promise-tests.ts b/request-promise/request-promise-tests.ts index 8c7840ad41..28596f18d4 100644 --- a/request-promise/request-promise-tests.ts +++ b/request-promise/request-promise-tests.ts @@ -1,13 +1,13 @@ /// import rp = require('request-promise'); -import nodeRequest = require('request'); +import errors = require('request-promise/errors'); rp('http://www.google.com') .then(console.dir) .catch(console.error); -var options: nodeRequest.Options = { +var options: rp.Options = { uri : 'http://posttestserver.com/post.php', method : 'POST', json: true, @@ -18,7 +18,39 @@ rp(options) .then(console.dir) .catch(console.error); -// --> Displays length of response from server after post +rp('http://google.com').finally(() => {}); + +// This works: +rp('http://google.com').then(console.dir); +rp('http://google.com').catch(console.error); +rp('http://google.com').then(console.dir, console.error); + +// This works as well since additional methods are only used AFTER the FIRST call in the chain: +rp('http://google.com').then(console.dir).spread(console.dir); +rp('http://google.com').catch(console.error).error(console.error); + +// Use .promise() in these cases: +rp('http://google.com').promise().bind(this).then(console.dir); + +rp({ uri: 'http://google.com', resolveWithFullResponse: true }).then((response) => {}); +rp({ uri: 'http://google.com', simple: false }).catch((reason) => {}); + +rp({ + uri: 'http://google.com', + transform: (body: any, response: http.IncomingMessage, resolveWithFullResponse: boolean): any => { + throw new Error('Transform failed!'); + } +}).catch(errors.StatusCodeError, (reason: errors.StatusCodeError) => { + // The server responded with a status codes other than 2xx. + // Check reason.statusCode +}).catch(errors.RequestError, (reason: errors.RequestError) => { + // The request failed due to technical reasons. + // reason.cause is the Error object Request would pass into a callback. +}).catch(errors.TransformError, (reason: errors.TransformError) => { + console.log(reason.cause.message); // => Transform failed! + // reason.response is the original response for which the transform operation failed +}); + //Defaults tests (() => { @@ -46,7 +78,7 @@ rp(options) console.log("DELETE succeeded with status %d", response.statusCode); }) .catch(console.error); - + //The following examples from https://github.com/request/request import fs = require('fs'); import http = require('http'); @@ -71,14 +103,14 @@ request console.log(response.headers['content-type']); // 'image/png' }) .pipe(request.put('http://mysite.com/img.png')); - + request .get('http://mysite.com/doodle.png') .on('error', function(err: any) { console.log(err); }) .pipe(fs.createWriteStream('doodle.png')); - + http.createServer(function (req, resp) { if (req.url === '/doodle.png') { if (req.method === 'PUT') { @@ -98,7 +130,7 @@ http.createServer(function (req, resp) { }); var resp: http.ServerResponse; -var req: nodeRequest.Request; +var req: rp.RequestPromise; req.pipe(request('http://mysite.com/doodle.png')).pipe(resp); var r = request; @@ -192,7 +224,7 @@ request({ } console.log('Upload successful! Server responded with:', body); }); - + request.get('http://some.server.com/').auth('username', 'password', false); // or request.get('http://some.server.com/', { @@ -282,8 +314,8 @@ request.post({url:url, oauth:oauth}, function (e, r, body) { , token_secret: perm_data.oauth_token_secret }; var url = 'https://api.twitter.com/1.1/users/show.json'; - var query = { - screen_name: perm_data.screen_name, + var query = { + screen_name: perm_data.screen_name, user_id: perm_data.user_id }; request.get({url:url, oauth:oauth, qs:query, json:true}, function (e, r, user) { @@ -370,7 +402,7 @@ request({ } } }); - + //requests using baseRequest() will set the 'x-token' header var baseRequest = request.defaults({ headers: {'x-token': 'my-token'} @@ -420,7 +452,7 @@ var rand = Math.floor(Math.random()*100000000).toString(); } } ); - + request( { method: 'GET' , uri: 'http://www.google.com' @@ -442,7 +474,7 @@ request( console.log('received ' + data.length + ' bytes of compressed data') }) }); - + var requestWithJar = request.defaults({jar: true}) requestWithJar('http://www.google.com', function () { requestWithJar('http://images.google.com'); diff --git a/request-promise/request-promise.d.ts b/request-promise/request-promise.d.ts index 7c96689f56..a9d6cae855 100644 --- a/request-promise/request-promise.d.ts +++ b/request-promise/request-promise.d.ts @@ -1,33 +1,84 @@ -// Type definitions for request-promise v0.4.2 -// Project: https://www.npmjs.com/package/request-promise -// Definitions by: Christopher Glantschnig , Joe Skeen +// Type definitions for request-promise v3.0.0 +// Project: https://github.com/request/request-promise +// Definitions by: Christopher Glantschnig , Joe Skeen , Aya Morisawa // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// Change [0]: 2015/08/20 - Aya Morisawa - /// /// declare module 'request-promise' { import request = require('request'); import http = require('http'); - - interface RequestPromise extends request.Request { - then(onfulfilled?: (value: any) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; - then(onfulfilled?: (value: any) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; - catch(onrejected?: (reason: any) => any | PromiseLike): Promise; - catch(onrejected?: (reason: any) => void): Promise; - finally(handler: () => PromiseLike): Promise; - finally(handler: () => TResult): Promise; - promise(): Promise; + import errors = require('request-promise/errors'); + + namespace requestPromise { + interface RequestPromise extends request.Request { + then(onfulfilled?: (value: any) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; + then(onfulfilled?: (value: any) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; + catch(onrejected?: (reason: any) => any | PromiseLike): Promise; + catch(onrejected?: (reason: any) => void): Promise; + catch(type: errors.RequestErrorConstructor, onrejected?: (reason: errors.RequestError) => void): Promise; + catch(type: errors.StatusCodeErrorConstructor, onrejected?: (reason: errors.StatusCodeError) => void): Promise; + catch(type: errors.TransformErrorConstructor, onrejected?: (reason: errors.TransformError) => void): Promise; + finally(handler: () => PromiseLike): Promise; + finally(handler: () => TResult): Promise; + promise(): Promise; + } + + interface RequestPromiseOptions extends request.CoreOptions { + simple?: boolean; + transform?: (body: any, response: http.IncomingMessage, resolveWithFullResponse?: boolean) => any; + resolveWithFullResponse?: boolean; + } + + export type OptionsWithUri = request.UriOptions & RequestPromiseOptions; + export type OptionsWithUrl = request.UrlOptions & RequestPromiseOptions; + export type Options = OptionsWithUri | OptionsWithUrl; } - - interface RequestPromiseOptions extends request.CoreOptions { - simple?: boolean; - transform?: (body: any, response: http.IncomingMessage) => any; - resolveWithFullResponse?: boolean; - } - - var requestPromise: request.RequestAPI; + + var requestPromise: request.RequestAPI; export = requestPromise; } +declare module 'request-promise/errors' { + import rp = require('request-promise'); + import http = require('http'); + + export interface RequestError extends Error { + cause: any; + error: any; + options: rp.Options; + response: http.IncomingMessage; + } + export interface RequestErrorConstructor { + new (cause: any, options: rp.Options, response: http.IncomingMessage): RequestError; + (cause: any, options: rp.Options, response: http.IncomingMessage): RequestError; + prototype: RequestError; + } + export const RequestError: RequestErrorConstructor; + + export interface StatusCodeError extends Error { + statusCode: number; + error: any; + options: rp.Options; + response: http.IncomingMessage; + } + export interface StatusCodeErrorConstructor extends Error { + new (statusCode: number, body: any, options: rp.Options, response: http.IncomingMessage): StatusCodeError; + (statusCode: number, body: any, options: rp.Options, response: http.IncomingMessage): StatusCodeError; + prototype: StatusCodeError; + } + export const StatusCodeError: StatusCodeErrorConstructor; + + export interface TransformError extends Error { + cause: any; + error: any; + options: rp.Options; + response: http.IncomingMessage; + } + export interface TransformErrorConstructor extends Error { + new (cause: any, options: rp.Options, response: http.IncomingMessage): TransformError; + (cause: any, options: rp.Options, response: http.IncomingMessage): TransformError; + prototype: TransformError; + } + export const TransformError: TransformErrorConstructor; +}