
Security News
The Changelog Podcast: Practical Steps to Stay Safe on npm
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.
conventional-commits-filter
Advanced tools
Filter out reverted commits parsed by conventional-commits-parser.
Filter out reverted commits parsed by conventional-commits-parser.
# pnpm
pnpm add conventional-commits-filter
# yarn
yarn add conventional-commits-filter
# npm
npm i conventional-commits-filter
import {
filterRevertedCommitsSync,
filterRevertedCommits,
filterRevertedCommitsStream
} from 'conventional-commits-filter'
import { pipeline } from 'stream/promises'
import { Readable } from 'stream'
const commits = [{
type: 'revert',
scope: null,
subject: 'feat(): amazing new module',
header: 'revert: feat(): amazing new module\n',
body: 'This reverts commit 56185b7356766d2b30cfa2406b257080272e0b7a.\n',
footer: null,
notes: [],
references: [],
revert: {
header: 'feat(): amazing new module',
hash: '56185b7356766d2b30cfa2406b257080272e0b7a',
body: null
},
hash: '789d898b5f8422d7f65cc25135af2c1a95a125ac\n',
raw: {
type: 'revert',
scope: null,
subject: 'feat(): amazing new module',
header: 'revert: feat(): amazing new module\n',
body: 'This reverts commit 56185b7356766d2b30cfa2406b257080272e0b7a.\n',
footer: null,
notes: [],
references: [],
revert: {
header: 'feat(): amazing new module',
hash: '56185b7356766d2b30cfa2406b257080272e0b7a',
body: null
},
hash: '789d898b5f8422d7f65cc25135af2c1a95a125ac\n'
}
}, {
type: 'Features',
scope: null,
subject: 'wow',
header: 'amazing new module\n',
body: null,
footer: 'BREAKING CHANGE: Not backward compatible.\n',
notes: [],
references: [],
revert: null,
hash: '56185b',
raw: {
type: 'feat',
scope: null,
subject: 'amazing new module',
header: 'feat(): amazing new module\n',
body: null,
footer: 'BREAKING CHANGE: Not backward compatible.\n',
notes: [],
references: [],
revert: null,
hash: '56185b7356766d2b30cfa2406b257080272e0b7a\n'
}
}, {
type: 'What',
scope: null,
subject: 'new feature',
header: 'feat(): new feature\n',
body: null,
footer: null,
notes: [],
references: [],
revert: null,
hash: '815a3f0',
raw: {
type: 'feat',
scope: null,
subject: 'new feature',
header: 'feat(): new feature\n',
body: null,
footer: null,
notes: [],
references: [],
revert: null,
hash: '815a3f0717bf1dfce007bd076420c609504edcf3\n'
}
}, {
type: 'Chores',
scope: null,
subject: 'first commit',
header: 'chore: first commit\n',
body: null,
footer: null,
notes: [],
references: [],
revert: null,
hash: '74a3e4d6d25',
raw: {
type: 'chore',
scope: null,
subject: 'first commit',
header: 'chore: first commit\n',
body: null,
footer: null,
notes: [],
references: [],
revert: null,
hash: '74a3e4d6d25dee2c0d6483a0a3887417728cbe0a\n'
}
}];
// to filter reverted commits syncronously:
for (const commit of filterRevertedCommitsSync(commits)) {
console.log(commit)
}
// to filter reverted commits in async iterables:
await pipeline(
commits,
filterRevertedCommits,
async function* (filteredCommits) {
for await (const commit of filteredCommits) {
console.log(commit)
}
}
)
// to filter reverted commits in streams:
Readable.from(commits)
.pipe(filterRevertedCommitsStream())
.on('data', commit => console.log(commit))
Output:
{
type: 'What',
scope: null,
subject: 'new feature',
header: 'feat(): new feature\n',
body: null,
footer: null,
notes: [],
references: [],
revert: null,
hash: '815a3f0',
raw: {
type: 'feat',
scope: null,
subject: 'new feature',
header: 'feat(): new feature\n',
body: null,
footer: null,
notes: [],
references: [],
revert: null,
hash: '815a3f0717bf1dfce007bd076420c609504edcf3\n'
}
}
{
type: 'Chores',
scope: null,
subject: 'first commit',
header: 'chore: first commit\n',
body: null,
footer: null,
notes: [],
references: [],
revert: null,
hash: '74a3e4d6d25',
raw: {
type: 'chore',
scope: null,
subject: 'first commit',
header: 'chore: first commit\n',
body: null,
footer: null,
notes: [],
references: [],
revert: null,
hash: '74a3e4d6d25dee2c0d6483a0a3887417728cbe0a\n'
}
}
MIT © Steve Mao
commitlint checks if your commit messages meet the Conventional Commits format. It is more comprehensive than conventional-commits-filter as it provides linting capabilities and can be integrated into CI/CD pipelines.
conventional-changelog is used to generate changelogs based on commit messages that follow the Conventional Commits specification. While it does not filter commits, it complements conventional-commits-filter by providing a way to generate meaningful changelogs.
validate-commit-msg is a tool to validate commit messages against a set of rules, including the Conventional Commits specification. It is similar to conventional-commits-filter but focuses more on validation rather than filtering.
FAQs
Filter out reverted commits parsed by conventional-commits-parser.
The npm package conventional-commits-filter receives a total of 5,128,956 weekly downloads. As such, conventional-commits-filter popularity was classified as popular.
We found that conventional-commits-filter demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.

Security News
Ruby's creator Matz assumes control of RubyGems and Bundler repositories while former maintainers agree to step back and transfer all rights to end the dispute.