UNPKG

1.02 kBJavaScriptView Raw
1'use strict'
2
3const bsplit = require('buffer-split')
4const errcode = require('err-code')
5
6/**
7 * Select the best record out of the given records.
8 *
9 * @param {Object} selectors
10 * @param {Buffer} k
11 * @param {Array<Buffer>} records
12 * @returns {number} - The index of the best record.
13 */
14const bestRecord = (selectors, k, records) => {
15 if (records.length === 0) {
16 const errMsg = `No records given`
17
18 throw errcode(new Error(errMsg), 'ERR_NO_RECORDS_RECEIVED')
19 }
20
21 const parts = bsplit(k, Buffer.from('/'))
22
23 if (parts.length < 3) {
24 const errMsg = `Record key does not have a selector function`
25
26 throw errcode(new Error(errMsg), 'ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY')
27 }
28
29 const selector = selectors[parts[1].toString()]
30
31 if (!selector) {
32 const errMsg = `Unrecognized key prefix: ${parts[1]}`
33
34 throw errcode(new Error(errMsg), 'ERR_UNRECOGNIZED_KEY_PREFIX')
35 }
36
37 return selector(k, records)
38}
39
40module.exports = {
41 bestRecord: bestRecord,
42 selectors: require('./selectors')
43}