- [TODO - BREAKING CHANGE] Rename the abstraction uri-template to path
- [TODO - BREAKING CHANGE] Consider
clojure.walkas routes navigation tool - [TODO] Include [quickstart] complete server examples using Ring and Machhiato
- [TODO] Return numeric direction (lower/higher) indicator in URI matching
- [Todo] Do not finalize FULL-MATCH (in request) in a partial-match request
- because we don't know if it's a full match; it's determined by a future token
- Bugfix
- Expect only index-key (e.g.
:id) in indexable route incalfpath.route/make-index- Bug: Expects
:handlerto be present in identifiable route
- Bug: Expects
- Include URI pattern wildcard suffix in
calfpath.route/make-index- Bug: URI wildcard suffix is stripped when indexing routes
- Group common URI pattern into sub-routes
- Bug: Common URI pattern in routes should be grouped together
- Expect only index-key (e.g.
- Enhancement
- Support path params notation
:paramand{param}, e.g./foo/:param/barand/foo/{param}/bar
- Support path params notation
- [BREAKING CHANGE] Drop support
- Java 6 (JDK 1.6) - for compatibility with Java 15 compiler (cannot emit 1.6 class files)
- Clojure 1.7 - to use string utility fns introduced in Clojure 1.8 for CLJS
- [BREAKING CHANGE] Rename
calfpath.route/assoc-spec-to-requesttoassoc-route-to-request - ClojureScript compatibility
- Excluding
calfpath.route/make-dispatcherand matchex optimization (JVM only)
- Excluding
- Data-driven Routes
- [BREAKING CHANGE] Put URI params under
:path-paramskey in request - Support for easy route syntax
- Accept
optionsargument in functioncalfpath.route/make-dispatcher - Show URI patterns in sorted order on no URI match (HTTP 400)
- Fix issue where (tidy) wildcard did not prefix path-param token with
/
- [BREAKING CHANGE] Put URI params under
- Bidirectional routing - ID based Ring request generation (ns
calfpath.route)make-indexrealize-uritemplate->request
- Performance tweaks
- Automatic prefix-segregation using wildcard nested routing
- See options
:tidy?and:tidy-thresholdincalfpath.route/compile-routes
- See options
- Add large routes (OpenSensors) to performance benchmarks
- Drop
calfpath.MatchResultin favour of 2-element array - Faster match for static URI string (full/partial)
- Use mutable URI end-index for tracking URI match
- Use passthrough params-map from request to add new URI params
- Matchex
- Direct handler invocation for identity matcher
- Use
if-some/when-someinstead ofif-let/when-leteverywhere - Use bulk methods matcher when all routes match methods
- Automatic prefix-segregation using wildcard nested routing
- Documentation
- Dispatch macros
- Data driven routes
- Concepts
- Easy routes notation
- Applying middleware
- Bidirectional routing
- Add a middleware to add route to the request map
calfpath.route/assoc-spec-to-request-middleware
- Routes
- Add utility fn
calfpath.route/prewalk-routes - Fix reporting "URI templates" in routes fallback-400 handler
- Introduce
:full-urikwarg incalfpath.route/compile-routesas reference key
- Introduce
- Add utility fn
- Routes
- [BREAKING CHANGE] Allow argument
params-keyinstead of looking up route spec- Accept
params-keyincalfpath.route/make-uri-matcher- no route spec lookup - Changes to
calfpath.route/compile-routes- Drop support for kwargs
:split-params?and:uri-params-key - Accept optional kwarg
:params-key
- Drop support for kwargs
- Accept
- [BREAKING CHANGE] Allow argument
- Performance
- Include Reitit among performance benchmarks
- Avoid allocating MatchResult object on route full-match with no params
- [IMPL CHANGE] Drop
MatchResult.fullMatch()in favour ofMatchResult.FULL_MATCH_NO_PARAMS
- [IMPL CHANGE] Drop
- Allocate param map (in
Util.matchURI()) to hold only as many params as likely
- [BREAKING CHANGE] Drop support for Clojure versions 1.5 and 1.6
- Supported Clojure versions: 1.7, 1.8, 1.9
- [BREAKING CHANGE] Rename
calfpath.route/make-routestocalfpath.route/compile-routes - Routes: Put URI params under an optional key in request map (by adding pair
:uri-params <request-key>to route)- [BREAKING CHANGE] Update
calfpath.route/make-uri-matcherarity - accept an extra argumenturi-params-key - [BREAKING CHANGE] In middleware
lift-key-middlewareacceptlift-keyscollection instead of singlelift-key - Refactor
calfpath.route/compile-routes- Add option kwargs
:uri-params-keyto find out where to place URI params in the request map:uri-params-valto specify where to place URI params in the request map:split-params?to determine whether to split URI params under a separate key in request map:trailing-slashto specify action to perform with trailing slash (:addor:remove) to URI patterns
- Add option kwargs
- Workaround for
conjbug in Aleph (0.4.4) and Immutant (2.1.10) requests
- [BREAKING CHANGE] Update
- Support for asynchronous Ring handlers in routes API
- Performance optimization
- Make fallback matches faster with matchex optimization
- Make keyword method matches faster using
identical?instead of=
- Route middleware
calfpath.route/assoc-kv-middleware- associate key/value pairs corresponding to a main key in a routecalfpath.route/trailing-slash-middleware- drop or add trailing slash to non-partial URI matchers
- Overhaul performance benchmarks
- Use external handler fns in routing code
- Fix parameter extraction with Clout
- Add benchmarks for other routing libraries
- Ataraxy
- Bidi
- Routes
- [BREAKING CHANGE] Matcher now returns potentially-updated request, or
nil - [BREAKING CHANGE] Route handler now has the same arity as Ring handler
- Path-params associated in request map under respective keys
- This allows Ring middleware to be applied to route handlers
- [BREAKING CHANGE] Drop
ring-handler-middleware
- [BREAKING CHANGE] Matcher now returns potentially-updated request, or
- Documentation
- Fetching/rendering static files or classpath resources using Ring middleware
- Documentation for routes (keys other than essential ones)
- Make URI-match work for partial matches and URI prefixes
- A partial URI pattern may be expressed with a
*suffix - Zero or more partial URI patterns may exist in a route tree
- This may impact how URIs in HTTP-400 responses are generated
- A partial URI pattern may be expressed with a
- Middleware
- A helper fn
calfpath.route/update-in-each-routeto apply route attribute wrapper to specs - A lift-key middleware
calfpath.route/lift-key-middlewareto split routes with mixed specs - A ring-route middleware
calfpath.route/ring-handler-middlewareto wrap Ring handlers into route handlers
- A helper fn
- Helper fn
calfpath.route/make-routesto build routes from given route specs - Allow non-literal string URI-patterns in
calfpath.core/->uri - Fix
calfpath.route/update-fallback-400to add fallback 400 route on one or more URI entry, instead of all - BREAKING CHANGE: Drop
calfpath.core/make-uri-handlerin favor of Calfpath routes
- Support for extensible routes as a first-class abstraction
- A dispatcher fn that walks given routes to match request and invoke corresponding handler
- An optimized (through loop unrolling) way to create a dispatcher fn from given routes
- Helper fns to manipulate routes at shallow and deep levels
- Add support for
PATCHHTTP method
- Dispatch (fn) on URI template by calling fns, that returns a Ring handler fn
- Dispatch (macro) on URI template by evaluating expression in lexical scope
- Dispatch (macro) on HTTP method by evaluating expression