xenforo-dl
Version:
XenForo Forum Downloader
170 lines • 8.17 kB
JavaScript
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