From 16469003955bb44f6ac2af7269eb40a3a411a953 Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Mon, 8 Nov 2021 15:42:12 -0800 Subject: [PATCH 01/17] feat: use builder plugin metadata to set ODB TTL --- src/lib/builder.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/builder.ts b/src/lib/builder.ts index d3af8e3c..63d84113 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -5,19 +5,19 @@ import { Response } from '../function/response' import { BUILDER_FUNCTIONS_FLAG, HTTP_STATUS_METHOD_NOT_ALLOWED, HTTP_STATUS_OK, METADATA_VERSION } from './consts' -const augmentResponse = (response: Response) => { +const augmentResponse = (response: Response, ttl: number) => { if (!response || response.statusCode !== HTTP_STATUS_OK) { return response } return { ...response, - metadata: { version: METADATA_VERSION, builder_function: BUILDER_FUNCTIONS_FLAG }, + metadata: { version: METADATA_VERSION, builder_function: BUILDER_FUNCTIONS_FLAG, ttl }, } } const wrapHandler = - (handler: Handler): Handler => + (handler: Handler, ttl: number): Handler => // eslint-disable-next-line promise/prefer-await-to-callbacks (event, context, callback) => { if (event.httpMethod !== 'GET' && event.httpMethod !== 'HEAD') { @@ -35,7 +35,7 @@ const wrapHandler = } // eslint-disable-next-line promise/prefer-await-to-callbacks - const wrappedCallback = (error: unknown, response: Response) => callback(error, augmentResponse(response)) + const wrappedCallback = (error: unknown, response: Response) => callback(error, augmentResponse(response, ttl)) const execution = handler(modifiedEvent, context, wrappedCallback) if (isPromise(execution)) { From 78d68184d02fd8e0599461be304ba80006106258 Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Mon, 8 Nov 2021 15:59:40 -0800 Subject: [PATCH 02/17] fix: tests --- src/lib/builder.ts | 12 ++++++++++-- test/builder.js | 7 ++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/lib/builder.ts b/src/lib/builder.ts index 63d84113..8e812d7c 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -5,6 +5,11 @@ import { Response } from '../function/response' import { BUILDER_FUNCTIONS_FLAG, HTTP_STATUS_METHOD_NOT_ALLOWED, HTTP_STATUS_OK, METADATA_VERSION } from './consts' +type Config = { + /** @default 0 */ + ttl: number +} + const augmentResponse = (response: Response, ttl: number) => { if (!response || response.statusCode !== HTTP_STATUS_OK) { return response @@ -17,7 +22,7 @@ const augmentResponse = (response: Response, ttl: number) => { } const wrapHandler = - (handler: Handler, ttl: number): Handler => + (handler: Handler, config?: Config): Handler => // eslint-disable-next-line promise/prefer-await-to-callbacks (event, context, callback) => { if (event.httpMethod !== 'GET' && event.httpMethod !== 'HEAD') { @@ -34,13 +39,16 @@ const wrapHandler = queryStringParameters: {}, } + // Get needed config values. + const ttl = config === undefined ? 0 : config.ttl + // eslint-disable-next-line promise/prefer-await-to-callbacks const wrappedCallback = (error: unknown, response: Response) => callback(error, augmentResponse(response, ttl)) const execution = handler(modifiedEvent, context, wrappedCallback) if (isPromise(execution)) { // eslint-disable-next-line promise/prefer-await-to-then - return execution.then(augmentResponse) + return execution.then((response) => augmentResponse(response, ttl)) } return execution diff --git a/test/builder.js b/test/builder.js index 948ae6a8..3038f84b 100644 --- a/test/builder.js +++ b/test/builder.js @@ -4,7 +4,7 @@ const { builder } = require('../dist/lib/builder') const { invokeLambda } = require('./helpers/main') -const METADATA_OBJECT = { metadata: { version: 1, builder_function: true } } +const METADATA_OBJECT = { metadata: { version: 1, builder_function: true, ttl: 0 } } test('Injects the metadata object into an asynchronous handler', async (t) => { const originalResponse = { @@ -20,9 +20,10 @@ test('Injects the metadata object into an asynchronous handler', async (t) => { return originalResponse } - const response = await invokeLambda(builder(myHandler)) + const config = { ttl: 3600 } + const response = await invokeLambda(builder(myHandler, config)) - t.deepEqual(response, { ...originalResponse, ...METADATA_OBJECT }) + t.deepEqual(response, { ...originalResponse, metadata: { version: 1, builder_function: true, ttl: 3600 } }) }) test('Injects the metadata object into a synchronous handler', async (t) => { From 89b3d31e53ed5f78122697ff1fc60016c42244da Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Mon, 8 Nov 2021 16:54:34 -0800 Subject: [PATCH 03/17] feat: grab ttl from response --- src/lib/builder.ts | 18 +++++++----------- test/builder.js | 3 +-- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/lib/builder.ts b/src/lib/builder.ts index 8e812d7c..2649d4e3 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -5,16 +5,14 @@ import { Response } from '../function/response' import { BUILDER_FUNCTIONS_FLAG, HTTP_STATUS_METHOD_NOT_ALLOWED, HTTP_STATUS_OK, METADATA_VERSION } from './consts' -type Config = { - /** @default 0 */ - ttl: number -} - -const augmentResponse = (response: Response, ttl: number) => { +const augmentResponse = (response: Response) => { if (!response || response.statusCode !== HTTP_STATUS_OK) { return response } + // TODO: get ttl from response somehow + const ttl = 0; + return { ...response, metadata: { version: METADATA_VERSION, builder_function: BUILDER_FUNCTIONS_FLAG, ttl }, @@ -22,7 +20,7 @@ const augmentResponse = (response: Response, ttl: number) => { } const wrapHandler = - (handler: Handler, config?: Config): Handler => + (handler: Handler): Handler => // eslint-disable-next-line promise/prefer-await-to-callbacks (event, context, callback) => { if (event.httpMethod !== 'GET' && event.httpMethod !== 'HEAD') { @@ -39,16 +37,14 @@ const wrapHandler = queryStringParameters: {}, } - // Get needed config values. - const ttl = config === undefined ? 0 : config.ttl // eslint-disable-next-line promise/prefer-await-to-callbacks - const wrappedCallback = (error: unknown, response: Response) => callback(error, augmentResponse(response, ttl)) + const wrappedCallback = (error: unknown, response: Response) => callback(error, augmentResponse(response)) const execution = handler(modifiedEvent, context, wrappedCallback) if (isPromise(execution)) { // eslint-disable-next-line promise/prefer-await-to-then - return execution.then((response) => augmentResponse(response, ttl)) + return execution.then(augmentResponse) } return execution diff --git a/test/builder.js b/test/builder.js index 3038f84b..9db38f99 100644 --- a/test/builder.js +++ b/test/builder.js @@ -20,8 +20,7 @@ test('Injects the metadata object into an asynchronous handler', async (t) => { return originalResponse } - const config = { ttl: 3600 } - const response = await invokeLambda(builder(myHandler, config)) + const response = await invokeLambda(builder(myHandler)) t.deepEqual(response, { ...originalResponse, metadata: { version: 1, builder_function: true, ttl: 3600 } }) }) From ca6480cffb415648b29afaada8d88e1937dd2adf Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Mon, 8 Nov 2021 16:55:51 -0800 Subject: [PATCH 04/17] fix: test --- src/lib/builder.ts | 3 +-- test/builder.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lib/builder.ts b/src/lib/builder.ts index 2649d4e3..5c045f17 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -11,7 +11,7 @@ const augmentResponse = (response: Response) => { } // TODO: get ttl from response somehow - const ttl = 0; + const ttl = 0 return { ...response, @@ -37,7 +37,6 @@ const wrapHandler = queryStringParameters: {}, } - // eslint-disable-next-line promise/prefer-await-to-callbacks const wrappedCallback = (error: unknown, response: Response) => callback(error, augmentResponse(response)) const execution = handler(modifiedEvent, context, wrappedCallback) diff --git a/test/builder.js b/test/builder.js index 9db38f99..f273e981 100644 --- a/test/builder.js +++ b/test/builder.js @@ -22,7 +22,7 @@ test('Injects the metadata object into an asynchronous handler', async (t) => { } const response = await invokeLambda(builder(myHandler)) - t.deepEqual(response, { ...originalResponse, metadata: { version: 1, builder_function: true, ttl: 3600 } }) + t.deepEqual(response, { ...originalResponse, metadata: { version: 1, builder_function: true, ttl: 0 } }) }) test('Injects the metadata object into a synchronous handler', async (t) => { From 01327e7489b0474514277772a33744634439d2ae Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Tue, 9 Nov 2021 11:37:13 -0800 Subject: [PATCH 05/17] feat: use ttl from response --- src/function/response.ts | 1 + src/lib/builder.ts | 9 +++++---- test/builder.js | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/function/response.ts b/src/function/response.ts index 52203aa4..2209bd96 100644 --- a/src/function/response.ts +++ b/src/function/response.ts @@ -8,4 +8,5 @@ export interface Response { } body?: string isBase64Encoded?: boolean + ttl?: number } diff --git a/src/lib/builder.ts b/src/lib/builder.ts index 5c045f17..680c18d4 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -9,13 +9,14 @@ const augmentResponse = (response: Response) => { if (!response || response.statusCode !== HTTP_STATUS_OK) { return response } - - // TODO: get ttl from response somehow - const ttl = 0 + const metadata = { version: METADATA_VERSION, builder_function: BUILDER_FUNCTIONS_FLAG, ttl: 0 } + if (response.ttl !== undefined) { + metadata.ttl = response.ttl + } return { ...response, - metadata: { version: METADATA_VERSION, builder_function: BUILDER_FUNCTIONS_FLAG, ttl }, + metadata, } } diff --git a/test/builder.js b/test/builder.js index f273e981..187d1387 100644 --- a/test/builder.js +++ b/test/builder.js @@ -10,6 +10,7 @@ test('Injects the metadata object into an asynchronous handler', async (t) => { const originalResponse = { body: ':thumbsup:', statusCode: 200, + ttl: 3600, } const myHandler = async () => { const asyncTask = new Promise((resolve) => { @@ -22,7 +23,7 @@ test('Injects the metadata object into an asynchronous handler', async (t) => { } const response = await invokeLambda(builder(myHandler)) - t.deepEqual(response, { ...originalResponse, metadata: { version: 1, builder_function: true, ttl: 0 } }) + t.deepEqual(response, { ...originalResponse, metadata: { version: 1, builder_function: true, ttl: 3600 } }) }) test('Injects the metadata object into a synchronous handler', async (t) => { From 77c024be3d57b737e16543c0f92a22277ca14ea1 Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Tue, 9 Nov 2021 16:32:13 -0800 Subject: [PATCH 06/17] feat: use nullish coalescing operator --- src/lib/builder.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/lib/builder.ts b/src/lib/builder.ts index 680c18d4..1354c92c 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -9,10 +9,7 @@ const augmentResponse = (response: Response) => { if (!response || response.statusCode !== HTTP_STATUS_OK) { return response } - const metadata = { version: METADATA_VERSION, builder_function: BUILDER_FUNCTIONS_FLAG, ttl: 0 } - if (response.ttl !== undefined) { - metadata.ttl = response.ttl - } + const metadata = { version: METADATA_VERSION, builder_function: BUILDER_FUNCTIONS_FLAG, ttl: response.ttl ?? 0 } return { ...response, From 563eb60cc842764d6149eb47a651d922c230369c Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Wed, 10 Nov 2021 09:45:55 -0800 Subject: [PATCH 07/17] feat: use BuilderResponse for better typing - thanks matt kane :) --- src/function/response.ts | 3 +++ src/lib/builder.ts | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/function/response.ts b/src/function/response.ts index 2209bd96..f0226c0d 100644 --- a/src/function/response.ts +++ b/src/function/response.ts @@ -8,5 +8,8 @@ export interface Response { } body?: string isBase64Encoded?: boolean +} + +export interface BuilderResponse extends Response { ttl?: number } diff --git a/src/lib/builder.ts b/src/lib/builder.ts index 1354c92c..4d42dbc0 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -1,11 +1,11 @@ import isPromise from 'is-promise' import { Handler } from '../function/handler' -import { Response } from '../function/response' +import { BuilderResponse } from '../function/response' import { BUILDER_FUNCTIONS_FLAG, HTTP_STATUS_METHOD_NOT_ALLOWED, HTTP_STATUS_OK, METADATA_VERSION } from './consts' -const augmentResponse = (response: Response) => { +const augmentResponse = (response: BuilderResponse) => { if (!response || response.statusCode !== HTTP_STATUS_OK) { return response } @@ -36,7 +36,7 @@ const wrapHandler = } // eslint-disable-next-line promise/prefer-await-to-callbacks - const wrappedCallback = (error: unknown, response: Response) => callback(error, augmentResponse(response)) + const wrappedCallback = (error: unknown, response: BuilderResponse) => callback(error, augmentResponse(response)) const execution = handler(modifiedEvent, context, wrappedCallback) if (isPromise(execution)) { From 4690ec7ff1dce76121da6be2a7cf487fd51f5baa Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Wed, 10 Nov 2021 10:45:53 -0800 Subject: [PATCH 08/17] 0.8.1-beta --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f94bb8c1..b0cab614 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@netlify/functions", - "version": "0.8.0", + "version": "0.8.1-beta", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@netlify/functions", - "version": "0.8.0", + "version": "0.8.1-beta", "license": "MIT", "dependencies": { "is-promise": "^4.0.0" diff --git a/package.json b/package.json index cfba810f..6822d178 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@netlify/functions", "main": "./dist/main.js", "types": "./dist/main.d.ts", - "version": "0.8.0", + "version": "0.8.1-beta", "description": "JavaScript utilities for Netlify Functions", "files": [ "dist/**/*.js", From 164945ac16e8ddb0fbc0f70e018385dc2f25de97 Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Wed, 10 Nov 2021 10:54:58 -0800 Subject: [PATCH 09/17] feat: use new BuilderHandler to enforce types --- src/function/handler.ts | 11 ++++++++++- src/lib/builder.ts | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/function/handler.ts b/src/function/handler.ts index cf0b9951..7d1747e8 100644 --- a/src/function/handler.ts +++ b/src/function/handler.ts @@ -1,6 +1,6 @@ import type { Context } from './context' import type { Event } from './event' -import type { Response } from './response' +import type { Response, BuilderResponse } from './response' export interface HandlerCallback { // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -10,3 +10,12 @@ export interface HandlerCallback { export interface Handler { (event: Event, context: Context, callback: HandlerCallback): void | Response | Promise } + +export interface BuilderCallback { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (error: any, response: BuilderResponse): void +} + +export interface BuilderHandler { + (event: Event, context: Context, callback: BuilderCallback): void | BuilderResponse | Promise +} diff --git a/src/lib/builder.ts b/src/lib/builder.ts index 4d42dbc0..f6328caa 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -1,6 +1,6 @@ import isPromise from 'is-promise' -import { Handler } from '../function/handler' +import { BuilderHandler } from '../function/handler' import { BuilderResponse } from '../function/response' import { BUILDER_FUNCTIONS_FLAG, HTTP_STATUS_METHOD_NOT_ALLOWED, HTTP_STATUS_OK, METADATA_VERSION } from './consts' @@ -18,7 +18,7 @@ const augmentResponse = (response: BuilderResponse) => { } const wrapHandler = - (handler: Handler): Handler => + (handler: BuilderHandler): BuilderHandler => // eslint-disable-next-line promise/prefer-await-to-callbacks (event, context, callback) => { if (event.httpMethod !== 'GET' && event.httpMethod !== 'HEAD') { From d74b2b6fa6bccd0f8e09964bf7a2966a63feda76 Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Wed, 10 Nov 2021 11:15:31 -0800 Subject: [PATCH 10/17] 0.8.1-beta.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b0cab614..5394730f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@netlify/functions", - "version": "0.8.1-beta", + "version": "0.8.1-beta.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@netlify/functions", - "version": "0.8.1-beta", + "version": "0.8.1-beta.0", "license": "MIT", "dependencies": { "is-promise": "^4.0.0" diff --git a/package.json b/package.json index 6822d178..08a46735 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@netlify/functions", "main": "./dist/main.js", "types": "./dist/main.d.ts", - "version": "0.8.1-beta", + "version": "0.8.1-beta.0", "description": "JavaScript utilities for Netlify Functions", "files": [ "dist/**/*.js", From 3dc90d4abfee9fd2ba336fd3413731d62d364567 Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Mon, 15 Nov 2021 09:02:06 -0800 Subject: [PATCH 11/17] fix: builder handler types, thanks for pairing with me matt kane :) --- src/function/handler.ts | 18 ++++++------------ src/lib/builder.ts | 4 ++-- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/function/handler.ts b/src/function/handler.ts index 7d1747e8..73ff93a0 100644 --- a/src/function/handler.ts +++ b/src/function/handler.ts @@ -2,20 +2,14 @@ import type { Context } from './context' import type { Event } from './event' import type { Response, BuilderResponse } from './response' -export interface HandlerCallback { +export interface HandlerCallback { // eslint-disable-next-line @typescript-eslint/no-explicit-any - (error: any, response: Response): void + (error: any, response: TResponse): void } -export interface Handler { - (event: Event, context: Context, callback: HandlerCallback): void | Response | Promise +interface BaseHandler { + (event: Event, context: Context, callback: HandlerCallback): void | TResponse | Promise } -export interface BuilderCallback { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (error: any, response: BuilderResponse): void -} - -export interface BuilderHandler { - (event: Event, context: Context, callback: BuilderCallback): void | BuilderResponse | Promise -} +export type Handler = BaseHandler +export type BuilderHandler = BaseHandler diff --git a/src/lib/builder.ts b/src/lib/builder.ts index f6328caa..0eadf0fa 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -1,6 +1,6 @@ import isPromise from 'is-promise' -import { BuilderHandler } from '../function/handler' +import { BuilderHandler, Handler } from '../function/handler' import { BuilderResponse } from '../function/response' import { BUILDER_FUNCTIONS_FLAG, HTTP_STATUS_METHOD_NOT_ALLOWED, HTTP_STATUS_OK, METADATA_VERSION } from './consts' @@ -18,7 +18,7 @@ const augmentResponse = (response: BuilderResponse) => { } const wrapHandler = - (handler: BuilderHandler): BuilderHandler => + (handler: BuilderHandler): Handler => // eslint-disable-next-line promise/prefer-await-to-callbacks (event, context, callback) => { if (event.httpMethod !== 'GET' && event.httpMethod !== 'HEAD') { From 0de81d0d8b27bd424cf0f8c5a8b3e3d3098e3883 Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Mon, 15 Nov 2021 11:04:48 -0800 Subject: [PATCH 12/17] fix: remove beta versioning --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5394730f..f94bb8c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@netlify/functions", - "version": "0.8.1-beta.0", + "version": "0.8.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@netlify/functions", - "version": "0.8.1-beta.0", + "version": "0.8.0", "license": "MIT", "dependencies": { "is-promise": "^4.0.0" diff --git a/package.json b/package.json index 08a46735..cfba810f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@netlify/functions", "main": "./dist/main.js", "types": "./dist/main.d.ts", - "version": "0.8.1-beta.0", + "version": "0.8.0", "description": "JavaScript utilities for Netlify Functions", "files": [ "dist/**/*.js", From 2f819dd7b818677f219cbc84973e4cf81d547bbe Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Tue, 16 Nov 2021 15:06:02 -0800 Subject: [PATCH 13/17] feat: prevent users from adding ttl field to values of Response type --- src/function/response.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/function/response.ts b/src/function/response.ts index f0226c0d..fcbac266 100644 --- a/src/function/response.ts +++ b/src/function/response.ts @@ -1,4 +1,4 @@ -export interface Response { +export interface BaseResponse { statusCode: number headers?: { [header: string]: boolean | number | string @@ -10,6 +10,12 @@ export interface Response { isBase64Encoded?: boolean } -export interface BuilderResponse extends Response { +export interface Response extends BaseResponse { + /** + * The `ttl` value is only supported in `builder` functions + */ + ttl?: never +} +export interface BuilderResponse extends BaseResponse { ttl?: number } From c5ba49a820c6353ebc6af6c0d303cc5aa985150e Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Tue, 16 Nov 2021 15:14:39 -0800 Subject: [PATCH 14/17] feat: rollback change that broke tests --- src/function/response.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/function/response.ts b/src/function/response.ts index fcbac266..4c4c4d1d 100644 --- a/src/function/response.ts +++ b/src/function/response.ts @@ -1,4 +1,4 @@ -export interface BaseResponse { +export interface Response { statusCode: number headers?: { [header: string]: boolean | number | string @@ -9,13 +9,6 @@ export interface BaseResponse { body?: string isBase64Encoded?: boolean } - -export interface Response extends BaseResponse { - /** - * The `ttl` value is only supported in `builder` functions - */ - ttl?: never -} -export interface BuilderResponse extends BaseResponse { +export interface BuilderResponse extends Response { ttl?: number } From da007eaaa2074a0800c10441d75eaa1d968db2b5 Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Wed, 17 Nov 2021 15:36:23 -0800 Subject: [PATCH 15/17] fix: resolve merge conflicts, part 2 --- src/function/handler.ts | 13 ++++++------- src/lib/builder.ts | 9 +++++---- src/lib/secrets.ts | 12 ++++++++---- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/function/handler.ts b/src/function/handler.ts index d3d79b2f..e59b5207 100644 --- a/src/function/handler.ts +++ b/src/function/handler.ts @@ -1,15 +1,14 @@ import type { Context } from './context' import type { Event } from './event' -import type { Response, BuilderResponse } from './response +import type { BuilderResponse } from './response' -export interface HandlerCallback { +export interface HandlerCallback { // eslint-disable-next-line @typescript-eslint/no-explicit-any - (error: any, response: TResponse): void + (error: any, response: ResponseType): void } -interface BaseHandler { - (event: Event, context: C, callback: HandlerCallback): void | TResponse | Promise +export interface Handler { + (event: Event, context: C, callback: HandlerCallback): void | ResponseType | Promise } -export type Handler = BaseHandler -export type BuilderHandler = BaseHandler +export type BuilderHandler = Handler diff --git a/src/lib/builder.ts b/src/lib/builder.ts index 796fdc09..ca28f8cb 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -1,7 +1,8 @@ import isPromise from 'is-promise' -import { BuilderHandler, Handler } from '../function/handler' -import { BuilderResponse } from '../function/response +import { HandlerContext, HandlerEvent } from '../function' +import { BuilderHandler, Handler, HandlerCallback } from '../function/handler' +import { Response, BuilderResponse } from '../function/response' import { BUILDER_FUNCTIONS_FLAG, HTTP_STATUS_METHOD_NOT_ALLOWED, HTTP_STATUS_OK, METADATA_VERSION } from './consts' @@ -18,9 +19,9 @@ const augmentResponse = (response: BuilderResponse) => { } const wrapHandler = - (handler: BuilderHandler): Handler => + (handler: BuilderHandler): Handler => // eslint-disable-next-line promise/prefer-await-to-callbacks - (event: HandlerEvent, context: HandlerContext, callback: HandlerCallback) => { + (event: HandlerEvent, context: HandlerContext, callback: HandlerCallback) => { if (event.httpMethod !== 'GET' && event.httpMethod !== 'HEAD') { return Promise.resolve({ body: 'Method Not Allowed', diff --git a/src/lib/secrets.ts b/src/lib/secrets.ts index 19227a95..7960bee7 100644 --- a/src/lib/secrets.ts +++ b/src/lib/secrets.ts @@ -10,13 +10,17 @@ export interface ContextWithSecrets extends Context { secrets: NetlifySecrets } -export type HandlerWithSecrets = Handler +export type HandlerWithSecrets = Handler // The common usage of this module export const withSecrets = - (handler: Handler) => - // eslint-disable-next-line promise/prefer-await-to-callbacks - async (event: HandlerEventWithOneGraph | HandlerEvent, context: HandlerContext, callback: HandlerCallback) => { + (handler: Handler) => + async ( + event: HandlerEventWithOneGraph | HandlerEvent, + context: HandlerContext, + // eslint-disable-next-line promise/prefer-await-to-callbacks + callback: HandlerCallback, + ) => { const secrets = await getSecrets(event as HandlerEventWithOneGraph) return handler(event, { ...context, secrets }, callback) From 6e45994b956e64f881e46167cd0836a3d60a6d90 Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Wed, 17 Nov 2021 15:51:39 -0800 Subject: [PATCH 16/17] fix: resolve merge conflicts, part 3 --- src/function/handler.ts | 7 ++++--- src/lib/builder.ts | 2 +- src/lib/secrets.ts | 7 ++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/function/handler.ts b/src/function/handler.ts index e59b5207..72bb65cf 100644 --- a/src/function/handler.ts +++ b/src/function/handler.ts @@ -1,14 +1,15 @@ import type { Context } from './context' import type { Event } from './event' -import type { BuilderResponse } from './response' +import type { Response, BuilderResponse } from './response' export interface HandlerCallback { // eslint-disable-next-line @typescript-eslint/no-explicit-any (error: any, response: ResponseType): void } -export interface Handler { +export interface BaseHandler { (event: Event, context: C, callback: HandlerCallback): void | ResponseType | Promise } -export type BuilderHandler = Handler +export type Handler = BaseHandler +export type BuilderHandler = BaseHandler diff --git a/src/lib/builder.ts b/src/lib/builder.ts index ca28f8cb..09511c56 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -19,7 +19,7 @@ const augmentResponse = (response: BuilderResponse) => { } const wrapHandler = - (handler: BuilderHandler): Handler => + (handler: BuilderHandler): Handler => // eslint-disable-next-line promise/prefer-await-to-callbacks (event: HandlerEvent, context: HandlerContext, callback: HandlerCallback) => { if (event.httpMethod !== 'GET' && event.httpMethod !== 'HEAD') { diff --git a/src/lib/secrets.ts b/src/lib/secrets.ts index 7960bee7..f09f5604 100644 --- a/src/lib/secrets.ts +++ b/src/lib/secrets.ts @@ -1,6 +1,7 @@ import { Context as HandlerContext, Context } from '../function/context' import { Event as HandlerEvent } from '../function/event' -import { Handler, HandlerCallback } from '../function/handler' +import { BaseHandler, HandlerCallback } from '../function/handler' +import { Response } from '../function/response' import { getSecrets, HandlerEventWithOneGraph, NetlifySecrets } from './secrets_helper' // Fine-grained control during the preview, less necessary with a more proactive OneGraph solution @@ -10,11 +11,11 @@ export interface ContextWithSecrets extends Context { secrets: NetlifySecrets } -export type HandlerWithSecrets = Handler +export type HandlerWithSecrets = BaseHandler // The common usage of this module export const withSecrets = - (handler: Handler) => + (handler: BaseHandler) => async ( event: HandlerEventWithOneGraph | HandlerEvent, context: HandlerContext, From 5c28b497a97cd99cd170c0a2b52d971b2e5d2b40 Mon Sep 17 00:00:00 2001 From: Emily Zhang Date: Wed, 17 Nov 2021 15:53:45 -0800 Subject: [PATCH 17/17] fix: add type constraint for handlercallback as well --- src/function/handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/function/handler.ts b/src/function/handler.ts index 72bb65cf..8f55493e 100644 --- a/src/function/handler.ts +++ b/src/function/handler.ts @@ -2,7 +2,7 @@ import type { Context } from './context' import type { Event } from './event' import type { Response, BuilderResponse } from './response' -export interface HandlerCallback { +export interface HandlerCallback { // eslint-disable-next-line @typescript-eslint/no-explicit-any (error: any, response: ResponseType): void }