Install via yarn add locutus and import:
import { gopher_parsedir } from 'locutus/php/net-gopher/gopher_parsedir'.
Or with CommonJS: const { gopher_parsedir } = require('locutus/php/net-gopher/gopher_parsedir')
Use a bundler that supports tree-shaking so you only ship the functions you actually use.
Vite,
webpack,
Rollup, and
Parcel
all handle this. For server-side use this is less of a concern.
Examples
These examples are extracted from test cases that automatically verify our functions against their native counterparts.
#
code
expected result
1
var entry = gopher_parsedir('0All about my gopher site.\t/allabout.txt\tgopher.example.com\t70\u000d\u000a')
entry.title
exportfunctiongopher_parsedir(dirent: string): GopherKnownEntry | GopherUnknownEntry { // 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 */
exportfunctiongopher_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 */
if (entry === null) { thrownewError('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] ?? '', } }
Improve this function
Locutus is a community effort following
The McDonald's Theory:
we ship first iterations, hoping others will improve them.
If you see something that could be better, we'd love your contribution.