1
0

protocol-helper-registry.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. const helperKeys = [
  2. 'getResponseBufferHint',
  3. 'inspectReceivedBytes',
  4. 'parseSendExpected',
  5. 'readResponseFromBuffer'
  6. ]
  7. function createEmptyHelpers() {
  8. return helperKeys.reduce((result, key) => {
  9. result[key] = null
  10. return result
  11. }, {})
  12. }
  13. function normalizeHelpers(helpers = {}) {
  14. const normalized = {}
  15. helperKeys.forEach((key) => {
  16. normalized[key] = typeof helpers[key] === 'function' ? helpers[key] : null
  17. })
  18. return normalized
  19. }
  20. function createProtocolHelperRegistry() {
  21. let helpers = createEmptyHelpers()
  22. let helpersLoaded = false
  23. let helpersLoader = null
  24. function ensureLoaded() {
  25. if (helpersLoaded || typeof helpersLoader !== 'function') return
  26. helpersLoaded = true
  27. helpers = normalizeHelpers(helpersLoader() || {})
  28. }
  29. function configure(nextHelpers = {}) {
  30. if (typeof nextHelpers === 'function') {
  31. helpersLoader = nextHelpers
  32. helpersLoaded = false
  33. helpers = createEmptyHelpers()
  34. return
  35. }
  36. helpersLoader = null
  37. helpersLoaded = true
  38. helpers = normalizeHelpers(nextHelpers)
  39. }
  40. function get(key) {
  41. ensureLoaded()
  42. return helpers[key] || null
  43. }
  44. function getHelpers() {
  45. ensureLoaded()
  46. return {
  47. ...helpers
  48. }
  49. }
  50. return {
  51. configure,
  52. get,
  53. getHelpers
  54. }
  55. }
  56. module.exports = {
  57. createProtocolHelperRegistry
  58. }