@4s1/conventional-commit-creator 3.9.0-rc.0 → 3.9.0-rc.1

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
@@ -3,6 +3,7 @@ import { Git } from "./git.js";
3
3
  import { loadConfig } from "./config.js";
4
4
  import { AppError } from "./app-error.js";
5
5
  import { askForBody, askForConfirmation, askForDescription, askForIssue, askForScope, askForType, } from "./questions.js";
6
+ import { splitText } from "./utils.js";
6
7
  async function main() {
7
8
  try {
8
9
  const git = new Git();
@@ -20,7 +21,7 @@ async function main() {
20
21
  type: (await askForType()).trim(),
21
22
  scope: (await askForScope()).trim(),
22
23
  description: (await askForDescription()).trim(),
23
- body: (await askForBody()).trim(),
24
+ body: splitText((await askForBody()).trim(), 100),
24
25
  issue: (await askForIssue()).trim(),
25
26
  };
26
27
  const msg = await createMsg(answers, template);
@@ -61,13 +62,7 @@ function getMatchingTemplate(config, remoteOriginUrl) {
61
62
  return template2;
62
63
  }
63
64
  async function createMsg(answers, template) {
64
- const body = answers.body
65
- ? answers.body
66
- .split("\\n")
67
- .map((x) => x.trim())
68
- .join("\n")
69
- .trim()
70
- : "";
65
+ const body = answers.body.join("\n");
71
66
  let msg = template.pattern;
72
67
  if (answers.type) {
73
68
  const typeText = `${template.pre_type ?? ""}${answers.type}${template.post_type ?? ""}`;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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"]}
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\";\nimport { splitText } from \"./utils.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: splitText((await askForBody()).trim(), 100),\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.join(\"\\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"]}
@@ -2,7 +2,7 @@ export interface AnswersType {
2
2
  type: string;
3
3
  scope: string;
4
4
  description: string;
5
- body: string;
5
+ body: string[];
6
6
  issue: string;
7
7
  }
8
8
  export declare function askForType(): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CA8D5C;AAED,wBAAgB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAW7C;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAanD;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAI5C;AAED,wBAAgB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAY7C;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAKrD"}
1
+ {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../src/questions.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CA8D5C;AAED,wBAAgB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAW7C;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAanD;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAI5C;AAED,wBAAgB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAY7C;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAKrD"}
@@ -1 +1 @@
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"]}
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"]}
@@ -0,0 +1,2 @@
1
+ export declare function splitText(text: string, lineLength: number): string[];
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBpE"}
package/dist/utils.js ADDED
@@ -0,0 +1,21 @@
1
+ export function splitText(text, lineLength) {
2
+ const result = [];
3
+ let remainingText = text.trim();
4
+ while (remainingText.length > lineLength) {
5
+ const rawPart = remainingText.substring(0, lineLength);
6
+ const lastSpaceIndex = rawPart.lastIndexOf(" ");
7
+ let part = "";
8
+ if (lastSpaceIndex >= 0) {
9
+ part = remainingText.substring(0, lastSpaceIndex);
10
+ }
11
+ else {
12
+ part = remainingText.substring(0, lineLength);
13
+ }
14
+ result.push(part.trim());
15
+ remainingText = remainingText.slice(part.length).trim();
16
+ }
17
+ result.push(remainingText);
18
+ return result;
19
+ }
20
+ splitText("Hello https://www.example.com World", 10);
21
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,UAAkB;IACxD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAEhC,OAAO,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAEhD,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC","sourcesContent":["export function splitText(text: string, lineLength: number): string[] {\n const result: string[] = [];\n let remainingText = text.trim();\n\n while (remainingText.length > lineLength) {\n const rawPart = remainingText.substring(0, lineLength);\n const lastSpaceIndex = rawPart.lastIndexOf(\" \");\n\n let part = \"\";\n\n if (lastSpaceIndex >= 0) {\n part = remainingText.substring(0, lastSpaceIndex);\n } else {\n part = remainingText.substring(0, lineLength);\n }\n result.push(part.trim());\n remainingText = remainingText.slice(part.length).trim();\n }\n result.push(remainingText);\n\n return result;\n}\n\nsplitText(\"Hello https://www.example.com World\", 10);\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@4s1/conventional-commit-creator",
3
- "version": "3.9.0-rc.0",
3
+ "version": "3.9.0-rc.1",
4
4
  "description": "Conventional Commit Creator",
5
5
  "keywords": [
6
6
  "conventional commit",
@@ -38,6 +38,7 @@
38
38
  "@types/node": "20.11.19",
39
39
  "@types/prompts": "2.4.9",
40
40
  "eslint": "8.56.0",
41
+ "glob": "10.3.10",
41
42
  "prettier": "3.2.5",
42
43
  "tsx": "4.7.1",
43
44
  "typescript": "5.3.3"
@@ -53,7 +54,7 @@
53
54
  "lint": "eslint --ext .ts src/ && prettier --check .",
54
55
  "start": "node dist/index.js",
55
56
  "start:dev": "tsx src/index.ts",
56
- "test": "echo no tests",
57
+ "test": "glob -c \"node --test --import tsx/esm\" \"./src/**/*.spec.ts\"",
57
58
  "test:watch": "pnpm run test --watch",
58
59
  "preversion": "pnpm run lbt",
59
60
  "postversion": "git push && git push --follow-tags"