1 | <!doctype html>
|
2 |
|
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 |
|
14 | article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block;}[hidden],template{display:none;}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;}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 |
|
16 | html {
|
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 |
|
40 | a, a:visited {
|
41 | color: #4183c4;
|
42 | text-decoration: none;
|
43 | }
|
44 |
|
45 | a:hover {
|
46 | text-decoration: underline;
|
47 | }
|
48 |
|
49 | p, 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 |
|
64 | h1 {
|
65 | font-size: 2.5em;
|
66 | color: #000;
|
67 | border-bottom: 1px solid #ddd;
|
68 | }
|
69 |
|
70 | h2 {
|
71 | font-size: 2em;
|
72 | border-bottom: 1px solid #eee;
|
73 | color: #000;
|
74 | }
|
75 |
|
76 | img {
|
77 | max-width: 100%;
|
78 | }
|
79 |
|
80 | hr {
|
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 |
|
88 | table {
|
89 | border-collapse: collapse;
|
90 | border-spacing: 0;
|
91 | }
|
92 |
|
93 | tr: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 |
|
102 | td, th {
|
103 | border: 1px solid #ccc;
|
104 | padding: 6px 13px;
|
105 | }
|
106 |
|
107 | th {
|
108 | font-weight: bold;
|
109 | }
|
110 |
|
111 | blockquote {
|
112 | border-left: 4px solid #ddd;
|
113 | padding: 0 15px;
|
114 | color: #777;
|
115 | }
|
116 |
|
117 | blockquote > :last-child, blockquote > :first-child {
|
118 | margin-bottom: 0px;
|
119 | }
|
120 |
|
121 | pre, 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 |
|
132 | pre > code {
|
133 | white-space: pre;
|
134 | }
|
135 |
|
136 | pre {
|
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 |
|
145 | pre 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">"through2-map"</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'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">/<.*?>/g</span><span class="p">,</span> <span class="s2">""</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">"\n\n"</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">"\n\n"</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'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 |