@release-notes/hub
Version:
A hub for hosting release notes.
53 lines (39 loc) • 1.17 kB
JavaScript
;
const Service = require('kermit/Service');
const YamlLoader = require('@release-notes/node/lib/ReleaseNotesLoader');
const changelogParser = require('@release-notes/changelog-parser');
const yamlLoader = new YamlLoader();
function loadChangelog(content) {
return Promise.resolve(changelogParser.parse(content));
}
function loadYaml(content) {
return new Promise((resolve, reject) => {
yamlLoader.loadReleaseNotes(content, (err, releaseNotes) => {
if (err) return reject(err);
resolve(releaseNotes);
})
});
}
class ReleaseNotesLoader extends Service {
constructor(serviceManager) {
super(serviceManager);
this.loaderMap = {
md: loadChangelog,
yml: loadYaml,
json: loadYaml,
};
}
getFileLoader(fileType) {
const normalizedType = fileType.toLowerCase();
const loader = this.loaderMap[normalizedType];
if (!loader) {
throw new Error(`No loader found for file type: ${fileType}.`);
}
return loader;
}
load(buffer, fileType) {
const loader = this.getFileLoader(fileType);
return loader(buffer.toString());
}
}
module.exports = ReleaseNotesLoader;