'use strict'; const Promise = require("bluebird"); const isoParser = require("../lib/iso9660"); const yargs = require("yargs"); const fsSeekable = require("../lib/seekable/fs"); const httpSeekable = require("../lib/seekable/http"); const renderVolumeTable = require("../lib/render/volume-table"); const renderFilesystemTree = require("../lib/render/filesystem-tree"); let argv = yargs.argv; let command, target, subCommands; if (argv._.length === 1) { command = "volumes"; target = argv._[0]; } else if (argv._.length > 1) { [command, target, ...subCommands] = argv._; } else { throw new Error("You must specify at least a target file or URL"); } Promise.try(() => { if (target.match(/^https?:\/\//)) { return httpSeekable(target); } else { return fsSeekable(target); } }).then((seekable) => { let parser = isoParser(seekable); if (command === "volumes") { return Promise.try(() => { return parser.getUniqueVolumeDescriptors(); }).then((volumeDescriptors) => { console.log(renderVolumeTable(volumeDescriptors)); }); } else if (command === "tree") { return Promise.try(() => { if (argv.volume != null) { let volumeId = parseInt(argv.volume); if (isNaN(volumeId)) { throw new Error("--volume argument must be numeric"); } return parser.getRootDirectory(volumeId); } else { return parser.getRootDirectory(); } }).then((rootDirectory) => { return rootDirectory.getTree(); }).then((tree) => { console.log(renderFilesystemTree(tree)); }) } });