v4.0.0
The new Node.js programming model is now Generally Available! ๐ This changelog is meant as a detailed list of changes in the new version. See the official upgrade guide for a less detailed, more user-friendly list of the changes.
Added
- Support registering functions directly in your code instead of in
function.json
files #569 and #480 - Allow classes like
InvocationContext
andHttpRequest
to be constructed in test environments outside the Azure Functions runtime
Changed
- Update minimum version of Node.js to 18.x
- Update minimum version of TypeScript to 4.x
- Switch the order of arguments. For example,
(context, request)
is now(request, context)
#34 - Simplify
context
object #204- Rename
Context
toInvocationContext
- Remove
context.done()
. We assume your function (async or sync) is done as soon as it returns - Remove
context.executionContext
. You can findfunctionName
andretryContext
on the rootcontext
object instead - Remove
context.bindingDefinitions
in favor ofcontext.options
- Remove
context.log
sub-methods (context.log.error
/context.log.warn
/etc.) in favor of methods on the rootcontext
object (context.error
/context.warn
/etc.). Also Remove theverbose
option in favor oftrace
anddebug
to match Node.js'sconsole
methods - Remove
context.req
,context,res
, andcontext.bindings
. The primary input is always an argument to your function, the primary output is always the return value of your function, and everything else can be accessed oncontext.extraInputs
orcontext.extraOutputs
- Clean up
context.bindingMetadata
- Rename to
context.triggerMetadata
- Remove legacy
sys
property - Remove logic that was recursively attempting to convert objects from rpc values, causing #607
- Make camel-case logic consistent so that it applies to the whole object - specifically including arrays which were previously excluded
- Rename to
- Rename
- Remove http classes that were unique to Azure Functions in favor of new classes representing a subset of the fetch standard based on the undici npm package.
- Rename
Request
toHttpRequest
- Change
query
from typeHttpRequestQuery
to Node.js core typeURLSearchParams
- Change
- Remove
HttpResponseSimple
/HttpResponseFull
/HttpResponse
types in favor ofHttpResponse
class andHttpResponseInit
interface- Remove
statusCode
in favor ofstatus
- Remove
end
,send
,sendStatus
, andjson
. These were callback methods based oncontext.done()
which is no longer supported - Remove header-related methods (
setHeader
,header
,set
,getHeader
,get
,removeHeader
,type
) from base response object. You must useresponse.headers
for any header-related methods
- Remove
- Change
headers
from typeHttpRequestHeaders
/HttpResponseHeaders
to fetch standard typeHeaders
- Remove body properties
body
,rawBody
,bufferBody
, andparseFormBody()
in favor of fetch standard methodsarrayBuffer()
,blob()
,formData()
,json()
, andtext()
- Rename
- Handle all falsy values appropriately. Treat it as data to be passed along instead of occasionally converting it to
null
#388 - Remove
setup()
method. v4 of the programming model is automatically setup when you register any function from theapp
object