Skip to content

Commit 894fb91

Browse files
Skn0tteduardoboucas
andauthoredAug 21, 2023
feat!: export v2 api (#408)
This PR adds the V2 functions API to the exports of `@netlify/functions`. --------- Co-authored-by: Eduardo Bouças <mail@eduardoboucas.com>
1 parent 3481b22 commit 894fb91

9 files changed

+41
-21
lines changed
 

‎package-lock.json

+14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"test": "test"
5353
},
5454
"dependencies": {
55+
"@netlify/serverless-functions-api": "1.6.0",
5556
"is-promise": "^4.0.0"
5657
},
5758
"devDependencies": {

‎src/function/handler.ts

+14-11
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
1-
import type { Context } from './context.js'
2-
import type { Event } from './event.js'
3-
import type { Response, BuilderResponse, StreamingResponse } from './response.js'
1+
import type { HandlerContext } from './handler_context.js'
2+
import type { HandlerEvent } from './handler_event.js'
3+
import type { HandlerResponse, BuilderResponse, StreamingResponse } from './handler_response.js'
44

5-
export interface HandlerCallback<ResponseType extends Response = Response> {
5+
export interface HandlerCallback<ResponseType extends HandlerResponse = HandlerResponse> {
66
// eslint-disable-next-line @typescript-eslint/no-explicit-any
77
(error: any, response: ResponseType): void
88
}
99

10-
export interface BaseHandler<ResponseType extends Response = Response, C extends Context = Context> {
11-
(event: Event, context: C, callback?: HandlerCallback<ResponseType>): void | Promise<ResponseType>
10+
export interface BaseHandler<
11+
ResponseType extends HandlerResponse = HandlerResponse,
12+
C extends HandlerContext = HandlerContext,
13+
> {
14+
(event: HandlerEvent, context: C, callback?: HandlerCallback<ResponseType>): void | Promise<ResponseType>
1215
}
1316

14-
export interface BackgroundHandler<C extends Context = Context> {
15-
(event: Event, context: C): void | Promise<void>
17+
export interface BackgroundHandler<C extends HandlerContext = HandlerContext> {
18+
(event: HandlerEvent, context: C): void | Promise<void>
1619
}
1720

18-
export type Handler = BaseHandler<Response, Context>
19-
export type BuilderHandler = BaseHandler<BuilderResponse, Context>
21+
export type Handler = BaseHandler<HandlerResponse, HandlerContext>
22+
export type BuilderHandler = BaseHandler<BuilderResponse, HandlerContext>
2023

2124
export interface StreamingHandler {
22-
(event: Event, context: Context): Promise<StreamingResponse>
25+
(event: HandlerEvent, context: HandlerContext): Promise<StreamingResponse>
2326
}

‎src/function/context.ts renamed to ‎src/function/handler_context.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/* eslint-disable @typescript-eslint/no-explicit-any */
33

44
// From https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html.
5-
export interface Context {
5+
export interface HandlerContext {
66
callbackWaitsForEmptyEventLoop: boolean
77
functionName: string
88
functionVersion: string

‎src/function/event.ts renamed to ‎src/function/handler_event.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ interface EventMultiValueQueryStringParameters {
1414
[name: string]: string[] | undefined
1515
}
1616

17-
export interface Event {
17+
export interface HandlerEvent {
1818
rawUrl: string
1919
rawQuery: string
2020
path: string
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { PipelineSource } from 'node:stream'
22

3-
export interface Response {
3+
export interface HandlerResponse {
44
statusCode: number
55
headers?: {
66
[header: string]: boolean | number | string
@@ -11,11 +11,11 @@ export interface Response {
1111
body?: string
1212
isBase64Encoded?: boolean
1313
}
14-
export interface BuilderResponse extends Response {
14+
export interface BuilderResponse extends HandlerResponse {
1515
ttl?: number
1616
}
1717

18-
export interface StreamingResponse extends Omit<Response, 'body'> {
18+
export interface StreamingResponse extends Omit<HandlerResponse, 'body'> {
1919
// eslint-disable-next-line @typescript-eslint/no-explicit-any
2020
body?: string | PipelineSource<any>
2121
}

‎src/function/index.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
export { Context as HandlerContext } from './context.js'
2-
export { Event as HandlerEvent } from './event.js'
1+
export { HandlerContext } from './handler_context.js'
2+
export { HandlerEvent } from './handler_event.js'
33
export { BuilderHandler, Handler, BackgroundHandler, HandlerCallback, StreamingHandler } from './handler.js'
4-
export { BuilderResponse, Response as HandlerResponse, StreamingResponse } from './response.js'
4+
export { BuilderResponse, HandlerResponse, StreamingResponse } from './handler_response.js'
5+
export { Context } from './v2.js'

‎src/function/v2.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export type { Context } from '@netlify/serverless-functions-api'

‎src/lib/builder.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import isPromise from 'is-promise'
22

33
import { BuilderHandler, Handler, HandlerCallback } from '../function/handler.js'
4+
import { HandlerResponse, BuilderResponse } from '../function/handler_response.js'
45
import { HandlerContext, HandlerEvent } from '../function/index.js'
5-
import { Response, BuilderResponse } from '../function/response.js'
66

77
import { BUILDER_FUNCTIONS_FLAG, HTTP_STATUS_METHOD_NOT_ALLOWED, METADATA_VERSION } from './consts.js'
88

@@ -21,7 +21,7 @@ const augmentResponse = (response: BuilderResponse) => {
2121
const wrapHandler =
2222
(handler: BuilderHandler): Handler =>
2323
// eslint-disable-next-line promise/prefer-await-to-callbacks
24-
(event: HandlerEvent, context: HandlerContext, callback?: HandlerCallback<Response>) => {
24+
(event: HandlerEvent, context: HandlerContext, callback?: HandlerCallback<HandlerResponse>) => {
2525
if (event.httpMethod !== 'GET' && event.httpMethod !== 'HEAD') {
2626
return Promise.resolve({
2727
body: 'Method Not Allowed',

0 commit comments

Comments
 (0)
Please sign in to comment.