stable-chromium
Version:
A library to install stable Chromium for testing via Gauge and Taiko
105 lines (91 loc) • 3.67 kB
JavaScript
const extract = require('extract-zip');
const fs = require('fs');
const path = require('path');
const config = require('./config.json');
let Chrome_URL = config.Chrome_URL;
if (Chrome_URL.startsWith('\\') && !Chrome_URL.startsWith('\\\\')) {
Chrome_URL = '\\' + Chrome_URL;
console.log(`Преобразованный UNC-путь: ${Chrome_URL}`);
}
const DOWNLOAD_PATH = path.resolve(config.DOWNLOAD_PATH);
const EXTRACT_PATH = path.resolve(config.EXTRACT_PATH);
function ensureDirExists(dir) {
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
console.log(`Создана директория: ${dir}`);
}
}
async function downloadChrome() {
console.log('Начало копирования Chrome из сети...');
if (!Chrome_URL) {
console.error('Ошибка: Chrome_URL не задан в config.');
throw new Error('Chrome_URL не задан');
}
if (!fs.existsSync(Chrome_URL)) {
console.error(`Ошибка: исходный файл не найден по пути ${Chrome_URL}`);
throw new Error('Исходный файл не найден');
}
ensureDirExists(path.dirname(DOWNLOAD_PATH));
return new Promise((resolve, reject) => {
const readStream = fs.createReadStream(Chrome_URL);
const writer = fs.createWriteStream(DOWNLOAD_PATH);
readStream.on('error', (err) => {
console.error('Ошибка при чтении исходного файла:', err);
reject(err);
});
writer.on('error', (err) => {
console.error('Ошибка при записи файла:', err);
reject(err);
});
writer.on('finish', () => {
console.log('Копирование завершено.');
resolve();
});
readStream.pipe(writer);
});
}
async function extractChrome() {
console.log('Начало распаковки Chrome...');
if (!fs.existsSync(DOWNLOAD_PATH)) {
console.error(`Ошибка: архив не найден по пути ${DOWNLOAD_PATH}`);
throw new Error('Архив не найден');
}
ensureDirExists(EXTRACT_PATH);
try {
await extract(DOWNLOAD_PATH, { dir: EXTRACT_PATH });
console.log('Распаковка завершена.');
try {
fs.unlinkSync(DOWNLOAD_PATH);
console.log('Архив удалён после распаковки.');
} catch (unlinkError) {
console.error('Ошибка при удалении архива:', unlinkError);
}
} catch (error) {
console.error('Ошибка при распаковке Chrome:', error);
throw error;
}
}
async function installChrome() {
console.log('Начало установки Chrome...');
try {
await downloadChrome();
} catch (error) {
console.error('Установка прервана на этапе копирования.');
return;
}
try {
await extractChrome();
} catch (error) {
console.error('Установка прервана на этапе распаковки.');
return;
}
console.log('Chrome успешно установлен!');
}
if (require.main === module) {
installChrome().catch(err => {
console.error('Необработанная ошибка установки:', err);
});
}
module.exports = {
install: installChrome
};