Commit 2264cfbc authored by Tony Butler's avatar Tony Butler
Browse files

Add PromiseMore; Fix ConnectEngine and CommandServer reorg; Fix link replacer...

Add PromiseMore; Fix ConnectEngine and CommandServer reorg; Fix link replacer to understand targeted links
parent 7744c3c4
......@@ -39,6 +39,7 @@ let uriMaps = {}
const localExps = {
dotSlashPath: new RegExp('^[./].*/([^/]+\\.md)$'),
noPath: new RegExp('^([^/]+\\.md)$'),
noPathHash: new RegExp('^([^/]+\\.md)(#.*)$'),
hashDash: new RegExp('^(#[a-z0-9]+-.*)$')
}
const linkfixExp = new RegExp('( href=")([^"]+)(")', 'igs')
......@@ -52,7 +53,7 @@ const linkfixExt = () => {
if (part) {
const href = Parser.htmlUnescape(part[2])
let m = false
for (const localExp of ['dotSlashPath', 'noPath', 'hashDash']) {
for (const localExp of ['dotSlashPath', 'noPath', 'noPathHash', 'hashDash']) {
m = href.match(localExps[localExp])
if (m && m[1]) {
const part1 = text.slice(0, part.index) + part[1]
......@@ -60,6 +61,14 @@ const linkfixExt = () => {
if (m[1].indexOf('#') === 0) {
const newHref = m[1].replace(/-/g, '')
text = `${part1}${newHref}${part2}`
} else if (m[2] && m[2].indexOf('#') === 0) {
for (const uri of Object.keys(converter.uriMap).sort().filter(
(v) => { return v.indexOf('/' + m[1]) > -1 })
) {
const newHref = ['/', '/'].join(converter.uriMap[uri][0])
const newHash = m[2].replace(/-/g, '')
text = `${part1}${newHref}${newHash}${part2}`
}
} else {
for (const uri of Object.keys(converter.uriMap).sort().filter(
(v) => { return v.indexOf('/' + m[1]) > -1 })
......
......@@ -17,9 +17,7 @@
"child-process": "/doc/ChildProcess.md",
"cluster": "/doc/Cluster.md",
"command": "/doc/Command.md",
"command-server": "/doc/CommandServer.md",
"connect": "/doc/Connect.md",
"connect-engine": "/doc/ConnectEngine.md",
"cron": "/doc/Cron.md",
"database": "/doc/Database.md",
"email": "/doc/Email.md",
......@@ -45,6 +43,7 @@
"path-exp": "/doc/PathExp.md",
"permission": "/doc/Permission.md",
"profiler": "/doc/Profiler.md",
"promise-more": "/doc/PromiseMore.md",
"query": "/doc/Query.md",
"query-cache": "/doc/QueryCache.md",
"router": "/doc/Router.md",
......
......@@ -24,9 +24,7 @@
<li><a href="/doc/child-process/">ChildProcess</a></li>
<li><a href="/doc/cluster/">Cluster</a></li>
<li><a href="/doc/command/">Command</a></li>
<li><a href="/doc/command-server/">CommandServer</a></li>
<li><a href="/doc/connect/">Connect</a></li>
<li><a href="/doc/connect-engine/">ConnectEngine</a></li>
<li><a href="/doc/cron/">Cron</a></li>
<li><a href="/doc/database/">Database</a></li>
<li><a href="/doc/email/">Email</a></li>
......@@ -52,6 +50,7 @@
<li><a href="/doc/path-exp/">PathExp</a></li>
<li><a href="/doc/permission/">Permission</a></li>
<li><a href="/doc/profiler/">Profiler</a></li>
<li><a href="/doc/promise-more/">PromiseMore</a></li>
<li><a href="/doc/query/">Query</a></li>
<li><a href="/doc/query-cache/">QueryCache</a></li>
<li><a href="/doc/router/">Router</a></li>
......
This diff is collapsed.
......@@ -145,7 +145,7 @@ Return {string} name of the command requested for removal.</li>
</ul>
<p>This actually uses the <code>Command</code> library to setup the new command
based on the options and is a shortcut for.</p>
<pre><code class="js language-js"><span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">CommandSerer</span>.</span></span>add<span class="hljs-constructor">Command(&#x27;<span class="hljs-params">someModule</span>&#x27;,&#x27;<span class="hljs-params">someCommand</span>&#x27;,<span class="hljs-params">new</span> Command()</span>)
<pre><code class="js language-js"><span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">CommandServer</span>.</span></span>add<span class="hljs-constructor">Command(&#x27;<span class="hljs-params">someModule</span>&#x27;,&#x27;<span class="hljs-params">someCommand</span>&#x27;,<span class="hljs-params">new</span> Command()</span>)
</code></pre>
<h3 id="commandserverruncommand">CommandServer.run(command)</h3>
<ul>
......
This diff is collapsed.
......@@ -45,7 +45,7 @@ connections <code>connect()</code> method.</li>
<p>Note: when no <code>name</code> is provided all connections will be closed.</p>
<h2 id="classdatabaseengine">Class: DatabaseEngine</h2>
<p><code>DatabaseEngine</code> extends <code>ConnectEngine</code> see
<a href="/doc/connect-engine/">ConnectEngine</a> for more engine management and more.</p>
<a href="/doc/connect/#classconnectengine">ConnectEngine</a> for engine management and more.</p>
<h3 id="databaseengineconnect">DatabaseEngine.connect()</h3>
<p>Must be extended and used to connect to underlying database.</p>
<h3 id="databaseengineclose">DatabaseEngine.close()</h3>
......
......@@ -27,6 +27,6 @@ Return {Promise} that resolves when the message is sent.</li>
<p>Note: when no <code>name</code> is provided all handlers are executed.</p>
<h2 id="classemailengine">Class: EmailEngine</h2>
<p><code>EmailEngine</code> extends <code>ConnectEngine</code> see
<a href="/doc/connect-engine/">ConnectEngine</a> for more engine management and more.</p>
<a href="/doc/connect/#classconnectengine">ConnectEngine</a> for engine management and more.</p>
<h3 id="emailenginesend">EmailEngine.send()</h3>
<p>Must be extended and used to send to underlying email system.</p>
......@@ -98,6 +98,6 @@ handler can read.</li>
</ul>
<h2 id="classeventengine">Class: EventEngine</h2>
<p><code>EventEngine</code> extends <code>ConnectEngine</code> see
<a href="/doc/connect-engine/">ConnectEngine</a> for more engine management and more.</p>
<a href="/doc/connect/#classconnectengine">ConnectEngine</a> for engine management and more.</p>
<h3 id="eventengineevent">EventEngine.event()</h3>
<p>Must be extended and used to send to underlying event system.</p>
......@@ -48,7 +48,7 @@ Return <code>{Function}</code> to be used on each request.</li>
</ul>
<h2 id="classhypertextengine">Class: HyperTextEngine</h2>
<p><code>HyperTextEngine</code> extends <code>ConnectEngine</code> see
<a href="/doc/connect-engine/">ConnectEngine</a> for more engine management and more.</p>
<a href="/doc/connect/#classconnectengine">ConnectEngine</a> for engine management and more.</p>
<h3 id="hypertextenginestart">HyperTextEngine.start()</h3>
<p>Must be extended and used to start the underlying server.</p>
<h3 id="hypertextenginestop">HyperTextEngine.stop()</h3>
......
......@@ -9,7 +9,7 @@
for system level log messages.</p>
<h2 id="classlog">Class: Log</h2>
<p><code>Log</code> extends <code>ConnectEngine</code> see
<a href="/doc/connect-engine/">ConnectEngine</a> for more engine management and more.</p>
<a href="/doc/connect/#classconnectengine">ConnectEngine</a> for engine management and more.</p>
<p>This is the log multiplexer to hold engines such as the LogEngine.</p>
<p>It only exposes ConnectEngine methods.</p>
<h2 id="classlogengine">Class: LogEngine</h2>
......@@ -160,7 +160,7 @@ multiplexer.</p>
<li>Return {string} next line of the file until EOF which returns null</li>
</ul>
<p>Example Usage</p>
<pre><code class="js language-js"><span class="hljs-keyword">const</span> fd = <span class="hljs-keyword">new</span> FileByLine(path, options)
let <span class="hljs-built_in">line</span>; <span class="hljs-keyword">const</span> lines = []
<span class="hljs-keyword">while</span> ((<span class="hljs-built_in">line</span> = fd.next())) lines.push(<span class="hljs-built_in">line</span>)
<pre><code class="js language-js"><span class="hljs-keyword">const</span> fd = <span class="hljs-keyword">new</span> <span class="hljs-built_in">FileByLine</span>(path, options)
let line; <span class="hljs-keyword">const</span> lines = []
<span class="hljs-keyword">while</span> ((line = fd.<span class="hljs-built_in">next</span>())) lines.<span class="hljs-built_in">push</span>(line)
</code></pre>
......@@ -27,6 +27,6 @@ Return {Promise} that resolves when the message is sent.</li>
<p>Note: when no <code>name</code> is provided all handlers are executed.</p>
<h2 id="classmessageengine">Class: MessageEngine</h2>
<p><code>MessageEngine</code> extends <code>ConnectEngine</code> see
<a href="/doc/connect-engine/">ConnectEngine</a> for more engine management and more.</p>
<a href="/doc/connect/#classconnectengine">ConnectEngine</a> for engine management and more.</p>
<h3 id="messageenginesend">MessageEngine.send()</h3>
<p>Must be extended and used to send to underlying message system.</p>
<h1 id="promisemore">PromiseMore</h1>
<p><em>Introduced in 4.3.0</em></p>
<blockquote>
<p>Stability: 1 - Experimental</p>
</blockquote>
<pre><code class="js language-js"><span class="hljs-keyword">const</span> PromiseMore = <span class="hljs-built_in">require</span>(<span class="hljs-string">&#x27;kado/lib/PromiseMore&#x27;</span>)
<span class="hljs-keyword">const</span> promise = PromiseMore.hoist()
promise.resolve()
</code></pre>
<p>PromiseMore provides additional promise control patterns that expand the core
JavaScript functionality.</p>
<h2 id="classpromisemore">Class: PromiseMore</h2>
<h3 id="staticpromisemorehoist">static PromiseMore.hoist()</h3>
<ul>
<li>Return {Promise} with additional properties.</li>
</ul>
<p>What makes <code>PromiseMore.hoist()</code> different from calling <code>Promise.resolve()</code> is
hoist returns an unresolved promise that can be resolved or rejected through
the promise object itself. This flattens promise creation.</p>
<p>Example: </p>
<pre><code class="js language-js"><span class="hljs-meta">&#x27;use strict&#x27;</span>
<span class="hljs-keyword">const</span> PromiseMore = <span class="hljs-built_in">require</span>(<span class="hljs-string">&#x27;./lib/PromiseMore&#x27;</span>)
<span class="hljs-keyword">const</span> https = <span class="hljs-built_in">require</span>(<span class="hljs-string">&#x27;https&#x27;</span>)
<span class="hljs-keyword">const</span> getKado = <span class="hljs-function">() =&gt;</span> {
<span class="hljs-keyword">const</span> promise = PromiseMore.hoist()
<span class="hljs-keyword">const</span> request = https.request({ <span class="hljs-attr">hostname</span>: <span class="hljs-string">&#x27;kado.org&#x27;</span>, <span class="hljs-attr">path</span>: <span class="hljs-string">&#x27;/&#x27;</span> })
<span class="hljs-keyword">let</span> buf = <span class="hljs-string">&#x27;&#x27;</span>
request.on(<span class="hljs-string">&#x27;error&#x27;</span>, promise.reject)
request.on(<span class="hljs-string">&#x27;response&#x27;</span>, <span class="hljs-function">(<span class="hljs-params">resp</span>) =&gt;</span> {
<span class="hljs-keyword">if</span> (resp.statusCode !== <span class="hljs-number">200</span>) promise.reject(<span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">&#x27;Invalid response&#x27;</span>))
resp.on(<span class="hljs-string">&#x27;data&#x27;</span>, <span class="hljs-function">(<span class="hljs-params">chunk</span>) =&gt;</span> { buf += chunk.toString(<span class="hljs-string">&#x27;utf-8&#x27;</span>) })
resp.on(<span class="hljs-string">&#x27;error&#x27;</span>, promise.reject)
resp.on(<span class="hljs-string">&#x27;close&#x27;</span>, <span class="hljs-function">() =&gt;</span> { promise.resolve(buf) })
})
request.end()
<span class="hljs-keyword">return</span> promise
}
<span class="hljs-keyword">const</span> main = <span class="hljs-keyword">async</span> () =&gt; {
<span class="hljs-keyword">const</span> kadoPage = <span class="hljs-keyword">await</span> getKado()
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">&#x27;Got Kado Page&#x27;</span>, kadoPage)
}
main()
</code></pre>
<h3 id="staticpromisemoremakecontextmethodarguments">static PromiseMore.make (context, method, arguments…)</h3>
<ul>
<li><code>context</code> {Object} <code>thisArg</code> to use when calling <code>method</code></li>
<li><code>method</code> {Function} method to be called that uses a callback as the last
argument, and triggers the callback with (err, arguments…)</li>
<li><code>arguments...</code> {Mixed} any arguments that should be passed to the <code>method</code></li>
<li>Return {Promise} resolved or rejected depending on the outcome, where all
returned arguments applied to the resolution.</li>
</ul>
<h4 id="exampleusingemailjs">Example using EmailJS</h4>
<pre><code class="js language-js"><span class="hljs-keyword">const</span> Assert = require(<span class="hljs-string">&#x27;kado/lib/Assert&#x27;</span>)
<span class="hljs-keyword">const</span> SMTPClient = require(<span class="hljs-string">&#x27;emailjs&#x27;</span>).SMTPClient
<span class="hljs-keyword">const</span> <span class="hljs-keyword">client</span> = <span class="hljs-keyword">new</span> SMTPClient({
<span class="hljs-comment">// config</span>
})
<span class="hljs-keyword">const</span> message = {
text: <span class="hljs-string">&#x27;Some message&#x27;</span>,
to: <span class="hljs-string">&#x27;hello@kado.org&#x27;</span>
<span class="hljs-comment">// more message options</span>
}
<span class="hljs-keyword">const</span> resp = await PromiseMore.make(<span class="hljs-keyword">client</span>, <span class="hljs-keyword">client</span>.send, message)
Assert.isOk(resp, <span class="hljs-string">&#x27;Invalid message&#x27;</span>)
</code></pre>
<h3 id="staticpromisemoreseriesinputcallbackoutputidx">static PromiseMore.series (input, callback, output, idx)</h3>
<ul>
<li><code>input</code> {Array} items to be processed in a series</li>
<li><code>callback</code> {Function} to be called with each item and can resolve a promise
when needed.</li>
<li><code>output</code> {Array} (internal) used to track processes results as they are
shifted from the input array.</li>
<li><code>idx</code> {Number} (internal) index used to keep track of number of processed
items.</li>
<li>Return {Promise} resolved with the <code>output</code> array when all members have been
processed.</li>
</ul>
<p>NOTICE: The context of this method will be bound to the callback which allows
for state keeping while in the loop. Pass an Object in order to have latent
lookups.</p>
<h4 id="exampleusingserieswithboundcontext">Example using series with bound Context</h4>
<pre><code class="js language-js"><span class="hljs-keyword">const</span> PromiseMore = <span class="hljs-built_in">require</span>(<span class="hljs-string">&#x27;./lib/PromiseMore&#x27;</span>)
<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">payPartial</span> (<span class="hljs-params">item, idx, ctx</span>) </span>{ ctx.amount -= item.amount }
<span class="hljs-keyword">const</span> ctx = { <span class="hljs-attr">amount</span>: <span class="hljs-number">3</span> }
<span class="hljs-keyword">const</span> items = [{ <span class="hljs-attr">amount</span>: <span class="hljs-number">1</span> }, { <span class="hljs-attr">amount</span>: <span class="hljs-number">2</span> }]
<span class="hljs-keyword">const</span> main = <span class="hljs-keyword">async</span> () =&gt; {
<span class="hljs-keyword">await</span> PromiseMore.series(items, payPartial, ctx)
<span class="hljs-built_in">console</span>.log(ctx.amount) <span class="hljs-comment">// 0</span>
}
main()
</code></pre>
<p>This is useful when it is important members of an array are
processes one after another or in a "series" to produce the proper result.</p>
<h4 id="seriesfullexample">Series Full Example</h4>
<pre><code class="js language-js"><span class="hljs-meta">&#x27;use strict&#x27;</span>
<span class="hljs-keyword">const</span> PromiseMore = <span class="hljs-built_in">require</span>(<span class="hljs-string">&#x27;./lib/PromiseMore&#x27;</span>)
<span class="hljs-keyword">const</span> makeItem = <span class="hljs-function">() =&gt;</span> { <span class="hljs-keyword">return</span> { <span class="hljs-attr">name</span>: <span class="hljs-string">&#x27;Apple&#x27;</span> } }
<span class="hljs-keyword">const</span> makePromise = <span class="hljs-function">() =&gt;</span> { <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Promise</span>(<span class="hljs-function">(<span class="hljs-params">resolve</span>) =&gt;</span> { resolve(<span class="hljs-number">1</span>) }) }
<span class="hljs-keyword">const</span> processItem = <span class="hljs-keyword">async</span> (item, index) =&gt; {
<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> makePromise() <span class="hljs-comment">// resolve some promise</span>
item.index = index + result <span class="hljs-comment">// use the result</span>
<span class="hljs-keyword">return</span> item
}
<span class="hljs-keyword">const</span> main = <span class="hljs-keyword">async</span> () =&gt; {
<span class="hljs-keyword">const</span> itemList = []
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">5</span>; i++) itemList.push(makeItem())
<span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> PromiseMore.series(itemList, processItem)
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">&#x27;Sum of Indexes&#x27;</span>, result.reduce(<span class="hljs-function">(<span class="hljs-params">i, c</span>) =&gt;</span> {
i.index = i.index + c.index
<span class="hljs-keyword">return</span> i
}).index)
}
main()
</code></pre>
<h3 id="staticpromisemorewhileconditionpromise">static PromiseMore.while (condition, promise)</h3>
<ul>
<li><code>condition</code> {Function} called before each try to run the promise, the loop
stops when this condition evaluates to <code>false</code></li>
<li><code>promise</code> {Function} function to be called that returns a promise.</li>
</ul>
<p>Example</p>
<pre><code class="js language-js"><span class="hljs-keyword">const</span> PromiseMore = <span class="hljs-built_in">require</span>(<span class="hljs-string">&#x27;kado/lib/PromiseMore&#x27;</span>)
<span class="hljs-keyword">let</span> i = <span class="hljs-number">15</span>
<span class="hljs-keyword">const</span> k = <span class="hljs-number">10</span>
<span class="hljs-keyword">const</span> condition = () =&gt; { <span class="hljs-keyword">return</span> i &gt; k }
<span class="hljs-keyword">const</span> makePromise = () =&gt; { i--; <span class="hljs-keyword">return</span> <span class="hljs-built_in">Promise</span>.resolve() }
<span class="hljs-keyword">const</span> main = <span class="hljs-keyword">async</span> () =&gt; {
<span class="hljs-keyword">await</span> PromiseMore.<span class="hljs-keyword">while</span>(condition, makePromise)
<span class="hljs-built_in">console</span>.log(`Finished i <span class="hljs-keyword">is</span> ${i}`)
}
main()
</code></pre>
......@@ -28,6 +28,6 @@ Return {Promise} that resolves when the search is complete.</li>
<p>Note: when no <code>name</code> is provided all handlers are executed.</p>
<h2 id="classsearchengine">Class: SearchEngine</h2>
<p><code>SearchEngine</code> extends <code>ConnectEngine</code> see
<a href="/doc/connect-engine/">ConnectEngine</a> for more engine management and more.</p>
<a href="/doc/connect/#classconnectengine">ConnectEngine</a> for engine management and more.</p>
<h3 id="searchenginesearch">SearchEngine.search()</h3>
<p>Must be extended and used to send to underlying search system.</p>
......@@ -20,7 +20,7 @@ management and more.</p>
</ul>
<h2 id="classviewengine">Class: ViewEngine</h2>
<p><code>ViewEngine</code> extends <code>ConnectEngine</code> see
<a href="/doc/connect-engine/">ConnectEngine</a> for more engine management and more.</p>
<a href="/doc/connect/#classconnectengine">ConnectEngine</a> for engine management and more.</p>
<h3 id="viewenginerender">ViewEngine.render()</h3>
<p>Must be extended and used to render to the underlying system.</p>
<h2 id="classviewmustache">Class: ViewMustache</h2>
......
This diff is collapsed.
......@@ -14,12 +14,8 @@ convenience and functionality to the core child_process functions.</li>
<li><a href="/doc/cluster/">Cluster</a> - Cluster library for constructing and
operating process clusters.</li>
<li><a href="/doc/command/">Command</a> - Build CLI applications with ease.</li>
<li><a href="/doc/command-server/">CommandServer</a> - Execute CLI applications like a
web server.</li>
<li><a href="/doc/connect/">Connect</a> - Framework for housing external resource
connections.</li>
<li><a href="/doc/connect-engine/">ConnectEngine</a> - Interface for creating an engine
to be used with a Connect system.</li>
<li><a href="/doc/cron/">Cron</a> - Execute functions on a schedule similar to UNIX
cron jobs.</li>
<li><a href="/doc/database/">Database</a> - Connect system made for Databases.</li>
......@@ -59,6 +55,8 @@ URIs.</li>
allow fine grained user control.</li>
<li><a href="/doc/profiler/">Profiler</a> - Track application resource usage and
timing.</li>
<li><a href="/doc/promise-more/">PromiseMore</a> - Additional promise control patterns that
expand the core JavaScript functionality.</li>
<li><a href="/doc/query/">Query</a> - Super class for constructing query builders that
are customized for a specific query language.</li>
<li><a href="/doc/query-cache/">QueryCache</a> - Query cache system for databases.</li>
......
......@@ -8,9 +8,9 @@
integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==
"@types/node@^14.14.28":
version "14.14.31"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055"
integrity sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==
version "14.14.35"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.35.tgz#42c953a4e2b18ab931f72477e7012172f4ffa313"
integrity sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==
ansi-regex@^4.1.0:
version "4.1.0"
......@@ -78,9 +78,9 @@ get-caller-file@^2.0.1:
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
highlight.js@^10.0.3:
version "10.6.0"
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.6.0.tgz#0073aa71d566906965ba6e1b7be7b2682f5e18b6"
integrity sha512-8mlRcn5vk/r4+QcqerapwBYTe+iPL5ih6xrNylxrnBdHQiijDETfXX7VIxC3UiCRiINBJfANBAsPzAvRQj8RpQ==
version "10.7.1"
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.1.tgz#a8ec4152db24ea630c90927d6cae2a45f8ecb955"
integrity sha512-S6G97tHGqJ/U8DsXcEdnACbirtbx58Bx9CzIVeYli8OuswCfYI/LsXH2EiGcoGio1KAC3x4mmUwulOllJ2ZyRA==
iconv-lite@^0.6.2:
version "0.6.2"
......@@ -95,8 +95,8 @@ is-fullwidth-code-point@^2.0.0:
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
"kado@git+https://git.nullivex.com/kado/kado.git":
version "4.3.0"
resolved "git+https://git.nullivex.com/kado/kado.git#7e2761f24df02d3bd1de5b612c648373cf8c24c2"
version "4.3.1"
resolved "git+https://git.nullivex.com/kado/kado.git#01260d7923b4727f41f78bfc521624a2f38571c4"
locate-path@^3.0.0:
version "3.0.0"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment