Havana component handler
An HTML response handler.
Havana component handler works with a request/response
dispatcher such as
Havana server,
Havana browser
or a library with an interchangeable API. When a dispatcher
publishes a response.received
event Havana component
handler will publish a route.find
event for consumption by
a router such as
Havana router
or a library with an interchangeable API.
Havana component handler consumes routes of the following structure (note how components can be nested):
'url': '/' 'method': 'GET' 'components': 'component': 'page' 'properties': 'header': 'component': 'header' 'properties': 'logo': '/public/logo.svg' 'content': 'Hello world'
When the router publishes a route.found
event Havana
component handler will convert the components array to the
following flattened structure:
'children': 2 'component': 'page' 'id': 1 'properties': 'content': 'Hello world' 'header': null 'state': 'not rendered' 'component': 'header' 'id': 2 'parent': 1 'properties': 'logo': '/public/logo.svg' 'propertyKey': 'header' 'state': 'not rendered'
Havana component handler then publishes a components.compile
event for consumption by
Havana component compiler
or a library with an interchangeable API. The component
compiler renders the components array into an HTML string,
publishing a components.compiled
event when complete.
Havana component handler subscribes to the components.compiled
event and in turn publishes a response.send
event
publishing the rendered HTML string for consumption by the
dispatcher.
How to install
npm install havana-component-handler
How to use
;;;; const event = ; const reporting = 'level': 2 'reporter': consolelog; const server = 'event': event 'reporting': reporting; 'event': event 'reporting': reporting 'routes': 'url': '/' 'method': 'GET' 'components': 'component': 'page' 'properties': 'content': 'Hello world' ; // Add a component compiler here 'event': event 'reporting': reporting; server;
Event list
Events take the form of Havana event or a library with an interchangeable API.
Publish
response.handler.register
: Signifies that Havana component handler will now attempt to handle requests.route.find
: Signifies that a request has been received and Havana component handler requires a matching route.components.compile
: Signifies that Havana component handler requires a components array to be rendered into an HTML string.response.send
: Signifies that Havana component handler has received an HTML string for consumption by a request/response dispatcher.response.handler.error
: Signifies that Havana component handler was unable to provide a response.
Subscribe
request.received
: Allows a request/response dispatcher to notify Havana component handler that it has received a request, publishing the request data for consumption by Havana component handler.route.found
: Allows a router to notify Havana component Handler that it has found a route, publishing the route data for consumption by Havana component handler.components.compiled
: Allows a component compiler to notify Havana component handler that it has completed rendering the components array into an HTML string.
ES2015+
Havana component handler is written using ES2015+ syntax.
However, by default this module will use an ES5 compatible file that has been compiled using Babel.
In the dist
directory there are four files, the default
is handler.server.js
. The default when using a client-side
bundler that supports the
browser field
spec is handler.browser.js
.
Havana component handler currently requires the
Babel polyfill.
You are expected to supply this yourself. However, as a
courtesy you will also find handler.server.with-polyfill.js
and handler.browser.with-polyfill.js
in the dist
directory.