Add new options, generics, and unit tests for routers.

Review Request #12915 — Created March 23, 2023 and submitted — Latest diff uploaded

Information

Spina
master

Reviewers

BaseRouter (and Backbone.Router) lacked some of the capabilities
available to models and views. It wasn't possible to provide typed
custom options, for example. Our typing also didn't allow for routes to
be dynamically-constructed.

This change introduces new generics when subclassing BaseRouter or
Backbone.Router, allowing an interface to be provided for custom
options. This mixes into an interface (now provided in our version of
the Backbone typings) of standard options for the class.

The standard options have been updated to not require routes to be
specified.

The combined results are passed to preinitialize, initialize, and
constructor. This follows the same patterns used in Model and
View.

The routes static attribute can now be a function, which returns the
routes for an instance. This is run with the instance being passed as
this.

A new RoutesHash type has been exported. This maps to
Backbone.RoutesHash, and is easier to reference without importing
Backbone.

Unit tests have been addd to test all static attributes/fucntion
behavior. Since our testing uses TypeScript, the type-related issues
were also caught by tests.

Unit tests pass.

Commits

Files