/// import Stream = require("stream"); import { Context as BaseContext, Options as BaseWriterOptions } from "conventional-changelog-writer"; import { Commit, Options as BaseParserOptions } from "conventional-commits-parser"; import { GitOptions as BaseGitRawCommitsOptions } from "git-raw-commits"; import { Package } from "normalize-package-data"; /** * Returns a readable stream. * * @param options * @param context * @param gitRawCommitsOpts * @param parserOpts * @param writerOpts */ declare function conventionalChangelogCore( options?: Options, context?: Partial, gitRawCommitsOpts?: GitRawCommitsOptions, parserOpts?: ParserOptions, writerOpts?: WriterOptions, ): Stream.Readable; declare namespace conventionalChangelogCore { interface Context extends BaseContext { /** * The hosting website. Eg: `'https://github.com'` or `'https://bitbucket.org'`. * * @default * Normalized host found in `package.json`. */ host?: BaseContext["host"] | undefined; /** * Version number of the up-coming release. If `version` is found in the last * commit before generating logs, it will be overwritten. * * @default * Version found in `package.json`. */ version?: BaseContext["version"] | undefined; /** * The owner of the repository. Eg: `'stevemao'`. * * @default * Extracted from normalized `package.json` `repository.url` field. */ owner?: BaseContext["owner"] | undefined; /** * The repository name on `host`. Eg: `'conventional-changelog-writer'`. * * @default * Extracted from normalized `package.json` `repository.url` field. */ repository?: BaseContext["repository"] | undefined; /** * The whole repository url. Eg: `'https://github.com/conventional-changelog/conventional-changelog-writer'`. * The should be used as a fallback when `context.repository` doesn't exist. * * @default * The whole normalized repository url in `package.json`. */ repoUrl?: BaseContext["repoUrl"] | undefined; /** * @default * Previous semver tag or the first commit hash if no previous tag. */ previousTag?: string | undefined; /** * @default * Current semver tag or `'v'` + version if no current tag. */ currentTag?: string | undefined; /** * Should link to the page that compares current tag with previous tag? * * @default * `true` if `previousTag` and `currentTag` are truthy. */ linkCompare?: boolean | undefined; } /** * Please check the available options at http://git-scm.com/docs/git-log. * * There are some defaults: * * @remarks * Single dash arguments are not supported because of https://github.com/sindresorhus/dargs/blob/master/index.js#L5. * * @remarks * For `` we can also use `..` pattern, and this * module has the following extra options for shortcut of this pattern: * * * `from` * * `to` * * This module also have the following additions: * * * `format` * * `debug` * * `path` */ interface GitRawCommitsOptions extends BaseGitRawCommitsOptions { /** * @default * '%B%n-hash-%n%H%n-gitTags-%n%d%n-committerDate-%n%ci' */ format?: BaseGitRawCommitsOptions["format"] | undefined; /** * @default * Based on `options.releaseCount`. */ from?: BaseGitRawCommitsOptions["from"] | undefined; /** * @default * `true` if `options.append` is truthy. */ reverse?: boolean | undefined; /** * A function to get debug information. * * @default * options.debug */ debug?: BaseGitRawCommitsOptions["debug"] | undefined; } type MergedContext = T & MergedContext.ExtraContext; namespace MergedContext { interface ExtraContext { /** * All git semver tags found in the repository. You can't overwrite this value. */ readonly gitSemverTags?: readonly string[] | undefined; /** * Your `package.json` data. You can't overwrite this value. */ readonly packageData?: Readonly> | undefined; } } interface Options { /** * This should serve as default values for other arguments of * `conventionalChangelogCore` so you don't need to rewrite the same or similar * config across your projects. Any value in this could be overwritten. If this * is a promise (recommended if async), it should resolve with the config. If * this is a function, it expects a node style callback with the config object. * If this is an object, it is the config object. The config object should * include `context`, `gitRawCommitsOpts`, `parserOpts` and `writerOpts`. */ config?: Options.Config | undefined; pkg?: Options.Pkg | undefined; /** * Should the log be appended to existing data. * * @default * false */ append?: boolean | undefined; /** * How many releases of changelog you want to generate. It counts from the * upcoming release. Useful when you forgot to generate any previous changelog. * Set to `0` to regenerate all. * * @default * 1 */ releaseCount?: number | undefined; /** * If given, unstable tags (e.g. `x.x.x-alpha.1`, `x.x.x-rc.2`) will be skipped. */ skipUnstable?: boolean | undefined; /** * A debug function. EG: `console.debug.bind(console)`. * * @default * function () {} */ debug?: Options.Logger | undefined; /** * A warn function. EG: `grunt.verbose.writeln`. * * @default * options.debug */ warn?: Options.Logger | undefined; /** * A transform function that applies after the parser and before the writer. * * This is the place to modify the parsed commits. */ transform?: Options.Transform | undefined; /** * If this value is `true` and `context.version` equals last release then * `context.version` will be changed to `'Unreleased'`. * * @remarks * You may want to combine this option with `releaseCount` set to `0` to always * overwrite the whole CHANGELOG. `conventional-changelog` only outputs a * CHANGELOG but doesn't read any existing one. * * @default * `true` if a different version than last release is given. Otherwise `false`. */ outputUnreleased?: boolean | undefined; /** * Specify a package in lerna-style monorepo that the CHANGELOG should be * generated for. * * Lerna tags releases in the format `foo-package@1.0.0` and assumes that * packages are stored in the directory structure `./packages/foo-package`. * * @default * null */ lernaPackage?: string | null | undefined; /** * Specify a prefix for the git tag that will be taken into account during the * comparison. For instance if your version tag is prefixed by `version/` * instead of `v` you would specify `--tagPrefix=version/`. */ tagPrefix?: string | undefined; } namespace Options { type Config = | Promise> | Config.Function | Config.Object; namespace Config { type FunctionType = ( callback: FunctionType.Callback, ) => void; namespace FunctionType { type Callback = ( error: any, config: ObjectType, ) => void; } interface ObjectType { context?: Partial | undefined; gitRawCommitsOpts?: GitRawCommitsOptions | undefined; parserOpts?: ParserOptions | undefined; recommendedBumpOpts?: RecommendedBumpOptions | undefined; writerOpts?: WriterOptions | undefined; } /** * `recommendedBumpOpts` is an object with the following properties: * * `ignoreReverted` * * `preset` * * `config` * * `whatBump` * * `tagPrefix` * * `skipUnstable` * * `lernaPackage` * * `path` */ interface RecommendedBumpOptions { /** * If `true`, reverted commits will be ignored. * * @default * true */ ignoreReverted?: boolean | undefined; /** * It's recommended to use a preset so you don't have to define everything * yourself. * * The value is passed to [`conventional-changelog-preset-loader`](https://www.npmjs.com/package/conventional-changelog-preset-loader). */ preset?: string | undefined; /** * This should serve as default values for other arguments of * `conventional-recommended-bump` so you don't need to rewrite the same or * similar config across your projects. * * @remarks * `config` option will be overwritten by the value loaded by * `conventional-changelog-preset-loader` if the `preset` options is set. */ config?: Config | undefined; /** * A function that takes parsed commits as an argument. * * ``` * whatBump(commits) {}; * ``` * * `commits` is an array of all commits from last semver tag to `HEAD` as parsed * by `conventional-commits-parser`. * * This should return an object including but not limited to `level` and `reason`. * `level` is a `number` indicating what bump it should be and `reason` is the * reason of such release. */ whatBump?: RecommendedBumpOptions.WhatBump | undefined; /** * Specify a prefix for the git tag that will be taken into account during the * comparison. * * For instance if your version tag is prefixed by `version/` instead of `v` you * would specifying `--tagPrefix=version/` using the CLI, or `version/` as the * value of the `tagPrefix` option. */ tagPrefix?: string | undefined; /** * If given, unstable tags (e.g. `x.x.x-alpha.1`, `x.x.x-rc.2`) will be skipped. */ skipUnstable?: boolean | undefined; /** * Specify the name of a package in a [Lerna](https://lernajs.io/)-managed * repository. The package name will be used when fetching all changes to a * package since the last time that package was released. * * For instance if your project contained a package named * `conventional-changelog`, you could have only commits that have happened * since the last release of `conventional-changelog` was tagged by * specifying `--lernaPackage=conventional-changelog` using the CLI, or * `conventional-changelog` as the value of the `lernaPackage` option. */ lernaPackage?: string | undefined; /** * Specify the path to only calculate with git commits related to the path. * If you want to calculate recommended bumps of packages in a Lerna-managed * repository, path should be use along with lernaPackage for each of the package. */ path?: string | undefined; } namespace RecommendedBumpOptions { type WhatBump = (commits: Commit[]) => WhatBump.Result; namespace WhatBump { interface Result { level?: number | undefined; reason?: string | undefined; } } } export { FunctionType as Function, ObjectType as Object }; } type Logger = (message?: any) => void; interface Pkg { /** * The location of your "package.json". */ path?: string | undefined; /** * A function that takes `package.json` data as the argument and returns the * modified data. Note this is performed before normalizing package.json data. * Useful when you need to add a leading 'v' to your version or modify your * repository url, etc. * * @default * Pass through. */ transform?: ((pkg: Record) => Record) | undefined; } interface Transform { /** * A transform function that applies after the parser and before the writer. * * This is the place to modify the parsed commits. * * @param commit The commit from conventional-commits-parser. * @param cb Callback when you are done. */ (this: Stream.Transform, commit: Commit, cb: Transform.Callback): void; } namespace Transform { type Callback = (error: any, commit: T) => void; } } interface ParserOptions extends BaseParserOptions { /** * What warn function to use. For example, `console.warn.bind(console)` or * `grunt.log.writeln`. By default, it's a noop. If it is `true`, it will error * if commit cannot be parsed (strict). * * @default * options.warn */ warn?: BaseParserOptions["warn"] | undefined; } interface WriterOptions extends BaseWriterOptions> { /** * Last chance to modify your context before generating a changelog. * * Finalize context is used for generating above context. * * @remarks * If you overwrite this value the above context defaults will be gone. */ finalizeContext?: BaseWriterOptions>["finalizeContext"] | undefined; /** * A function to get debug information. * * @default * options.debug */ debug?: BaseWriterOptions["debug"] | undefined; /** * The normal order means reverse chronological order. `reverse` order means * chronological order. Are the commits from upstream in the reverse order? You * should only worry about this when generating more than one blocks of logs * based on `generateOn`. If you find the last commit is in the wrong block * inverse this value. * * @default * options.append */ reverse?: BaseWriterOptions["reverse"] | undefined; /** * If `true`, the stream will flush out the last bit of commits (could be empty) * to changelog. * * @default * options.outputUnreleased */ doFlush?: BaseWriterOptions["doFlush"] | undefined; } } type Context = conventionalChangelogCore.Context; type GitRawCommitsOptions = conventionalChangelogCore.GitRawCommitsOptions; type Options = conventionalChangelogCore.Options; type ParserOptions = conventionalChangelogCore.ParserOptions; type WriterOptions = conventionalChangelogCore.WriterOptions; export default conventionalChangelogCore;