UNPKG

xenforo-dl

Version:
170 lines 8.17 kB
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _XenForoDownloaderCLI_instances, _XenForoDownloaderCLI_logger, _XenForoDownloaderCLI_packageInfo, _XenForoDownloaderCLI_getConfigForDisplay, _XenForoDownloaderCLI_confirmProceed, _XenForoDownloaderCLI_createLoggers; import { EOL } from 'os'; import PromptSync from 'prompt-sync'; import { getCLIOptions } from './CLIOptions.js'; import CommandLineParser from './CommandLineParser.js'; import { commonLog } from '../lib/utils/logging/Logger.js'; import { getPackageInfo } from '../lib/utils/PackageInfo.js'; import FileLogger from '../lib/utils/logging/FileLogger.js'; import ConsoleLogger from '../lib/utils/logging/ConsoleLogger.js'; import ChainLogger from '../lib/utils/logging/ChainLogger.js'; import XenForoDownloader from '../lib/XenForoDownloader.js'; import path from 'path'; import fastCopy from 'fast-copy'; export default class XenForoDownloaderCLI { constructor() { _XenForoDownloaderCLI_instances.add(this); _XenForoDownloaderCLI_logger.set(this, void 0); _XenForoDownloaderCLI_packageInfo.set(this, void 0); __classPrivateFieldSet(this, _XenForoDownloaderCLI_logger, null, "f"); __classPrivateFieldSet(this, _XenForoDownloaderCLI_packageInfo, getPackageInfo(), "f"); } async start() { if (CommandLineParser.showUsage()) { return this.exit(0); } if (__classPrivateFieldGet(this, _XenForoDownloaderCLI_packageInfo, "f").banner) { console.log(`${EOL}${__classPrivateFieldGet(this, _XenForoDownloaderCLI_packageInfo, "f").banner}${EOL}`); } let options; try { options = getCLIOptions(); } catch (error) { console.error('Error processing options: ', error instanceof Error ? error.message : error, EOL, 'See usage with \'-h\' option.'); return this.exit(1); } const { chainLogger: logger, fileLogger } = __classPrivateFieldGet(this, _XenForoDownloaderCLI_instances, "m", _XenForoDownloaderCLI_createLoggers).call(this, options); __classPrivateFieldSet(this, _XenForoDownloaderCLI_logger, logger, "f"); const dirStructure = {}; if (options.dirStructure.includes('-')) { dirStructure.site = false; dirStructure.parentForumsAndSections = 'none'; dirStructure.thread = false; dirStructure.attachments = false; } else { dirStructure.site = options.dirStructure.includes('s'); dirStructure.parentForumsAndSections = options.dirStructure.includes('pl') ? 'all' : options.dirStructure.includes('pi') ? 'immediate' : 'none'; dirStructure.thread = options.dirStructure.includes('t'); dirStructure.attachments = options.dirStructure.includes('a'); } // Create downloader let downloader; try { downloader = new XenForoDownloader(options.url, { ...options, dirStructure, logger }); } catch (error) { commonLog(logger, 'error', null, 'Failed to get downloader instance:', error); return this.exit(1); } if (!downloader) { commonLog(logger, 'error', null, 'Failed to get downloader instance (unknown reason)'); return this.exit(1); } const downloaderName = downloader.name; const displayConfig = __classPrivateFieldGet(this, _XenForoDownloaderCLI_instances, "m", _XenForoDownloaderCLI_getConfigForDisplay).call(this, downloader.getConfig()); if (!options.noPrompt) { if (options.logging.level === 'none') { console.log('Logging disabled', EOL); } else { console.log(`Log level: ${options.logging.level}`); if (fileLogger) { console.log(`Log file: ${fileLogger.getConfig().logFilePath}`); console.log(EOL); } } console.log(`Created ${downloaderName} instance with config: `, displayConfig, EOL); if (!__classPrivateFieldGet(this, _XenForoDownloaderCLI_instances, "m", _XenForoDownloaderCLI_confirmProceed).call(this)) { console.log('Abort'); return this.exit(1); } } else { commonLog(logger, 'debug', null, `Created ${downloaderName} instance with config: `, displayConfig); } try { const abortController = new AbortController(); process.on('SIGINT', () => { abortController.abort(); }); await downloader.start({ signal: abortController.signal }); // Return this.exit(hasDownloaderError ? 1 : 0); } catch (error) { commonLog(logger, 'error', null, `Uncaught ${downloaderName} error:`, error); return this.exit(1); } } async exit(code) { if (__classPrivateFieldGet(this, _XenForoDownloaderCLI_logger, "f")) { await __classPrivateFieldGet(this, _XenForoDownloaderCLI_logger, "f").end(); } process.exit(code); } } _XenForoDownloaderCLI_logger = new WeakMap(), _XenForoDownloaderCLI_packageInfo = new WeakMap(), _XenForoDownloaderCLI_instances = new WeakSet(), _XenForoDownloaderCLI_getConfigForDisplay = function _XenForoDownloaderCLI_getConfigForDisplay(config) { const disp = fastCopy(config); disp.request.cookie = disp.request.cookie ? '<hidden>' : '<none>'; return disp; }, _XenForoDownloaderCLI_confirmProceed = function _XenForoDownloaderCLI_confirmProceed(prompt) { if (!prompt) { prompt = PromptSync({ sigint: true }); } const confirmProceed = prompt('Proceed (Y/n)? '); if (!confirmProceed.trim() || confirmProceed.trim().toLowerCase() === 'y') { return true; } else if (confirmProceed.trim().toLowerCase() === 'n') { return false; } return __classPrivateFieldGet(this, _XenForoDownloaderCLI_instances, "m", _XenForoDownloaderCLI_confirmProceed).call(this, prompt); }, _XenForoDownloaderCLI_createLoggers = function _XenForoDownloaderCLI_createLoggers(options) { // Create console logger const consoleLogger = new ConsoleLogger({ logLevel: options.logging.level }); // Create file logger let fileLogger; if (options.logging.file) { try { fileLogger = new FileLogger({ logFilePath: path.resolve(options.logging.file), logLevel: options.logging.level }); } catch (error) { console.warn('Failed to create file logger: ', error instanceof Error ? error.message : error); } } // Create chain logger const chainLogger = new ChainLogger([consoleLogger]); if (fileLogger) { chainLogger.add(fileLogger); } return { chainLogger, consoleLogger, fileLogger }; }; //# sourceMappingURL=index.js.map