You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					93 lines
				
				2.6 KiB
			
		
		
			
		
	
	
					93 lines
				
				2.6 KiB
			| 
											3 years ago
										 | import * as http from 'http' | ||
|  | import { inject, isInjection, Request, Response, DispatchFunc, InjectOptions, Chain, ServerResponse } from '../index' | ||
|  | import { expectType, expectAssignable, expectNotAssignable } from 'tsd' | ||
|  | 
 | ||
|  | expectAssignable<InjectOptions>({ url: '/' }) | ||
|  | 
 | ||
|  | const dispatch = function (req: Request, res: ServerResponse) { | ||
|  |   expectType<boolean>(isInjection(req)) | ||
|  |   expectType<boolean>(isInjection(res)) | ||
|  | 
 | ||
|  |   const reply = 'Hello World' | ||
|  |   res.writeHead(200, { 'Content-Type': 'text/plain', 'Content-Length': reply.length }) | ||
|  |   res.end(reply) | ||
|  | } | ||
|  | 
 | ||
|  | const expectResponse = function (res: Response) { | ||
|  |   expectType<Response>(res) | ||
|  |   console.log(res.payload) | ||
|  |   expectAssignable<Function>(res.json) | ||
|  |   expectAssignable<ServerResponse>(res.raw.res) | ||
|  |   expectAssignable<Request>(res.raw.req) | ||
|  |   console.log(res.cookies) | ||
|  | } | ||
|  | 
 | ||
|  | expectType<DispatchFunc>(dispatch) | ||
|  | 
 | ||
|  | inject(dispatch, { method: 'get', url: '/' }, (err, res) => { | ||
|  |   expectType<Error>(err) | ||
|  |   expectResponse(res) | ||
|  | }) | ||
|  | 
 | ||
|  | const url = { | ||
|  |   protocol: 'http', | ||
|  |   hostname: 'example.com', | ||
|  |   port: '8080', | ||
|  |   pathname: 'hello', | ||
|  |   query: { | ||
|  |     test: '1234' | ||
|  |   } | ||
|  | } | ||
|  | inject(dispatch, { method: 'get', url }, (err, res) => { | ||
|  |   expectType<Error>(err) | ||
|  |   expectResponse(res) | ||
|  | }) | ||
|  | 
 | ||
|  | inject(dispatch, { method: 'get', url: '/', cookies: { name1: 'value1', value2: 'value2' } }, (err, res) => { | ||
|  |   expectType<Error>(err) | ||
|  |   expectResponse(res) | ||
|  | }) | ||
|  | 
 | ||
|  | inject(dispatch, { method: 'get', url: '/', query: { name1: 'value1', value2: 'value2' } }, (err, res) => { | ||
|  |   expectType<Error>(err) | ||
|  |   expectResponse(res) | ||
|  | }) | ||
|  | 
 | ||
|  | inject(dispatch, { method: 'get', url: '/', query: { name1: ['value1', 'value2'] } }, (err, res) => { | ||
|  |   expectType<Error>(err) | ||
|  |   expectResponse(res) | ||
|  | }) | ||
|  | 
 | ||
|  | expectType<void>( | ||
|  |   inject(dispatch) | ||
|  |     .get('/') | ||
|  |     .end((err, res) => { | ||
|  |       expectType<Error>(err) | ||
|  |       expectType<Response>(res) | ||
|  |       console.log(res.payload) | ||
|  |     }) | ||
|  | ) | ||
|  | 
 | ||
|  | inject(dispatch) | ||
|  |   .get('/') | ||
|  |   .then((value) => { | ||
|  |     expectType<Response>(value) | ||
|  |   }) | ||
|  | 
 | ||
|  | expectType<Chain>(inject(dispatch)) | ||
|  | expectType<Promise<Response>>(inject(dispatch).end()) | ||
|  | expectType<Chain>(inject(dispatch, { method: 'get', url: '/' })) | ||
|  | // @ts-ignore tsd supports top-level await, but normal ts does not so ignore
 | ||
|  | expectType<Response>(await inject(dispatch, { method: 'get', url: '/' })) | ||
|  | 
 | ||
|  | type ParsedValue = { field: string } | ||
|  | // @ts-ignore tsd supports top-level await, but normal ts does not so ignore
 | ||
|  | const response: Response = await inject(dispatch) | ||
|  | const parsedValue: ParsedValue = response.json() | ||
|  | expectType<ParsedValue>(parsedValue) | ||
|  | 
 | ||
|  | const parsedValueUsingGeneric = response.json<ParsedValue>() | ||
|  | expectType<ParsedValue>(parsedValueUsingGeneric) | ||
|  | 
 | ||
|  | expectNotAssignable<http.ServerResponse>(response) |