<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: tyankatsu</title>
    <description>The latest articles on DEV Community by tyankatsu (@tyankatsu0105).</description>
    <link>https://dev.to/tyankatsu0105</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F233078%2F1b9036e2-c21d-44f1-bc5b-e9d2d5536ce1.png</url>
      <title>DEV Community: tyankatsu</title>
      <link>https://dev.to/tyankatsu0105</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tyankatsu0105"/>
    <language>en</language>
    <item>
      <title>Let's make your own commit message template with cz-format-extension</title>
      <dc:creator>tyankatsu</dc:creator>
      <pubDate>Tue, 31 Aug 2021 12:17:51 +0000</pubDate>
      <link>https://dev.to/tyankatsu0105/let-s-make-your-own-commit-message-template-with-cz-format-extension-1j74</link>
      <guid>https://dev.to/tyankatsu0105/let-s-make-your-own-commit-message-template-with-cz-format-extension-1j74</guid>
      <description>&lt;p&gt;Almost developers will use Git when developing.&lt;br&gt;
&lt;a href="https://github.com/commitizen/cz-cli"&gt;commitizen/cz-cli&lt;/a&gt; is cool library.&lt;br&gt;
If you use that, you can make commit message of Git easily.&lt;br&gt;
And also, commitizen community and some developers provides adapter when using cz-cli.&lt;br&gt;
&lt;a href="https://github.com/commitizen/cz-cli#adapters"&gt;In this section&lt;/a&gt;, some adapters are intoduced.&lt;br&gt;
&lt;a href="https://github.com/tyankatsu0105/cz-format-extension"&gt;cz-format-extension&lt;/a&gt; is one of adapters that being introduced in cz-cli README.&lt;/p&gt;
&lt;h2&gt;
  
  
  What can I do?
&lt;/h2&gt;

&lt;p&gt;When you use cz-format-extension, you can custom format of cz-cli.&lt;br&gt;
Like this;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;============================&lt;/span&gt;
Current Branch is master
&lt;span class="o"&gt;============================&lt;/span&gt;

? input1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
? input2: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Error: Can&lt;span class="s1"&gt;'t commit to master branch
    at Object.commitMessage (/path/project/.czferc.js:33:13)
    at /path/node_modules/cz-format-extension/dist/engine.js:19:42
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/**
 * @typedef {{input1: string;input2: string;}} Answers
 */&lt;/span&gt;

&lt;span class="cm"&gt;/** @type import('cz-format-extension').Config&amp;lt;Answers&amp;gt; */&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;questions&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;inquirer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gitInfo&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ui&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;inquirer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BottomBar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`============================`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Current Branch is &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;gitInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;branch&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`============================`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;``&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;commitMessage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gitInfo&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;unhandledRejection&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gitInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;branch&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;master&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Can't commit to master branch&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You know, cz-format-extension is very highly expandable. You can use API of &lt;a href="https://github.com/SBoudrias/Inquirer.js"&gt;Inquirer.js&lt;/a&gt;, &lt;a href="https://github.com/rwjblue/git-repo-info"&gt;git-repo-info&lt;/a&gt;, and &lt;a href="https://github.com/steveukx/git-js"&gt;git-js&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I use TypeScript for config file?
&lt;/h2&gt;

&lt;p&gt;No. However cz-format-extension provides type &lt;a href="https://github.com/tyankatsu0105/cz-format-extension/blob/6683a101ed2643a9f976e2b01ef99f6b53ed05b0/src/types.ts#L18-L33"&gt;like this&lt;/a&gt;. cz-format-extension is created with TypeScript(I love TS!!!!).&lt;br&gt;
If you use &lt;code&gt;Config&lt;/code&gt; type inside JSDocs &lt;code&gt;@types&lt;/code&gt;, you can get power of TS &lt;a href="https://github.com/tyankatsu0105/cz-format-extension/blob/6683a101ed2643a9f976e2b01ef99f6b53ed05b0/example/conventional-commits/.czferc.js#L7-L9"&gt;like this&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  OK. So what difference feature cz-customizable and this?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/leoforfree/cz-customizable"&gt;cz-customizable&lt;/a&gt;&lt;br&gt;
is great library. However that provides a few option.&lt;br&gt;
This point is what I started create cz-format-extension.&lt;br&gt;
cz-format-extension has high expandable, and also dependencies keeps latest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sumarry
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;cz-format-extension is introduced at cz-cli's README&lt;/li&gt;
&lt;li&gt;cz-format-extension has high expandable&lt;/li&gt;
&lt;li&gt;cz-format-extension provide type for config&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for reading this article.&lt;br&gt;
Please send a star for cz-format-extension.&lt;/p&gt;

</description>
      <category>node</category>
      <category>git</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
