UNPKG

ipfs-http-client

Version:
83 lines (78 loc) 2.28 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var cid = require('multiformats/cid'); var configure = require('./lib/configure.js'); var toUrlSearchParams = require('./lib/to-url-search-params.js'); var stat = require('./files/stat.js'); const createLs = configure.configure((api, opts) => { async function* ls(path, options = {}) { const pathStr = `${ path instanceof Uint8Array ? cid.CID.decode(path) : path }`; async function mapLink(link) { let hash = link.Hash; if (hash.includes('/')) { const ipfsPath = hash.startsWith('/ipfs/') ? hash : `/ipfs/${ hash }`; const stats = await stat.createStat(opts)(ipfsPath); hash = stats.cid; } else { hash = cid.CID.parse(hash); } const entry = { name: link.Name, path: pathStr + (link.Name ? `/${ link.Name }` : ''), size: link.Size, cid: hash, type: typeOf(link) }; if (link.Mode) { entry.mode = parseInt(link.Mode, 8); } if (link.Mtime !== undefined && link.Mtime !== null) { entry.mtime = { secs: link.Mtime }; if (link.MtimeNsecs !== undefined && link.MtimeNsecs !== null) { entry.mtime.nsecs = link.MtimeNsecs; } } return entry; } const res = await api.post('ls', { signal: options.signal, searchParams: toUrlSearchParams.toUrlSearchParams({ arg: pathStr, ...options }), headers: options.headers }); for await (let result of res.ndjson()) { result = result.Objects; if (!result) { throw new Error('expected .Objects in results'); } result = result[0]; if (!result) { throw new Error('expected one array in results.Objects'); } const links = result.Links; if (!Array.isArray(links)) { throw new Error('expected one array in results.Objects[0].Links'); } if (!links.length) { yield mapLink(result); return; } yield* links.map(mapLink); } } return ls; }); function typeOf(link) { switch (link.Type) { case 1: case 5: return 'dir'; case 2: return 'file'; default: return 'file'; } } exports.createLs = createLs;