Skip to content

Commit b8f30e4

Browse files
committed
chore: add types in files where type errors occur
1 parent 87ae497 commit b8f30e4

File tree

9 files changed

+172
-40
lines changed

9 files changed

+172
-40
lines changed

lib/configuration.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ const CONFIGURATION_FILES = [
88
'.versionrc.json',
99
'.versionrc.js'
1010
]
11-
11+
/**
12+
* @returns {import('conventional-changelog-config-spec').Config}
13+
*/
1214
module.exports.getConfiguration = function () {
1315
let config = {}
1416
const configPath = findUp.sync(CONFIGURATION_FILES)

lib/latest-semver-tag.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
const gitSemverTags = require('git-semver-tags')
22
const semver = require('semver')
33

4+
/**
5+
* @param {string} [tagPrefix]
6+
* @returns {Promise<string>}
7+
*/
48
module.exports = function (tagPrefix = undefined) {
59
return new Promise((resolve, reject) => {
610
gitSemverTags({ tagPrefix }, function (err, tags) {

lib/lifecycles/bump.js

Lines changed: 70 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
'use strict'
22

3-
const chalk = require('chalk')
3+
/** @type {import('chalk').default} */
4+
const chalk = /** @type {any} */(require('chalk'))
45
const checkpoint = require('../checkpoint')
56
const conventionalRecommendedBump = require('conventional-recommended-bump')
67
const figures = require('figures')
78
const fs = require('fs')
8-
const DotGitignore = require('dotgitignore')
9+
/** @type {import('dotgitignore').default} */
10+
const DotGitignore = /** @type {any} */(require('dotgitignore'))
911
const path = require('path')
1012
const presetLoader = require('../preset-loader')
1113
const runLifecycleScript = require('../run-lifecycle-script')
1214
const semver = require('semver')
1315
const writeFile = require('../write-file')
1416
const { resolveUpdaterObjectFromArgument } = require('../updaters')
17+
/** @type {Object<string, boolean>} */
1518
let configsToUpdate = {}
1619

20+
/**
21+
* @typedef {import('semver').ReleaseType} ReleaseType
22+
*/
23+
24+
/** @type {(args: RuntimeConfig, version: string) => Promise<string>} */
1725
async function Bump (args, version) {
1826
// reset the cache of updated config files each
1927
// time we perform the version bump step.
@@ -22,42 +30,71 @@ async function Bump (args, version) {
2230
if (args.skip.bump) return version
2331
let newVersion = version
2432
await runLifecycleScript(args, 'prerelease')
33+
/** @type {ReleaseType | void | undefined} */
2534
const stdout = await runLifecycleScript(args, 'prebump')
2635
if (stdout && stdout.trim().length) args.releaseAs = stdout.trim()
2736
const release = await bumpVersion(args.releaseAs, version, args)
2837
if (!args.firstRelease) {
29-
const releaseType = getReleaseType(args.prerelease, release.releaseType, version)
30-
const releaseTypeAsVersion = releaseType === 'pre' + release.releaseType ? semver.valid(release.releaseType + '-' + args.prerelease + '.0') : semver.valid(releaseType)
31-
32-
newVersion = releaseTypeAsVersion || semver.inc(version, releaseType, args.prerelease)
38+
const releaseType = getReleaseType(
39+
args.prerelease,
40+
release.releaseType,
41+
version
42+
)
43+
const releaseTypeAsVersion =
44+
releaseType === 'pre' + release.releaseType
45+
? semver.valid(release.releaseType + '-' + args.prerelease + '.0')
46+
: semver.valid(releaseType)
47+
48+
newVersion =
49+
releaseTypeAsVersion || semver.inc(version, releaseType, args.prerelease)
3350
updateConfigs(args, newVersion)
3451
} else {
35-
checkpoint(args, 'skip version bump on first release', [], chalk.red(figures.cross))
52+
checkpoint(
53+
args,
54+
'skip version bump on first release',
55+
[],
56+
chalk.red(figures.cross)
57+
)
3658
}
3759
await runLifecycleScript(args, 'postbump')
3860
return newVersion
3961
}
4062

63+
/**
64+
* @returns {Object<string, boolean>}
65+
*/
4166
Bump.getUpdatedConfigs = function () {
4267
return configsToUpdate
4368
}
4469

70+
/**
71+
*
72+
* @param {string} prerelease
73+
* @param {"major" | "minor" | "patch"} expectedReleaseType
74+
* @param {string} currentVersion
75+
* @returns {ReleaseType}
76+
*/
4577
function getReleaseType (prerelease, expectedReleaseType, currentVersion) {
4678
if (isString(prerelease)) {
4779
if (isInPrerelease(currentVersion)) {
48-
if (shouldContinuePrerelease(currentVersion, expectedReleaseType) ||
49-
getTypePriority(getCurrentActiveType(currentVersion)) > getTypePriority(expectedReleaseType)
80+
if (
81+
shouldContinuePrerelease(currentVersion, expectedReleaseType) ||
82+
getTypePriority(getCurrentActiveType(currentVersion)) >
83+
getTypePriority(expectedReleaseType)
5084
) {
5185
return 'prerelease'
5286
}
5387
}
5488

55-
return 'pre' + expectedReleaseType
89+
return /** @type {ReleaseType} */('pre' + expectedReleaseType)
5690
} else {
5791
return expectedReleaseType
5892
}
5993
}
6094

95+
/**
96+
* @type {(val: unknown) => val is string}
97+
*/
6198
function isString (val) {
6299
return typeof val === 'string'
63100
}
@@ -67,14 +104,15 @@ function isString (val) {
67104
* and if it current in-pre-release type is same as expect type,
68105
* it should continue the pre-release with the same type
69106
*
70-
* @param version
71-
* @param expectType
107+
* @param {string} version
108+
* @param {string} expectType
72109
* @return {boolean}
73110
*/
74111
function shouldContinuePrerelease (version, expectType) {
75112
return getCurrentActiveType(version) === expectType
76113
}
77114

115+
/** @type {(version: string) => boolean} */
78116
function isInPrerelease (version) {
79117
return Array.isArray(semver.prerelease(version))
80118
}
@@ -83,9 +121,8 @@ const TypeList = ['major', 'minor', 'patch'].reverse()
83121

84122
/**
85123
* extract the in-pre-release type in target version
86-
*
87-
* @param version
88-
* @return {string}
124+
* @param {string} version
125+
* @return {string | void}
89126
*/
90127
function getCurrentActiveType (version) {
91128
const typelist = TypeList
@@ -100,13 +137,13 @@ function getCurrentActiveType (version) {
100137
* calculate the priority of release type,
101138
* major - 2, minor - 1, patch - 0
102139
*
103-
* @param type
140+
* @param {string} type
104141
* @return {number}
105142
*/
106143
function getTypePriority (type) {
107144
return TypeList.indexOf(type)
108145
}
109-
146+
/** @type {(releaseAs: ReleaseType, currentVersion: string, args: RuntimeConfig) => Promise<{releaseType: ReleaseType}>} */
110147
function bumpVersion (releaseAs, currentVersion, args) {
111148
return new Promise((resolve, reject) => {
112149
if (releaseAs) {
@@ -118,16 +155,21 @@ function bumpVersion (releaseAs, currentVersion, args) {
118155
if (typeof presetOptions === 'object') {
119156
if (semver.lt(currentVersion, '1.0.0')) presetOptions.preMajor = true
120157
}
121-
conventionalRecommendedBump({
122-
debug: args.verbose && console.info.bind(console, 'conventional-recommended-bump'),
123-
preset: presetOptions,
124-
path: args.path,
125-
tagPrefix: args.tagPrefix,
126-
lernaPackage: args.lernaPackage
127-
}, function (err, release) {
128-
if (err) return reject(err)
129-
else return resolve(release)
130-
})
158+
conventionalRecommendedBump(
159+
{
160+
debug:
161+
args.verbose &&
162+
console.info.bind(console, 'conventional-recommended-bump'),
163+
preset: presetOptions,
164+
path: args.path,
165+
tagPrefix: args.tagPrefix,
166+
lernaPackage: args.lernaPackage
167+
},
168+
function (err, release) {
169+
if (err) return reject(err)
170+
else return resolve(release)
171+
}
172+
)
131173
}
132174
})
133175
}
@@ -159,11 +201,7 @@ function updateConfigs (args, newVersion) {
159201
'bumping version in ' + updater.filename + ' from %s to %s',
160202
[updater.updater.readVersion(contents), realNewVersion]
161203
)
162-
writeFile(
163-
args,
164-
configPath,
165-
newContents
166-
)
204+
writeFile(args, configPath, newContents)
167205
// flag any config files that we modify the version # for
168206
// as having been updated.
169207
configsToUpdate[updater.filename] = true

lib/lifecycles/changelog.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
const chalk = require('chalk')
1+
/** @type {import('chalk').default} */
2+
const chalk = /** @type {any} */(require('chalk'))
23
const checkpoint = require('../checkpoint')
34
const conventionalChangelog = require('conventional-changelog')
45
const fs = require('fs')
@@ -7,6 +8,11 @@ const runLifecycleScript = require('../run-lifecycle-script')
78
const writeFile = require('../write-file')
89
const START_OF_LAST_RELEASE_PATTERN = /(^#+ \[?[0-9]+\.[0-9]+\.[0-9]+|<a name=)/m
910

11+
/**
12+
* @param {RuntimeConfig} args
13+
* @param {string} newVersion
14+
* @returns {Promise<void>}
15+
*/
1016
async function Changelog (args, newVersion) {
1117
if (args.skip.changelog) return
1218
await runLifecycleScript(args, 'prechangelog')
@@ -18,6 +24,11 @@ Changelog.START_OF_LAST_RELEASE_PATTERN = START_OF_LAST_RELEASE_PATTERN
1824

1925
module.exports = Changelog
2026

27+
/**
28+
* @param {RuntimeConfig} args
29+
* @param {string} newVersion
30+
* @returns {Promise<void>}
31+
*/
2132
function outputChangelog (args, newVersion) {
2233
return new Promise((resolve, reject) => {
2334
createIfMissing(args)
@@ -53,7 +64,10 @@ function outputChangelog (args, newVersion) {
5364
})
5465
})
5566
}
56-
67+
/**
68+
* @param {RuntimeConfig} args
69+
* @returns {void}
70+
*/
5771
function createIfMissing (args) {
5872
try {
5973
fs.accessSync(args.infile, fs.F_OK)

lib/lifecycles/tag.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,41 @@
11
const bump = require('../lifecycles/bump')
2-
const chalk = require('chalk')
2+
/** @type {import('chalk').default} */
3+
const chalk = /** @type {any} */(require('chalk'))
34
const checkpoint = require('../checkpoint')
45
const figures = require('figures')
56
const formatCommitMessage = require('../format-commit-message')
67
const runExecFile = require('../run-execFile')
78
const runLifecycleScript = require('../run-lifecycle-script')
89
const { detectPMByLockFile } = require('../detect-package-manager')
910

11+
/**
12+
* @param {RuntimeConfig} args
13+
* @param {boolean} pkgPrivate
14+
* @param {string} newVersion
15+
* @returns {Promise<void>}
16+
*/
1017
module.exports = async function (newVersion, pkgPrivate, args) {
1118
if (args.skip.tag) return
1219
await runLifecycleScript(args, 'pretag')
1320
await execTag(newVersion, pkgPrivate, args)
1421
await runLifecycleScript(args, 'posttag')
1522
}
1623

24+
/**
25+
* @returns {Promise<string>}
26+
*/
1727
async function detectPublishHint () {
1828
const npmClientName = await detectPMByLockFile()
1929
const publishCommand = 'publish'
2030
return `${npmClientName} ${publishCommand}`
2131
}
2232

33+
/**
34+
* @param {string} newVersion
35+
* @param {boolean} pkgPrivate
36+
* @param {RuntimeConfig} args
37+
* @returns {Promise<void>}
38+
*/
2339
async function execTag (newVersion, pkgPrivate, args) {
2440
const tagOption = []
2541
if (args.sign) {

lib/preset-loader.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
// describe in: https://github.com/conventional-changelog/conventional-changelog-config-spec
33
const spec = require('conventional-changelog-config-spec')
44

5+
/**
6+
* @param {RuntimeConfig} args
7+
* @returns {import('conventional-changelog-config-spec').Config}
8+
*/
59
module.exports = (args) => {
610
const defaultPreset = require.resolve('conventional-changelog-conventionalcommits')
711
let preset = args.preset || defaultPreset

lib/run-lifecycle-script.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1-
const chalk = require('chalk')
1+
/** @type {import('chalk').default} */
2+
const chalk = /** @type {any} */(require('chalk'))
23
const checkpoint = require('./checkpoint')
34
const figures = require('figures')
45
const runExec = require('./run-exec')
56

7+
/** @typedef {import('semver').ReleaseType} ReleaseType */
8+
9+
/**
10+
*
11+
* @param {RuntimeConfig} args
12+
* @param {string} hookName
13+
* @returns {Promise<void> | Promise<ReleaseType> | Promise<undefined>}
14+
*/
615
module.exports = function (args, hookName) {
716
const scripts = args.scripts
817
if (!scripts || !scripts[hookName]) return Promise.resolve()

0 commit comments

Comments
 (0)