UNPKG

12.4 kBHTMLView Raw
1<!doctype html>
2<!-- Created with GFM2HTML: https://github.com/rvagg/gfm2html -->
3<html lang="en">
4 <head>
5 <meta charset="utf-8">
6 <meta http-equiv="X-UA-Compatible" content="IE=edge">
7 <title></title>
8 <meta name="description" content="">
9 <meta name="viewport" content="width=device-width, initial-scale=1">
10 <meta name="created-with" content="https://github.com/rvagg/gfm2html">
11
12 <style type="text/css">
13/* most of normalize.css */
14article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block;}[hidden],template{display:none;}html{font-family:sans-serif;/*1*/-ms-text-size-adjust:100%;/*2*/-webkit-text-size-adjust:100%;/*2*/}body{margin:0;}a{background:transparent;}a:focus{outline:thindotted;}a:active,a:hover{outline:0;}h1{font-size:2em;margin:0.67em0;}abbr[title]{border-bottom:1pxdotted;}b,strong{font-weight:bold;}dfn{font-style:italic;}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0;}mark{background:#ff0;color:#000;}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em;}pre{white-space:pre-wrap;}q{quotes:"\201C""\201D""\2018""\2019";}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sup{top:-0.5em;}sub{bottom:-0.25em;}img{border:0;}svg:not(:root){overflow:hidden;}table{border-collapse:collapse;border-spacing:0;}
15
16html {
17 font: 14px 'Helvetica Neue', Helvetica, arial, freesans, clean, sans-serif;
18}
19
20.container {
21 line-height: 1.6;
22 color: #333;
23 background: #eee;
24 border-radius: 3px;
25 padding: 3px;
26 width: 790px;
27 margin: 10px auto;
28}
29
30.body-content {
31 background-color: #fff;
32 border: 1px solid #CACACA;
33 padding: 30px;
34}
35
36.body-content > *:first-child {
37 margin-top: 0 !important;
38}
39
40a, a:visited {
41 color: #4183c4;
42 text-decoration: none;
43}
44
45a:hover {
46 text-decoration: underline;
47}
48
49p, blockquote, ul, ol, dl, table, pre {
50 margin: 15px 0;
51}
52
53 .markdown-body h1
54, .markdown-body h2
55, .markdown-body h3
56, .markdown-body h4
57, .markdown-body h5
58, .markdown-body h6 {
59 margin: 20px 0 10px;
60 padding: 0;
61 font-weight: bold;
62}
63
64h1 {
65 font-size: 2.5em;
66 color: #000;
67 border-bottom: 1px solid #ddd;
68}
69
70h2 {
71 font-size: 2em;
72 border-bottom: 1px solid #eee;
73 color: #000;
74}
75
76img {
77 max-width: 100%;
78}
79
80hr {
81 background: transparent url("/img/hr.png") repeat-x 0 0;
82 border: 0 none;
83 color: #ccc;
84 height: 4px;
85 padding: 0;
86}
87
88table {
89 border-collapse: collapse;
90 border-spacing: 0;
91}
92
93tr:nth-child(2n) {
94 background-color: #f8f8f8;
95}
96
97.markdown-body tr {
98 border-top: 1px solid #ccc;
99 background-color: #fff;
100}
101
102td, th {
103 border: 1px solid #ccc;
104 padding: 6px 13px;
105}
106
107th {
108 font-weight: bold;
109}
110
111blockquote {
112 border-left: 4px solid #ddd;
113 padding: 0 15px;
114 color: #777;
115}
116
117blockquote > :last-child, blockquote > :first-child {
118 margin-bottom: 0px;
119}
120
121pre, code {
122 font-size: 13px;
123 font-family: 'UbuntuMono', monospace;
124 white-space: nowrap;
125 margin: 0 2px;
126 padding: 0px 5px;
127 border: 1px solid #eaeaea;
128 background-color: #f8f8f8;
129 border-radius: 3px;
130}
131
132pre > code {
133 white-space: pre;
134}
135
136pre {
137 overflow-x: auto;
138 white-space: pre;
139 padding: 10px;
140 line-height: 150%;
141 background-color: #f8f8f8;
142 border-color: #ccc;
143}
144
145pre code, pre tt {
146 margin: 0;
147 padding: 0;
148 border: 0;
149 background-color: transparent;
150 border: none;
151}
152
153 .highlight .c
154, .highlight .cm
155, .highlight .cp
156, .highlight .c1 {
157 color:#999988;
158 font-style:italic;
159}
160
161.highlight .err {
162 color:#a61717;
163 background-color:#e3d2d2
164}
165
166 .highlight .o
167, .highlight .gs
168, .highlight .kc
169, .highlight .kd
170, .highlight .kn
171, .highlight .kp
172, .highlight .kr {
173 font-weight:bold
174}
175
176.highlight .cs {
177 color:#999999;
178 font-weight:bold;
179 font-style:italic
180}
181
182.highlight .gd {
183 color:#000000;
184 background-color:#ffdddd
185}
186
187.highlight .gd .x {
188 color:#000000;
189 background-color:#ffaaaa
190}
191
192.highlight .ge {
193 font-style:italic
194}
195
196 .highlight .gr
197, .highlight .gt {
198 color:#aa0000
199}
200
201 .highlight .gh
202, .highlight .bp {
203 color:#999999
204}
205
206.highlight .gi {
207 color:#000000;
208 background-color:#ddffdd
209}
210
211.highlight .gi .x {
212 color:#000000;
213 background-color:#aaffaa
214}
215
216.highlight .go {
217 color:#888888
218}
219
220 .highlight .gp
221, .highlight .nn {
222 color:#555555
223}
224
225
226.highlight .gu {
227 color:#800080;
228 font-weight:bold
229}
230
231
232.highlight .kt {
233 color:#445588;
234 font-weight:bold
235}
236
237 .highlight .m
238, .highlight .mf
239, .highlight .mh
240, .highlight .mi
241, .highlight .mo
242, .highlight .il {
243 color:#009999
244}
245
246 .highlight .s
247, .highlight .sb
248, .highlight .sc
249, .highlight .sd
250, .highlight .s2
251, .highlight .se
252, .highlight .sh
253, .highlight .si
254, .highlight .sx
255, .highlight .s1 {
256 color:#d14
257}
258
259.highlight .n {
260 color:#333333
261}
262
263 .highlight .na
264, .highlight .no
265, .highlight .nv
266, .highlight .vc
267, .highlight .vg
268, .highlight .vi
269, .highlight .nb {
270 color:#0086B3
271}
272
273.highlight .nc {
274 color:#445588;
275 font-weight:bold
276}
277
278.highlight .ni {
279 color:#800080
280}
281
282 .highlight .ne
283, .highlight .nf {
284 color:#990000;
285 font-weight:bold
286}
287
288.highlight .nt {
289 color:#000080
290}
291
292.highlight .ow {
293 font-weight:bold
294}
295
296.highlight .w {
297 color:#bbbbbb
298}
299
300.highlight .sr {
301 color:#009926
302}
303
304.highlight .ss {
305 color:#990073
306}
307
308.highlight .gc {
309 color:#999;
310 background-color:#EAF2F5
311}</style>
312 </head>
313 <body>
314 <div class="container">
315 <div class="body-content"><h1 id="through2-map">through2-map</h1>
316<p><a href="https://nodei.co/npm/through2-map/"><img src="https://nodei.co/npm/through2-map.png" alt="NPM"></a></p>
317<p>This is a super thin wrapper around <a href="http://npm.im/through2">through2</a> that works like <code>Array.prototype.map</code> but for streams.</p>
318<p>For when through2 is just too verbose :wink:</p>
319<p>Note you will <strong>NOT</strong> be able to skip chunks. This is intended for modification only. If you want filter the stream content, use either <code>through2</code> or <code>through2-filter</code>.</p>
320<p><strong>IMPORTANT:</strong> If you return <code>null</code> from your function, the stream will end there.</p>
321<div class="highlight"><pre><span class="kd">var</span> <span class="nx">map</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">&quot;through2-map&quot;</span><span class="p">)</span>
322
323<span class="kd">var</span> <span class="nx">truncate</span> <span class="o">=</span> <span class="nx">map</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">chunk</span><span class="p">)</span> <span class="p">{</span>
324 <span class="k">return</span> <span class="nx">chunk</span><span class="p">.</span><span class="nx">slice</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
325<span class="p">})</span>
326
327<span class="c1">// vs. with through2:</span>
328<span class="kd">var</span> <span class="nx">truncate</span> <span class="o">=</span> <span class="nx">through2</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">chunk</span><span class="p">,</span> <span class="nx">encoding</span><span class="p">,</span> <span class="nx">callback</span><span class="p">)</span> <span class="p">{</span>
329 <span class="k">this</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">chunk</span><span class="p">.</span><span class="nx">slice</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
330 <span class="k">return</span> <span class="nx">callback</span><span class="p">()</span>
331<span class="p">})</span>
332
333<span class="c1">// Then use your map:</span>
334<span class="nx">source</span><span class="p">.</span><span class="nx">pipe</span><span class="p">(</span><span class="nx">truncate</span><span class="p">).</span><span class="nx">pipe</span><span class="p">(</span><span class="nx">sink</span><span class="p">)</span>
335
336<span class="c1">// Additionally accepts `wantStrings` argument to conver buffers into strings</span>
337<span class="kd">var</span> <span class="nx">stripTags</span> <span class="o">=</span> <span class="nx">map</span><span class="p">({</span><span class="nx">wantStrings</span><span class="o">:</span> <span class="kc">true</span><span class="p">},</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">str</span><span class="p">)</span> <span class="p">{</span>
338 <span class="c1">// OMG don&#39;t actually use this</span>
339 <span class="k">return</span> <span class="nx">str</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/&lt;.*?&gt;/g</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
340<span class="p">})</span>
341
342<span class="c1">// Works like `Array.prototype.map` meaning you can specify a function that</span>
343<span class="c1">// takes up to two* arguments: fn(chunk, index)</span>
344<span class="kd">var</span> <span class="nx">spaceout</span> <span class="o">=</span> <span class="nx">map</span><span class="p">({</span><span class="nx">wantStrings</span><span class="o">:</span> <span class="kc">true</span><span class="p">},</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">chunk</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="p">{</span>
345 <span class="k">return</span> <span class="p">(</span><span class="nx">index</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="o">?</span> <span class="nx">chunk</span> <span class="o">+</span> <span class="s2">&quot;\n\n&quot;</span> <span class="o">:</span> <span class="nx">chunk</span>
346<span class="p">})</span>
347
348<span class="c1">// vs. with through2:</span>
349<span class="kd">var</span> <span class="nx">spaceout</span> <span class="o">=</span> <span class="nx">through2</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">chunk</span><span class="p">,</span> <span class="nx">encoding</span><span class="p">,</span> <span class="nx">callback</span><span class="p">)</span> <span class="p">{</span>
350 <span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">index</span> <span class="o">==</span> <span class="kc">undefined</span><span class="p">)</span> <span class="k">this</span><span class="p">.</span><span class="nx">index</span> <span class="o">=</span> <span class="mi">0</span>
351 <span class="kd">var</span> <span class="nx">buf</span> <span class="o">=</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">index</span><span class="o">++</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="o">?</span> <span class="nx">Buffer</span><span class="p">.</span><span class="nx">concat</span><span class="p">(</span><span class="nx">chunk</span><span class="p">,</span> <span class="k">new</span> <span class="nx">Buffer</span><span class="p">(</span><span class="s2">&quot;\n\n&quot;</span><span class="p">))</span> <span class="o">:</span> <span class="nx">chunk</span>
352 <span class="k">this</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">buf</span><span class="p">)</span>
353 <span class="k">return</span> <span class="nx">callback</span><span class="p">()</span>
354<span class="p">})</span>
355</pre></div>
356
357<p>*Differences from <code>Array.prototype.map</code>:</p>
358<ul>
359<li>Cannot insert <code>null</code> elements into the stream without aborting.</li>
360<li>No third <code>array</code> callback argument. That would require realizing the entire stream, which is generally counter-productive to stream operations.</li>
361<li><code>Array.prototype.map</code> doesn&#39;t modify the source Array, which is somewhat nonsensical when applied to streams.</li>
362</ul>
363<h2 id="options">Options</h2>
364<ul>
365<li>wantStrings: Automatically call chunk.toString() for the super lazy.</li>
366<li>all other through2 options</li>
367</ul>
368<h1 id="license">LICENSE</h1>
369<p>MIT</p>
370</div>
371 </div>
372 </body>
373</html>
\No newline at end of file