{"version":3,"sources":["command.ts"],"names":["Command","CommandBase","install","sourceMapSupportInstall","divmod","envTrue","readInputFile","RequestStream","init","_isInteractive","process","stdout","isTTY","_initRequest","timeout","factory","_readInputFile","filepath","_transferSecondsHuman","ms","seconds","Math","round","minutes","s","h","m","mStr","sStr","_transferBytesHuman","size","based","base","names","il","length","i","toFixed","_transferProgressOutputInit","messageLongest","r","time","total","timePast","duration","progress","current","percent","amountCurrent","amountTotal","amount","join","bytesMs","delta","bytesSec","timeLeftMs","remaining","timeETA","message","max","messagePadded","padEnd","write","log","_transferProgressOutputAfter"],"mappings":"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","sourcesContent":["import {Command as CommandBase} from '@oclif/command';\nimport {install as sourceMapSupportInstall} from 'source-map-support';\n\nimport {divmod, envTrue, readInputFile} from './util';\nimport {ProgressCallback} from './progress';\nimport {IRequestFactory, RequestStream} from './request';\n\n/**\n * Command constructor.\n */\nexport abstract class Command extends CommandBase {\n\t/**\n\t * Init function.\n\t *\n\t * @returns Returns the parent init.\n\t */\n\tpublic async init() {\n\t\tif (envTrue('ZS_CLI_DEBUG_SOURCE_MAPS')) {\n\t\t\tsourceMapSupportInstall();\n\t\t}\n\t\treturn super.init();\n\t}\n\n\t/**\n\t * Check if the shell is interactive.\n\t *\n\t * @returns True if interactive shell, else false.\n\t */\n\tprotected _isInteractive() {\n\t\treturn process.stdout.isTTY || false;\n\t}\n\n\t/**\n\t * Init a request factory with the specified timeout.\n\t *\n\t * @param timeout Timeout duraction in milliseconds.\n\t * @returns Request factory.\n\t */\n\tprotected _initRequest(timeout = 10000): IRequestFactory {\n\t\treturn RequestStream.factory({\n\t\t\ttimeout\n\t\t});\n\t}\n\n\t/**\n\t * Read input file to list all URL's line by line.\n\t *\n\t * @param filepath Input file.\n\t * @returns URL list.\n\t */\n\tprotected async _readInputFile(filepath: string) {\n\t\treturn readInputFile(filepath);\n\t}\n\n\t/**\n\t * Transfer seconds human readable.\n\t *\n\t * @param ms Milliseconds passed or null.\n\t * @returns Formatted string.\n\t */\n\tprotected _transferSecondsHuman(ms: number | null) {\n\t\tif (ms === null) {\n\t\t\treturn '-:--:--';\n\t\t}\n\t\tconst seconds = Math.round(ms / 1000);\n\t\tconst [minutes, s] = divmod(seconds, 60);\n\t\tconst [h, m] = divmod(minutes, 60);\n\t\tconst mStr = m < 10 ? `0${m}` : m;\n\t\tconst sStr = s < 10 ? `0${s}` : s;\n\t\treturn `${h}:${mStr}:${sStr}`;\n\t}\n\n\t/**\n\t * Transfer bytes human readable.\n\t *\n\t * @param size Byte size.\n\t * @returns Formatted string.\n\t */\n\tprotected _transferBytesHuman(size: number) {\n\t\tlet based = size;\n\t\tconst base = 1024;\n\t\tconst names = ['B', 'K', 'M', 'G', 'T'];\n\t\tconst il = names.length - 1;\n\t\tlet i = 0;\n\t\tfor (; based > base && i < il; i++) {\n\t\t\tbased /= base;\n\t\t}\n\t\treturn `${based.toFixed(2)}${names[i]}`;\n\t}\n\n\t/**\n\t * Init data transfer progress output function.\n\t *\n\t * @returns Progress update callback function.\n\t */\n\tprotected _transferProgressOutputInit() {\n\t\tlet messageLongest = 0;\n\n\t\t/**\n\t\t * Progress callback.\n\t\t *\n\t\t * @param time Time.\n\t\t * @param total Total.\n\t\t */\n\t\tconst r: ProgressCallback = (time, total) => {\n\t\t\t// Calcaulte the time spent.\n\t\t\tconst timePast = this._transferSecondsHuman(time.duration);\n\n\t\t\t// Calcaulte progress.\n\t\t\tconst progress = total.current / total.total;\n\t\t\tconst percent = `${(progress * 100).toFixed(2)}%`;\n\n\t\t\t// Calculate amounts.\n\t\t\tconst amountCurrent = this._transferBytesHuman(total.current);\n\t\t\tconst amountTotal = this._transferBytesHuman(total.total);\n\t\t\tconst amount = [\n\t\t\t\t`${amountCurrent} (${total.current})`,\n\t\t\t\t`${amountTotal} (${total.total})`\n\t\t\t].join(' / ');\n\n\t\t\t// Calculate speed.\n\t\t\tconst bytesMs = time.delta ? total.delta / time.delta : 0;\n\t\t\tconst bytesSec = `${this._transferBytesHuman(bytesMs * 1000)}/s`;\n\n\t\t\t// Estimate remaining.\n\t\t\tconst timeLeftMs = bytesMs ? total.remaining / bytesMs : null;\n\t\t\tconst timeETA = this._transferSecondsHuman(timeLeftMs);\n\n\t\t\t// Assemble message.\n\t\t\tconst message = [timePast, percent, amount, bytesSec, timeETA].join(\n\t\t\t\t'  '\n\t\t\t);\n\n\t\t\t// Remember the longest message.\n\t\t\tmessageLongest = Math.max(messageLongest, message.length);\n\t\t\tconst messagePadded = message.padEnd(messageLongest, ' ');\n\n\t\t\tif (this._isInteractive()) {\n\t\t\t\tprocess.stdout.write(`\\r${messagePadded}\\r`);\n\t\t\t} else {\n\t\t\t\tthis.log(messagePadded);\n\t\t\t}\n\t\t};\n\t\treturn r;\n\t}\n\n\t/**\n\t * Clear data transfer progress output after.\n\t */\n\tprotected _transferProgressOutputAfter() {\n\t\tif (this._isInteractive()) {\n\t\t\tthis.log('');\n\t\t}\n\t}\n}\n"],"file":"command.mjs","sourceRoot":"../src"}