Skip to content

v2.0.0

Compare
Choose a tag to compare
@niemyjski niemyjski released this 20 Jul 02:22

We have put a ton of work into modernizing the JavaScript client to take advantage of the latest JavaScript features. When we first started writing the JavaScript client we could only target ES3. A lot has changed since then, so we wanted update the client to embrace the future while removing blocking issues that was preventing us from supporting newer technologies such as react native.

New Features

  • Source map support for browsers (@exceptionless/browser npm package) !
  • ECMAScript Modules (ESM) Support. This allows for smaller package sizes via tree shaking and increased support for new environments (e.g., React). This also allowed us to remove side effects and singletons from our codebase that can make it harder to create customized clients.
  • Simplified client startup for ease of use and removed configuration (useSessions(), useReferenceIds()) that could be inferred at runtime.
  • Fully async idiomatic API. We got rid of callbacks and drastically simplified the codebase. This will make it much easier to consume from modern applications.
  • We rewrote our storage and submission implementations to be compatible across many different runtimes by closely aligning with the fetch and local storage APIs.
  • React support via the @exceptionless/react npm package. We've included an example application showing how easy it is to configure.
  • Vue support via the @exceptionless/vue npm package. We've included an example application showing how easy it is to configure.

Development Improvements

  • We've spent quite a bit of time improving the development tool chain to use npm 7 workspaces. This will improve over time but really cuts down on global tooling to work with the client.
  • We added recommended linting rules and enabled TypeScript strict mode. This will reduce the chances of bugs getting into the code base while following best practices.
  • Every commit is now actively tested against multiple operating systems.

Breaking changes

  • Packages are now only hosted on npm (packages will no longer be pushed to bower) and are also available on the GitHub Registry.
  • The exceptionless npm package has been deprecated. We recommend upgrading to the @exceptionless/browser or @exceptionless/node packages respectively.
  • All packages now exclusively target ECMAScript Modules (ESM). This allows for smaller package sizes via tree shaking and increased support for new environments (e.g., React). This may also mean you will need to be using Node 15+ which supports ESM.
  • Please see the documentation for configuring the client as script imports and client initialization code has changed.
  • The client configuration object has been simplified a bit.
    • We've moved services (lastReferenceIdManager, log, storage, queue, submissionClient) into a services property and removed services (environmentInfoCollector, errorParser, moduleCollector, requestInfoCollector) that made more sense as a plugin or were no longer needed.
    • The following items have been removed: submissionAdapter, submissionClient, useSessions(), useReferenceIds(), defaults. The client will automatically handle sessions and reference ids based on usage.
  • We removed the addRequestInfo fluent EventBuilder API function. This was platform specific to node and didn't make sense in most cases. We replaced it with setContextProperty(key, value) which can be used to set data on the EventBuilder context to be consumed in a plugin. If you were using addRequestInfo(req) you should now call setContextProperty(KnownEventDataKeys.RequestInfo, req)

Please take a look at the change log for a full list of the changes.

Feedback

We're listening and we'd love to hear your feedback! Please send us your feedback by clicking on one of the links below!