conventional-changelog-writer
Version:
Write logs based on conventional commits and templates.
75 lines • 4.97 kB
JavaScript
import { valid as semverValid } from 'semver';
import { formatDate, createComparator } from './utils.js';
const HASH_SHORT_LENGTH = 7;
const HEADER_MAX_LENGTH = 100;
/**
* Default commit transform function.
* @param commit
* @param _context
* @param options
* @param options.formatDate - Date formatter function.
* @returns Patch object for commit.
*/
export function defaultCommitTransform(commit, _context, options) {
const { hash, header, committerDate } = commit;
return {
hash: typeof hash === 'string'
? hash.substring(0, HASH_SHORT_LENGTH)
: hash,
header: typeof header === 'string'
? header.substring(0, HEADER_MAX_LENGTH)
: header,
committerDate: committerDate
? options.formatDate(committerDate)
: committerDate
};
}
/**
* Get final options object.
* @param options
* @param templates
* @returns Final options object.
*/
export function getFinalOptions(options, templates) {
const prefinalOptions = {
groupBy: 'type',
commitsSort: 'header',
noteGroupsSort: 'title',
notesSort: 'text',
transform: defaultCommitTransform,
generateOn: (commit) => Boolean(semverValid(commit.version)),
finalizeContext: (context) => context,
debug: () => { },
formatDate,
reverse: false,
ignoreReverted: true,
doFlush: true,
...templates,
...options
};
const finalOptions = {
...prefinalOptions,
commitGroupsSort: createComparator(prefinalOptions.commitGroupsSort),
commitsSort: createComparator(prefinalOptions.commitsSort),
noteGroupsSort: createComparator(prefinalOptions.noteGroupsSort),
notesSort: createComparator(prefinalOptions.notesSort)
};
return finalOptions;
}
/**
* Get final context object.
* @param context
* @param options
* @returns Final context object.
*/
export function getGenerateOnFunction(context, options) {
const { generateOn } = options;
if (typeof generateOn === 'string') {
return (commit) => typeof commit[generateOn] !== 'undefined';
}
else if (typeof generateOn !== 'function') {
return () => false;
}
return (keyCommit, commitsGroup) => generateOn(keyCommit, commitsGroup, context, options);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLElBQUksV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBUTdDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2pCLE1BQU0sWUFBWSxDQUFBO0FBRW5CLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFBO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFBO0FBRTdCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE1BQWMsRUFDZCxRQUFpQixFQUNqQixPQUFpRDtJQUVqRCxNQUFNLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixhQUFhLEVBQ2QsR0FBRyxNQUFNLENBQUE7SUFFVixPQUFPO1FBQ0wsSUFBSSxFQUFFLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDO1lBQ3RDLENBQUMsQ0FBQyxJQUFJO1FBQ1IsTUFBTSxFQUFFLE9BQU8sTUFBTSxLQUFLLFFBQVE7WUFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDO1lBQ3hDLENBQUMsQ0FBQyxNQUFNO1FBQ1YsYUFBYSxFQUFFLGFBQWE7WUFDMUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ25DLENBQUMsQ0FBQyxhQUFhO0tBQ0MsQ0FBQTtBQUN0QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixPQUF3QixFQUN4QixTQUFnQztJQUVoQyxNQUFNLGVBQWUsR0FBRztRQUN0QixPQUFPLEVBQUUsTUFBZTtRQUN4QixXQUFXLEVBQUUsUUFBaUI7UUFDOUIsY0FBYyxFQUFFLE9BQWdCO1FBQ2hDLFNBQVMsRUFBRSxNQUFlO1FBQzFCLFNBQVMsRUFBRSxzQkFBc0I7UUFDakMsVUFBVSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxlQUFlLEVBQUUsQ0FBQyxPQUE2QixFQUFFLEVBQUUsQ0FBQyxPQUFPO1FBQzNELEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBYyxDQUFDO1FBQzNCLFVBQVU7UUFDVixPQUFPLEVBQUUsS0FBSztRQUNkLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsR0FBRyxTQUFTO1FBQ1osR0FBRyxPQUFPO0tBQ1gsQ0FBQTtJQUNELE1BQU0sWUFBWSxHQUFHO1FBQ25CLEdBQUcsZUFBZTtRQUNsQixnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUM7UUFDcEUsV0FBVyxFQUFFLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxXQUF1QixDQUFDO1FBQ3RFLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDO1FBQ2hFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO0tBQy9CLENBQUE7SUFFekIsT0FBTyxZQUFZLENBQUE7QUFDckIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxPQUE2QixFQUM3QixPQUE2QjtJQUU3QixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBRTlCLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsT0FBTyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssV0FBVyxDQUFBO0lBQ3RFLENBQUM7U0FBTSxJQUFJLE9BQU8sVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzVDLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFBO0lBQ3BCLENBQUM7SUFFRCxPQUFPLENBQUMsU0FBaUIsRUFBRSxZQUFzQixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDN0csQ0FBQyJ9