Skip to content

Commit be1a57f

Browse files
committed
BREAKING: export tables and dedup code
License: MIT Signed-off-by: Henrique Dias <[email protected]>
1 parent bcdb9be commit be1a57f

8 files changed

+53
-67
lines changed

src/constants.js

-14
This file was deleted.
File renamed without changes.

src/index.js

+18-14
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@
1515
/** @typedef {import('./generated-types').CodecCode} CodecCode */
1616

1717
const varint = require('varint')
18-
const intTable = require('./int-table')
19-
const codecNameToCodeVarint = require('./varint-table')
20-
const util = require('./util')
2118
const uint8ArrayConcat = require('uint8arrays/concat')
19+
const util = require('./util')
20+
const { nameToVarint, constantToCode, nameToCode, codeToName } = require('./maps')
2221

2322
/**
2423
* Prefix a buffer with a multicodec-packed.
@@ -33,8 +32,8 @@ function addPrefix (multicodecStrOrCode, data) {
3332
if (multicodecStrOrCode instanceof Uint8Array) {
3433
prefix = util.varintUint8ArrayEncode(multicodecStrOrCode)
3534
} else {
36-
if (codecNameToCodeVarint[multicodecStrOrCode]) {
37-
prefix = codecNameToCodeVarint[multicodecStrOrCode]
35+
if (nameToVarint[multicodecStrOrCode]) {
36+
prefix = nameToVarint[multicodecStrOrCode]
3837
} else {
3938
throw new Error('multicodec not recognized')
4039
}
@@ -61,7 +60,7 @@ function rmPrefix (data) {
6160
*/
6261
function getCodec (prefixedData) {
6362
const code = varint.decode(prefixedData)
64-
const codecName = intTable.get(code)
63+
const codecName = codeToName[code]
6564
if (codecName === undefined) {
6665
throw new Error(`Code ${code} not found`)
6766
}
@@ -75,7 +74,7 @@ function getCodec (prefixedData) {
7574
* @returns {CodecName|undefined}
7675
*/
7776
function getName (codec) {
78-
return intTable.get(codec)
77+
return codeToName[codec]
7978
}
8079

8180
/**
@@ -85,11 +84,11 @@ function getName (codec) {
8584
* @returns {CodecCode}
8685
*/
8786
function getNumber (name) {
88-
const code = codecNameToCodeVarint[name]
87+
const code = nameToCode[name]
8988
if (code === undefined) {
9089
throw new Error('Codec `' + name + '` not found')
9190
}
92-
return varint.decode(code)
91+
return code
9392
}
9493

9594
/**
@@ -109,7 +108,7 @@ function getCode (prefixedData) {
109108
* @returns {Uint8Array}
110109
*/
111110
function getCodeVarint (codecName) {
112-
const code = codecNameToCodeVarint[codecName]
111+
const code = nameToVarint[codecName]
113112
if (code === undefined) {
114113
throw new Error('Codec `' + codecName + '` not found')
115114
}
@@ -126,9 +125,6 @@ function getVarint (code) {
126125
return varint.encode(code)
127126
}
128127

129-
// Make the constants top-level constants
130-
const constants = require('./constants')
131-
132128
module.exports = {
133129
addPrefix,
134130
rmPrefix,
@@ -138,5 +134,13 @@ module.exports = {
138134
getCode,
139135
getCodeVarint,
140136
getVarint,
141-
...constants
137+
138+
// Make the constants top-level constants
139+
...constantToCode,
140+
141+
// Export the maps
142+
nameToVarint,
143+
constantToCode,
144+
nameToCode,
145+
codeToName
142146
}

src/int-table.js

-20
This file was deleted.

src/maps.js

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'use strict'
2+
3+
/** @typedef {import('./generated-types').ConstantCodeMap} ConstantCodeMap */
4+
/** @typedef {import('./generated-types').NameUint8ArrayMap} NameUint8ArrayMap */
5+
/** @typedef {import('./generated-types').CodeNameMap} CodeNameMap */
6+
7+
const { baseTable } = require('./generated-table')
8+
const varintEncode = require('./util').varintEncode
9+
10+
const nameToVarint = /** @type {NameUint8ArrayMap} */ ({})
11+
const constantToCode = /** @type {ConstantCodeMap} */({})
12+
const codeToName = /** @type {CodeNameMap} */({})
13+
14+
for (const name in baseTable) {
15+
const code = baseTable[name]
16+
nameToVarint[name] = varintEncode(code)
17+
18+
const constant = name.toUpperCase().replace(/-/g, '_')
19+
constantToCode[constant] = code
20+
21+
if (!codeToName[code]) {
22+
codeToName[code] = name
23+
}
24+
}
25+
26+
module.exports = {
27+
nameToVarint: Object.freeze(nameToVarint),
28+
constantToCode: Object.freeze(constantToCode),
29+
nameToCode: Object.freeze(baseTable),
30+
codeToName: Object.freeze(codeToName)
31+
}

src/varint-table.js

-15
This file was deleted.

test/multicodec.spec.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
const { expect } = require('aegir/utils/chai')
88
const multicodec = require('../src')
99
const uint8ArrayFromString = require('uint8arrays/from-string')
10-
const { baseTable } = require('../src/base-table')
10+
const { nameToCode } = require('../src/maps')
1111

1212
describe('multicodec', () => {
1313
it('add prefix through multicodec (string)', () => {
@@ -61,8 +61,8 @@ describe('multicodec', () => {
6161
})
6262

6363
it('returns all codec numbers from names', () => {
64-
for (const name in baseTable) {
65-
expect(multicodec.getNumber(/** @type {CodecName} */(name))).to.eql(baseTable[name])
64+
for (const name in nameToCode) {
65+
expect(multicodec.getNumber(/** @type {CodecName} */(name))).to.eql(nameToCode[name])
6666
}
6767
})
6868

tools/update-table.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ module.exports = { baseTable }
6565
`
6666

6767
fs.writeFileSync(path.join(__dirname, '../src/generated-types.ts'), typesTemplate)
68-
fs.writeFileSync(path.join(__dirname, '../src/base-table.js'), tableTemplate)
68+
fs.writeFileSync(path.join(__dirname, '../src/generated-table.js'), tableTemplate)
6969
}
7070

7171
run()

0 commit comments

Comments
 (0)