UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

80 lines (79 loc) 2.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.gopher_parsedir = gopher_parsedir; function gopher_parsedir(dirent) { // discuss at: https://locutus.io/php/gopher_parsedir/ // original by: Brett Zamir (https://brett-zamir.me) // example 1: var entry = gopher_parsedir('0All about my gopher site.\t/allabout.txt\tgopher.example.com\t70\u000d\u000a') // example 1: entry.title // returns 1: 'All about my gopher site.' /* Types * 0 = plain text file * 1 = directory menu listing * 2 = CSO search query * 3 = error message * 4 = BinHex encoded text file * 5 = binary archive file * 6 = UUEncoded text file * 7 = search engine query * 8 = telnet session pointer * 9 = binary file * g = Graphics file format, primarily a GIF file * h = HTML file * i = informational message * s = Audio file format, primarily a WAV file */ const entryPattern = /^(.)([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\r\n$/; const entry = dirent.match(entryPattern); if (entry === null) { throw new Error('Could not parse the directory entry'); // return false; } let type = entry[1] ?? ''; switch (type) { case 'i': // GOPHER_INFO type = 255; break; case '1': // GOPHER_DIRECTORY type = 1; break; case '0': // GOPHER_DOCUMENT type = 0; break; case '4': // GOPHER_BINHEX type = 4; break; case '5': // GOPHER_DOSBINARY type = 5; break; case '6': // GOPHER_UUENCODED type = 6; break; case '9': // GOPHER_BINARY type = 9; break; case 'h': // GOPHER_HTTP type = 254; break; default: return { type: -1, data: dirent, }; // GOPHER_UNKNOWN } return { type, title: entry[2] ?? '', path: entry[3] ?? '', host: entry[4] ?? '', port: entry[5] ?? '', }; }