// The classic choo counter. This one module is the whole app, and both // sides consume it: the browser mounts it (import map resolves // @choojs/html to the DOM renderer), Node stringifies it (same specifier // resolves to the string renderer). That's the isomorphic contract. import choo from '@choojs/core' import html from '@choojs/html' export default function createApp () { const app = choo() app.use(countStore) app.route('/', mainView) // the demo gets served from arbitrary subpaths (npx serve ., test // servers); a wildcard fallback makes it mount anywhere app.route('*', mainView) return app } function mainView (state, emit) { emit(state.events.DOMTITLECHANGE, `count is ${state.count}`) return html`

count is ${state.count}

` function onclick () { emit('increment', 1) } } function countStore (state, emitter) { state.count = state.count || 0 emitter.on('increment', function (count) { state.count += count emitter.emit('render') }) }