UNPKG

cucumber-html-report-generator

Version:

Generate beautiful cucumberjs html reports for multiple instances (browsers / devices)

215 lines 10.7 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateResources = exports.updateResourcesTemplates = exports.deleteOldDependencies = exports.getResourceInformation = exports.getDatatablesResourceInformation = exports.getCdnjsResourceInformation = exports.downloadResources = exports.downloadResource = exports.downloadFile = void 0; const CommonFunctions = __importStar(require("../lib/common-functions/common-functions")); const fse = __importStar(require("fs-extra")); const https = __importStar(require("https")); const path = __importStar(require("path")); const axios_1 = __importDefault(require("axios")); const semver_1 = __importDefault(require("semver")); const ssri_1 = __importDefault(require("ssri")); const downloadFile = async (url, filePath) => new Promise((resolve, reject) => { https.get(url, response => { const statusCode = response.statusCode; if (statusCode !== 200) { reject(new Error('Download error!')); return; } const writeStream = fse.createWriteStream(filePath); response.pipe(writeStream); writeStream.on('error', () => { reject(new Error('Error writing to file!')); }); writeStream.on('finish', () => { writeStream.close(); resolve(true); }); }); }).catch(err => { if (err.message.includes('Download error!')) { console.log(`error downloading file ${url}`); } else { console.log(err.message); } return false; }); exports.downloadFile = downloadFile; const downloadResource = async (destinationPath, url) => { if (!fse.existsSync(destinationPath)) { fse.mkdirSync(path.dirname(destinationPath), { recursive: true }); const downloadResult = await (0, exports.downloadFile)(url, destinationPath); return downloadResult; } return false; }; exports.downloadResource = downloadResource; const downloadResources = async (dependency) => { try { await Promise.all(dependency.files.map(async (file) => { await (0, exports.downloadResource)(file.path, file.url ?? ''); })); } catch (error) { console.log(`error ${error.message} in function downloadResources with file ${dependency.name} `); } }; exports.downloadResources = downloadResources; const getCdnjsResourceInformation = async (dependency, resourcesFolder) => { const resourceUrl = `https://api.cdnjs.com/libraries/${dependency.name}?fields=name,version,repository,assets,latest,name,filename`; let response = {}; try { response = (await axios_1.default.get(resourceUrl)).data; } catch (error) { console.log(`error ${error.message} in function getCdnjsResourceInformation with dependency ${dependency.name}`); } let filePropertiesArray = []; if (semver_1.default.gt(response.version, dependency.version)) { try { filePropertiesArray = dependency.files.map(file => { const destinationPath = path.join(resourcesFolder, `${dependency.name}-${response.version}`, file.name); const url = response.latest.replace(response.filename, file.name); return { name: file.name, path: destinationPath, url }; }); } catch (error) { console.log(`error ${error.message} in function getCdnjsResourceInformation with dependency ${dependency.name}`); } } return { name: dependency.name, files: filePropertiesArray, version: response.version }; }; exports.getCdnjsResourceInformation = getCdnjsResourceInformation; const getDatatablesResourceInformation = async (dependency, resourcesFolder) => { const resourceUrl = 'https://datatables.net/feeds/versions'; let response = {}; try { response = (await axios_1.default.get(resourceUrl)).data; } catch (error) { console.log(`error ${error.message} in function getDatatablesResourceInformation with dependency ${dependency.name}`); } let filePropertiesArray = []; try { filePropertiesArray = dependency.files.map(file => { const destinationPath = path.join(resourcesFolder, `${dependency.name}-${response[dependency.name].release.version}`, file.name); const url = file.url?.replace(dependency.version, response[dependency.name].release.version); return { name: file.name, path: destinationPath, url }; }); } catch (error) { console.log(`error ${error.message} in function getDatatablesResourceInformation with dependency ${dependency.name}`); } return { name: dependency.name, files: filePropertiesArray, version: response[dependency.name].release.version }; }; exports.getDatatablesResourceInformation = getDatatablesResourceInformation; const getResourceInformation = async (dependency, resourcesFolder) => { return dependency.cdn === 'cdnjs' ? (0, exports.getCdnjsResourceInformation)(dependency, resourcesFolder) : (0, exports.getDatatablesResourceInformation)(dependency, resourcesFolder); }; exports.getResourceInformation = getResourceInformation; const deleteOldDependencies = async (resourceProperties, resourcesFolder) => { await Promise.all(resourceProperties.files.map(async (file) => { await fse.remove(`${resourcesFolder}/${resourceProperties.name}-${resourceProperties.version}/${file.name}`); console.log(`file: ${resourcesFolder}/${resourceProperties.name}-${resourceProperties.version}/${file.name}, removed`); })); await fse.remove(`${resourcesFolder}/${resourceProperties.name}-${resourceProperties.version}`); console.log(`folder: ${resourcesFolder}/${resourceProperties.name}-${resourceProperties.version}, removed`); }; exports.deleteOldDependencies = deleteOldDependencies; const updateResourcesTemplates = async (resourceInformation, templateFiles) => { await Promise.all(templateFiles.map(async (templateFile) => { let templateFileContent = await fse.readFile(templateFile, { encoding: 'utf8' }); resourceInformation.files.forEach(resourceFile => { let regex = RegExp(`href.*${resourceFile.name}" integrity="[^"]+"`, 'u'); const newFile = resourceInformation.files.filter(file => file.name === resourceFile.name)[0]; const sriValue = ssri_1.default.fromData(fse.readFileSync(newFile.path)).toString(); let newUrl = `href="${newFile.url}" integrity="${sriValue}"`; templateFileContent = templateFileContent.replace(regex, newUrl); regex = RegExp(`src.*${resourceFile.name}" integrity="[^"]+"`, 'u'); newUrl = `src="${newFile.url}" integrity="${sriValue}"`; templateFileContent = templateFileContent.replace(regex, newUrl); regex = RegExp(`resources.*${resourceFile.name}`, 'u'); newUrl = `resources/${resourceInformation.name}-${resourceInformation.version}/${resourceFile.name}`; templateFileContent = templateFileContent.replace(regex, newUrl); }); await fse.writeFile(templateFile, templateFileContent, { encoding: 'utf8' }).catch(error => { console.log(error.message); }); })); }; exports.updateResourcesTemplates = updateResourcesTemplates; const updateResourcesPropertiesConfigurationJson = async (configurationData, configurationFile) => { await CommonFunctions.saveJsonFile(path.dirname(configurationFile), path.basename(configurationFile), configurationData); }; const updateResources = async (configurationFile, resourcesFolder, templates) => { const originalConfigurationData = (await CommonFunctions.readJsonFile(configurationFile)); const newConfigurationData = (await CommonFunctions.readJsonFile(configurationFile)); await Promise.all(newConfigurationData.map(async (localResourceConf) => { const remoteResourceConf = await (0, exports.getResourceInformation)(localResourceConf, resourcesFolder); if (remoteResourceConf.version && remoteResourceConf.files.length && semver_1.default.gt(remoteResourceConf.version, localResourceConf.version)) { await (0, exports.downloadResources)(remoteResourceConf); await (0, exports.updateResourcesTemplates)(remoteResourceConf, templates); await (0, exports.deleteOldDependencies)(localResourceConf, resourcesFolder); console.log(`Resource ${localResourceConf.name} updated to version ${remoteResourceConf.version}`); localResourceConf.files.map(file => { file.url = file.url?.replace(localResourceConf.version, remoteResourceConf.version); file.path = file.path.replace(localResourceConf.version, remoteResourceConf.version); return file; }); localResourceConf.version = remoteResourceConf.version; } return localResourceConf; })); if (JSON.stringify(originalConfigurationData) === JSON.stringify(newConfigurationData)) { console.log('All the resources are in the latest version'); } else { await updateResourcesPropertiesConfigurationJson(newConfigurationData, configurationFile); } }; exports.updateResources = updateResources; //# sourceMappingURL=dependency-modification-functions.js.map