viewof bib = frepr(function (entries, options = {}) {
const {
numbered = true,
citation = defaultCitation,
entry = defaultEntry
} = options;
return new AdvancedSetter(new Map(), {
set(state, ...keys) {
return citation(
keys.map((key) => {
const ref = entries[key];
if (ref === undefined)
throw new Error(`${key} was not found in given bibliography`);
if (state.has(key)) return [...state.get(key)];
const id = numbered ? state.size : key,
pair = [id, entry(ref, id)];
state.set(key, pair);
return pair;
})
);
},
get(state) {
return html`${Array.from(state.values(), ([, rendered]) => rendered)}`;
}
});
}, bibdoc)