summaryrefslogtreecommitdiff
path: root/_doc
diff options
context:
space:
mode:
authorShulhan <m.shulhan@gmail.com>2020-06-05 00:08:10 +0700
committerShulhan <m.shulhan@gmail.com>2020-06-05 00:08:10 +0700
commit1ebe011ad0a068eac79b460e9f050fb690d8ae4e (patch)
treed3bcc30fcb1977ccc57d5d6722d1b244a1bc7280 /_doc
parent47ade84e63eb2fd00c1454107d237ab0b7336af5 (diff)
downloadpakakeh.go-0.16.0.tar.xz
Release share v0.16.0 (2020-06-05)v0.16.0
=== Breaking changes * dns: refactoring loading hosts and master files Instead of as methods in Server, we detach the LoadHostDir and LostMasterDir into functions that return list of filename and their content. * dns: disable serving DoH and DoT if port is not set (0) Previously, if HTTPPort or TLSPort is not set (0) we set it to default value and keep serving the DNS over HTTP and TLS. Sometimes, user may want to serve DNS over UDP only. This changes disable serving DNS over HTTP (DoH) and TLS (DoT) if port is not set, or 0. * email: rename ParseAddress function to ParseMailboxes * http: add parameter "insecure" when creating new client * ini: fix inconsistencies between empty string and boolean true In Git specification, an empty variable is equal to boolean true. This cause inconsistency between empty string and boolean true. * memfs: simplify the API, add directory parameter to New This changes add parameter directory to be mounted in New(), so user did not need to call Mount manually This cause the Mount method and its sibling, Unmount and IsMounted become unneeded, so we remove them. === Bug fixes * api/telegram/bot: fix request parameter on GetMyCommands === New features * bytes: add function MergeSpaces The function MergeSpaces will convert sequences of white space into single space ' '. * email: add methods to unmarshal/marshal Mailbox from/to JSON * email: add function to parse single mailbox * email: add function to create multipart text and HTML message * http: support CORS with white list of origin and headers * ini: add method UnsetAll to remove all variables in section and/or subsection that match with the key * ini: add method to Unmarshal ini values to struct * os/exec: new package to simplify the standard "os/exec" New extension to standard package is function ParseCommandArgs() that receive input as string and return itas command and list of arguments. Unlike strings.Fields() which only separated the field by space, ParseCommandArgs can detect possible single, double, or back quotes. Another extension is Run() function that accept the string command to be executed and their standard output and error. * sql: add method to migrate database schema The Migrate method migrate the database using list of SQL files inside a directory. Each SQL file in directory will be executed in alphabetical order based on the last state. The state of migration will be saved in table "_migration" with the SQL file name that has been executed and the timestamp. === Enhancements * api/telegram/bot: delete webhook upon setting new webhook * dns: do not load hidden hosts and master file Previously, the LoadHostDir and LoadMasterDir load all files inside the directory without checking if its hidden (starting with dot) or not. This changes make the hidden file not loaded so one can disable it temporarily by prefixing it with dot. * ini: make the add method append the variable after existing same key * memfs: make the Node Readdir works when calling from generated Go code Previously, the Go generated code from call to GoGenerate() set only mapping of path to node. Calling Readdir() using http.File using root, err := mfs.Open("/") fis, err := root.Readdir(0) will return nil on fis. This changes add all child nodes to generated node. * websocket: allow "https" scheme on Client's Endpoint
Diffstat (limited to '_doc')
-rw-r--r--_doc/CHANGELOG.html409
-rw-r--r--_doc/index.html8
2 files changed, 330 insertions, 87 deletions
diff --git a/_doc/CHANGELOG.html b/_doc/CHANGELOG.html
index c0cfb213..fc90c858 100644
--- a/_doc/CHANGELOG.html
+++ b/_doc/CHANGELOG.html
@@ -235,15 +235,15 @@ dd {
<div id="toc" class="toc">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
-<li><a href="#_share_v0_15_0_2020_05_04">share v0.15.0 (2020-05-04)</a>
+<li><a href="#_share_v0_16_0_2020_06_05">share v0.16.0 (2020-06-05)</a>
<ul class="sectlevel2">
<li><a href="#_breaking_changes">Breaking changes</a></li>
+<li><a href="#_bug_fixes">Bug fixes</a></li>
<li><a href="#_new_features">New features</a></li>
<li><a href="#_enhancements">Enhancements</a></li>
-<li><a href="#_bug_fixes">Bug fixes</a></li>
</ul>
</li>
-<li><a href="#_share_v0_14_0_2020_04_03">share v0.14.0 (2020-04-03)</a>
+<li><a href="#_share_v0_15_0_2020_05_04">share v0.15.0 (2020-05-04)</a>
<ul class="sectlevel2">
<li><a href="#_breaking_changes_2">Breaking changes</a></li>
<li><a href="#_new_features_2">New features</a></li>
@@ -251,23 +251,23 @@ dd {
<li><a href="#_bug_fixes_2">Bug fixes</a></li>
</ul>
</li>
-<li><a href="#_share_v0_13_0_2020_03_11">share v0.13.0 (2020-03-11)</a>
+<li><a href="#_share_v0_14_0_2020_04_03">share v0.14.0 (2020-04-03)</a>
<ul class="sectlevel2">
<li><a href="#_breaking_changes_3">Breaking changes</a></li>
<li><a href="#_new_features_3">New features</a></li>
<li><a href="#_enhancements_3">Enhancements</a></li>
-<li><a href="#_bug_fixes_3">Bug Fixes</a></li>
+<li><a href="#_bug_fixes_3">Bug fixes</a></li>
</ul>
</li>
-<li><a href="#_share_v0_12_0_2020_02_13">share v0.12.0 (2020-02-13)</a>
+<li><a href="#_share_v0_13_0_2020_03_11">share v0.13.0 (2020-03-11)</a>
<ul class="sectlevel2">
<li><a href="#_breaking_changes_4">Breaking changes</a></li>
<li><a href="#_new_features_4">New features</a></li>
<li><a href="#_enhancements_4">Enhancements</a></li>
-<li><a href="#_bug_fixes_4">Bug fixes</a></li>
+<li><a href="#_bug_fixes_4">Bug Fixes</a></li>
</ul>
</li>
-<li><a href="#_share_v0_11_0_2019_12_26">share v0.11.0 (2019-12-26)</a>
+<li><a href="#_share_v0_12_0_2020_02_13">share v0.12.0 (2020-02-13)</a>
<ul class="sectlevel2">
<li><a href="#_breaking_changes_5">Breaking changes</a></li>
<li><a href="#_new_features_5">New features</a></li>
@@ -275,91 +275,99 @@ dd {
<li><a href="#_bug_fixes_5">Bug fixes</a></li>
</ul>
</li>
-<li><a href="#_share_v0_10_2_2019_12_07">share v0.10.2 (2019-12-07)</a>
+<li><a href="#_share_v0_11_0_2019_12_26">share v0.11.0 (2019-12-26)</a>
<ul class="sectlevel2">
-<li><a href="#_bug_fixes_6">Bug Fixes</a></li>
+<li><a href="#_breaking_changes_6">Breaking changes</a></li>
+<li><a href="#_new_features_6">New features</a></li>
+<li><a href="#_enhancements_6">Enhancements</a></li>
+<li><a href="#_bug_fixes_6">Bug fixes</a></li>
</ul>
</li>
-<li><a href="#_share_v0_10_1_2019_12_05">share v0.10.1 (2019-12-05)</a>
+<li><a href="#_share_v0_10_2_2019_12_07">share v0.10.2 (2019-12-07)</a>
<ul class="sectlevel2">
<li><a href="#_bug_fixes_7">Bug Fixes</a></li>
-<li><a href="#_enhancements_6">Enhancements</a></li>
</ul>
</li>
-<li><a href="#_share_v0_10_0_2019_11_05">share v0.10.0 (2019-11-05)</a>
+<li><a href="#_share_v0_10_1_2019_12_05">share v0.10.1 (2019-12-05)</a>
<ul class="sectlevel2">
-<li><a href="#_new_features_6">New Features</a></li>
-<li><a href="#_breaking_changes_6">Breaking Changes</a></li>
-<li><a href="#_enhancements_7">Enhancements</a></li>
<li><a href="#_bug_fixes_8">Bug Fixes</a></li>
+<li><a href="#_enhancements_7">Enhancements</a></li>
</ul>
</li>
-<li><a href="#_share_v0_9_0_2019_10_08">share v0.9.0 (2019-10-08)</a>
+<li><a href="#_share_v0_10_0_2019_11_05">share v0.10.0 (2019-11-05)</a>
<ul class="sectlevel2">
<li><a href="#_new_features_7">New Features</a></li>
<li><a href="#_breaking_changes_7">Breaking Changes</a></li>
-<li><a href="#_bug_fixes_9">Bug Fixes</a></li>
<li><a href="#_enhancements_8">Enhancements</a></li>
+<li><a href="#_bug_fixes_9">Bug Fixes</a></li>
</ul>
</li>
-<li><a href="#_share_v0_8_2_2019_09_05">share v0.8.2 (2019-09-05)</a>
+<li><a href="#_share_v0_9_0_2019_10_08">share v0.9.0 (2019-10-08)</a>
<ul class="sectlevel2">
+<li><a href="#_new_features_8">New Features</a></li>
+<li><a href="#_breaking_changes_8">Breaking Changes</a></li>
+<li><a href="#_bug_fixes_10">Bug Fixes</a></li>
<li><a href="#_enhancements_9">Enhancements</a></li>
</ul>
</li>
-<li><a href="#_share_v0_8_1_2019_08_05">share v0.8.1 (2019-08-05)</a>
+<li><a href="#_share_v0_8_2_2019_09_05">share v0.8.2 (2019-09-05)</a>
<ul class="sectlevel2">
<li><a href="#_enhancements_10">Enhancements</a></li>
</ul>
</li>
-<li><a href="#_share_v0_8_0_2019_07_09">share v0.8.0 (2019-07-09)</a>
+<li><a href="#_share_v0_8_1_2019_08_05">share v0.8.1 (2019-08-05)</a>
<ul class="sectlevel2">
-<li><a href="#_breaking_changes_8">Breaking changes</a></li>
-<li><a href="#_new_features_8">New Features</a></li>
<li><a href="#_enhancements_11">Enhancements</a></li>
</ul>
</li>
-<li><a href="#_share_v0_7_0_2019_06_14">share v0.7.0 (2019-06-14)</a>
+<li><a href="#_share_v0_8_0_2019_07_09">share v0.8.0 (2019-07-09)</a>
<ul class="sectlevel2">
-<li><a href="#_breaking_changes_9">Breaking Changes</a></li>
+<li><a href="#_breaking_changes_9">Breaking changes</a></li>
<li><a href="#_new_features_9">New Features</a></li>
<li><a href="#_enhancements_12">Enhancements</a></li>
-<li><a href="#_bug_fixes_10">Bug Fixes</a></li>
</ul>
</li>
-<li><a href="#_share_v0_6_1_2019_05_11">share v0.6.1 (2019-05-11)</a></li>
-<li><a href="#_share_v0_6_0_2019_05_07">share v0.6.0 (2019-05-07)</a>
+<li><a href="#_share_v0_7_0_2019_06_14">share v0.7.0 (2019-06-14)</a>
<ul class="sectlevel2">
<li><a href="#_breaking_changes_10">Breaking Changes</a></li>
<li><a href="#_new_features_10">New Features</a></li>
+<li><a href="#_enhancements_13">Enhancements</a></li>
<li><a href="#_bug_fixes_11">Bug Fixes</a></li>
-<li><a href="#_documentation">Documentation</a></li>
</ul>
</li>
-<li><a href="#_share_v0_5_0_2019_04_02">share v0.5.0 (2019-04-02)</a>
+<li><a href="#_share_v0_6_1_2019_05_11">share v0.6.1 (2019-05-11)</a></li>
+<li><a href="#_share_v0_6_0_2019_05_07">share v0.6.0 (2019-05-07)</a>
<ul class="sectlevel2">
+<li><a href="#_breaking_changes_11">Breaking Changes</a></li>
<li><a href="#_new_features_11">New Features</a></li>
-<li><a href="#_enhancements_13">Enhancements</a></li>
+<li><a href="#_bug_fixes_12">Bug Fixes</a></li>
+<li><a href="#_documentation">Documentation</a></li>
</ul>
</li>
-<li><a href="#_share_v0_4_0_2019_03_01">share v0.4.0 (2019-03-01)</a>
+<li><a href="#_share_v0_5_0_2019_04_02">share v0.5.0 (2019-04-02)</a>
<ul class="sectlevel2">
<li><a href="#_new_features_12">New Features</a></li>
<li><a href="#_enhancements_14">Enhancements</a></li>
+</ul>
+</li>
+<li><a href="#_share_v0_4_0_2019_03_01">share v0.4.0 (2019-03-01)</a>
+<ul class="sectlevel2">
+<li><a href="#_new_features_13">New Features</a></li>
+<li><a href="#_enhancements_15">Enhancements</a></li>
<li><a href="#_fixes">Fixes</a></li>
</ul>
</li>
<li><a href="#_share_v0_3_0_2019_02_01">share v0.3.0 (2019-02-01)</a>
<ul class="sectlevel2">
<li><a href="#_features_changes">Features Changes</a></li>
-<li><a href="#_enhancements_15">Enhancements</a></li>
+<li><a href="#_enhancements_16">Enhancements</a></li>
<li><a href="#_fixes_2">Fixes</a></li>
</ul>
</li>
<li><a href="#_share_v0_2_0_2019_01_02">share v0.2.0 (2019-01-02)</a>
<ul class="sectlevel2">
-<li><a href="#_new_features_13">New Features</a></li>
-<li><a href="#_enhancements_16">Enhancements</a></li>
+<li><a href="#_new_features_14">New Features</a></li>
+<li><a href="#_enhancements_17">Enhancements</a></li>
</ul>
</li>
<li><a href="#_share_v0_1_0_2018_11_29">share v0.1.0 (2018-11-29)</a></li>
@@ -373,13 +381,244 @@ dd {
</div>
</div>
<div class="sect1">
-<h2 id="_share_v0_15_0_2020_05_04">share v0.15.0 (2020-05-04)</h2>
+<h2 id="_share_v0_16_0_2020_06_05">share v0.16.0 (2020-06-05)</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_breaking_changes">Breaking changes</h3>
<div class="ulist">
<ul>
<li>
+<p>dns: refactoring loading hosts and master files</p>
+</li>
+</ul>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>Instead of as methods in Server, we detach the LoadHostDir and
+LostMasterDir into functions that return list of filename and their
+content.</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>dns: disable serving DoH and DoT if port is not set (0)</p>
+</li>
+</ul>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>Previously, if HTTPPort or TLSPort is not set (0) we set it to default
+value and keep serving the DNS over HTTP and TLS. Sometimes, user may
+want to serve DNS over UDP only.</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>This changes disable serving DNS over HTTP (DoH) and TLS (DoT) if port
+is not set, or 0.</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>email: rename ParseAddress function to ParseMailboxes</p>
+</li>
+<li>
+<p>http: add parameter &#34;insecure&#34; when creating new client</p>
+</li>
+<li>
+<p>ini: fix inconsistencies between empty string and boolean true</p>
+</li>
+</ul>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>In Git specification, an empty variable is equal to boolean true.
+This cause inconsistency between empty string and boolean true.</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>memfs: simplify the API, add directory parameter to New</p>
+</li>
+</ul>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>This changes add parameter directory to be mounted in New(), so user
+did not need to call Mount manually</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>This cause the Mount method and its sibling, Unmount and IsMounted
+become unneeded, so we remove them.</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_bug_fixes">Bug fixes</h3>
+<div class="ulist">
+<ul>
+<li>
+<p>api/telegram/bot: fix request parameter on GetMyCommands</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_new_features">New features</h3>
+<div class="ulist">
+<ul>
+<li>
+<p>bytes: add function MergeSpaces</p>
+</li>
+</ul>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>The function MergeSpaces will convert sequences of white space into
+single space ' '.</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>email: add methods to unmarshal/marshal Mailbox from/to JSON</p>
+</li>
+<li>
+<p>email: add function to parse single mailbox</p>
+</li>
+<li>
+<p>email: add function to create multipart text and HTML message</p>
+</li>
+<li>
+<p>http: support CORS with white list of origin and headers</p>
+</li>
+<li>
+<p>ini: add method UnsetAll to remove all variables in section and/or
+ subsection that match with the key</p>
+</li>
+<li>
+<p>ini: add method to Unmarshal ini values to struct</p>
+</li>
+<li>
+<p>os/exec: new package to simplify the standard &#34;os/exec&#34;</p>
+</li>
+</ul>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>New extension to standard package is function ParseCommandArgs() that
+receive input as string and return itas command and list of arguments.
+Unlike strings.Fields() which only separated the field by space,
+ParseCommandArgs can detect possible single, double, or back quotes.</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>Another extension is Run() function that accept the string command
+to be executed and their standard output and error.</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>sql: add method to migrate database schema</p>
+</li>
+</ul>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>The Migrate method migrate the database using list of SQL files inside
+a directory.
+Each SQL file in directory will be executed in alphabetical order based on
+the last state.</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>The state of migration will be saved in table "_migration" with the SQL
+file name that has been executed and the timestamp.</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_enhancements">Enhancements</h3>
+<div class="ulist">
+<ul>
+<li>
+<p>api/telegram/bot: delete webhook upon setting new webhook</p>
+</li>
+<li>
+<p>dns: do not load hidden hosts and master file</p>
+</li>
+</ul>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>Previously, the LoadHostDir and LoadMasterDir load all files inside
+the directory without checking if its hidden (starting with dot) or not.</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>This changes make the hidden file not loaded so one can disable it
+temporarily by prefixing it with dot.</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>ini: make the add method append the variable after existing same key</p>
+</li>
+<li>
+<p>memfs: make the Node Readdir works when calling from generated Go code</p>
+</li>
+</ul>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>Previously, the Go generated code from call to GoGenerate() set only
+mapping of path to node. Calling Readdir() using http.File using</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>root, err := mfs.Open("/")
+fis, err := root.Readdir(0)</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>will return nil on fis.</pre>
+</div>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>This changes add all child nodes to generated node.</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>websocket: allow &#34;https&#34; scheme on Client&#39;s Endpoint</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_share_v0_15_0_2020_05_04">share v0.15.0 (2020-05-04)</h2>
+<div class="sectionbody">
+<div class="sect2">
+<h3 id="_breaking_changes_2">Breaking changes</h3>
+<div class="ulist">
+<ul>
+<li>
<p>big: check for zero length slice of byte or string on toRat</p>
</li>
<li>
@@ -389,7 +628,7 @@ dd {
</div>
</div>
<div class="sect2">
-<h3 id="_new_features">New features</h3>
+<h3 id="_new_features_2">New features</h3>
<div class="ulist">
<ul>
<li>
@@ -423,7 +662,7 @@ to iterate each node in the tree from top to bottom.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements">Enhancements</h3>
+<h3 id="_enhancements_2">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -445,7 +684,7 @@ to iterate each node in the tree from top to bottom.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_bug_fixes">Bug fixes</h3>
+<h3 id="_bug_fixes_2">Bug fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -460,7 +699,7 @@ to iterate each node in the tree from top to bottom.</pre>
<h2 id="_share_v0_14_0_2020_04_03">share v0.14.0 (2020-04-03)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_breaking_changes_2">Breaking changes</h3>
+<h3 id="_breaking_changes_3">Breaking changes</h3>
<div class="ulist">
<ul>
<li>
@@ -485,7 +724,7 @@ will be handled automatically based on value on field Method.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_new_features_2">New features</h3>
+<h3 id="_new_features_3">New features</h3>
<div class="ulist">
<ul>
<li>
@@ -537,7 +776,7 @@ single space ' '.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_2">Enhancements</h3>
+<h3 id="_enhancements_3">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -579,7 +818,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_bug_fixes_2">Bug fixes</h3>
+<h3 id="_bug_fixes_3">Bug fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -594,13 +833,13 @@ word.</pre>
<h2 id="_share_v0_13_0_2020_03_11">share v0.13.0 (2020-03-11)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_breaking_changes_3">Breaking changes</h3>
+<h3 id="_breaking_changes_4">Breaking changes</h3>
<div class="paragraph">
<p>Set the minimum Go version to 1.13.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_new_features_3">New features</h3>
+<h3 id="_new_features_4">New features</h3>
<div class="ulist">
<ul>
<li>
@@ -613,7 +852,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_3">Enhancements</h3>
+<h3 id="_enhancements_4">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -635,7 +874,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_bug_fixes_3">Bug Fixes</h3>
+<h3 id="_bug_fixes_4">Bug Fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -653,7 +892,7 @@ word.</pre>
<h2 id="_share_v0_12_0_2020_02_13">share v0.12.0 (2020-02-13)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_breaking_changes_4">Breaking changes</h3>
+<h3 id="_breaking_changes_5">Breaking changes</h3>
<div class="ulist">
<ul>
<li>
@@ -672,7 +911,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_new_features_4">New features</h3>
+<h3 id="_new_features_5">New features</h3>
<div class="ulist">
<ul>
<li>
@@ -688,7 +927,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_4">Enhancements</h3>
+<h3 id="_enhancements_5">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -698,7 +937,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_bug_fixes_4">Bug fixes</h3>
+<h3 id="_bug_fixes_5">Bug fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -713,7 +952,7 @@ word.</pre>
<h2 id="_share_v0_11_0_2019_12_26">share v0.11.0 (2019-12-26)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_breaking_changes_5">Breaking changes</h3>
+<h3 id="_breaking_changes_6">Breaking changes</h3>
<div class="ulist">
<ul>
<li>
@@ -723,7 +962,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_new_features_5">New features</h3>
+<h3 id="_new_features_6">New features</h3>
<div class="ulist">
<ul>
<li>
@@ -742,7 +981,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_5">Enhancements</h3>
+<h3 id="_enhancements_6">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -758,7 +997,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_bug_fixes_5">Bug fixes</h3>
+<h3 id="_bug_fixes_6">Bug fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -773,7 +1012,7 @@ word.</pre>
<h2 id="_share_v0_10_2_2019_12_07">share v0.10.2 (2019-12-07)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_bug_fixes_6">Bug Fixes</h3>
+<h3 id="_bug_fixes_7">Bug Fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -791,7 +1030,7 @@ word.</pre>
<h2 id="_share_v0_10_1_2019_12_05">share v0.10.1 (2019-12-05)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_bug_fixes_7">Bug Fixes</h3>
+<h3 id="_bug_fixes_8">Bug Fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -840,7 +1079,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_6">Enhancements</h3>
+<h3 id="_enhancements_7">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -885,7 +1124,7 @@ word.</pre>
<h2 id="_share_v0_10_0_2019_11_05">share v0.10.0 (2019-11-05)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_new_features_6">New Features</h3>
+<h3 id="_new_features_7">New Features</h3>
<div class="ulist">
<ul>
<li>
@@ -901,7 +1140,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_breaking_changes_6">Breaking Changes</h3>
+<h3 id="_breaking_changes_7">Breaking Changes</h3>
<div class="ulist">
<ul>
<li>
@@ -914,7 +1153,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_7">Enhancements</h3>
+<h3 id="_enhancements_8">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -936,7 +1175,7 @@ word.</pre>
</div>
</div>
<div class="sect2">
-<h3 id="_bug_fixes_8">Bug Fixes</h3>
+<h3 id="_bug_fixes_9">Bug Fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -966,7 +1205,7 @@ word.</pre>
<h2 id="_share_v0_9_0_2019_10_08">share v0.9.0 (2019-10-08)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_new_features_7">New Features</h3>
+<h3 id="_new_features_8">New Features</h3>
<div class="ulist">
<ul>
<li>
@@ -1009,7 +1248,7 @@ http.Request.Form using Get method.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_breaking_changes_7">Breaking Changes</h3>
+<h3 id="_breaking_changes_8">Breaking Changes</h3>
<div class="ulist">
<ul>
<li>
@@ -1036,7 +1275,7 @@ to be an empty string, so &#34;var&#34; value is equal to &#34;&#34;.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_bug_fixes_9">Bug Fixes</h3>
+<h3 id="_bug_fixes_10">Bug Fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -1053,7 +1292,7 @@ no DNS queries forwarded to parent server.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_8">Enhancements</h3>
+<h3 id="_enhancements_9">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -1078,7 +1317,7 @@ to Search the content.</p>
<h2 id="_share_v0_8_2_2019_09_05">share v0.8.2 (2019-09-05)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_enhancements_9">Enhancements</h3>
+<h3 id="_enhancements_10">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -1128,7 +1367,7 @@ in directory.</p>
<h2 id="_share_v0_8_1_2019_08_05">share v0.8.1 (2019-08-05)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_enhancements_10">Enhancements</h3>
+<h3 id="_enhancements_11">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -1166,7 +1405,7 @@ file, we want that file to be excluded from .go static source.</p>
<h2 id="_share_v0_8_0_2019_07_09">share v0.8.0 (2019-07-09)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_breaking_changes_8">Breaking changes</h3>
+<h3 id="_breaking_changes_9">Breaking changes</h3>
<div class="ulist">
<ul>
<li>
@@ -1177,7 +1416,7 @@ file, we want that file to be excluded from .go static source.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_new_features_8">New Features</h3>
+<h3 id="_new_features_9">New Features</h3>
<div class="ulist">
<ul>
<li>
@@ -1187,7 +1426,7 @@ file, we want that file to be excluded from .go static source.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_11">Enhancements</h3>
+<h3 id="_enhancements_12">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -1212,7 +1451,7 @@ file, we want that file to be excluded from .go static source.</p>
simple API.</p>
</div>
<div class="sect2">
-<h3 id="_breaking_changes_9">Breaking Changes</h3>
+<h3 id="_breaking_changes_10">Breaking Changes</h3>
<div class="ulist">
<ul>
<li>
@@ -1225,7 +1464,7 @@ simple API.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_new_features_9">New Features</h3>
+<h3 id="_new_features_10">New Features</h3>
<div class="ulist">
<ul>
<li>
@@ -1238,7 +1477,7 @@ simple API.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_12">Enhancements</h3>
+<h3 id="_enhancements_13">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -1296,7 +1535,7 @@ simple API.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_bug_fixes_10">Bug Fixes</h3>
+<h3 id="_bug_fixes_11">Bug Fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -1350,7 +1589,7 @@ Most notable changes are adding caches and query forwarding (recursion), and
removing the server handler.</p>
</div>
<div class="sect2">
-<h3 id="_breaking_changes_10">Breaking Changes</h3>
+<h3 id="_breaking_changes_11">Breaking Changes</h3>
<div class="ulist">
<ul>
<li>
@@ -1424,7 +1663,7 @@ removing the server handler.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_new_features_10">New Features</h3>
+<h3 id="_new_features_11">New Features</h3>
<div class="ulist">
<ul>
<li>
@@ -1494,7 +1733,7 @@ removing the server handler.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_bug_fixes_11">Bug Fixes</h3>
+<h3 id="_bug_fixes_12">Bug Fixes</h3>
<div class="ulist">
<ul>
<li>
@@ -1560,7 +1799,7 @@ server and client API to make it easy and extensible. The websocket is now
100% pass the autobahn testsuite (minus compression feature).</p>
</div>
<div class="sect2">
-<h3 id="_new_features_11">New Features</h3>
+<h3 id="_new_features_12">New Features</h3>
<div class="ulist">
<ul>
<li>
@@ -1579,7 +1818,7 @@ server and client API to make it easy and extensible. The websocket is now
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_13">Enhancements</h3>
+<h3 id="_enhancements_14">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -1627,7 +1866,7 @@ server and client API to make it easy and extensible. The websocket is now
<h2 id="_share_v0_4_0_2019_03_01">share v0.4.0 (2019-03-01)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_new_features_12">New Features</h3>
+<h3 id="_new_features_13">New Features</h3>
<div class="ulist">
<ul>
<li>
@@ -1644,7 +1883,7 @@ server and client API to make it easy and extensible. The websocket is now
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_14">Enhancements</h3>
+<h3 id="_enhancements_15">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -1833,7 +2072,7 @@ server and client API to make it easy and extensible. The websocket is now
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_15">Enhancements</h3>
+<h3 id="_enhancements_16">Enhancements</h3>
<div class="ulist">
<ul>
<li>
@@ -1873,7 +2112,7 @@ server and client API to make it easy and extensible. The websocket is now
<h2 id="_share_v0_2_0_2019_01_02">share v0.2.0 (2019-01-02)</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="_new_features_13">New Features</h3>
+<h3 id="_new_features_14">New Features</h3>
<div class="ulist">
<ul>
<li>
@@ -1887,7 +2126,7 @@ system and simplified routing handler.</p>
</div>
</div>
<div class="sect2">
-<h3 id="_enhancements_16">Enhancements</h3>
+<h3 id="_enhancements_17">Enhancements</h3>
<div class="paragraph">
<p>Fix warnings from linters.</p>
</div>
diff --git a/_doc/index.html b/_doc/index.html
index 5d695960..d1e926a2 100644
--- a/_doc/index.html
+++ b/_doc/index.html
@@ -451,6 +451,10 @@ written in Go.</p>
integer, float, slice of integer, and slice of floats.</p>
</li>
<li>
+<p><a href="https://pkg.go.dev/github.com/shuLhan/share/lib/os/exec"><strong>os/exec</strong></a>: Package exec wrap the standar package
+&#34;os/exec&#34; to simplify calling Run with stdout and stderr.</p>
+</li>
+<li>
<p><a href="https://pkg.go.dev/github.com/shuLhan/share/lib/parser"><strong>parser</strong></a>: Package parser provide a common text
parser, using delimiters.</p>
</li>
@@ -639,7 +643,7 @@ First, install <code>ciigo</code> command line interface,</p>
</div>
<div class="listingblock">
<div class="content">
-<pre>$ ciigo serve doc/</pre>
+<pre>$ ciigo serve _doc/</pre>
</div>
</div>
<div class="paragraph">
@@ -652,7 +656,7 @@ files.</p>
</div>
<div class="listingblock">
<div class="content">
-<pre>$ ciigo convert doc/</pre>
+<pre>$ ciigo convert _doc/</pre>
</div>
</div>
</div>