rahad-media-downloader 2.1.10 → 2.1.13
Sign up to get free protection for your applications and to get access to all the features.
- package/.cache/replit/modules/nodejs-20.res +1 -0
- package/.cache/replit/modules/replit.res +1 -0
- package/.cache/typescript/5.3/node_modules/.package-lock.json +6 -0
- package/.cache/typescript/5.3/node_modules/@types/qs/LICENSE +21 -0
- package/.cache/typescript/5.3/node_modules/@types/qs/README.md +15 -0
- package/.cache/typescript/5.3/node_modules/@types/qs/index.d.ts +79 -0
- package/.cache/typescript/5.3/node_modules/@types/qs/package.json +65 -0
- package/.cache/typescript/5.3/package-lock.json +7 -0
- package/.cache/typescript/5.3/package.json +1 -1
- package/.cache/typescript/5.4/node_modules/.package-lock.json +185 -0
- package/.cache/typescript/5.4/node_modules/@types/caseless/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/caseless/README.md +48 -0
- package/.cache/typescript/5.4/node_modules/@types/caseless/index.d.ts +29 -0
- package/.cache/typescript/5.4/node_modules/@types/caseless/package.json +35 -0
- package/.cache/typescript/5.4/node_modules/@types/domhandler/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/domhandler/README.md +92 -0
- package/.cache/typescript/5.4/node_modules/@types/domhandler/index.d.ts +73 -0
- package/.cache/typescript/5.4/node_modules/@types/domhandler/package.json +25 -0
- package/.cache/typescript/5.4/node_modules/@types/domutils/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/domutils/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/domutils/index.d.ts +124 -0
- package/.cache/typescript/5.4/node_modules/@types/domutils/package.json +27 -0
- package/.cache/typescript/5.4/node_modules/@types/htmlparser2/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/htmlparser2/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/htmlparser2/index.d.ts +120 -0
- package/.cache/typescript/5.4/node_modules/@types/htmlparser2/package.json +45 -0
- package/.cache/typescript/5.4/node_modules/@types/node/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/node/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/node/assert/strict.d.ts +8 -0
- package/.cache/typescript/5.4/node_modules/@types/node/assert.d.ts +1040 -0
- package/.cache/typescript/5.4/node_modules/@types/node/async_hooks.d.ts +541 -0
- package/.cache/typescript/5.4/node_modules/@types/node/buffer.d.ts +2363 -0
- package/.cache/typescript/5.4/node_modules/@types/node/child_process.d.ts +1542 -0
- package/.cache/typescript/5.4/node_modules/@types/node/cluster.d.ts +578 -0
- package/.cache/typescript/5.4/node_modules/@types/node/console.d.ts +452 -0
- package/.cache/typescript/5.4/node_modules/@types/node/constants.d.ts +19 -0
- package/.cache/typescript/5.4/node_modules/@types/node/crypto.d.ts +4522 -0
- package/.cache/typescript/5.4/node_modules/@types/node/dgram.d.ts +596 -0
- package/.cache/typescript/5.4/node_modules/@types/node/diagnostics_channel.d.ts +545 -0
- package/.cache/typescript/5.4/node_modules/@types/node/dns/promises.d.ts +473 -0
- package/.cache/typescript/5.4/node_modules/@types/node/dns.d.ts +853 -0
- package/.cache/typescript/5.4/node_modules/@types/node/dom-events.d.ts +124 -0
- package/.cache/typescript/5.4/node_modules/@types/node/domain.d.ts +170 -0
- package/.cache/typescript/5.4/node_modules/@types/node/events.d.ts +884 -0
- package/.cache/typescript/5.4/node_modules/@types/node/fs/promises.d.ts +1245 -0
- package/.cache/typescript/5.4/node_modules/@types/node/fs.d.ts +4317 -0
- package/.cache/typescript/5.4/node_modules/@types/node/globals.d.ts +411 -0
- package/.cache/typescript/5.4/node_modules/@types/node/globals.global.d.ts +1 -0
- package/.cache/typescript/5.4/node_modules/@types/node/http.d.ts +1889 -0
- package/.cache/typescript/5.4/node_modules/@types/node/http2.d.ts +2418 -0
- package/.cache/typescript/5.4/node_modules/@types/node/https.d.ts +550 -0
- package/.cache/typescript/5.4/node_modules/@types/node/index.d.ts +89 -0
- package/.cache/typescript/5.4/node_modules/@types/node/inspector.d.ts +2746 -0
- package/.cache/typescript/5.4/node_modules/@types/node/module.d.ts +315 -0
- package/.cache/typescript/5.4/node_modules/@types/node/net.d.ts +996 -0
- package/.cache/typescript/5.4/node_modules/@types/node/os.d.ts +495 -0
- package/.cache/typescript/5.4/node_modules/@types/node/package.json +217 -0
- package/.cache/typescript/5.4/node_modules/@types/node/path.d.ts +191 -0
- package/.cache/typescript/5.4/node_modules/@types/node/perf_hooks.d.ts +645 -0
- package/.cache/typescript/5.4/node_modules/@types/node/process.d.ts +1747 -0
- package/.cache/typescript/5.4/node_modules/@types/node/punycode.d.ts +117 -0
- package/.cache/typescript/5.4/node_modules/@types/node/querystring.d.ts +153 -0
- package/.cache/typescript/5.4/node_modules/@types/node/readline/promises.d.ts +150 -0
- package/.cache/typescript/5.4/node_modules/@types/node/readline.d.ts +540 -0
- package/.cache/typescript/5.4/node_modules/@types/node/repl.d.ts +430 -0
- package/.cache/typescript/5.4/node_modules/@types/node/sea.d.ts +153 -0
- package/.cache/typescript/5.4/node_modules/@types/node/stream/consumers.d.ts +12 -0
- package/.cache/typescript/5.4/node_modules/@types/node/stream/promises.d.ts +83 -0
- package/.cache/typescript/5.4/node_modules/@types/node/stream/web.d.ts +367 -0
- package/.cache/typescript/5.4/node_modules/@types/node/stream.d.ts +1707 -0
- package/.cache/typescript/5.4/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/.cache/typescript/5.4/node_modules/@types/node/test.d.ts +1470 -0
- package/.cache/typescript/5.4/node_modules/@types/node/timers/promises.d.ts +97 -0
- package/.cache/typescript/5.4/node_modules/@types/node/timers.d.ts +240 -0
- package/.cache/typescript/5.4/node_modules/@types/node/tls.d.ts +1217 -0
- package/.cache/typescript/5.4/node_modules/@types/node/trace_events.d.ts +197 -0
- package/.cache/typescript/5.4/node_modules/@types/node/tty.d.ts +208 -0
- package/.cache/typescript/5.4/node_modules/@types/node/url.d.ts +944 -0
- package/.cache/typescript/5.4/node_modules/@types/node/util.d.ts +2276 -0
- package/.cache/typescript/5.4/node_modules/@types/node/v8.d.ts +764 -0
- package/.cache/typescript/5.4/node_modules/@types/node/vm.d.ts +921 -0
- package/.cache/typescript/5.4/node_modules/@types/node/wasi.d.ts +181 -0
- package/.cache/typescript/5.4/node_modules/@types/node/worker_threads.d.ts +691 -0
- package/.cache/typescript/5.4/node_modules/@types/node/zlib.d.ts +530 -0
- package/.cache/typescript/5.4/node_modules/@types/node-fetch/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/node-fetch/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/node-fetch/externals.d.ts +32 -0
- package/.cache/typescript/5.4/node_modules/@types/node-fetch/index.d.ts +238 -0
- package/.cache/typescript/5.4/node_modules/@types/node-fetch/package.json +83 -0
- package/.cache/typescript/5.4/node_modules/@types/qs/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/qs/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/qs/index.d.ts +79 -0
- package/.cache/typescript/5.4/node_modules/@types/qs/package.json +65 -0
- package/.cache/typescript/5.4/node_modules/@types/request/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/request/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/request/index.d.ts +395 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/License +19 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/README.md +350 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/README.md.bak +350 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/index.d.ts +51 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/lib/browser.js +2 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/lib/form_data.js +483 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/lib/populate.js +10 -0
- package/.cache/typescript/5.4/node_modules/@types/request/node_modules/form-data/package.json +68 -0
- package/.cache/typescript/5.4/node_modules/@types/request/package.json +70 -0
- package/.cache/typescript/5.4/node_modules/@types/tough-cookie/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/@types/tough-cookie/README.md +15 -0
- package/.cache/typescript/5.4/node_modules/@types/tough-cookie/index.d.ts +321 -0
- package/.cache/typescript/5.4/node_modules/@types/tough-cookie/package.json +35 -0
- package/.cache/typescript/5.4/node_modules/asynckit/LICENSE +21 -0
- package/.cache/typescript/5.4/node_modules/asynckit/README.md +233 -0
- package/.cache/typescript/5.4/node_modules/asynckit/bench.js +76 -0
- package/.cache/typescript/5.4/node_modules/asynckit/index.js +6 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/abort.js +29 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/async.js +34 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/defer.js +26 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/iterate.js +75 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_asynckit.js +91 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_parallel.js +25 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_serial.js +25 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_serial_ordered.js +29 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/state.js +37 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/streamify.js +141 -0
- package/.cache/typescript/5.4/node_modules/asynckit/lib/terminator.js +29 -0
- package/.cache/typescript/5.4/node_modules/asynckit/package.json +63 -0
- package/.cache/typescript/5.4/node_modules/asynckit/parallel.js +43 -0
- package/.cache/typescript/5.4/node_modules/asynckit/serial.js +17 -0
- package/.cache/typescript/5.4/node_modules/asynckit/serialOrdered.js +75 -0
- package/.cache/typescript/5.4/node_modules/asynckit/stream.js +21 -0
- package/.cache/typescript/5.4/node_modules/combined-stream/License +19 -0
- package/.cache/typescript/5.4/node_modules/combined-stream/Readme.md +138 -0
- package/.cache/typescript/5.4/node_modules/combined-stream/lib/combined_stream.js +208 -0
- package/.cache/typescript/5.4/node_modules/combined-stream/package.json +25 -0
- package/.cache/typescript/5.4/node_modules/combined-stream/yarn.lock +17 -0
- package/.cache/typescript/5.4/node_modules/delayed-stream/License +19 -0
- package/.cache/typescript/5.4/node_modules/delayed-stream/Makefile +7 -0
- package/.cache/typescript/5.4/node_modules/delayed-stream/Readme.md +141 -0
- package/.cache/typescript/5.4/node_modules/delayed-stream/lib/delayed_stream.js +107 -0
- package/.cache/typescript/5.4/node_modules/delayed-stream/package.json +27 -0
- package/.cache/typescript/5.4/node_modules/domelementtype/LICENSE +11 -0
- package/.cache/typescript/5.4/node_modules/domelementtype/index.js +15 -0
- package/.cache/typescript/5.4/node_modules/domelementtype/package.json +16 -0
- package/.cache/typescript/5.4/node_modules/domelementtype/readme.md +1 -0
- package/.cache/typescript/5.4/node_modules/domhandler/.travis.yml +6 -0
- package/.cache/typescript/5.4/node_modules/domhandler/LICENSE +11 -0
- package/.cache/typescript/5.4/node_modules/domhandler/index.js +217 -0
- package/.cache/typescript/5.4/node_modules/domhandler/lib/element.js +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/lib/node.js +44 -0
- package/.cache/typescript/5.4/node_modules/domhandler/package.json +41 -0
- package/.cache/typescript/5.4/node_modules/domhandler/readme.md +116 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/01-basic.json +57 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/02-single_tag_1.json +21 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/03-single_tag_2.json +21 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/04-unescaped_in_script.json +27 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/05-tags_in_comment.json +18 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/06-comment_in_script.json +18 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/07-unescaped_in_style.json +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/08-extra_spaces_in_tag.json +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/09-unquoted_attrib.json +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/10-singular_attribute.json +15 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/11-text_outside_tags.json +40 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/12-text_only.json +11 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/13-comment_in_text.json +19 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/14-comment_in_text_in_script.json +18 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/15-non-verbose.json +22 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/16-normalize_whitespace.json +47 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/17-xml_namespace.json +18 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/18-enforce_empty_tags.json +16 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/19-ignore_empty_tags.json +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/20-template_script_tags.json +20 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/21-conditional_comments.json +15 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/22-lowercase_tags.json +41 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/23-dom-lvl1.json +131 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/24-with-start-indices.json +85 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/cases/25-with-end-indices.json +86 -0
- package/.cache/typescript/5.4/node_modules/domhandler/test/tests.js +60 -0
- package/.cache/typescript/5.4/node_modules/form-data/License +19 -0
- package/.cache/typescript/5.4/node_modules/form-data/README.md.bak +358 -0
- package/.cache/typescript/5.4/node_modules/form-data/Readme.md +358 -0
- package/.cache/typescript/5.4/node_modules/form-data/index.d.ts +62 -0
- package/.cache/typescript/5.4/node_modules/form-data/lib/browser.js +2 -0
- package/.cache/typescript/5.4/node_modules/form-data/lib/form_data.js +501 -0
- package/.cache/typescript/5.4/node_modules/form-data/lib/populate.js +10 -0
- package/.cache/typescript/5.4/node_modules/form-data/package.json +68 -0
- package/.cache/typescript/5.4/node_modules/mime-db/HISTORY.md +507 -0
- package/.cache/typescript/5.4/node_modules/mime-db/LICENSE +23 -0
- package/.cache/typescript/5.4/node_modules/mime-db/README.md +100 -0
- package/.cache/typescript/5.4/node_modules/mime-db/db.json +8519 -0
- package/.cache/typescript/5.4/node_modules/mime-db/index.js +12 -0
- package/.cache/typescript/5.4/node_modules/mime-db/package.json +60 -0
- package/.cache/typescript/5.4/node_modules/mime-types/HISTORY.md +397 -0
- package/.cache/typescript/5.4/node_modules/mime-types/LICENSE +23 -0
- package/.cache/typescript/5.4/node_modules/mime-types/README.md +113 -0
- package/.cache/typescript/5.4/node_modules/mime-types/index.js +188 -0
- package/.cache/typescript/5.4/node_modules/mime-types/package.json +44 -0
- package/.cache/typescript/5.4/node_modules/types-registry/README.md +2 -0
- package/.cache/typescript/5.4/node_modules/types-registry/index.json +1 -0
- package/.cache/typescript/5.4/node_modules/types-registry/package.json +20 -0
- package/.cache/typescript/5.4/node_modules/undici-types/README.md +6 -0
- package/.cache/typescript/5.4/node_modules/undici-types/agent.d.ts +31 -0
- package/.cache/typescript/5.4/node_modules/undici-types/api.d.ts +43 -0
- package/.cache/typescript/5.4/node_modules/undici-types/balanced-pool.d.ts +18 -0
- package/.cache/typescript/5.4/node_modules/undici-types/cache.d.ts +36 -0
- package/.cache/typescript/5.4/node_modules/undici-types/client.d.ts +97 -0
- package/.cache/typescript/5.4/node_modules/undici-types/connector.d.ts +34 -0
- package/.cache/typescript/5.4/node_modules/undici-types/content-type.d.ts +21 -0
- package/.cache/typescript/5.4/node_modules/undici-types/cookies.d.ts +28 -0
- package/.cache/typescript/5.4/node_modules/undici-types/diagnostics-channel.d.ts +67 -0
- package/.cache/typescript/5.4/node_modules/undici-types/dispatcher.d.ts +241 -0
- package/.cache/typescript/5.4/node_modules/undici-types/errors.d.ts +128 -0
- package/.cache/typescript/5.4/node_modules/undici-types/fetch.d.ts +209 -0
- package/.cache/typescript/5.4/node_modules/undici-types/file.d.ts +39 -0
- package/.cache/typescript/5.4/node_modules/undici-types/filereader.d.ts +54 -0
- package/.cache/typescript/5.4/node_modules/undici-types/formdata.d.ts +108 -0
- package/.cache/typescript/5.4/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/.cache/typescript/5.4/node_modules/undici-types/global-origin.d.ts +7 -0
- package/.cache/typescript/5.4/node_modules/undici-types/handlers.d.ts +9 -0
- package/.cache/typescript/5.4/node_modules/undici-types/header.d.ts +4 -0
- package/.cache/typescript/5.4/node_modules/undici-types/index.d.ts +63 -0
- package/.cache/typescript/5.4/node_modules/undici-types/interceptors.d.ts +5 -0
- package/.cache/typescript/5.4/node_modules/undici-types/mock-agent.d.ts +50 -0
- package/.cache/typescript/5.4/node_modules/undici-types/mock-client.d.ts +25 -0
- package/.cache/typescript/5.4/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/.cache/typescript/5.4/node_modules/undici-types/mock-interceptor.d.ts +93 -0
- package/.cache/typescript/5.4/node_modules/undici-types/mock-pool.d.ts +25 -0
- package/.cache/typescript/5.4/node_modules/undici-types/package.json +55 -0
- package/.cache/typescript/5.4/node_modules/undici-types/patch.d.ts +71 -0
- package/.cache/typescript/5.4/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/.cache/typescript/5.4/node_modules/undici-types/pool.d.ts +28 -0
- package/.cache/typescript/5.4/node_modules/undici-types/proxy-agent.d.ts +30 -0
- package/.cache/typescript/5.4/node_modules/undici-types/readable.d.ts +61 -0
- package/.cache/typescript/5.4/node_modules/undici-types/webidl.d.ts +220 -0
- package/.cache/typescript/5.4/node_modules/undici-types/websocket.d.ts +131 -0
- package/.cache/typescript/5.4/package-lock.json +197 -0
- package/.cache/typescript/5.4/package.json +1 -0
- package/index.js +1 -1
- package/package.json +37 -2
- package/.cache/replit/modules/nodejs-20:v32-20240401-269b323.res +0 -1
- package/.cache/replit/modules/replit:v8-20240329-787bc7d.res +0 -1
@@ -0,0 +1,43 @@
|
|
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 = parallel;
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Runs iterator over provided array elements in parallel
|
11
|
+
*
|
12
|
+
* @param {array|object} list - array or object (named list) to iterate over
|
13
|
+
* @param {function} iterator - iterator to run
|
14
|
+
* @param {function} callback - invoked when all elements processed
|
15
|
+
* @returns {function} - jobs terminator
|
16
|
+
*/
|
17
|
+
function parallel(list, iterator, callback)
|
18
|
+
{
|
19
|
+
var state = initState(list);
|
20
|
+
|
21
|
+
while (state.index < (state['keyedList'] || list).length)
|
22
|
+
{
|
23
|
+
iterate(list, iterator, state, function(error, result)
|
24
|
+
{
|
25
|
+
if (error)
|
26
|
+
{
|
27
|
+
callback(error, result);
|
28
|
+
return;
|
29
|
+
}
|
30
|
+
|
31
|
+
// looks like it's the last one
|
32
|
+
if (Object.keys(state.jobs).length === 0)
|
33
|
+
{
|
34
|
+
callback(null, state.results);
|
35
|
+
return;
|
36
|
+
}
|
37
|
+
});
|
38
|
+
|
39
|
+
state.index++;
|
40
|
+
}
|
41
|
+
|
42
|
+
return terminator.bind(state, callback);
|
43
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
var serialOrdered = require('./serialOrdered.js');
|
2
|
+
|
3
|
+
// Public API
|
4
|
+
module.exports = serial;
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Runs iterator over provided array elements in series
|
8
|
+
*
|
9
|
+
* @param {array|object} list - array or object (named list) to iterate over
|
10
|
+
* @param {function} iterator - iterator to run
|
11
|
+
* @param {function} callback - invoked when all elements processed
|
12
|
+
* @returns {function} - jobs terminator
|
13
|
+
*/
|
14
|
+
function serial(list, iterator, callback)
|
15
|
+
{
|
16
|
+
return serialOrdered(list, iterator, null, callback);
|
17
|
+
}
|
@@ -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.
|