@4s1/conventional-commit-creator 3.7.0 → 3.9.0-rc.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/config.js.map +1 -1
- package/dist/git.js.map +1 -1
- package/dist/index.js +20 -19
- package/dist/index.js.map +1 -1
- package/dist/questions.js.map +1 -1
- package/package.json +13 -14
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AA8B7B,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,kDAAkD,CAAC;IAErF,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AA8B7B,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,kDAAkD,CAAC;IAErF,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAe;YACzB,OAAO,EAAE,4DAA4D;YACrE,OAAO,EAAE,CAAC;YACV,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,IAAI;oBACX,OAAO,EAAE,2CAA2C;oBAEpD,QAAQ,EAAE,EAAE;oBACZ,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,GAAG;oBACd,UAAU,EAAE,GAAG;oBACf,eAAe,EAAE,EAAE;oBACnB,gBAAgB,EAAE,EAAE;oBACpB,QAAQ,EAAE,MAAM;oBAChB,SAAS,EAAE,EAAE;oBAEb,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,EAAE;oBACd,WAAW,EAAE,EAAE;oBACf,UAAU,EAAE,EAAE;oBACd,WAAW,EAAE,EAAE;iBAChB;aACF;SACF,CAAC;QACF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC","sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport interface ConfigTemplateType {\n name: string;\n regex: string;\n pattern: string;\n\n pre_type?: string;\n post_type?: string;\n pre_scope?: string;\n post_scope?: string;\n pre_description?: string;\n post_description?: string;\n pre_body?: string;\n post_body?: string;\n\n pre_issue?: string;\n post_issue?: string;\n pre_issue2?: string;\n post_issue2?: string;\n pre_issue3?: string;\n post_issue3?: string;\n}\n\nexport interface ConfigType {\n $schema: \"https://www.4s1.de/conventional-commit-creator/schema.json\";\n version: number;\n templates: ConfigTemplateType[];\n}\n\nexport function loadConfig(): ConfigType {\n const configFile = `${os.homedir()}/.config/conventional-commit-creator/config.json`;\n\n if (fs.existsSync(configFile)) {\n const config = fs.readFileSync(configFile, { encoding: \"utf-8\" });\n return JSON.parse(config);\n } else {\n const config: ConfigType = {\n $schema: \"https://www.4s1.de/conventional-commit-creator/schema.json\",\n version: 1,\n templates: [\n {\n name: \"Default\",\n regex: \".*\",\n pattern: \"{type}{scope}: {description}{issue}{body}\",\n\n pre_type: \"\",\n post_type: \"\",\n pre_scope: \"(\",\n post_scope: \")\",\n pre_description: \"\",\n post_description: \"\",\n pre_body: \"\\n\\n\",\n post_body: \"\",\n\n pre_issue: \" (#\",\n post_issue: \")\",\n pre_issue2: \"\",\n post_issue2: \"\",\n pre_issue3: \"\",\n post_issue3: \"\",\n },\n ],\n };\n fs.mkdirSync(path.dirname(configFile), { recursive: true });\n fs.writeFileSync(configFile, JSON.stringify(config, null, 2), { encoding: \"utf-8\" });\n return config;\n }\n}\n"]}
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,OAAO,GAAG;IACP,KAAK,CAAC,2BAA2B;QACtC,IAAI;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,OAAO,GAAG;IACP,KAAK,CAAC,2BAA2B;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;YACzE,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;YACjE,OAAO,MAAM,KAAK,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,qBAAqB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW;QAC7B,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,GAAW;QAC/B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAEO,OAAO,CAAC,GAAW;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAyB,EAAE,MAAc,EAAE,EAAE;gBACtD,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import type { ExecException } from \"node:child_process\";\nimport { exec } from \"node:child_process\";\n\nexport class Git {\n public async isCurrentDirUnderGitControl(): Promise<boolean> {\n try {\n const result = await this.execute(\"git rev-parse --is-inside-work-tree\");\n return result.trim() === \"true\";\n } catch (err) {\n console.error(err);\n return false;\n }\n }\n\n public async haveStagedChanges(): Promise<boolean> {\n try {\n const staged = await this.execute(\"git diff --cached | head -5\");\n return staged !== \"\";\n } catch (err) {\n console.error(err);\n console.log(\"return false\");\n return false;\n }\n }\n\n public async getGitRemoteOriginUrl(): Promise<string> {\n return this.execute(\"git remote get-url --push origin\");\n }\n\n public async commit(msg: string): Promise<void> {\n console.info(\"committing ...\");\n try {\n await this.execute(`git commit -m \"${this.encodeMessage(msg)}\"`);\n } catch (err) {\n console.error(err);\n process.exit(1);\n }\n }\n\n private encodeMessage(msg: string): string {\n return msg.replaceAll('\"', '\\\\\"');\n }\n\n private execute(cmd: string): Promise<string> {\n return new Promise((resolve, reject) => {\n exec(cmd, (err: ExecException | null, stdout: string) => {\n if (err) {\n reject(err);\n return;\n }\n resolve(stdout);\n });\n });\n }\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -17,11 +17,11 @@ async function main() {
|
|
|
17
17
|
const template = getMatchingTemplate(config, remoteOriginUrl);
|
|
18
18
|
console.info(`Using template "${template.name}"\n`);
|
|
19
19
|
const answers = {
|
|
20
|
-
type: await askForType(),
|
|
21
|
-
scope: await askForScope(),
|
|
22
|
-
description: await askForDescription(),
|
|
23
|
-
body: await askForBody(),
|
|
24
|
-
issue: await askForIssue(),
|
|
20
|
+
type: (await askForType()).trim(),
|
|
21
|
+
scope: (await askForScope()).trim(),
|
|
22
|
+
description: (await askForDescription()).trim(),
|
|
23
|
+
body: (await askForBody()).trim(),
|
|
24
|
+
issue: (await askForIssue()).trim(),
|
|
25
25
|
};
|
|
26
26
|
const msg = await createMsg(answers, template);
|
|
27
27
|
console.info(`${"-".repeat(42)}\n${msg}\n${"-".repeat(42)}`);
|
|
@@ -33,6 +33,11 @@ async function main() {
|
|
|
33
33
|
catch (err) {
|
|
34
34
|
if (err instanceof AppError) {
|
|
35
35
|
console.error(err.message);
|
|
36
|
+
process.exit(100);
|
|
37
|
+
}
|
|
38
|
+
else if (err instanceof Error &&
|
|
39
|
+
err.message.startsWith("User force closed the prompt with")) {
|
|
40
|
+
// Abort exception of @inquirer
|
|
36
41
|
process.exit(0);
|
|
37
42
|
}
|
|
38
43
|
else {
|
|
@@ -56,8 +61,6 @@ function getMatchingTemplate(config, remoteOriginUrl) {
|
|
|
56
61
|
return template2;
|
|
57
62
|
}
|
|
58
63
|
async function createMsg(answers, template) {
|
|
59
|
-
const type = answers.type ? answers.type.trim() : "";
|
|
60
|
-
const scope = answers.scope ? answers.scope.trim() : "";
|
|
61
64
|
const body = answers.body
|
|
62
65
|
? answers.body
|
|
63
66
|
.split("\\n")
|
|
@@ -65,25 +68,23 @@ async function createMsg(answers, template) {
|
|
|
65
68
|
.join("\n")
|
|
66
69
|
.trim()
|
|
67
70
|
: "";
|
|
68
|
-
const description = answers.description ? answers.description.trim() : "";
|
|
69
|
-
const issue = answers.issue ? answers.issue.trim() : "";
|
|
70
71
|
let msg = template.pattern;
|
|
71
|
-
if (type) {
|
|
72
|
-
const typeText = `${template.pre_type ?? ""}${type}${template.post_type ?? ""}`;
|
|
72
|
+
if (answers.type) {
|
|
73
|
+
const typeText = `${template.pre_type ?? ""}${answers.type}${template.post_type ?? ""}`;
|
|
73
74
|
msg = msg.replace("{type}", typeText);
|
|
74
75
|
}
|
|
75
76
|
else {
|
|
76
77
|
msg = msg.replace("{type}", "");
|
|
77
78
|
}
|
|
78
|
-
if (scope) {
|
|
79
|
-
const scopeText = `${template.pre_scope ?? ""}${scope}${template.post_scope ?? ""}`;
|
|
79
|
+
if (answers.scope) {
|
|
80
|
+
const scopeText = `${template.pre_scope ?? ""}${answers.scope}${template.post_scope ?? ""}`;
|
|
80
81
|
msg = msg.replace("{scope}", scopeText);
|
|
81
82
|
}
|
|
82
83
|
else {
|
|
83
84
|
msg = msg.replace("{scope}", "");
|
|
84
85
|
}
|
|
85
|
-
if (description) {
|
|
86
|
-
const descriptionText = `${template.pre_description ?? ""}${description}${template.post_description ?? ""}`;
|
|
86
|
+
if (answers.description) {
|
|
87
|
+
const descriptionText = `${template.pre_description ?? ""}${answers.description}${template.post_description ?? ""}`;
|
|
87
88
|
msg = msg.replace("{description}", descriptionText);
|
|
88
89
|
}
|
|
89
90
|
else {
|
|
@@ -96,12 +97,12 @@ async function createMsg(answers, template) {
|
|
|
96
97
|
else {
|
|
97
98
|
msg = msg.replace("{body}", "");
|
|
98
99
|
}
|
|
99
|
-
if (issue) {
|
|
100
|
-
const issueText = `${template.pre_issue ?? ""}${issue}${template.post_issue ?? ""}`;
|
|
100
|
+
if (answers.issue) {
|
|
101
|
+
const issueText = `${template.pre_issue ?? ""}${answers.issue}${template.post_issue ?? ""}`;
|
|
101
102
|
msg = msg.replace("{issue}", issueText);
|
|
102
|
-
const issue2Text = `${template.pre_issue2 ?? ""}${issue}${template.post_issue2 ?? ""}`;
|
|
103
|
+
const issue2Text = `${template.pre_issue2 ?? ""}${answers.issue}${template.post_issue2 ?? ""}`;
|
|
103
104
|
msg = msg.replace("{issue2}", issue2Text);
|
|
104
|
-
const issue3Text = `${template.pre_issue3 ?? ""}${issue}${template.post_issue3 ?? ""}`;
|
|
105
|
+
const issue3Text = `${template.pre_issue3 ?? ""}${answers.issue}${template.post_issue3 ?? ""}`;
|
|
105
106
|
msg = msg.replace("{issue3}", issue3Text);
|
|
106
107
|
}
|
|
107
108
|
else {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,UAAU,GACX,MAAM,gBAAgB,CAAC;AAGxB,KAAK,UAAU,IAAI;IACjB,IAAI;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport { Git } from \"./git.js\";\nimport { loadConfig, type ConfigType } from \"./config.js\";\nimport type { ConfigTemplateType } from \"./config.js\";\nimport { AppError } from \"./app-error.js\";\nimport {\n askForBody,\n askForConfirmation,\n askForDescription,\n askForIssue,\n askForScope,\n askForType,\n} from \"./questions.js\";\nimport type { AnswersType } from \"./questions.js\";\n\nasync function main(): Promise<void> {\n try {\n const git = new Git();\n\n if (!(await git.isCurrentDirUnderGitControl())) {\n throw new AppError(\"Current directory is not a git repository.\");\n }\n\n if (!(await git.haveStagedChanges())) {\n throw new AppError(\"Nothing to commit\");\n }\n\n const config = loadConfig();\n const remoteOriginUrl = (await git.getGitRemoteOriginUrl()).trim();\n const template = getMatchingTemplate(config, remoteOriginUrl);\n console.info(`Using template \"${template.name}\"\\n`);\n\n const answers: AnswersType = {\n type: (await askForType()).trim(),\n scope: (await askForScope()).trim(),\n description: (await askForDescription()).trim(),\n body: (await askForBody()).trim(),\n issue: (await askForIssue()).trim(),\n };\n\n const msg = await createMsg(answers, template);\n console.info(`${\"-\".repeat(42)}\\n${msg}\\n${\"-\".repeat(42)}`);\n if (await askForConfirmation()) {\n await git.commit(msg);\n console.info(\"done\");\n }\n } catch (err) {\n if (err instanceof AppError) {\n console.error(err.message);\n process.exit(100);\n } else if (\n err instanceof Error &&\n err.message.startsWith(\"User force closed the prompt with\")\n ) {\n // Abort exception of @inquirer\n process.exit(0);\n } else {\n console.error(err);\n process.exit(1);\n }\n }\n}\n\nfunction getMatchingTemplate(config: ConfigType, remoteOriginUrl: string): ConfigTemplateType {\n // ToDo: rename var\n let template2: ConfigTemplateType | undefined;\n\n for (const template of config.templates) {\n const regEx = new RegExp(template.regex);\n if (regEx.test(remoteOriginUrl)) {\n template2 = template;\n }\n }\n\n if (!template2) {\n throw new AppError(`No matching template found for \"${remoteOriginUrl}\"`);\n }\n\n return template2;\n}\n\nasync function createMsg(answers: AnswersType, template: ConfigTemplateType): Promise<string> {\n const body = answers.body\n ? answers.body\n .split(\"\\\\n\")\n .map((x) => x.trim())\n .join(\"\\n\")\n .trim()\n : \"\";\n\n let msg = template.pattern;\n\n if (answers.type) {\n const typeText = `${template.pre_type ?? \"\"}${answers.type}${template.post_type ?? \"\"}`;\n msg = msg.replace(\"{type}\", typeText);\n } else {\n msg = msg.replace(\"{type}\", \"\");\n }\n\n if (answers.scope) {\n const scopeText = `${template.pre_scope ?? \"\"}${answers.scope}${template.post_scope ?? \"\"}`;\n msg = msg.replace(\"{scope}\", scopeText);\n } else {\n msg = msg.replace(\"{scope}\", \"\");\n }\n\n if (answers.description) {\n const descriptionText = `${template.pre_description ?? \"\"}${answers.description}${\n template.post_description ?? \"\"\n }`;\n msg = msg.replace(\"{description}\", descriptionText);\n } else {\n msg = msg.replace(\"{description}\", \"\");\n }\n\n if (body) {\n const bodyText = `${template.pre_body ?? \"\"}${body}${template.post_body ?? \"\"}`;\n msg = msg.replace(\"{body}\", bodyText);\n } else {\n msg = msg.replace(\"{body}\", \"\");\n }\n\n if (answers.issue) {\n const issueText = `${template.pre_issue ?? \"\"}${answers.issue}${template.post_issue ?? \"\"}`;\n msg = msg.replace(\"{issue}\", issueText);\n const issue2Text = `${template.pre_issue2 ?? \"\"}${answers.issue}${template.post_issue2 ?? \"\"}`;\n msg = msg.replace(\"{issue2}\", issue2Text);\n const issue3Text = `${template.pre_issue3 ?? \"\"}${answers.issue}${template.post_issue3 ?? \"\"}`;\n msg = msg.replace(\"{issue3}\", issue3Text);\n } else {\n msg = msg.replace(\"{issue}\", \"\");\n msg = msg.replace(\"{issue2}\", \"\");\n msg = msg.replace(\"{issue3}\", \"\");\n }\n\n return msg;\n}\n\nmain().catch(console.error);\n"]}
|
package/dist/questions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questions.js","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,OAAO,MAAM,mBAAmB,CAAC;AAUxC,MAAM,UAAU,UAAU;IACxB,OAAO,MAAM,CAAC;QACZ,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,UAAU;aACxB;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,eAAe;aAC7B;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,2DAA2D;aACzE;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,yCAAyC;aACvD;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,4BAA4B;aAC1C;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE,mEAAmE;aACjF;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,yBAAyB;aACvC;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE,mDAAmD;aACjE;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE,8DAA8D;aAC5E;YACD;gBACE,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,IAAI;gBACX,WAAW,EAAE,qDAAqD;aACnE;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,2BAA2B;aACzC;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,KAAK,CAAC;QACX,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,CAAC,KAAa,EAAoB,EAAE;YAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"questions.js","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"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","sourcesContent":["import select from \"@inquirer/select\";\nimport input from \"@inquirer/input\";\nimport confirm from \"@inquirer/confirm\";\n\nexport interface AnswersType {\n type: string;\n scope: string;\n description: string;\n body: string;\n issue: string;\n}\n\nexport function askForType(): Promise<string> {\n return select({\n message: \"type?\",\n pageSize: 99,\n choices: [\n {\n name: \"fix\",\n value: \"fix\",\n description: \"A bugfix\",\n },\n {\n name: \"feat\",\n value: \"feat\",\n description: \"A new feature\",\n },\n {\n name: \"refactor\",\n value: \"refactor\",\n description: \"A code change that neither fixes a bug nor adds a feature\",\n },\n {\n name: \"perf\",\n value: \"perf\",\n description: \"A code change that improves performance\",\n },\n {\n name: \"docs\",\n value: \"docs\",\n description: \"Documentation only changes\",\n },\n {\n name: \"style\",\n value: \"style\",\n description: \"Code style (semicolon, indentation, white-space, formatting, ...)\",\n },\n {\n name: \"test\",\n value: \"test\",\n description: \"add/change/delete tests\",\n },\n {\n name: \"chore\",\n value: \"chore\",\n description: \"Other changes that don't modify src or test files\",\n },\n {\n name: \"build\",\n value: \"build\",\n description: \"build system (npm, git, VSCode, tsconfig, angular.json, ...)\",\n },\n {\n name: \"ci\",\n value: \"ci\",\n description: \"CI configuration (GitHub, GitLab, RenovateBot, ...)\",\n },\n {\n name: \"revert\",\n value: \"revert\",\n description: \"Reverts a previous commit\",\n },\n ],\n });\n}\n\nexport function askForScope(): Promise<string> {\n return input({\n message: \"scope?\",\n validate: (value: string): string | boolean => {\n if (value.length > 20) {\n return `Your text is ${value.length - 20} char(s) too long.`;\n } else {\n return true;\n }\n },\n });\n}\n\nexport function askForDescription(): Promise<string> {\n return input({\n message: \"description?\",\n validate: (value: string): string | boolean => {\n if (value.length > 70) {\n return `Your text is ${value.length - 70} char(s) too long.`;\n } else if (value.length < 3) {\n return `Your text is ${3 - value.length} char(s) too short.`;\n } else {\n return true;\n }\n },\n });\n}\n\nexport function askForBody(): Promise<string> {\n return input({\n message: \"body?\",\n });\n}\n\nexport function askForIssue(): Promise<string> {\n return input({\n message: \"issue?\",\n validate: (value: string): string | boolean => {\n const regularExpression = /^\\d+$/;\n if (value.length > 0 && !regularExpression.test(value)) {\n return \"Your issue is not a number.\";\n } else {\n return true;\n }\n },\n });\n}\n\nexport function askForConfirmation(): Promise<boolean> {\n return confirm({\n message: \"Is this okay?\",\n default: true,\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@4s1/conventional-commit-creator",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.9.0-rc.0",
|
|
4
4
|
"description": "Conventional Commit Creator",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"conventional commit",
|
|
@@ -28,19 +28,19 @@
|
|
|
28
28
|
],
|
|
29
29
|
"prettier": "@4s1/eslint-config",
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@inquirer/confirm": "
|
|
32
|
-
"@inquirer/input": "
|
|
33
|
-
"@inquirer/select": "
|
|
31
|
+
"@inquirer/confirm": "3.0.0",
|
|
32
|
+
"@inquirer/input": "2.0.0",
|
|
33
|
+
"@inquirer/select": "2.0.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@4s1/eslint-config": "7.
|
|
37
|
-
"@4s1/ts-config": "
|
|
38
|
-
"@types/node": "
|
|
39
|
-
"@types/prompts": "2.4.
|
|
40
|
-
"eslint": "8.
|
|
41
|
-
"prettier": "3.
|
|
42
|
-
"
|
|
43
|
-
"typescript": "5.
|
|
36
|
+
"@4s1/eslint-config": "7.4.0",
|
|
37
|
+
"@4s1/ts-config": "7.0.0",
|
|
38
|
+
"@types/node": "20.11.19",
|
|
39
|
+
"@types/prompts": "2.4.9",
|
|
40
|
+
"eslint": "8.56.0",
|
|
41
|
+
"prettier": "3.2.5",
|
|
42
|
+
"tsx": "4.7.1",
|
|
43
|
+
"typescript": "5.3.3"
|
|
44
44
|
},
|
|
45
45
|
"publishConfig": {
|
|
46
46
|
"access": "public"
|
|
@@ -52,9 +52,8 @@
|
|
|
52
52
|
"lbt": "pnpm run lint && pnpm run build && pnpm run test",
|
|
53
53
|
"lint": "eslint --ext .ts src/ && prettier --check .",
|
|
54
54
|
"start": "node dist/index.js",
|
|
55
|
-
"start:dev": "
|
|
55
|
+
"start:dev": "tsx src/index.ts",
|
|
56
56
|
"test": "echo no tests",
|
|
57
|
-
"test:cov": "pnpm run test --coverage",
|
|
58
57
|
"test:watch": "pnpm run test --watch",
|
|
59
58
|
"preversion": "pnpm run lbt",
|
|
60
59
|
"postversion": "git push && git push --follow-tags"
|