alicezetion 1.8.6 → 1.8.7
Sign up to get free protection for your applications and to get access to all the features.
- package/.cache/nix/binary-cache-v6.sqlite +0 -0
- package/.cache/nix/binary-cache-v6.sqlite-journal +0 -0
- package/.cache/replit/modules/nodejs-20:v25-20240206-fdbd396.res +1 -0
- package/.cache/replit/modules/replit:v4-20240206-fdbd396.res +1 -0
- package/.cache/replit/modules.stamp +0 -1
- package/.cache/replit/nix/env.json +1 -1
- package/.cache/typescript/5.3/node_modules/.package-lock.json +137 -0
- package/.cache/typescript/5.3/node_modules/@types/bluebird/LICENSE +21 -0
- package/.cache/typescript/5.3/node_modules/@types/bluebird/README.md +15 -0
- package/.cache/typescript/5.3/node_modules/@types/bluebird/index.d.ts +1365 -0
- package/.cache/typescript/5.3/node_modules/@types/bluebird/package.json +25 -0
- package/.cache/typescript/5.3/node_modules/@types/caseless/LICENSE +21 -0
- package/.cache/typescript/5.3/node_modules/@types/caseless/README.md +48 -0
- package/.cache/typescript/5.3/node_modules/@types/caseless/index.d.ts +29 -0
- package/.cache/typescript/5.3/node_modules/@types/caseless/package.json +35 -0
- package/.cache/typescript/5.3/node_modules/@types/cheerio/LICENSE +21 -0
- package/.cache/typescript/5.3/node_modules/@types/cheerio/README.md +15 -0
- package/.cache/typescript/5.3/node_modules/@types/cheerio/index.d.ts +318 -0
- package/.cache/typescript/5.3/node_modules/@types/cheerio/package.json +71 -0
- package/.cache/typescript/5.3/node_modules/@types/node/LICENSE +21 -0
- package/.cache/typescript/5.3/node_modules/@types/node/README.md +15 -0
- package/.cache/typescript/5.3/node_modules/@types/node/assert/strict.d.ts +8 -0
- package/.cache/typescript/5.3/node_modules/@types/node/assert.d.ts +996 -0
- package/.cache/typescript/5.3/node_modules/@types/node/async_hooks.d.ts +539 -0
- package/.cache/typescript/5.3/node_modules/@types/node/buffer.d.ts +2362 -0
- package/.cache/typescript/5.3/node_modules/@types/node/child_process.d.ts +1540 -0
- package/.cache/typescript/5.3/node_modules/@types/node/cluster.d.ts +432 -0
- package/.cache/typescript/5.3/node_modules/@types/node/console.d.ts +415 -0
- package/.cache/typescript/5.3/node_modules/@types/node/constants.d.ts +19 -0
- package/.cache/typescript/5.3/node_modules/@types/node/crypto.d.ts +4487 -0
- package/.cache/typescript/5.3/node_modules/@types/node/dgram.d.ts +596 -0
- package/.cache/typescript/5.3/node_modules/@types/node/diagnostics_channel.d.ts +545 -0
- package/.cache/typescript/5.3/node_modules/@types/node/dns/promises.d.ts +425 -0
- package/.cache/typescript/5.3/node_modules/@types/node/dns.d.ts +809 -0
- package/.cache/typescript/5.3/node_modules/@types/node/dom-events.d.ts +122 -0
- package/.cache/typescript/5.3/node_modules/@types/node/domain.d.ts +170 -0
- package/.cache/typescript/5.3/node_modules/@types/node/events.d.ts +879 -0
- package/.cache/typescript/5.3/node_modules/@types/node/fs/promises.d.ts +1239 -0
- package/.cache/typescript/5.3/node_modules/@types/node/fs.d.ts +4311 -0
- package/.cache/typescript/5.3/node_modules/@types/node/globals.d.ts +411 -0
- package/.cache/typescript/5.3/node_modules/@types/node/globals.global.d.ts +1 -0
- package/.cache/typescript/5.3/node_modules/@types/node/http.d.ts +1887 -0
- package/.cache/typescript/5.3/node_modules/@types/node/http2.d.ts +2382 -0
- package/.cache/typescript/5.3/node_modules/@types/node/https.d.ts +550 -0
- package/.cache/typescript/5.3/node_modules/@types/node/index.d.ts +88 -0
- package/.cache/typescript/5.3/node_modules/@types/node/inspector.d.ts +2747 -0
- package/.cache/typescript/5.3/node_modules/@types/node/module.d.ts +315 -0
- package/.cache/typescript/5.3/node_modules/@types/node/net.d.ts +949 -0
- package/.cache/typescript/5.3/node_modules/@types/node/os.d.ts +478 -0
- package/.cache/typescript/5.3/node_modules/@types/node/package.json +229 -0
- package/.cache/typescript/5.3/node_modules/@types/node/path.d.ts +191 -0
- package/.cache/typescript/5.3/node_modules/@types/node/perf_hooks.d.ts +645 -0
- package/.cache/typescript/5.3/node_modules/@types/node/process.d.ts +1561 -0
- package/.cache/typescript/5.3/node_modules/@types/node/punycode.d.ts +117 -0
- package/.cache/typescript/5.3/node_modules/@types/node/querystring.d.ts +141 -0
- package/.cache/typescript/5.3/node_modules/@types/node/readline/promises.d.ts +150 -0
- package/.cache/typescript/5.3/node_modules/@types/node/readline.d.ts +539 -0
- package/.cache/typescript/5.3/node_modules/@types/node/repl.d.ts +430 -0
- package/.cache/typescript/5.3/node_modules/@types/node/stream/consumers.d.ts +12 -0
- package/.cache/typescript/5.3/node_modules/@types/node/stream/promises.d.ts +83 -0
- package/.cache/typescript/5.3/node_modules/@types/node/stream/web.d.ts +366 -0
- package/.cache/typescript/5.3/node_modules/@types/node/stream.d.ts +1701 -0
- package/.cache/typescript/5.3/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/.cache/typescript/5.3/node_modules/@types/node/test.d.ts +1465 -0
- package/.cache/typescript/5.3/node_modules/@types/node/timers/promises.d.ts +93 -0
- package/.cache/typescript/5.3/node_modules/@types/node/timers.d.ts +240 -0
- package/.cache/typescript/5.3/node_modules/@types/node/tls.d.ts +1210 -0
- package/.cache/typescript/5.3/node_modules/@types/node/trace_events.d.ts +182 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/assert/strict.d.ts +8 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/assert.d.ts +996 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/async_hooks.d.ts +539 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/buffer.d.ts +2362 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/child_process.d.ts +1540 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/cluster.d.ts +432 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/console.d.ts +415 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/constants.d.ts +19 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/crypto.d.ts +4487 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/dgram.d.ts +596 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/diagnostics_channel.d.ts +545 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/dns/promises.d.ts +425 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/dns.d.ts +809 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/dom-events.d.ts +122 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/domain.d.ts +170 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/events.d.ts +879 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/fs/promises.d.ts +1239 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/fs.d.ts +4311 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/globals.d.ts +411 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/globals.global.d.ts +1 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/http.d.ts +1887 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/http2.d.ts +2382 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/https.d.ts +550 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/index.d.ts +88 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/inspector.d.ts +2747 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/module.d.ts +315 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/net.d.ts +949 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/os.d.ts +478 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/path.d.ts +191 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/perf_hooks.d.ts +645 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/process.d.ts +1561 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/punycode.d.ts +117 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/querystring.d.ts +141 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/readline/promises.d.ts +150 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/readline.d.ts +539 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/repl.d.ts +430 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/stream/consumers.d.ts +12 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/stream/promises.d.ts +83 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/stream/web.d.ts +366 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/stream.d.ts +1701 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/string_decoder.d.ts +67 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/test.d.ts +1465 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/timers/promises.d.ts +93 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/timers.d.ts +240 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/tls.d.ts +1210 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/trace_events.d.ts +182 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/tty.d.ts +208 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/url.d.ts +927 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/util.d.ts +2183 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/v8.d.ts +635 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/vm.d.ts +903 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/wasi.d.ts +179 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/worker_threads.d.ts +691 -0
- package/.cache/typescript/5.3/node_modules/@types/node/ts4.8/zlib.d.ts +517 -0
- package/.cache/typescript/5.3/node_modules/@types/node/tty.d.ts +208 -0
- package/.cache/typescript/5.3/node_modules/@types/node/url.d.ts +927 -0
- package/.cache/typescript/5.3/node_modules/@types/node/util.d.ts +2183 -0
- package/.cache/typescript/5.3/node_modules/@types/node/v8.d.ts +635 -0
- package/.cache/typescript/5.3/node_modules/@types/node/vm.d.ts +903 -0
- package/.cache/typescript/5.3/node_modules/@types/node/wasi.d.ts +179 -0
- package/.cache/typescript/5.3/node_modules/@types/node/worker_threads.d.ts +691 -0
- package/.cache/typescript/5.3/node_modules/@types/node/zlib.d.ts +517 -0
- package/.cache/typescript/5.3/node_modules/@types/npmlog/LICENSE +21 -0
- package/.cache/typescript/5.3/node_modules/@types/npmlog/README.md +15 -0
- package/.cache/typescript/5.3/node_modules/@types/npmlog/index.d.ts +84 -0
- package/.cache/typescript/5.3/node_modules/@types/npmlog/package.json +32 -0
- package/.cache/typescript/5.3/node_modules/@types/request/LICENSE +21 -0
- package/.cache/typescript/5.3/node_modules/@types/request/README.md +15 -0
- package/.cache/typescript/5.3/node_modules/@types/request/index.d.ts +395 -0
- package/.cache/typescript/5.3/node_modules/@types/request/package.json +70 -0
- package/.cache/typescript/5.3/node_modules/@types/tough-cookie/LICENSE +21 -0
- package/.cache/typescript/5.3/node_modules/@types/tough-cookie/README.md +15 -0
- package/.cache/typescript/5.3/node_modules/@types/tough-cookie/index.d.ts +321 -0
- package/.cache/typescript/5.3/node_modules/@types/tough-cookie/package.json +35 -0
- package/.cache/typescript/5.3/node_modules/asynckit/LICENSE +21 -0
- package/.cache/typescript/5.3/node_modules/asynckit/README.md +233 -0
- package/.cache/typescript/5.3/node_modules/asynckit/bench.js +76 -0
- package/.cache/typescript/5.3/node_modules/asynckit/index.js +6 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/abort.js +29 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/async.js +34 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/defer.js +26 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/iterate.js +75 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/readable_asynckit.js +91 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/readable_parallel.js +25 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/readable_serial.js +25 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/readable_serial_ordered.js +29 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/state.js +37 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/streamify.js +141 -0
- package/.cache/typescript/5.3/node_modules/asynckit/lib/terminator.js +29 -0
- package/.cache/typescript/5.3/node_modules/asynckit/package.json +63 -0
- package/.cache/typescript/5.3/node_modules/asynckit/parallel.js +43 -0
- package/.cache/typescript/5.3/node_modules/asynckit/serial.js +17 -0
- package/.cache/typescript/5.3/node_modules/asynckit/serialOrdered.js +75 -0
- package/.cache/typescript/5.3/node_modules/asynckit/stream.js +21 -0
- package/.cache/typescript/5.3/node_modules/combined-stream/License +19 -0
- package/.cache/typescript/5.3/node_modules/combined-stream/Readme.md +138 -0
- package/.cache/typescript/5.3/node_modules/combined-stream/lib/combined_stream.js +208 -0
- package/.cache/typescript/5.3/node_modules/combined-stream/package.json +25 -0
- package/.cache/typescript/5.3/node_modules/combined-stream/yarn.lock +17 -0
- package/.cache/typescript/5.3/node_modules/delayed-stream/License +19 -0
- package/.cache/typescript/5.3/node_modules/delayed-stream/Makefile +7 -0
- package/.cache/typescript/5.3/node_modules/delayed-stream/Readme.md +141 -0
- package/.cache/typescript/5.3/node_modules/delayed-stream/lib/delayed_stream.js +107 -0
- package/.cache/typescript/5.3/node_modules/delayed-stream/package.json +27 -0
- package/.cache/typescript/5.3/node_modules/form-data/License +19 -0
- package/.cache/typescript/5.3/node_modules/form-data/README.md +350 -0
- package/.cache/typescript/5.3/node_modules/form-data/README.md.bak +350 -0
- package/.cache/typescript/5.3/node_modules/form-data/index.d.ts +51 -0
- package/.cache/typescript/5.3/node_modules/form-data/lib/browser.js +2 -0
- package/.cache/typescript/5.3/node_modules/form-data/lib/form_data.js +483 -0
- package/.cache/typescript/5.3/node_modules/form-data/lib/populate.js +10 -0
- package/.cache/typescript/5.3/node_modules/form-data/package.json +68 -0
- package/.cache/typescript/5.3/node_modules/mime-db/HISTORY.md +507 -0
- package/.cache/typescript/5.3/node_modules/mime-db/LICENSE +23 -0
- package/.cache/typescript/5.3/node_modules/mime-db/README.md +100 -0
- package/.cache/typescript/5.3/node_modules/mime-db/db.json +8519 -0
- package/.cache/typescript/5.3/node_modules/mime-db/index.js +12 -0
- package/.cache/typescript/5.3/node_modules/mime-db/package.json +60 -0
- package/.cache/typescript/5.3/node_modules/mime-types/HISTORY.md +397 -0
- package/.cache/typescript/5.3/node_modules/mime-types/LICENSE +23 -0
- package/.cache/typescript/5.3/node_modules/mime-types/README.md +113 -0
- package/.cache/typescript/5.3/node_modules/mime-types/index.js +188 -0
- package/.cache/typescript/5.3/node_modules/mime-types/package.json +44 -0
- package/.cache/typescript/5.3/node_modules/types-registry/README.md +2 -0
- package/.cache/typescript/5.3/node_modules/types-registry/index.json +1 -0
- package/.cache/typescript/5.3/node_modules/types-registry/package.json +20 -0
- package/.cache/typescript/5.3/node_modules/undici-types/README.md +6 -0
- package/.cache/typescript/5.3/node_modules/undici-types/agent.d.ts +31 -0
- package/.cache/typescript/5.3/node_modules/undici-types/api.d.ts +43 -0
- package/.cache/typescript/5.3/node_modules/undici-types/balanced-pool.d.ts +18 -0
- package/.cache/typescript/5.3/node_modules/undici-types/cache.d.ts +36 -0
- package/.cache/typescript/5.3/node_modules/undici-types/client.d.ts +97 -0
- package/.cache/typescript/5.3/node_modules/undici-types/connector.d.ts +34 -0
- package/.cache/typescript/5.3/node_modules/undici-types/content-type.d.ts +21 -0
- package/.cache/typescript/5.3/node_modules/undici-types/cookies.d.ts +28 -0
- package/.cache/typescript/5.3/node_modules/undici-types/diagnostics-channel.d.ts +67 -0
- package/.cache/typescript/5.3/node_modules/undici-types/dispatcher.d.ts +241 -0
- package/.cache/typescript/5.3/node_modules/undici-types/errors.d.ts +128 -0
- package/.cache/typescript/5.3/node_modules/undici-types/fetch.d.ts +209 -0
- package/.cache/typescript/5.3/node_modules/undici-types/file.d.ts +39 -0
- package/.cache/typescript/5.3/node_modules/undici-types/filereader.d.ts +54 -0
- package/.cache/typescript/5.3/node_modules/undici-types/formdata.d.ts +108 -0
- package/.cache/typescript/5.3/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/.cache/typescript/5.3/node_modules/undici-types/global-origin.d.ts +7 -0
- package/.cache/typescript/5.3/node_modules/undici-types/handlers.d.ts +9 -0
- package/.cache/typescript/5.3/node_modules/undici-types/header.d.ts +4 -0
- package/.cache/typescript/5.3/node_modules/undici-types/index.d.ts +63 -0
- package/.cache/typescript/5.3/node_modules/undici-types/interceptors.d.ts +5 -0
- package/.cache/typescript/5.3/node_modules/undici-types/mock-agent.d.ts +50 -0
- package/.cache/typescript/5.3/node_modules/undici-types/mock-client.d.ts +25 -0
- package/.cache/typescript/5.3/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/.cache/typescript/5.3/node_modules/undici-types/mock-interceptor.d.ts +93 -0
- package/.cache/typescript/5.3/node_modules/undici-types/mock-pool.d.ts +25 -0
- package/.cache/typescript/5.3/node_modules/undici-types/package.json +55 -0
- package/.cache/typescript/5.3/node_modules/undici-types/patch.d.ts +71 -0
- package/.cache/typescript/5.3/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/.cache/typescript/5.3/node_modules/undici-types/pool.d.ts +28 -0
- package/.cache/typescript/5.3/node_modules/undici-types/proxy-agent.d.ts +30 -0
- package/.cache/typescript/5.3/node_modules/undici-types/readable.d.ts +61 -0
- package/.cache/typescript/5.3/node_modules/undici-types/webidl.d.ts +220 -0
- package/.cache/typescript/5.3/node_modules/undici-types/websocket.d.ts +131 -0
- package/.cache/typescript/5.3/package-lock.json +149 -0
- package/.cache/typescript/5.3/package.json +1 -0
- package/.replit +1 -0
- package/index.js +1 -0
- package/leiamnash/edit.js +59 -0
- package/package.json +1 -1
- package/.cache/replit/__replit_disk_meta.json +0 -1
- package/replit.nix +0 -6
@@ -0,0 +1,75 @@
|
|
1
|
+
var iterate = require('./lib/iterate.js')
|
2
|
+
, initState = require('./lib/state.js')
|
3
|
+
, terminator = require('./lib/terminator.js')
|
4
|
+
;
|
5
|
+
|
6
|
+
// Public API
|
7
|
+
module.exports = serialOrdered;
|
8
|
+
// sorting helpers
|
9
|
+
module.exports.ascending = ascending;
|
10
|
+
module.exports.descending = descending;
|
11
|
+
|
12
|
+
/**
|
13
|
+
* Runs iterator over provided sorted array elements in series
|
14
|
+
*
|
15
|
+
* @param {array|object} list - array or object (named list) to iterate over
|
16
|
+
* @param {function} iterator - iterator to run
|
17
|
+
* @param {function} sortMethod - custom sort function
|
18
|
+
* @param {function} callback - invoked when all elements processed
|
19
|
+
* @returns {function} - jobs terminator
|
20
|
+
*/
|
21
|
+
function serialOrdered(list, iterator, sortMethod, callback)
|
22
|
+
{
|
23
|
+
var state = initState(list, sortMethod);
|
24
|
+
|
25
|
+
iterate(list, iterator, state, function iteratorHandler(error, result)
|
26
|
+
{
|
27
|
+
if (error)
|
28
|
+
{
|
29
|
+
callback(error, result);
|
30
|
+
return;
|
31
|
+
}
|
32
|
+
|
33
|
+
state.index++;
|
34
|
+
|
35
|
+
// are we there yet?
|
36
|
+
if (state.index < (state['keyedList'] || list).length)
|
37
|
+
{
|
38
|
+
iterate(list, iterator, state, iteratorHandler);
|
39
|
+
return;
|
40
|
+
}
|
41
|
+
|
42
|
+
// done here
|
43
|
+
callback(null, state.results);
|
44
|
+
});
|
45
|
+
|
46
|
+
return terminator.bind(state, callback);
|
47
|
+
}
|
48
|
+
|
49
|
+
/*
|
50
|
+
* -- Sort methods
|
51
|
+
*/
|
52
|
+
|
53
|
+
/**
|
54
|
+
* sort helper to sort array elements in ascending order
|
55
|
+
*
|
56
|
+
* @param {mixed} a - an item to compare
|
57
|
+
* @param {mixed} b - an item to compare
|
58
|
+
* @returns {number} - comparison result
|
59
|
+
*/
|
60
|
+
function ascending(a, b)
|
61
|
+
{
|
62
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
63
|
+
}
|
64
|
+
|
65
|
+
/**
|
66
|
+
* sort helper to sort array elements in descending order
|
67
|
+
*
|
68
|
+
* @param {mixed} a - an item to compare
|
69
|
+
* @param {mixed} b - an item to compare
|
70
|
+
* @returns {number} - comparison result
|
71
|
+
*/
|
72
|
+
function descending(a, b)
|
73
|
+
{
|
74
|
+
return -1 * ascending(a, b);
|
75
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
var inherits = require('util').inherits
|
2
|
+
, Readable = require('stream').Readable
|
3
|
+
, ReadableAsyncKit = require('./lib/readable_asynckit.js')
|
4
|
+
, ReadableParallel = require('./lib/readable_parallel.js')
|
5
|
+
, ReadableSerial = require('./lib/readable_serial.js')
|
6
|
+
, ReadableSerialOrdered = require('./lib/readable_serial_ordered.js')
|
7
|
+
;
|
8
|
+
|
9
|
+
// API
|
10
|
+
module.exports =
|
11
|
+
{
|
12
|
+
parallel : ReadableParallel,
|
13
|
+
serial : ReadableSerial,
|
14
|
+
serialOrdered : ReadableSerialOrdered,
|
15
|
+
};
|
16
|
+
|
17
|
+
inherits(ReadableAsyncKit, Readable);
|
18
|
+
|
19
|
+
inherits(ReadableParallel, ReadableAsyncKit);
|
20
|
+
inherits(ReadableSerial, ReadableAsyncKit);
|
21
|
+
inherits(ReadableSerialOrdered, ReadableAsyncKit);
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2011 Debuggable Limited <felix@debuggable.com>
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
@@ -0,0 +1,138 @@
|
|
1
|
+
# combined-stream
|
2
|
+
|
3
|
+
A stream that emits multiple other streams one after another.
|
4
|
+
|
5
|
+
**NB** Currently `combined-stream` works with streams version 1 only. There is ongoing effort to switch this library to streams version 2. Any help is welcome. :) Meanwhile you can explore other libraries that provide streams2 support with more or less compatibility with `combined-stream`.
|
6
|
+
|
7
|
+
- [combined-stream2](https://www.npmjs.com/package/combined-stream2): A drop-in streams2-compatible replacement for the combined-stream module.
|
8
|
+
|
9
|
+
- [multistream](https://www.npmjs.com/package/multistream): A stream that emits multiple other streams one after another.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
``` bash
|
14
|
+
npm install combined-stream
|
15
|
+
```
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
Here is a simple example that shows how you can use combined-stream to combine
|
20
|
+
two files into one:
|
21
|
+
|
22
|
+
``` javascript
|
23
|
+
var CombinedStream = require('combined-stream');
|
24
|
+
var fs = require('fs');
|
25
|
+
|
26
|
+
var combinedStream = CombinedStream.create();
|
27
|
+
combinedStream.append(fs.createReadStream('file1.txt'));
|
28
|
+
combinedStream.append(fs.createReadStream('file2.txt'));
|
29
|
+
|
30
|
+
combinedStream.pipe(fs.createWriteStream('combined.txt'));
|
31
|
+
```
|
32
|
+
|
33
|
+
While the example above works great, it will pause all source streams until
|
34
|
+
they are needed. If you don't want that to happen, you can set `pauseStreams`
|
35
|
+
to `false`:
|
36
|
+
|
37
|
+
``` javascript
|
38
|
+
var CombinedStream = require('combined-stream');
|
39
|
+
var fs = require('fs');
|
40
|
+
|
41
|
+
var combinedStream = CombinedStream.create({pauseStreams: false});
|
42
|
+
combinedStream.append(fs.createReadStream('file1.txt'));
|
43
|
+
combinedStream.append(fs.createReadStream('file2.txt'));
|
44
|
+
|
45
|
+
combinedStream.pipe(fs.createWriteStream('combined.txt'));
|
46
|
+
```
|
47
|
+
|
48
|
+
However, what if you don't have all the source streams yet, or you don't want
|
49
|
+
to allocate the resources (file descriptors, memory, etc.) for them right away?
|
50
|
+
Well, in that case you can simply provide a callback that supplies the stream
|
51
|
+
by calling a `next()` function:
|
52
|
+
|
53
|
+
``` javascript
|
54
|
+
var CombinedStream = require('combined-stream');
|
55
|
+
var fs = require('fs');
|
56
|
+
|
57
|
+
var combinedStream = CombinedStream.create();
|
58
|
+
combinedStream.append(function(next) {
|
59
|
+
next(fs.createReadStream('file1.txt'));
|
60
|
+
});
|
61
|
+
combinedStream.append(function(next) {
|
62
|
+
next(fs.createReadStream('file2.txt'));
|
63
|
+
});
|
64
|
+
|
65
|
+
combinedStream.pipe(fs.createWriteStream('combined.txt'));
|
66
|
+
```
|
67
|
+
|
68
|
+
## API
|
69
|
+
|
70
|
+
### CombinedStream.create([options])
|
71
|
+
|
72
|
+
Returns a new combined stream object. Available options are:
|
73
|
+
|
74
|
+
* `maxDataSize`
|
75
|
+
* `pauseStreams`
|
76
|
+
|
77
|
+
The effect of those options is described below.
|
78
|
+
|
79
|
+
### combinedStream.pauseStreams = `true`
|
80
|
+
|
81
|
+
Whether to apply back pressure to the underlaying streams. If set to `false`,
|
82
|
+
the underlaying streams will never be paused. If set to `true`, the
|
83
|
+
underlaying streams will be paused right after being appended, as well as when
|
84
|
+
`delayedStream.pipe()` wants to throttle.
|
85
|
+
|
86
|
+
### combinedStream.maxDataSize = `2 * 1024 * 1024`
|
87
|
+
|
88
|
+
The maximum amount of bytes (or characters) to buffer for all source streams.
|
89
|
+
If this value is exceeded, `combinedStream` emits an `'error'` event.
|
90
|
+
|
91
|
+
### combinedStream.dataSize = `0`
|
92
|
+
|
93
|
+
The amount of bytes (or characters) currently buffered by `combinedStream`.
|
94
|
+
|
95
|
+
### combinedStream.append(stream)
|
96
|
+
|
97
|
+
Appends the given `stream` to the combinedStream object. If `pauseStreams` is
|
98
|
+
set to `true, this stream will also be paused right away.
|
99
|
+
|
100
|
+
`streams` can also be a function that takes one parameter called `next`. `next`
|
101
|
+
is a function that must be invoked in order to provide the `next` stream, see
|
102
|
+
example above.
|
103
|
+
|
104
|
+
Regardless of how the `stream` is appended, combined-stream always attaches an
|
105
|
+
`'error'` listener to it, so you don't have to do that manually.
|
106
|
+
|
107
|
+
Special case: `stream` can also be a String or Buffer.
|
108
|
+
|
109
|
+
### combinedStream.write(data)
|
110
|
+
|
111
|
+
You should not call this, `combinedStream` takes care of piping the appended
|
112
|
+
streams into itself for you.
|
113
|
+
|
114
|
+
### combinedStream.resume()
|
115
|
+
|
116
|
+
Causes `combinedStream` to start drain the streams it manages. The function is
|
117
|
+
idempotent, and also emits a `'resume'` event each time which usually goes to
|
118
|
+
the stream that is currently being drained.
|
119
|
+
|
120
|
+
### combinedStream.pause();
|
121
|
+
|
122
|
+
If `combinedStream.pauseStreams` is set to `false`, this does nothing.
|
123
|
+
Otherwise a `'pause'` event is emitted, this goes to the stream that is
|
124
|
+
currently being drained, so you can use it to apply back pressure.
|
125
|
+
|
126
|
+
### combinedStream.end();
|
127
|
+
|
128
|
+
Sets `combinedStream.writable` to false, emits an `'end'` event, and removes
|
129
|
+
all streams from the queue.
|
130
|
+
|
131
|
+
### combinedStream.destroy();
|
132
|
+
|
133
|
+
Same as `combinedStream.end()`, except it emits a `'close'` event instead of
|
134
|
+
`'end'`.
|
135
|
+
|
136
|
+
## License
|
137
|
+
|
138
|
+
combined-stream is licensed under the MIT license.
|
@@ -0,0 +1,208 @@
|
|
1
|
+
var util = require('util');
|
2
|
+
var Stream = require('stream').Stream;
|
3
|
+
var DelayedStream = require('delayed-stream');
|
4
|
+
|
5
|
+
module.exports = CombinedStream;
|
6
|
+
function CombinedStream() {
|
7
|
+
this.writable = false;
|
8
|
+
this.readable = true;
|
9
|
+
this.dataSize = 0;
|
10
|
+
this.maxDataSize = 2 * 1024 * 1024;
|
11
|
+
this.pauseStreams = true;
|
12
|
+
|
13
|
+
this._released = false;
|
14
|
+
this._streams = [];
|
15
|
+
this._currentStream = null;
|
16
|
+
this._insideLoop = false;
|
17
|
+
this._pendingNext = false;
|
18
|
+
}
|
19
|
+
util.inherits(CombinedStream, Stream);
|
20
|
+
|
21
|
+
CombinedStream.create = function(options) {
|
22
|
+
var combinedStream = new this();
|
23
|
+
|
24
|
+
options = options || {};
|
25
|
+
for (var option in options) {
|
26
|
+
combinedStream[option] = options[option];
|
27
|
+
}
|
28
|
+
|
29
|
+
return combinedStream;
|
30
|
+
};
|
31
|
+
|
32
|
+
CombinedStream.isStreamLike = function(stream) {
|
33
|
+
return (typeof stream !== 'function')
|
34
|
+
&& (typeof stream !== 'string')
|
35
|
+
&& (typeof stream !== 'boolean')
|
36
|
+
&& (typeof stream !== 'number')
|
37
|
+
&& (!Buffer.isBuffer(stream));
|
38
|
+
};
|
39
|
+
|
40
|
+
CombinedStream.prototype.append = function(stream) {
|
41
|
+
var isStreamLike = CombinedStream.isStreamLike(stream);
|
42
|
+
|
43
|
+
if (isStreamLike) {
|
44
|
+
if (!(stream instanceof DelayedStream)) {
|
45
|
+
var newStream = DelayedStream.create(stream, {
|
46
|
+
maxDataSize: Infinity,
|
47
|
+
pauseStream: this.pauseStreams,
|
48
|
+
});
|
49
|
+
stream.on('data', this._checkDataSize.bind(this));
|
50
|
+
stream = newStream;
|
51
|
+
}
|
52
|
+
|
53
|
+
this._handleErrors(stream);
|
54
|
+
|
55
|
+
if (this.pauseStreams) {
|
56
|
+
stream.pause();
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
this._streams.push(stream);
|
61
|
+
return this;
|
62
|
+
};
|
63
|
+
|
64
|
+
CombinedStream.prototype.pipe = function(dest, options) {
|
65
|
+
Stream.prototype.pipe.call(this, dest, options);
|
66
|
+
this.resume();
|
67
|
+
return dest;
|
68
|
+
};
|
69
|
+
|
70
|
+
CombinedStream.prototype._getNext = function() {
|
71
|
+
this._currentStream = null;
|
72
|
+
|
73
|
+
if (this._insideLoop) {
|
74
|
+
this._pendingNext = true;
|
75
|
+
return; // defer call
|
76
|
+
}
|
77
|
+
|
78
|
+
this._insideLoop = true;
|
79
|
+
try {
|
80
|
+
do {
|
81
|
+
this._pendingNext = false;
|
82
|
+
this._realGetNext();
|
83
|
+
} while (this._pendingNext);
|
84
|
+
} finally {
|
85
|
+
this._insideLoop = false;
|
86
|
+
}
|
87
|
+
};
|
88
|
+
|
89
|
+
CombinedStream.prototype._realGetNext = function() {
|
90
|
+
var stream = this._streams.shift();
|
91
|
+
|
92
|
+
|
93
|
+
if (typeof stream == 'undefined') {
|
94
|
+
this.end();
|
95
|
+
return;
|
96
|
+
}
|
97
|
+
|
98
|
+
if (typeof stream !== 'function') {
|
99
|
+
this._pipeNext(stream);
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
|
103
|
+
var getStream = stream;
|
104
|
+
getStream(function(stream) {
|
105
|
+
var isStreamLike = CombinedStream.isStreamLike(stream);
|
106
|
+
if (isStreamLike) {
|
107
|
+
stream.on('data', this._checkDataSize.bind(this));
|
108
|
+
this._handleErrors(stream);
|
109
|
+
}
|
110
|
+
|
111
|
+
this._pipeNext(stream);
|
112
|
+
}.bind(this));
|
113
|
+
};
|
114
|
+
|
115
|
+
CombinedStream.prototype._pipeNext = function(stream) {
|
116
|
+
this._currentStream = stream;
|
117
|
+
|
118
|
+
var isStreamLike = CombinedStream.isStreamLike(stream);
|
119
|
+
if (isStreamLike) {
|
120
|
+
stream.on('end', this._getNext.bind(this));
|
121
|
+
stream.pipe(this, {end: false});
|
122
|
+
return;
|
123
|
+
}
|
124
|
+
|
125
|
+
var value = stream;
|
126
|
+
this.write(value);
|
127
|
+
this._getNext();
|
128
|
+
};
|
129
|
+
|
130
|
+
CombinedStream.prototype._handleErrors = function(stream) {
|
131
|
+
var self = this;
|
132
|
+
stream.on('error', function(err) {
|
133
|
+
self._emitError(err);
|
134
|
+
});
|
135
|
+
};
|
136
|
+
|
137
|
+
CombinedStream.prototype.write = function(data) {
|
138
|
+
this.emit('data', data);
|
139
|
+
};
|
140
|
+
|
141
|
+
CombinedStream.prototype.pause = function() {
|
142
|
+
if (!this.pauseStreams) {
|
143
|
+
return;
|
144
|
+
}
|
145
|
+
|
146
|
+
if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();
|
147
|
+
this.emit('pause');
|
148
|
+
};
|
149
|
+
|
150
|
+
CombinedStream.prototype.resume = function() {
|
151
|
+
if (!this._released) {
|
152
|
+
this._released = true;
|
153
|
+
this.writable = true;
|
154
|
+
this._getNext();
|
155
|
+
}
|
156
|
+
|
157
|
+
if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();
|
158
|
+
this.emit('resume');
|
159
|
+
};
|
160
|
+
|
161
|
+
CombinedStream.prototype.end = function() {
|
162
|
+
this._reset();
|
163
|
+
this.emit('end');
|
164
|
+
};
|
165
|
+
|
166
|
+
CombinedStream.prototype.destroy = function() {
|
167
|
+
this._reset();
|
168
|
+
this.emit('close');
|
169
|
+
};
|
170
|
+
|
171
|
+
CombinedStream.prototype._reset = function() {
|
172
|
+
this.writable = false;
|
173
|
+
this._streams = [];
|
174
|
+
this._currentStream = null;
|
175
|
+
};
|
176
|
+
|
177
|
+
CombinedStream.prototype._checkDataSize = function() {
|
178
|
+
this._updateDataSize();
|
179
|
+
if (this.dataSize <= this.maxDataSize) {
|
180
|
+
return;
|
181
|
+
}
|
182
|
+
|
183
|
+
var message =
|
184
|
+
'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';
|
185
|
+
this._emitError(new Error(message));
|
186
|
+
};
|
187
|
+
|
188
|
+
CombinedStream.prototype._updateDataSize = function() {
|
189
|
+
this.dataSize = 0;
|
190
|
+
|
191
|
+
var self = this;
|
192
|
+
this._streams.forEach(function(stream) {
|
193
|
+
if (!stream.dataSize) {
|
194
|
+
return;
|
195
|
+
}
|
196
|
+
|
197
|
+
self.dataSize += stream.dataSize;
|
198
|
+
});
|
199
|
+
|
200
|
+
if (this._currentStream && this._currentStream.dataSize) {
|
201
|
+
this.dataSize += this._currentStream.dataSize;
|
202
|
+
}
|
203
|
+
};
|
204
|
+
|
205
|
+
CombinedStream.prototype._emitError = function(err) {
|
206
|
+
this._reset();
|
207
|
+
this.emit('error', err);
|
208
|
+
};
|
@@ -0,0 +1,25 @@
|
|
1
|
+
{
|
2
|
+
"author": "Felix Geisendörfer <felix@debuggable.com> (http://debuggable.com/)",
|
3
|
+
"name": "combined-stream",
|
4
|
+
"description": "A stream that emits multiple other streams one after another.",
|
5
|
+
"version": "1.0.8",
|
6
|
+
"homepage": "https://github.com/felixge/node-combined-stream",
|
7
|
+
"repository": {
|
8
|
+
"type": "git",
|
9
|
+
"url": "git://github.com/felixge/node-combined-stream.git"
|
10
|
+
},
|
11
|
+
"main": "./lib/combined_stream",
|
12
|
+
"scripts": {
|
13
|
+
"test": "node test/run.js"
|
14
|
+
},
|
15
|
+
"engines": {
|
16
|
+
"node": ">= 0.8"
|
17
|
+
},
|
18
|
+
"dependencies": {
|
19
|
+
"delayed-stream": "~1.0.0"
|
20
|
+
},
|
21
|
+
"devDependencies": {
|
22
|
+
"far": "~0.0.7"
|
23
|
+
},
|
24
|
+
"license": "MIT"
|
25
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
2
|
+
# yarn lockfile v1
|
3
|
+
|
4
|
+
|
5
|
+
delayed-stream@~1.0.0:
|
6
|
+
version "1.0.0"
|
7
|
+
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
8
|
+
|
9
|
+
far@~0.0.7:
|
10
|
+
version "0.0.7"
|
11
|
+
resolved "https://registry.yarnpkg.com/far/-/far-0.0.7.tgz#01c1fd362bcd26ce9cf161af3938aa34619f79a7"
|
12
|
+
dependencies:
|
13
|
+
oop "0.0.3"
|
14
|
+
|
15
|
+
oop@0.0.3:
|
16
|
+
version "0.0.3"
|
17
|
+
resolved "https://registry.yarnpkg.com/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2011 Debuggable Limited <felix@debuggable.com>
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
@@ -0,0 +1,141 @@
|
|
1
|
+
# delayed-stream
|
2
|
+
|
3
|
+
Buffers events from a stream until you are ready to handle them.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
``` bash
|
8
|
+
npm install delayed-stream
|
9
|
+
```
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
The following example shows how to write a http echo server that delays its
|
14
|
+
response by 1000 ms.
|
15
|
+
|
16
|
+
``` javascript
|
17
|
+
var DelayedStream = require('delayed-stream');
|
18
|
+
var http = require('http');
|
19
|
+
|
20
|
+
http.createServer(function(req, res) {
|
21
|
+
var delayed = DelayedStream.create(req);
|
22
|
+
|
23
|
+
setTimeout(function() {
|
24
|
+
res.writeHead(200);
|
25
|
+
delayed.pipe(res);
|
26
|
+
}, 1000);
|
27
|
+
});
|
28
|
+
```
|
29
|
+
|
30
|
+
If you are not using `Stream#pipe`, you can also manually release the buffered
|
31
|
+
events by calling `delayedStream.resume()`:
|
32
|
+
|
33
|
+
``` javascript
|
34
|
+
var delayed = DelayedStream.create(req);
|
35
|
+
|
36
|
+
setTimeout(function() {
|
37
|
+
// Emit all buffered events and resume underlaying source
|
38
|
+
delayed.resume();
|
39
|
+
}, 1000);
|
40
|
+
```
|
41
|
+
|
42
|
+
## Implementation
|
43
|
+
|
44
|
+
In order to use this meta stream properly, here are a few things you should
|
45
|
+
know about the implementation.
|
46
|
+
|
47
|
+
### Event Buffering / Proxying
|
48
|
+
|
49
|
+
All events of the `source` stream are hijacked by overwriting the `source.emit`
|
50
|
+
method. Until node implements a catch-all event listener, this is the only way.
|
51
|
+
|
52
|
+
However, delayed-stream still continues to emit all events it captures on the
|
53
|
+
`source`, regardless of whether you have released the delayed stream yet or
|
54
|
+
not.
|
55
|
+
|
56
|
+
Upon creation, delayed-stream captures all `source` events and stores them in
|
57
|
+
an internal event buffer. Once `delayedStream.release()` is called, all
|
58
|
+
buffered events are emitted on the `delayedStream`, and the event buffer is
|
59
|
+
cleared. After that, delayed-stream merely acts as a proxy for the underlaying
|
60
|
+
source.
|
61
|
+
|
62
|
+
### Error handling
|
63
|
+
|
64
|
+
Error events on `source` are buffered / proxied just like any other events.
|
65
|
+
However, `delayedStream.create` attaches a no-op `'error'` listener to the
|
66
|
+
`source`. This way you only have to handle errors on the `delayedStream`
|
67
|
+
object, rather than in two places.
|
68
|
+
|
69
|
+
### Buffer limits
|
70
|
+
|
71
|
+
delayed-stream provides a `maxDataSize` property that can be used to limit
|
72
|
+
the amount of data being buffered. In order to protect you from bad `source`
|
73
|
+
streams that don't react to `source.pause()`, this feature is enabled by
|
74
|
+
default.
|
75
|
+
|
76
|
+
## API
|
77
|
+
|
78
|
+
### DelayedStream.create(source, [options])
|
79
|
+
|
80
|
+
Returns a new `delayedStream`. Available options are:
|
81
|
+
|
82
|
+
* `pauseStream`
|
83
|
+
* `maxDataSize`
|
84
|
+
|
85
|
+
The description for those properties can be found below.
|
86
|
+
|
87
|
+
### delayedStream.source
|
88
|
+
|
89
|
+
The `source` stream managed by this object. This is useful if you are
|
90
|
+
passing your `delayedStream` around, and you still want to access properties
|
91
|
+
on the `source` object.
|
92
|
+
|
93
|
+
### delayedStream.pauseStream = true
|
94
|
+
|
95
|
+
Whether to pause the underlaying `source` when calling
|
96
|
+
`DelayedStream.create()`. Modifying this property afterwards has no effect.
|
97
|
+
|
98
|
+
### delayedStream.maxDataSize = 1024 * 1024
|
99
|
+
|
100
|
+
The amount of data to buffer before emitting an `error`.
|
101
|
+
|
102
|
+
If the underlaying source is emitting `Buffer` objects, the `maxDataSize`
|
103
|
+
refers to bytes.
|
104
|
+
|
105
|
+
If the underlaying source is emitting JavaScript strings, the size refers to
|
106
|
+
characters.
|
107
|
+
|
108
|
+
If you know what you are doing, you can set this property to `Infinity` to
|
109
|
+
disable this feature. You can also modify this property during runtime.
|
110
|
+
|
111
|
+
### delayedStream.dataSize = 0
|
112
|
+
|
113
|
+
The amount of data buffered so far.
|
114
|
+
|
115
|
+
### delayedStream.readable
|
116
|
+
|
117
|
+
An ECMA5 getter that returns the value of `source.readable`.
|
118
|
+
|
119
|
+
### delayedStream.resume()
|
120
|
+
|
121
|
+
If the `delayedStream` has not been released so far, `delayedStream.release()`
|
122
|
+
is called.
|
123
|
+
|
124
|
+
In either case, `source.resume()` is called.
|
125
|
+
|
126
|
+
### delayedStream.pause()
|
127
|
+
|
128
|
+
Calls `source.pause()`.
|
129
|
+
|
130
|
+
### delayedStream.pipe(dest)
|
131
|
+
|
132
|
+
Calls `delayedStream.resume()` and then proxies the arguments to `source.pipe`.
|
133
|
+
|
134
|
+
### delayedStream.release()
|
135
|
+
|
136
|
+
Emits and clears all events that have been buffered up so far. This does not
|
137
|
+
resume the underlaying source, use `delayedStream.resume()` instead.
|
138
|
+
|
139
|
+
## License
|
140
|
+
|
141
|
+
delayed-stream is licensed under the MIT license.
|