export default function(visitable, submitable, deletable, cancelable) {
return submitable(
cancelable(
deletable({
visit: visitable(['/:dc/kv/:kv/edit', '/:dc/kv/create'], function(str) {
// this will encode the parts of the key path but means you can no longer
// visit with path parts containing slashes
return str
.split('/')
.map(encodeURIComponent)
.join('/');
}),
session: deletable({}, '[data-test-session]'),
})
)
);
}