UNPKG

keep-a-changelog

Version:

Parse and generate changelogs following the [keepachangelog](https://keepachangelog.com/) format.

224 lines (162 loc) 4.92 kB
# Changelog [Keep a Changelog](https://github.com/oscarotero/keep-a-changelog) library for Node & Deno Deno package to parse and generate changelogs following the [keepachangelog](https://keepachangelog.com/) format. ## Usage in Node ```js import { parser } from "keep-a-changelog"; import fs from "fs"; //Parse a changelog file const changelog = parser(fs.readFileSync("CHANGELOG.md", "UTF-8")); //Generate the new changelog string console.log(changelog.toString()); ``` ## Usage in Deno ```js import { parser } from "https://deno.land/x/changelog@v3.0.0/mod.ts"; //Parse a changelog file const changelog = parser(await Deno.readTextFile("CHANGELOG.md")); //Generate the new changelog string console.log(changelog.toString()); ``` ### Create a new changelog ```js import { Changelog, Release, } from "https://deno.land/x/changelog@v3.0.0/mod.ts"; const changelog = new Changelog("My project") .addRelease( new Release("0.1.0", "2017-12-06") .added("New awesome feature") .added("New other awesome feature") .fixed("Bug #3") .removed("Drop support for X"), ) .addRelease( new Release("0.2.0", "2017-12-09") .security("Fixed security vulnerability") .deprecated("Feature X is deprecated"), ); console.log(changelog.toString()); ``` ### Custom output format By default, the output format of the markdown is "compact", that removes the space after the headings. You can change it to follow the [`markdownlint`](https://github.com/DavidAnson/markdownlint) rules: ```js const changelog = new Changelog(); changelog.format = "markdownlint"; ``` ### Custom bullet style By default, the bullet style of the markdown is "-". You can change it to use other styles of bullet points: ```js const changelog = new Changelog(); changelog.bulletStyle = "*"; ``` ### Custom tag names By default, the tag names are `v` + version number. For example, the tag for the version `2.4.9` is `v2.4.9`. To change this behavior, set a new `tagNameBuilder`: ```js const changelog = new Changelog(); changelog.tagNameBuilder = (release) => `version-${release.version}`; ``` ### Custom compare links By default, compare links are build compliant with GitHub format. To change this behavior, set a new `compareLinkBuilder`: ```js const changelog = new Changelog(); changelog.url = "https://bitbucket.org/oscarotero/keep-a-changelog"; changelog.compareLinkBuilder = (previous, release) => `${this.url}/branches/compare/${release.version}%0D${previous.version}`; ``` ### Custom Change Types By default and according to the [keepachangelog](https://keepachangelog.com/) format, the change types are `Added`, `Changed`, `Deprecated`, `Removed`, `Fixed`, and `Security`. In case you'd like add another type, you need to extend the `Release` class to support new types. Additionally, you have to tell the `parser` that it should create instances of your new extended `Release` in order to parse your changelog correctly. For example, we would like to add a type `Maintenance`. Extend the provided `Release` class: ```js class CustomRelease extends Release { constructor(version, date, description) { super(version, date, description); // add whatever types you want - in lowercase const newChangeTypes = [ ["maintenance", []], ]; this.changes = new Map([...this.changes, ...newChangeTypes]); } // for convenience, add a new method to add change of type 'maintanance' maintenance(change) { return this.addChange("maintenance", change); } } ``` And once you want to use the parser: ```js const releaseCreator = (ver, date, desc) => new CustomRelease(ver, date, desc); const changelog = parser(changelogTextContent, { releaseCreator }); ``` ## Cli This library provides the `changelog` command to normalize the changelog format. It reads the CHANGELOG.md file and override it with the new format: ### Install the library as script Deno: ```sh deno install --global --allow-read --allow-write -fr --name changelog https://deno.land/x/changelog/bin.ts ``` Node: ```sh npm install keep-a-changelog -g ``` Run the script: ```sh changelog ``` To use other file name: ```sh changelog --file=History.md ``` To generate an empty new CHANGELOG.md file: ```sh changelog --init ``` Create a new "Unreleased" version: ```sh changelog --create 1.0.0 ``` Create a new "major", "minor" or "patch" version: ```sh changelog --create minor ``` You can release automatically the latest "Unreleased" version: ```sh changelog --release ``` If your "Unreleased" section has no version, you can specify it as an argument: ```sh changelog --release 2.0.0 ``` Print the latest released version: ```sh changelog --latest-release > 2.0.0 ``` Print the latest release: ```text changelog --latest-release-full ## 2.6.1 - 2025-02-24 ### Fixed - NPM publishing [#55], [#56]. ``` See available options: ```sh changelog --help ```