Skip to content

Commit

Permalink
feat(conventional-commits-filter)!: rewrite to TypeScript (#1178)
Browse files Browse the repository at this point in the history
  • Loading branch information
dangreen committed Dec 5, 2023
1 parent 8af364f commit e0c7b06
Show file tree
Hide file tree
Showing 20 changed files with 628 additions and 655 deletions.
4 changes: 2 additions & 2 deletions packages/conventional-changelog-writer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ The output log might look something like this:
## API
### createChangelogAsyncGeneratorFromCommits(commits: Commit[] | AsyncIterable<Commit>, context?: Context, options?: Options, includeDetails?: boolean): AsyncGenerator<string | Details, void>
### createChangelogAsyncGeneratorFromCommits(commits: Iterable<Commit> | AsyncIterable<Commit>, context?: Context, options?: Options, includeDetails?: boolean): AsyncGenerator<string | Details, void>
Creates an async generator of changelog entries from commits.
Expand All @@ -134,7 +134,7 @@ Creates a transform stream which takes commits and outputs changelog entries.
If `includeDetails` is `true`, instead of emitting strings of changelog, it emits objects containing the details the block.
### createChangelogFromCommits(commits: Commit[] | AsyncIterable<Commit>, context?: Context, options?: Options): Promise<string>
### createChangelogFromCommits(commits: Iterable<Commit> | AsyncIterable<Commit>, context?: Context, options?: Options): Promise<string>
Create a changelog from commits.
Expand Down
13 changes: 8 additions & 5 deletions packages/conventional-changelog-writer/src/template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ import { join } from 'path'
import { fileURLToPath } from 'url'
import { readFile } from 'fs/promises'
import Handlebars from 'handlebars'
// @ts-expect-error This package is not typed yet
import filterCommits from 'conventional-commits-filter'
// @todo Drop import and ignoreReverted option
import { filterRevertedCommitsSync } from 'conventional-commits-filter'
import type {
TemplatesOptions,
FinalTemplatesOptions,
FinalContext,
FinalOptions,
CommitKnownProps,
TransformedCommit,
CommitNote
} from './types/index.js'
import { getTemplateContext } from './context.js'
Expand Down Expand Up @@ -86,12 +87,14 @@ export function createTemplateRenderer<Commit extends CommitKnownProps = CommitK
const { ignoreReverted } = options
const template = compileTemplates(options)

return async (commits: Commit[], keyCommit: Commit | null) => {
return async (
commits: TransformedCommit<Commit>[],
keyCommit: Commit | null
) => {
const notes: CommitNote[] = []
const commitsForTemplate = (
ignoreReverted
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
? filterCommits(commits) as Commit[]
? Array.from(filterRevertedCommitsSync(commits))
: commits
).map(commit => ({
...commit,
Expand Down
3 changes: 3 additions & 0 deletions packages/conventional-changelog-writer/src/types/commit.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import type { AnyObject } from './utils.js'

export interface CommitKnownProps {
type?: string | null
header?: string | null
version?: string | null
hash?: string | null
committerDate?: string | null
notes: CommitNote[]
revert?: AnyObject | null
}

export type TransformedCommit<Commit extends CommitKnownProps = CommitKnownProps> = Commit & {
Expand Down
15 changes: 8 additions & 7 deletions packages/conventional-changelog-writer/src/writers.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Transform } from 'stream'
import type {
CommitKnownProps,
TransformedCommit,
Context,
Options,
Details
Expand All @@ -25,26 +26,26 @@ import { transformCommit } from './commit.js'
* @yields Changelog entry.
*/
export function createChangelogAsyncGeneratorFromCommits<Commit extends CommitKnownProps = CommitKnownProps>(
commits: Commit[] | AsyncIterable<Commit>,
commits: Iterable<Commit> | AsyncIterable<Commit>,
context?: Context<Commit>,
options?: Options<Commit>,
includeDetails?: false
): AsyncGenerator<string, void>
export function createChangelogAsyncGeneratorFromCommits<Commit extends CommitKnownProps = CommitKnownProps>(
commits: Commit[] | AsyncIterable<Commit>,
commits: Iterable<Commit> | AsyncIterable<Commit>,
context: Context<Commit>,
options: Options<Commit>,
includeDetails: true
): AsyncGenerator<Details<Commit>, void>
export function createChangelogAsyncGeneratorFromCommits<Commit extends CommitKnownProps = CommitKnownProps>(
commits: Commit[] | AsyncIterable<Commit>,
commits: Iterable<Commit> | AsyncIterable<Commit>,
context?: Context<Commit>,
options?: Options<Commit>,
includeDetails?: boolean
): AsyncGenerator<string | Details<Commit>, void>

export async function* createChangelogAsyncGeneratorFromCommits<Commit extends CommitKnownProps = CommitKnownProps>(
commits: Commit[] | AsyncIterable<Commit>,
commits: Iterable<Commit> | AsyncIterable<Commit>,
context: Context<Commit> = {},
options: Options<Commit> = {},
includeDetails = false
Expand All @@ -66,9 +67,9 @@ export async function* createChangelogAsyncGeneratorFromCommits<Commit extends C
})
: (log: string) => log
let chunk: Commit
let commit: Commit | null
let commit: TransformedCommit<Commit> | null
let keyCommit: Commit | null
let commitsGroup: Commit[] = []
let commitsGroup: TransformedCommit<Commit>[] = []
let neverGenerated = true
let result: string
let savedKeyCommit: Commit | null = null
Expand Down Expand Up @@ -145,7 +146,7 @@ export function createChangelogWriterStream<Commit extends CommitKnownProps = Co
* @returns Changelog string.
*/
export async function createChangelogFromCommits<Commit extends CommitKnownProps = CommitKnownProps>(
commits: Commit[] | AsyncIterable<Commit>,
commits: Iterable<Commit> | AsyncIterable<Commit>,
context?: Context<Commit>,
options?: Options<Commit>
) {
Expand Down
11 changes: 11 additions & 0 deletions packages/conventional-commits-filter/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"extends": [
"@trigen/eslint-config/typescript",
"@trigen/eslint-config/typescript-requiring-type-checking",
"@trigen/eslint-config/jest"
],
"parserOptions": {
"tsconfigRootDir": "./packages/conventional-commits-filter",
"project": ["./tsconfig.json", "./test/tsconfig.json"]
}
}
84 changes: 60 additions & 24 deletions packages/conventional-commits-filter/README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,54 @@
# conventional-commits-filter [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coverage-image]][coverage-url]
> Filter out reverted commits parsed by conventional-commits-parser
# conventional-commits-filter

[![ESM-only package][package]][package-url]
[![NPM version][npm]][npm-url]
[![Node version][node]][node-url]
[![Dependencies status][deps]][deps-url]
[![Install size][size]][size-url]
[![Build status][build]][build-url]
[![Coverage status][coverage]][coverage-url]

[package]: https://img.shields.io/badge/package-ESM--only-ffe536.svg
[package-url]: https://nodejs.org/api/esm.html

[npm]: https://img.shields.io/npm/v/conventional-commits-filter.svg
[npm-url]: https://npmjs.com/package/conventional-commits-filter

[node]: https://img.shields.io/node/v/conventional-commits-filter.svg
[node-url]: https://nodejs.org

[deps]: https://img.shields.io/librariesio/release/npm/conventional-commits-filter
[deps-url]: https://libraries.io/npm/conventional-commits-filter/tree

[size]: https://packagephobia.com/badge?p=conventional-commits-filter
[size-url]: https://packagephobia.com/result?p=conventional-commits-filter

[build]: https://img.shields.io/github/actions/workflow/status/conventional-changelog/conventional-changelog/ci.yaml?branch=master
[build-url]: https://github.com/conventional-changelog/conventional-changelog/actions

[coverage]: https://coveralls.io/repos/github/conventional-changelog/conventional-changelog/badge.svg?branch=master
[coverage-url]: https://coveralls.io/github/conventional-changelog/conventional-changelog?branch=master

Filter out reverted commits parsed by conventional-commits-parser.

## Install

```sh
$ npm install --save conventional-commits-filter
```bash
# pnpm
pnpm add -D conventional-commits-filter
# yarn
yarn add -D conventional-commits-filter
# npm
npm i -D conventional-commits-filter
```


## Usage

```js
import conventionalCommitsFilter from 'conventional-commits-filter';
import {
filterRevertedCommits,
filterRevertedCommitsSync
} from 'conventional-commits-filter'

const commits = [{
type: 'revert',
Expand Down Expand Up @@ -116,10 +152,20 @@ const commits = [{
}
}];

commits = conventionalCommitsFilter(commits);
console.log(commits);
/*=>
[{
// for sync input data
for (const commit of filterRevertedCommitsSync(commits)) {
console.log(commit)
}
// for async iterable or stream input data
for await (const commit of filterRevertedCommits(commits)) {
console.log(commit)
}
```

Output:

```js
{
type: 'What',
scope: null,
subject: 'new feature',
Expand All @@ -142,7 +188,8 @@ console.log(commits);
revert: null,
hash: '815a3f0717bf1dfce007bd076420c609504edcf3\n'
}
}, {
}
{
type: 'Chores',
scope: null,
subject: 'first commit',
Expand All @@ -165,20 +212,9 @@ console.log(commits);
revert: null,
hash: '74a3e4d6d25dee2c0d6483a0a3887417728cbe0a\n'
}
}]
*/
}
```

## License

MIT © [Steve Mao]()


[npm-image]: https://badge.fury.io/js/conventional-commits-filter.svg
[npm-url]: https://npmjs.org/package/conventional-commits-filter
[travis-image]: https://travis-ci.org/stevemao/conventional-commits-filter.svg?branch=master
[travis-url]: https://travis-ci.org/stevemao/conventional-commits-filter
[daviddm-image]: https://david-dm.org/stevemao/conventional-commits-filter.svg
[daviddm-url]: https://david-dm.org/stevemao/conventional-commits-filter
[coverage-image]: https://coveralls.io/repos/github/conventional-changelog/conventional-changelog/badge.svg?branch=master
[coverage-url]: https://coveralls.io/github/conventional-changelog/conventional-changelog?branch=master
MIT © [Steve Mao](https://github.com/stevemao)
77 changes: 0 additions & 77 deletions packages/conventional-commits-filter/index.js

This file was deleted.

40 changes: 25 additions & 15 deletions packages/conventional-commits-filter/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,41 @@
"type": "module",
"version": "4.0.0",
"description": "Filter out reverted commits parsed by conventional-commits-parser",
"exports": "./index.js",
"bugs": {
"url": "https://github.com/conventional-changelog/conventional-changelog/issues"
},
"homepage": "https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-commits-filter#readme",
"repository": {
"type": "git",
"url": "https://github.com/conventional-changelog/conventional-changelog.git"
},
"author": {
"name": "Steve Mao",
"email": "maochenyan@gmail.com",
"url": "https://github.com/stevemao"
},
"engines": {
"node": ">=16"
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/conventional-changelog/conventional-changelog.git",
"directory": "packages/conventional-commits-filter"
},
"files": [
"index.js"
],
"bugs": {
"url": "https://github.com/conventional-changelog/conventional-changelog/issues"
},
"homepage": "https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-commits-filter#readme",
"keywords": [
"filter",
"conventional",
"changelog",
"commits"
],
"license": "MIT"
"engines": {
"node": ">=16"
},
"exports": "./src/index.ts",
"publishConfig": {
"exports": "./dist/index.js"
},
"files": [
"dist"
],
"scripts": {
"clear": "del ./dist",
"prepublishOnly": "pnpm build",
"build": "tsc",
"test:types": "tsc --noEmit"
}
}

0 comments on commit e0c7b06

Please sign in to comment.