UNPKG

@release-notes/hub

Version:

A hub for hosting release notes.

75 lines (59 loc) 2.2 kB
'use strict'; const Service = require('kermit/Service'); class UpdateService extends Service { calculateUpdates(releaseNotesModel, newReleaseNotes) { let latestRelease = null; if (releaseNotesModel.latestVersion) { latestRelease = this.findReleaseByVersion(releaseNotesModel, releaseNotesModel.latestVersion); } if (!latestRelease) { latestRelease = this.calculateLastRelease(releaseNotesModel); } return this.calculateNewReleases(latestRelease, newReleaseNotes); } applyUpdate(releaseNotesModel, newReleaseNotes) { const latestRelease = this.calculateLastRelease(newReleaseNotes); const releaseNotesUpdate = { title: newReleaseNotes.title, description: newReleaseNotes.description, releases: newReleaseNotes.releases, latestVersion: latestRelease.version || '', latestReleaseDate: latestRelease.date || '' }; return this.serviceManager.get('releaseNotesRepository').findByIdAndUpdate( releaseNotesModel._id, { $set: releaseNotesUpdate} ); } static isUnreleased(release) { return ['next', 'upcoming', 'unreleased'].indexOf((release.version || '').toLowerCase()) !== -1; } calculateNewReleases(lastRelease, releaseNotes) { return (releaseNotes.releases || []) .filter(release => ( !UpdateService.isUnreleased(release) && (!lastRelease || lastRelease.date < new Date(release.date)) ) ); } calculateLastRelease(releaseNotes) { let latestVersion = null; let latestReleaseDate = null; let latestRelease = null; (releaseNotes.releases || []).forEach((release) => { const version = release.version; const releaseDate = release.date; const isUnreleased = UpdateService.isUnreleased(release); if (!isUnreleased && (!latestVersion || latestReleaseDate < releaseDate)) { latestVersion = version; latestReleaseDate = releaseDate; latestRelease = release; } }); return latestRelease; } findReleaseByVersion(releaseNotes, version) { return (releaseNotes.releases || []).find(release => release.version === version); } } module.exports = UpdateService;