export interface Protocol { code : number ; size : number ; name : string ; resolvable ? : boolean ; path ? : boolean ; } const V = - 1 ; export const names = { } ; export const codes = { } ; export const table = [ [ 4 , 32 , 'ip4' ] , [ 6 , 16 , 'tcp' ] , [ 33 , 16 , 'dccp' ] , [ 41 , 128 , 'ip6' ] , [ 42 , V , 'ip6zone' ] , [ 53 , V , 'dns' , true ] , [ 54 , V , 'dns4' , true ] , [ 55 , V , 'dns6' , true ] , [ 56 , V , 'dnsaddr' , true ] , [ 132 , 16 , 'sctp' ] , [ 273 , 16 , 'udp' ] , [ 275 , 0 , 'p2p-webrtc-star' ] , [ 276 , 0 , 'p2p-webrtc-direct' ] , [ 277 , 0 , 'p2p-stardust' ] , [ 290 , 0 , 'p2p-circuit' ] , [ 301 , 0 , 'udt' ] , [ 302 , 0 , 'utp' ] , [ 400 , V , 'unix' , false , true ] , [ 421 , V , 'ipfs' ] , [ 421 , V , 'p2p' ] , [ 443 , 0 , 'https' ] , [ 444 , 96 , 'onion' ] , [ 445 , 296 , 'onion3' ] , [ 446 , V , 'garlic64' ] , [ 460 , 0 , 'quic' ] , [ 477 , 0 , 'ws' ] , [ 478 , 0 , 'wss' ] , [ 479 , 0 , 'p2p-websocket-star' ] , [ 480 , 0 , 'http' ] , [ 777 , V , 'memory' ] ] ; table . forEach ( row => { const proto = createProtocol ( ... row ) ; codes [ proto . code ] = proto ; names [ proto . name ] = proto ; } ) ; export function createProtocol ( code , size , name , resolvable ? , path ? ) { return { code , size , name , resolvable : Boolean ( resolvable ) , path : Boolean ( path ) } ; } export function getProtocol ( proto ) { if ( typeof proto === 'number' ) { if ( codes [ proto ] != null ) { return codes [ proto ] ; } throw new Error ( `no protocol with code: ${ proto }` ) ; } else if ( typeof proto === 'string' ) { if ( names [ proto ] != null ) { return names [ proto ] ; } throw new Error ( `no protocol with name: ${ proto }` ) ; } throw new Error ( `invalid protocol id type: ${ typeof proto }` ) ; }