changelog-guru
Version:
Git changelog generator
115 lines (114 loc) • 6.34 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 _PackageStatisticRenderRule_sections, _PackageStatisticRenderRule_templates;
import { ChangeType, Dependencies, Restriction } from 'package-json-helper/types/package';
import TaskTree from 'tasktree-cli';
import md from '../../utils/markdown.js';
import { ChangeLevel } from '../entities/Entity.js';
import Message from '../entities/Message.js';
import Section, { SectionOrder, SectionPosition } from '../entities/Section.js';
import { BaseRule } from './BaseRule.js';
export var TemplateLiteral;
(function (TemplateLiteral) {
TemplateLiteral["Name"] = "%name%";
TemplateLiteral["Value"] = "%val%";
TemplateLiteral["PrevValue"] = "%pval%";
})(TemplateLiteral || (TemplateLiteral = {}));
const SECTION_TITLES_MAP = {
[Dependencies.Engines]: 'Engines',
[Dependencies.Dependencies]: 'Dependencies',
[Dependencies.DevDependencies]: 'Dev Dependencies',
[Dependencies.OptionalDependencies]: 'Optional Dependencies',
[Dependencies.PeerDependencies]: 'Peer Dependencies',
[Restriction.BundledDependencies]: 'Bundled Dependencies',
[Restriction.CPU]: 'CPU',
[Restriction.OS]: 'OS',
};
const COLLAPSIBLE_SECTIONS_MAP = [
Dependencies.Dependencies,
Dependencies.DevDependencies,
Dependencies.OptionalDependencies,
Dependencies.PeerDependencies,
Restriction.BundledDependencies,
];
class PackageStatisticRenderRule extends BaseRule {
constructor(config) {
super(config);
_PackageStatisticRenderRule_sections.set(this, []);
_PackageStatisticRenderRule_templates.set(this, void 0);
const changes = Object.values(ChangeType);
__classPrivateFieldSet(this, _PackageStatisticRenderRule_templates, Object.entries(config.templates).filter(([type]) => changes.includes(type)), "f");
__classPrivateFieldSet(this, _PackageStatisticRenderRule_sections, [...new Set(config.sections)], "f");
}
modify({ task, context }) {
const section = context.addSection({ name: this.config.title, position: SectionPosition.Header });
const dependencies = new Section({
name: 'Dependencies',
position: SectionPosition.Subsection,
order: __classPrivateFieldGet(this, _PackageStatisticRenderRule_sections, "f").length,
});
if (section) {
section.order = SectionOrder.Min;
this.createLicenseSection({ context, task, section });
[...__classPrivateFieldGet(this, _PackageStatisticRenderRule_sections, "f").values()].forEach((type, order) => {
const changes = context.getChanges(type);
if (changes?.length) {
const text = this.renderChanges(changes, task);
if (text) {
const isDetails = COLLAPSIBLE_SECTIONS_MAP.includes(type);
const position = isDetails ? SectionPosition.Details : SectionPosition.Subsection;
const subsection = new Section({ name: SECTION_TITLES_MAP[type], position, order });
subsection.add(new Message(text));
(isDetails ? dependencies : section).add(subsection);
}
}
});
if (dependencies.sections.length)
section.add(dependencies);
}
}
createLicenseSection({ task, context, section }) {
if (context.hasChangedLicense) {
const subsection = new Section({ name: 'License', position: SectionPosition.Subsection });
const { currentLicense, previousLicense } = context;
const message = previousLicense
? `License changed from ${md.license(previousLicense)} to ${md.license(currentLicense)}.`
: `Source code now under ${md.wrap(currentLicense)} license.`;
task.warn(`License changed from {bold.underline ${previousLicense}} to {bold.underline ${currentLicense}}.`);
subsection.add(new Message(message, ChangeLevel.Major));
section.add(subsection);
}
}
renderChanges(changes, task) {
return __classPrivateFieldGet(this, _PackageStatisticRenderRule_templates, "f").reduce((acc, [type, template]) => {
const items = changes
.filter(change => change.type === type)
.map(({ name, link, ...change }) => md.list(template.replace(/%[a-z]{3,4}%/g, (substring) => {
switch (substring) {
case TemplateLiteral.Name:
return md.strong(link ? md.link(name, link) : name);
case TemplateLiteral.Value:
return md.wrap(change.value.current);
case TemplateLiteral.PrevValue:
return md.wrap(change.value.previous);
default:
(task || TaskTree).fail(`Unexpected template literal: {bold ${substring}}`);
break;
}
return substring;
})));
return [acc, ...items].join('\n');
}, '');
}
}
_PackageStatisticRenderRule_sections = new WeakMap(), _PackageStatisticRenderRule_templates = new WeakMap();
export default PackageStatisticRenderRule;