Skip to content

v4.0.0

Compare
Choose a tag to compare
@ejizba ejizba released this 26 Sep 23:22
· 53 commits to v4.x since this release
d339bff

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 and HttpRequest 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 to InvocationContext
    • Remove context.done(). We assume your function (async or sync) is done as soon as it returns
    • Remove context.executionContext. You can find functionName and retryContext on the root context object instead
    • Remove context.bindingDefinitions in favor of context.options
    • Remove context.log sub-methods (context.log.error/context.log.warn/etc.) in favor of methods on the root context object (context.error/context.warn/etc.). Also Remove the verbose option in favor of trace and debug to match Node.js's console methods
    • Remove context.req, context,res, and context.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 on context.extraInputs or context.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
  • 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 to HttpRequest
      • Change query from type HttpRequestQuery to Node.js core type URLSearchParams
    • Remove HttpResponseSimple/HttpResponseFull/HttpResponse types in favor of HttpResponse class and HttpResponseInit interface
      • Remove statusCode in favor of status
      • Remove end, send, sendStatus, and json. These were callback methods based on context.done() which is no longer supported
      • Remove header-related methods (setHeader, header, set, getHeader, get, removeHeader, type) from base response object. You must use response.headers for any header-related methods
    • Change headers from type HttpRequestHeaders/HttpResponseHeaders to fetch standard type Headers
    • Remove body properties body, rawBody, bufferBody, and parseFormBody() in favor of fetch standard methods arrayBuffer(), blob(), formData(), json(), and text()
  • 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 the app object