@varlet/release 0.4.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,301 +1,293 @@
1
- // src/release.ts
2
- import { resolve } from "path";
3
- import { confirm, select } from "@inquirer/prompts";
4
- import fse2 from "fs-extra";
5
- import { glob } from "glob";
6
- import { createSpinner as createSpinner2 } from "nanospinner";
1
+ import { resolve } from "node:path";
2
+ import { styleText } from "node:util";
3
+ import { cancel, confirm, isCancel, select, spinner } from "@clack/prompts";
4
+ import fse from "fs-extra";
7
5
  import { logger } from "rslog";
8
6
  import semver from "semver";
9
- import { x as exec } from "tinyexec";
10
-
11
- // src/changelog.ts
12
- import { resolve as resolvePath } from "path";
7
+ import { x } from "tinyexec";
13
8
  import conventionalChangelog from "conventional-changelog";
14
- import fse from "fs-extra";
15
- import { createSpinner } from "nanospinner";
16
- var { createWriteStream } = fse;
17
- function changelog({
18
- releaseCount = 0,
19
- file = "CHANGELOG.md",
20
- preset = "angular",
21
- writerOpts = {
22
- transform(commit, context) {
23
- let discard = true;
24
- const issues = [];
25
- commit.notes.forEach((note) => {
26
- note.title = "BREAKING CHANGES";
27
- discard = false;
28
- });
29
- if (commit.type === "feat") {
30
- commit.type = "Features";
31
- } else if (commit.type === "fix") {
32
- commit.type = "Bug Fixes";
33
- } else if (commit.type === "perf") {
34
- commit.type = "Performance Improvements";
35
- } else if (commit.type === "revert" || commit.revert) {
36
- commit.type = "Reverts";
37
- } else if (commit.type === "refactor") {
38
- commit.type = "Code Refactoring";
39
- } else if (discard) {
40
- return false;
41
- } else if (commit.type === "docs") {
42
- commit.type = "Documentation";
43
- } else if (commit.type === "style") {
44
- commit.type = "Styles";
45
- } else if (commit.type === "test") {
46
- commit.type = "Tests";
47
- } else if (commit.type === "build") {
48
- commit.type = "Build System";
49
- } else if (commit.type === "ci") {
50
- commit.type = "Continuous Integration";
51
- }
52
- if (commit.scope === "*") {
53
- commit.scope = "";
54
- }
55
- if (typeof commit.hash === "string") {
56
- commit.shortHash = commit.hash.substring(0, 7);
57
- }
58
- if (typeof commit.subject === "string") {
59
- let url = context.repository ? `${context.host}/${context.owner}/${context.repository}` : context.repoUrl;
60
- if (url) {
61
- url = `${url}/issues/`;
62
- commit.subject = commit.subject.replace(/#([0-9]+)/g, (_, issue) => {
63
- issues.push(issue);
64
- return `[#${issue}](${url}${issue})`;
65
- });
66
- }
67
- if (context.host) {
68
- commit.subject = commit.subject.replace(/\B@([a-z0-9](?:-?[a-z0-9/]){0,38})/g, (_, username) => {
69
- if (username.includes("/")) {
70
- return `@${username}`;
71
- }
72
- return `[@${username}](${context.host}/${username})`;
73
- });
74
- }
75
- }
76
- commit.references = commit.references.filter((reference) => {
77
- if (issues.indexOf(reference.issue) === -1) {
78
- return true;
79
- }
80
- return false;
81
- });
82
- return commit;
83
- }
84
- }
85
- } = {}) {
86
- const s = createSpinner("Generating changelog").start();
87
- return new Promise((resolve2) => {
88
- conventionalChangelog(
89
- {
90
- preset,
91
- releaseCount
92
- },
93
- void 0,
94
- void 0,
95
- void 0,
96
- writerOpts
97
- ).pipe(createWriteStream(resolvePath(process.cwd(), file))).on("close", () => {
98
- s.success({ text: "Changelog generated success!" });
99
- resolve2();
100
- });
101
- });
9
+
10
+ //#region src/changelog.ts
11
+ const { createWriteStream } = fse;
12
+ function changelog({ releaseCount = 0, file = "CHANGELOG.md", preset = "angular", writerOpts = { transform(commit, context) {
13
+ let discard = true;
14
+ const issues = [];
15
+ commit.notes.forEach((note) => {
16
+ note.title = "BREAKING CHANGES";
17
+ discard = false;
18
+ });
19
+ if (commit.type === "feat") commit.type = "Features";
20
+ else if (commit.type === "fix") commit.type = "Bug Fixes";
21
+ else if (commit.type === "perf") commit.type = "Performance Improvements";
22
+ else if (commit.type === "revert" || commit.revert) commit.type = "Reverts";
23
+ else if (commit.type === "refactor") commit.type = "Code Refactoring";
24
+ else if (discard) return false;
25
+ else if (commit.type === "docs") commit.type = "Documentation";
26
+ else if (commit.type === "style") commit.type = "Styles";
27
+ else if (commit.type === "test") commit.type = "Tests";
28
+ else if (commit.type === "build") commit.type = "Build System";
29
+ else if (commit.type === "ci") commit.type = "Continuous Integration";
30
+ if (commit.scope === "*") commit.scope = "";
31
+ if (typeof commit.hash === "string") commit.shortHash = commit.hash.substring(0, 7);
32
+ if (typeof commit.subject === "string") {
33
+ let url = context.repository ? `${context.host}/${context.owner}/${context.repository}` : context.repoUrl;
34
+ if (url) {
35
+ url = `${url}/issues/`;
36
+ commit.subject = commit.subject.replace(/#([0-9]+)/g, (_, issue) => {
37
+ issues.push(issue);
38
+ return `[#${issue}](${url}${issue})`;
39
+ });
40
+ }
41
+ if (context.host) commit.subject = commit.subject.replace(/\B@([a-z0-9](?:-?[a-z0-9/]){0,38})/g, (_, username) => {
42
+ if (username.includes("/")) return `@${username}`;
43
+ return `[@${username}](${context.host}/${username})`;
44
+ });
45
+ }
46
+ commit.references = commit.references.filter((reference) => {
47
+ if (issues.indexOf(reference.issue) === -1) return true;
48
+ return false;
49
+ });
50
+ return commit;
51
+ } } } = {}) {
52
+ const s = spinner();
53
+ s.start("Generating changelog");
54
+ return new Promise((resolve$1) => {
55
+ conventionalChangelog({
56
+ preset,
57
+ releaseCount
58
+ }, void 0, void 0, void 0, writerOpts).pipe(createWriteStream(resolve(process.cwd(), file))).on("close", () => {
59
+ s.stop("Changelog generated successfully!");
60
+ resolve$1();
61
+ });
62
+ });
102
63
  }
103
64
 
104
- // src/release.ts
105
- var cwd = process.cwd();
106
- var { writeFileSync, readJSONSync } = fse2;
107
- var releaseTypes = ["patch", "minor", "major", "prepatch", "preminor", "premajor"];
108
- var BACK_HINT = "Back to previous step";
65
+ //#endregion
66
+ //#region src/release.ts
67
+ const cwd = process.cwd();
68
+ const { writeFileSync, readJSONSync, existsSync, readdirSync } = fse;
69
+ const releaseTypes = [
70
+ "patch",
71
+ "minor",
72
+ "major",
73
+ "prepatch",
74
+ "preminor",
75
+ "premajor"
76
+ ];
77
+ const BACK_HINT = "Back to previous step";
109
78
  async function isWorktreeEmpty() {
110
- const ret = await exec("git", ["status", "--porcelain"]);
111
- return !ret.stdout;
79
+ return !(await x("git", ["status", "--porcelain"])).stdout;
112
80
  }
113
81
  async function isSameVersion(version) {
114
- const s = createSpinner2("Check remote version...").start();
115
- const packageJsones = getPackageJsons();
116
- const packageJson = packageJsones.find((packageJson2) => !packageJson2.config.private) || packageJsones[0];
117
- if (packageJson) {
118
- const { config } = packageJson;
119
- try {
120
- await exec("npm", ["view", `${config.name}@${version ?? config.version}`, "version"], {
121
- throwOnError: true
122
- });
123
- s.warn({
124
- text: `The npm package has a same remote version ${version ?? config.version}.`
125
- });
126
- return true;
127
- } catch {
128
- s.success();
129
- return false;
130
- }
131
- }
82
+ const s = spinner();
83
+ s.start("Check remote version...");
84
+ const packageJsones = getPackageJsons();
85
+ const packageJson = packageJsones.find((packageJson) => !packageJson.config.private) || packageJsones[0];
86
+ if (packageJson) {
87
+ const { config } = packageJson;
88
+ try {
89
+ await x("npm", [
90
+ "view",
91
+ `${config.name}@${version ?? config.version}`,
92
+ "version"
93
+ ], { throwOnError: true });
94
+ s.cancel();
95
+ logger.warn(`The npm package has a same remote version ${version ?? config.version}.`);
96
+ return true;
97
+ } catch {
98
+ s.stop();
99
+ return false;
100
+ }
101
+ }
132
102
  }
133
103
  async function publish({ preRelease, checkRemoteVersion, npmTag }) {
134
- const s = createSpinner2("Publishing all packages").start();
135
- const args = ["-r", "publish", "--no-git-checks", "--access", "public"];
136
- if (checkRemoteVersion && await isSameVersion()) {
137
- logger.error("publishing automatically skipped.");
138
- return;
139
- }
140
- if (preRelease) {
141
- args.push("--tag", "alpha");
142
- } else if (npmTag) {
143
- args.push("--tag", npmTag);
144
- }
145
- const ret = await exec("pnpm", args, { throwOnError: true });
146
- s.success({ text: "Publish all packages successfully" });
147
- ret.stdout && logger.log(ret.stdout);
104
+ const s = spinner();
105
+ s.start("Publishing all packages");
106
+ const args = [
107
+ "-r",
108
+ "publish",
109
+ "--no-git-checks",
110
+ "--access",
111
+ "public"
112
+ ];
113
+ if (checkRemoteVersion && await isSameVersion()) {
114
+ logger.error("publishing automatically skipped.");
115
+ return;
116
+ }
117
+ if (preRelease) args.push("--tag", "alpha");
118
+ else if (npmTag) args.push("--tag", npmTag);
119
+ try {
120
+ const ret = await x("pnpm", args, { throwOnError: true });
121
+ s.stop("Publish all packages successfully");
122
+ ret.stdout && logger.log(ret.stdout);
123
+ } catch (error) {
124
+ s.cancel("Publish all packages failed");
125
+ throw error?.output?.stderr ?? error;
126
+ }
148
127
  }
149
128
  async function pushGit(version, remote = "origin", skipGitTag = false) {
150
- const s = createSpinner2("Pushing to remote git repository").start();
151
- await exec("git", ["add", "."], {
152
- throwOnError: true
153
- });
154
- await exec("git", ["commit", "-m", `v${version}`], {
155
- throwOnError: true
156
- });
157
- if (!skipGitTag) {
158
- await exec("git", ["tag", `v${version}`], {
159
- throwOnError: true
160
- });
161
- await exec("git", ["push", remote, `v${version}`], {
162
- throwOnError: true
163
- });
164
- }
165
- const ret = await exec("git", ["push"], {
166
- throwOnError: true
167
- });
168
- s.success({ text: "Push remote repository successfully" });
169
- ret.stdout && logger.log(ret.stdout);
129
+ const s = spinner();
130
+ s.start("Pushing to remote git repository");
131
+ await x("git", ["add", "."], { throwOnError: true });
132
+ await x("git", [
133
+ "commit",
134
+ "-m",
135
+ `v${version}`
136
+ ], { throwOnError: true });
137
+ if (!skipGitTag) {
138
+ await x("git", ["tag", `v${version}`], { throwOnError: true });
139
+ await x("git", [
140
+ "push",
141
+ remote,
142
+ `v${version}`
143
+ ], { throwOnError: true });
144
+ }
145
+ const ret = await x("git", ["push"], { throwOnError: true });
146
+ s.stop("Push remote repository successfully");
147
+ ret.stdout && logger.log(ret.stdout);
148
+ }
149
+ function getAllPackageJsons() {
150
+ const result = [resolve(cwd, "package.json")];
151
+ const packagesDir = resolve(cwd, "packages");
152
+ if (existsSync(packagesDir)) for (const name of readdirSync(packagesDir)) {
153
+ const pkgPath = resolve(packagesDir, name, "package.json");
154
+ if (existsSync(pkgPath)) result.push(pkgPath);
155
+ }
156
+ return result;
170
157
  }
171
158
  function getPackageJsons() {
172
- const packageJsons = ["package.json", ...glob.sync("packages/*/package.json")];
173
- return packageJsons.map((path) => {
174
- const filePath = resolve(cwd, path);
175
- return {
176
- config: readJSONSync(filePath),
177
- filePath
178
- };
179
- });
159
+ return getAllPackageJsons().map((path) => {
160
+ return {
161
+ config: readJSONSync(path),
162
+ filePath: path
163
+ };
164
+ });
180
165
  }
181
166
  function updateVersion(version) {
182
- const packageJsons = getPackageJsons();
183
- packageJsons.forEach(({ config, filePath }) => {
184
- config.version = version;
185
- writeFileSync(filePath, JSON.stringify(config, null, 2));
186
- });
167
+ getPackageJsons().forEach(({ config, filePath }) => {
168
+ config.version = version;
169
+ writeFileSync(filePath, JSON.stringify(config, null, 2));
170
+ });
187
171
  }
188
172
  async function confirmRegistry() {
189
- const registry = (await exec("npm", ["config", "get", "registry"])).stdout;
190
- const ret = await confirm({
191
- message: `Current registry is: ${registry}`
192
- });
193
- return ret;
173
+ const registry = (await x("npm", [
174
+ "config",
175
+ "get",
176
+ "registry"
177
+ ])).stdout;
178
+ const ret = await confirm({ message: `Current registry is: ${registry}` });
179
+ if (isCancel(ret)) {
180
+ cancel("Operation cancelled.");
181
+ process.exit(0);
182
+ }
183
+ return ret;
194
184
  }
195
185
  async function confirmVersion(currentVersion, expectVersion) {
196
- const ret = await select({
197
- message: "Version confirm",
198
- choices: [`All packages version ${currentVersion} -> ${expectVersion}`, BACK_HINT].map((value) => ({
199
- name: value,
200
- value
201
- }))
202
- });
203
- return ret;
186
+ const ret = await select({
187
+ message: "Version confirm",
188
+ options: [`All packages version ${currentVersion} -> ${expectVersion}`, BACK_HINT].map((value) => ({
189
+ label: value,
190
+ value
191
+ }))
192
+ });
193
+ if (isCancel(ret)) {
194
+ cancel("Operation cancelled.");
195
+ process.exit(0);
196
+ }
197
+ return ret;
204
198
  }
205
199
  async function confirmRefs(remote = "origin") {
206
- const { stdout } = await exec("git", ["remote", "-v"]);
207
- const reg = new RegExp(`${remote} (.*) \\(push`);
208
- const repo = stdout.match(reg)?.[1];
209
- const { stdout: branch } = await exec("git", ["branch", "--show-current"]);
210
- const ret = await confirm({
211
- message: `Current refs ${repo}:refs/for/${branch}`
212
- });
213
- return ret;
200
+ const { stdout } = await x("git", ["remote", "-v"]);
201
+ const reg = new RegExp(`${remote}\t(.*) \\(push`);
202
+ const repo = stdout.match(reg)?.[1];
203
+ const { stdout: branch } = await x("git", ["branch", "--show-current"]);
204
+ const ret = await confirm({ message: `Current refs ${repo}:refs/for/${styleText("blue", branch)}` });
205
+ if (isCancel(ret)) {
206
+ cancel("Operation cancelled.");
207
+ process.exit(0);
208
+ }
209
+ return ret;
214
210
  }
215
211
  async function getReleaseType() {
216
- const releaseType = await select({
217
- message: "Please select release type",
218
- choices: releaseTypes.map((type) => ({ name: type, value: type }))
219
- });
220
- return releaseType;
212
+ const releaseType = await select({
213
+ message: "Please select release type",
214
+ options: releaseTypes.map((type) => ({
215
+ label: type,
216
+ value: type
217
+ }))
218
+ });
219
+ if (isCancel(releaseType)) {
220
+ cancel("Operation cancelled.");
221
+ process.exit(0);
222
+ }
223
+ return releaseType;
221
224
  }
222
225
  async function getReleaseVersion(currentVersion) {
223
- let isPreRelease = false;
224
- let expectVersion = "";
225
- let confirmVersionRet = "";
226
- do {
227
- const type = await getReleaseType();
228
- isPreRelease = type.startsWith("pre");
229
- expectVersion = semver.inc(currentVersion, type, `alpha.${Date.now()}`);
230
- expectVersion = isPreRelease ? expectVersion.slice(0, -2) : expectVersion;
231
- confirmVersionRet = await confirmVersion(currentVersion, expectVersion);
232
- } while (confirmVersionRet === BACK_HINT);
233
- return { isPreRelease, expectVersion };
226
+ let isPreRelease = false;
227
+ let expectVersion = "";
228
+ let confirmVersionRet = "";
229
+ do {
230
+ const type = await getReleaseType();
231
+ isPreRelease = type.startsWith("pre");
232
+ expectVersion = semver.inc(currentVersion, type, `alpha.${Date.now()}`);
233
+ expectVersion = isPreRelease ? expectVersion.slice(0, -2) : expectVersion;
234
+ confirmVersionRet = await confirmVersion(currentVersion, expectVersion);
235
+ } while (confirmVersionRet === BACK_HINT);
236
+ return {
237
+ isPreRelease,
238
+ expectVersion
239
+ };
234
240
  }
235
241
  async function release(options) {
236
- try {
237
- const currentVersion = readJSONSync(resolve(cwd, "package.json")).version;
238
- if (!currentVersion) {
239
- logger.error("Your package is missing the version field");
240
- return;
241
- }
242
- if (!await isWorktreeEmpty()) {
243
- logger.error("Git worktree is not empty, please commit changed");
244
- return;
245
- }
246
- if (!await confirmRefs(options.remote)) {
247
- return;
248
- }
249
- if (!options.skipNpmPublish && !await confirmRegistry()) {
250
- return;
251
- }
252
- const { isPreRelease, expectVersion } = await getReleaseVersion(currentVersion);
253
- if (options.checkRemoteVersion && await isSameVersion(expectVersion)) {
254
- logger.error("Please check remote version.");
255
- return;
256
- }
257
- updateVersion(expectVersion);
258
- if (options.task) {
259
- await options.task(expectVersion, currentVersion);
260
- }
261
- if (!options.skipNpmPublish) {
262
- await publish({ preRelease: isPreRelease, npmTag: options.npmTag });
263
- }
264
- if (!isPreRelease) {
265
- if (!options.skipChangelog) {
266
- await changelog();
267
- }
268
- await pushGit(expectVersion, options.remote, options.skipGitTag);
269
- }
270
- logger.success(`Release version ${expectVersion} successfully!`);
271
- if (isPreRelease) {
272
- try {
273
- await exec("git", ["restore", "**/package.json"], {
274
- throwOnError: true
275
- });
276
- } catch {
277
- }
278
- try {
279
- await exec("git", ["restore", "package.json"], {
280
- throwOnError: true
281
- });
282
- } catch {
283
- }
284
- }
285
- } catch (error) {
286
- logger.error(error.toString());
287
- process.exit(1);
288
- }
242
+ try {
243
+ const currentVersion = readJSONSync(resolve(cwd, "package.json")).version;
244
+ if (!currentVersion) {
245
+ logger.error("Your package is missing the version field");
246
+ return;
247
+ }
248
+ if (!await isWorktreeEmpty()) {
249
+ logger.error("Git worktree is not empty, please commit changed");
250
+ return;
251
+ }
252
+ if (!await confirmRefs(options.remote)) return;
253
+ if (!options.skipNpmPublish && !await confirmRegistry()) return;
254
+ const { isPreRelease, expectVersion } = await getReleaseVersion(currentVersion);
255
+ if (options.checkRemoteVersion && await isSameVersion(expectVersion)) {
256
+ logger.error("Please check remote version.");
257
+ return;
258
+ }
259
+ updateVersion(expectVersion);
260
+ if (options.task) await options.task(expectVersion, currentVersion);
261
+ if (!options.skipNpmPublish) await publish({
262
+ preRelease: isPreRelease,
263
+ npmTag: options.npmTag
264
+ });
265
+ if (!isPreRelease) {
266
+ if (!options.skipChangelog) await changelog();
267
+ await pushGit(expectVersion, options.remote, options.skipGitTag);
268
+ }
269
+ logger.success(`Release version ${expectVersion} successfully!`);
270
+ if (isPreRelease) {
271
+ try {
272
+ await x("git", ["restore", "**/package.json"], { throwOnError: true });
273
+ } catch {}
274
+ try {
275
+ await x("git", ["restore", "package.json"], { throwOnError: true });
276
+ } catch {}
277
+ }
278
+ } catch (error) {
279
+ logger.error(error);
280
+ process.exit(1);
281
+ }
289
282
  }
290
283
 
291
- // src/commitLint.ts
292
- import fse3 from "fs-extra";
293
- import { logger as logger2 } from "rslog";
294
- import semver2 from "semver";
295
- var { readFileSync } = fse3;
296
- var COMMIT_MESSAGE_RE = /^(revert|fix|feat|docs|perf|test|types|style|build|chore|release|refactor|merge|wip)(\(.+\))?!?: (.|\n)+/;
297
- var ERROR_MESSAGE = "Commit message invalid.";
298
- var WARNING_MESSAGE = `The rules for commit messages are as follows
284
+ //#endregion
285
+ //#region src/commitLint.ts
286
+ const { readFileSync } = fse;
287
+ const COMMIT_MESSAGE_RE = /^(revert|fix|feat|docs|perf|test|types|style|build|chore|release|refactor|merge|wip)(\(.+\))?!?: (.|\n)+/;
288
+ const ERROR_MESSAGE = "Commit message invalid.";
289
+ const WARNING_MESSAGE = `\
290
+ The rules for commit messages are as follows
299
291
 
300
292
  Example:
301
293
 
@@ -325,40 +317,27 @@ Allowed types:
325
317
  - wip
326
318
 
327
319
  Commit message reference: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y
328
- \u53C2\u8003\u962E\u4E00\u5CF0Commit message\u7F16\u5199\u6307\u5357: https://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html`;
320
+ 参考阮一峰Commit message编写指南: https://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html`;
329
321
  function isVersionCommitMessage(message) {
330
- return message.startsWith("v") && semver2.valid(message.slice(1));
322
+ return Boolean(message.startsWith("v") && semver.valid(message.slice(1)));
331
323
  }
332
324
  function getCommitMessage(commitMessagePath) {
333
- return readFileSync(commitMessagePath, "utf-8").trim();
325
+ return readFileSync(commitMessagePath, "utf-8").trim();
334
326
  }
335
327
  function commitLint(options) {
336
- const {
337
- commitMessagePath,
338
- commitMessageRe = COMMIT_MESSAGE_RE,
339
- errorMessage = ERROR_MESSAGE,
340
- warningMessage = WARNING_MESSAGE
341
- } = options;
342
- if (!commitMessagePath) {
343
- logger2.error("commitMessagePath is required");
344
- process.exit(1);
345
- }
346
- const commitMessage = getCommitMessage(commitMessagePath);
347
- const isValidCommitMessage = new RegExp(commitMessageRe).test(commitMessage);
348
- if (!isVersionCommitMessage(commitMessage) && !isValidCommitMessage) {
349
- logger2.error(errorMessage);
350
- logger2.warn(warningMessage);
351
- process.exit(1);
352
- }
328
+ const { commitMessagePath, commitMessageRe = COMMIT_MESSAGE_RE, errorMessage = ERROR_MESSAGE, warningMessage = WARNING_MESSAGE } = options;
329
+ if (!commitMessagePath) {
330
+ logger.error("commitMessagePath is required");
331
+ process.exit(1);
332
+ }
333
+ const commitMessage = getCommitMessage(commitMessagePath);
334
+ const isValidCommitMessage = new RegExp(commitMessageRe).test(commitMessage);
335
+ if (!isVersionCommitMessage(commitMessage) && !isValidCommitMessage) {
336
+ logger.error(errorMessage);
337
+ logger.warn(warningMessage);
338
+ process.exit(1);
339
+ }
353
340
  }
354
- export {
355
- COMMIT_MESSAGE_RE,
356
- changelog,
357
- commitLint,
358
- getCommitMessage,
359
- isSameVersion,
360
- isVersionCommitMessage,
361
- publish,
362
- release,
363
- updateVersion
364
- };
341
+
342
+ //#endregion
343
+ export { COMMIT_MESSAGE_RE, changelog, commitLint, getAllPackageJsons, getCommitMessage, isSameVersion, isVersionCommitMessage, publish, release, updateVersion };