index.js
1 'use strict'; 2 3 var $TypeError = require('es-errors/type'); 4 var inspect = require('object-inspect'); 5 var getSideChannelList = require('side-channel-list'); 6 var getSideChannelMap = require('side-channel-map'); 7 var getSideChannelWeakMap = require('side-channel-weakmap'); 8 9 var makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList; 10 11 /** @type {import('.')} */ 12 module.exports = function getSideChannel() { 13 /** @typedef {ReturnType<typeof getSideChannel>} Channel */ 14 15 /** @type {Channel | undefined} */ var $channelData; 16 17 /** @type {Channel} */ 18 var channel = { 19 assert: function (key) { 20 if (!channel.has(key)) { 21 throw new $TypeError('Side channel does not contain ' + inspect(key)); 22 } 23 }, 24 'delete': function (key) { 25 return !!$channelData && $channelData['delete'](key); 26 }, 27 get: function (key) { 28 return $channelData && $channelData.get(key); 29 }, 30 has: function (key) { 31 return !!$channelData && $channelData.has(key); 32 }, 33 set: function (key, value) { 34 if (!$channelData) { 35 $channelData = makeChannel(); 36 } 37 38 $channelData.set(key, value); 39 } 40 }; 41 // @ts-expect-error TODO: figure out why this is erroring 42 return channel; 43 };