zai-fca 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of zai-fca might be problematic. Click here for more details.
- package/.cache/replit/env/latest +56 -0
- package/.cache/replit/env/latest.json +1 -0
- package/.cache/replit/modules/nodejs-20.res +1 -0
- package/.cache/replit/modules/replit.res +1 -0
- package/.cache/replit/modules.stamp +0 -0
- package/.cache/typescript/5.6/node_modules/.package-lock.json +178 -0
- package/.cache/typescript/5.6/node_modules/@types/bluebird/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/@types/bluebird/README.md +15 -0
- package/.cache/typescript/5.6/node_modules/@types/bluebird/index.d.ts +1365 -0
- package/.cache/typescript/5.6/node_modules/@types/bluebird/package.json +25 -0
- package/.cache/typescript/5.6/node_modules/@types/caseless/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/@types/caseless/README.md +48 -0
- package/.cache/typescript/5.6/node_modules/@types/caseless/index.d.ts +29 -0
- package/.cache/typescript/5.6/node_modules/@types/caseless/package.json +35 -0
- package/.cache/typescript/5.6/node_modules/@types/mocha/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/@types/mocha/README.md +15 -0
- package/.cache/typescript/5.6/node_modules/@types/mocha/index.d.ts +2929 -0
- package/.cache/typescript/5.6/node_modules/@types/mocha/package.json +56 -0
- package/.cache/typescript/5.6/node_modules/@types/node/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/@types/node/README.md +15 -0
- package/.cache/typescript/5.6/node_modules/@types/node/assert/strict.d.ts +8 -0
- package/.cache/typescript/5.6/node_modules/@types/node/assert.d.ts +1040 -0
- package/.cache/typescript/5.6/node_modules/@types/node/async_hooks.d.ts +541 -0
- package/.cache/typescript/5.6/node_modules/@types/node/buffer.buffer.d.ts +385 -0
- package/.cache/typescript/5.6/node_modules/@types/node/buffer.d.ts +1933 -0
- package/.cache/typescript/5.6/node_modules/@types/node/child_process.d.ts +1549 -0
- package/.cache/typescript/5.6/node_modules/@types/node/cluster.d.ts +579 -0
- package/.cache/typescript/5.6/node_modules/@types/node/compatibility/disposable.d.ts +16 -0
- package/.cache/typescript/5.6/node_modules/@types/node/compatibility/index.d.ts +9 -0
- package/.cache/typescript/5.6/node_modules/@types/node/compatibility/indexable.d.ts +23 -0
- package/.cache/typescript/5.6/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
- package/.cache/typescript/5.6/node_modules/@types/node/console.d.ts +452 -0
- package/.cache/typescript/5.6/node_modules/@types/node/constants.d.ts +19 -0
- package/.cache/typescript/5.6/node_modules/@types/node/crypto.d.ts +4475 -0
- package/.cache/typescript/5.6/node_modules/@types/node/dgram.d.ts +596 -0
- package/.cache/typescript/5.6/node_modules/@types/node/diagnostics_channel.d.ts +554 -0
- package/.cache/typescript/5.6/node_modules/@types/node/dns/promises.d.ts +476 -0
- package/.cache/typescript/5.6/node_modules/@types/node/dns.d.ts +865 -0
- package/.cache/typescript/5.6/node_modules/@types/node/dom-events.d.ts +124 -0
- package/.cache/typescript/5.6/node_modules/@types/node/domain.d.ts +170 -0
- package/.cache/typescript/5.6/node_modules/@types/node/events.d.ts +931 -0
- package/.cache/typescript/5.6/node_modules/@types/node/fs/promises.d.ts +1275 -0
- package/.cache/typescript/5.6/node_modules/@types/node/fs.d.ts +4396 -0
- package/.cache/typescript/5.6/node_modules/@types/node/globals.d.ts +566 -0
- package/.cache/typescript/5.6/node_modules/@types/node/globals.typedarray.d.ts +21 -0
- package/.cache/typescript/5.6/node_modules/@types/node/http.d.ts +1958 -0
- package/.cache/typescript/5.6/node_modules/@types/node/http2.d.ts +2558 -0
- package/.cache/typescript/5.6/node_modules/@types/node/https.d.ts +543 -0
- package/.cache/typescript/5.6/node_modules/@types/node/index.d.ts +92 -0
- package/.cache/typescript/5.6/node_modules/@types/node/inspector.d.ts +3966 -0
- package/.cache/typescript/5.6/node_modules/@types/node/module.d.ts +402 -0
- package/.cache/typescript/5.6/node_modules/@types/node/net.d.ts +1001 -0
- package/.cache/typescript/5.6/node_modules/@types/node/os.d.ts +495 -0
- package/.cache/typescript/5.6/node_modules/@types/node/package.json +220 -0
- package/.cache/typescript/5.6/node_modules/@types/node/path.d.ts +200 -0
- package/.cache/typescript/5.6/node_modules/@types/node/perf_hooks.d.ts +965 -0
- package/.cache/typescript/5.6/node_modules/@types/node/process.d.ts +1963 -0
- package/.cache/typescript/5.6/node_modules/@types/node/punycode.d.ts +117 -0
- package/.cache/typescript/5.6/node_modules/@types/node/querystring.d.ts +153 -0
- package/.cache/typescript/5.6/node_modules/@types/node/readline/promises.d.ts +162 -0
- package/.cache/typescript/5.6/node_modules/@types/node/readline.d.ts +589 -0
- package/.cache/typescript/5.6/node_modules/@types/node/repl.d.ts +430 -0
- package/.cache/typescript/5.6/node_modules/@types/node/sea.d.ts +153 -0
- package/.cache/typescript/5.6/node_modules/@types/node/sqlite.d.ts +213 -0
- package/.cache/typescript/5.6/node_modules/@types/node/stream/consumers.d.ts +12 -0
- package/.cache/typescript/5.6/node_modules/@types/node/stream/promises.d.ts +90 -0
- package/.cache/typescript/5.6/node_modules/@types/node/stream/web.d.ts +609 -0
- package/.cache/typescript/5.6/node_modules/@types/node/stream.d.ts +1726 -0
- package/.cache/typescript/5.6/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/.cache/typescript/5.6/node_modules/@types/node/test.d.ts +2248 -0
- package/.cache/typescript/5.6/node_modules/@types/node/timers/promises.d.ts +97 -0
- package/.cache/typescript/5.6/node_modules/@types/node/timers.d.ts +240 -0
- package/.cache/typescript/5.6/node_modules/@types/node/tls.d.ts +1226 -0
- package/.cache/typescript/5.6/node_modules/@types/node/trace_events.d.ts +197 -0
- package/.cache/typescript/5.6/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +385 -0
- package/.cache/typescript/5.6/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +19 -0
- package/.cache/typescript/5.6/node_modules/@types/node/ts5.6/index.d.ts +92 -0
- package/.cache/typescript/5.6/node_modules/@types/node/tty.d.ts +208 -0
- package/.cache/typescript/5.6/node_modules/@types/node/url.d.ts +972 -0
- package/.cache/typescript/5.6/node_modules/@types/node/util.d.ts +2371 -0
- package/.cache/typescript/5.6/node_modules/@types/node/v8.d.ts +808 -0
- package/.cache/typescript/5.6/node_modules/@types/node/vm.d.ts +976 -0
- package/.cache/typescript/5.6/node_modules/@types/node/wasi.d.ts +181 -0
- package/.cache/typescript/5.6/node_modules/@types/node/worker_threads.d.ts +745 -0
- package/.cache/typescript/5.6/node_modules/@types/node/zlib.d.ts +539 -0
- package/.cache/typescript/5.6/node_modules/@types/node-cron/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/@types/node-cron/README.md +76 -0
- package/.cache/typescript/5.6/node_modules/@types/node-cron/index.d.ts +57 -0
- package/.cache/typescript/5.6/node_modules/@types/node-cron/package.json +50 -0
- package/.cache/typescript/5.6/node_modules/@types/npmlog/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/@types/npmlog/README.md +15 -0
- package/.cache/typescript/5.6/node_modules/@types/npmlog/index.d.ts +84 -0
- package/.cache/typescript/5.6/node_modules/@types/npmlog/package.json +32 -0
- package/.cache/typescript/5.6/node_modules/@types/request/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/@types/request/README.md +15 -0
- package/.cache/typescript/5.6/node_modules/@types/request/index.d.ts +395 -0
- package/.cache/typescript/5.6/node_modules/@types/request/package.json +70 -0
- package/.cache/typescript/5.6/node_modules/@types/tough-cookie/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/@types/tough-cookie/README.md +15 -0
- package/.cache/typescript/5.6/node_modules/@types/tough-cookie/index.d.ts +321 -0
- package/.cache/typescript/5.6/node_modules/@types/tough-cookie/package.json +35 -0
- package/.cache/typescript/5.6/node_modules/asynckit/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/asynckit/README.md +233 -0
- package/.cache/typescript/5.6/node_modules/asynckit/bench.js +76 -0
- package/.cache/typescript/5.6/node_modules/asynckit/index.js +6 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/abort.js +29 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/async.js +34 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/defer.js +26 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/iterate.js +75 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/readable_asynckit.js +91 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/readable_parallel.js +25 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/readable_serial.js +25 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/readable_serial_ordered.js +29 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/state.js +37 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/streamify.js +141 -0
- package/.cache/typescript/5.6/node_modules/asynckit/lib/terminator.js +29 -0
- package/.cache/typescript/5.6/node_modules/asynckit/package.json +63 -0
- package/.cache/typescript/5.6/node_modules/asynckit/parallel.js +43 -0
- package/.cache/typescript/5.6/node_modules/asynckit/serial.js +17 -0
- package/.cache/typescript/5.6/node_modules/asynckit/serialOrdered.js +75 -0
- package/.cache/typescript/5.6/node_modules/asynckit/stream.js +21 -0
- package/.cache/typescript/5.6/node_modules/combined-stream/License +19 -0
- package/.cache/typescript/5.6/node_modules/combined-stream/Readme.md +138 -0
- package/.cache/typescript/5.6/node_modules/combined-stream/lib/combined_stream.js +208 -0
- package/.cache/typescript/5.6/node_modules/combined-stream/package.json +25 -0
- package/.cache/typescript/5.6/node_modules/combined-stream/yarn.lock +17 -0
- package/.cache/typescript/5.6/node_modules/delayed-stream/License +19 -0
- package/.cache/typescript/5.6/node_modules/delayed-stream/Makefile +7 -0
- package/.cache/typescript/5.6/node_modules/delayed-stream/Readme.md +141 -0
- package/.cache/typescript/5.6/node_modules/delayed-stream/lib/delayed_stream.js +107 -0
- package/.cache/typescript/5.6/node_modules/delayed-stream/package.json +27 -0
- package/.cache/typescript/5.6/node_modules/form-data/License +19 -0
- package/.cache/typescript/5.6/node_modules/form-data/Readme.md +350 -0
- package/.cache/typescript/5.6/node_modules/form-data/index.d.ts +51 -0
- package/.cache/typescript/5.6/node_modules/form-data/lib/browser.js +2 -0
- package/.cache/typescript/5.6/node_modules/form-data/lib/form_data.js +484 -0
- package/.cache/typescript/5.6/node_modules/form-data/lib/populate.js +10 -0
- package/.cache/typescript/5.6/node_modules/form-data/package.json +72 -0
- package/.cache/typescript/5.6/node_modules/mime-db/HISTORY.md +507 -0
- package/.cache/typescript/5.6/node_modules/mime-db/LICENSE +23 -0
- package/.cache/typescript/5.6/node_modules/mime-db/README.md +100 -0
- package/.cache/typescript/5.6/node_modules/mime-db/db.json +8519 -0
- package/.cache/typescript/5.6/node_modules/mime-db/index.js +12 -0
- package/.cache/typescript/5.6/node_modules/mime-db/package.json +60 -0
- package/.cache/typescript/5.6/node_modules/mime-types/HISTORY.md +397 -0
- package/.cache/typescript/5.6/node_modules/mime-types/LICENSE +23 -0
- package/.cache/typescript/5.6/node_modules/mime-types/README.md +113 -0
- package/.cache/typescript/5.6/node_modules/mime-types/index.js +188 -0
- package/.cache/typescript/5.6/node_modules/mime-types/package.json +44 -0
- package/.cache/typescript/5.6/node_modules/safe-buffer/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/safe-buffer/README.md +584 -0
- package/.cache/typescript/5.6/node_modules/safe-buffer/index.d.ts +187 -0
- package/.cache/typescript/5.6/node_modules/safe-buffer/index.js +65 -0
- package/.cache/typescript/5.6/node_modules/safe-buffer/package.json +51 -0
- package/.cache/typescript/5.6/node_modules/types-registry/README.md +2 -0
- package/.cache/typescript/5.6/node_modules/types-registry/index.json +1 -0
- package/.cache/typescript/5.6/node_modules/types-registry/package.json +20 -0
- package/.cache/typescript/5.6/node_modules/undici-types/LICENSE +21 -0
- package/.cache/typescript/5.6/node_modules/undici-types/README.md +6 -0
- package/.cache/typescript/5.6/node_modules/undici-types/agent.d.ts +31 -0
- package/.cache/typescript/5.6/node_modules/undici-types/api.d.ts +43 -0
- package/.cache/typescript/5.6/node_modules/undici-types/balanced-pool.d.ts +29 -0
- package/.cache/typescript/5.6/node_modules/undici-types/cache.d.ts +36 -0
- package/.cache/typescript/5.6/node_modules/undici-types/client.d.ts +108 -0
- package/.cache/typescript/5.6/node_modules/undici-types/connector.d.ts +34 -0
- package/.cache/typescript/5.6/node_modules/undici-types/content-type.d.ts +21 -0
- package/.cache/typescript/5.6/node_modules/undici-types/cookies.d.ts +28 -0
- package/.cache/typescript/5.6/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
- package/.cache/typescript/5.6/node_modules/undici-types/dispatcher.d.ts +255 -0
- package/.cache/typescript/5.6/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
- package/.cache/typescript/5.6/node_modules/undici-types/errors.d.ts +149 -0
- package/.cache/typescript/5.6/node_modules/undici-types/eventsource.d.ts +61 -0
- package/.cache/typescript/5.6/node_modules/undici-types/fetch.d.ts +209 -0
- package/.cache/typescript/5.6/node_modules/undici-types/file.d.ts +39 -0
- package/.cache/typescript/5.6/node_modules/undici-types/filereader.d.ts +54 -0
- package/.cache/typescript/5.6/node_modules/undici-types/formdata.d.ts +108 -0
- package/.cache/typescript/5.6/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/.cache/typescript/5.6/node_modules/undici-types/global-origin.d.ts +7 -0
- package/.cache/typescript/5.6/node_modules/undici-types/handlers.d.ts +15 -0
- package/.cache/typescript/5.6/node_modules/undici-types/header.d.ts +4 -0
- package/.cache/typescript/5.6/node_modules/undici-types/index.d.ts +71 -0
- package/.cache/typescript/5.6/node_modules/undici-types/interceptors.d.ts +17 -0
- package/.cache/typescript/5.6/node_modules/undici-types/mock-agent.d.ts +50 -0
- package/.cache/typescript/5.6/node_modules/undici-types/mock-client.d.ts +25 -0
- package/.cache/typescript/5.6/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/.cache/typescript/5.6/node_modules/undici-types/mock-interceptor.d.ts +93 -0
- package/.cache/typescript/5.6/node_modules/undici-types/mock-pool.d.ts +25 -0
- package/.cache/typescript/5.6/node_modules/undici-types/package.json +55 -0
- package/.cache/typescript/5.6/node_modules/undici-types/patch.d.ts +33 -0
- package/.cache/typescript/5.6/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/.cache/typescript/5.6/node_modules/undici-types/pool.d.ts +39 -0
- package/.cache/typescript/5.6/node_modules/undici-types/proxy-agent.d.ts +28 -0
- package/.cache/typescript/5.6/node_modules/undici-types/readable.d.ts +60 -0
- package/.cache/typescript/5.6/node_modules/undici-types/retry-agent.d.ts +8 -0
- package/.cache/typescript/5.6/node_modules/undici-types/retry-handler.d.ts +116 -0
- package/.cache/typescript/5.6/node_modules/undici-types/util.d.ts +18 -0
- package/.cache/typescript/5.6/node_modules/undici-types/webidl.d.ts +222 -0
- package/.cache/typescript/5.6/node_modules/undici-types/websocket.d.ts +150 -0
- package/.cache/typescript/5.6/package-lock.json +190 -0
- package/.cache/typescript/5.6/package.json +1 -0
- package/.replit +4 -0
- package/.upm/store.json +1 -0
- package/LICENSE +21 -0
- package/README.md +289 -0
- package/index.js +460 -0
- package/package.json +45 -0
- package/src/Screenshot.js +83 -0
- package/src/addExternalModule.js +25 -0
- package/src/addUserToGroup.js +115 -0
- package/src/changeAdminStatus.js +103 -0
- package/src/changeArchivedStatus.js +55 -0
- package/src/changeAvatar.js +136 -0
- package/src/changeAvatarV2.js +86 -0
- package/src/changeAvt.js +85 -0
- package/src/changeBio.js +76 -0
- package/src/changeBlockedStatus.js +49 -0
- package/src/changeBlockedStatusMqtt.js +80 -0
- package/src/changeCover.js +72 -0
- package/src/changeGroupImage.js +135 -0
- package/src/changeName.js +79 -0
- package/src/changeNickname.js +59 -0
- package/src/changeThreadColor.js +65 -0
- package/src/changeThreadEmoji.js +55 -0
- package/src/changeUsername.js +59 -0
- package/src/createCommentPost.js +230 -0
- package/src/createNewGroup.js +88 -0
- package/src/createPoll.js +71 -0
- package/src/createPost.js +276 -0
- package/src/deleteMessage.js +56 -0
- package/src/deleteThread.js +56 -0
- package/src/editMessage.js +59 -0
- package/src/editMessageOld.js +67 -0
- package/src/follow.js +74 -0
- package/src/forwardAttachment.js +60 -0
- package/src/getAccess.js +112 -0
- package/src/getAvatarUser.js +78 -0
- package/src/getCurrentUserID.js +7 -0
- package/src/getEmojiUrl.js +29 -0
- package/src/getFriendsList.js +83 -0
- package/src/getMessage.js +835 -0
- package/src/getRegion.js +7 -0
- package/src/getThreadHistory.js +680 -0
- package/src/getThreadHistoryDeprecated.js +71 -0
- package/src/getThreadInfo.js +232 -0
- package/src/getThreadInfoDeprecated.js +56 -0
- package/src/getThreadList.js +213 -0
- package/src/getThreadListDeprecated.js +46 -0
- package/src/getThreadPictures.js +59 -0
- package/src/getUID.js +119 -0
- package/src/getUserID.js +61 -0
- package/src/getUserInfo.js +66 -0
- package/src/handleFriendRequest.js +46 -0
- package/src/handleMessageRequest.js +47 -0
- package/src/httpGet.js +49 -0
- package/src/httpPost.js +48 -0
- package/src/listenMqtt.js +827 -0
- package/src/listenMqtt.txt +827 -0
- package/src/logout.js +75 -0
- package/src/markAsDelivered.js +47 -0
- package/src/markAsRead.js +70 -0
- package/src/markAsReadAll.js +40 -0
- package/src/markAsSeen.js +48 -0
- package/src/muteThread.js +45 -0
- package/src/postFormData.txt +46 -0
- package/src/refreshFb_dtsg.js +89 -0
- package/src/removeUserFromGroup.js +79 -0
- package/src/resolvePhotoUrl.js +45 -0
- package/src/searchForThread.js +53 -0
- package/src/searchStickers.js +53 -0
- package/src/sendMessage.js +329 -0
- package/src/sendMessageMqtt.js +322 -0
- package/src/sendTypingIndicator.js +101 -0
- package/src/sendTypingIndicatorV2.js +28 -0
- package/src/setMessageReaction.js +122 -0
- package/src/setMessageReactionMqtt.js +62 -0
- package/src/setPostReaction.js +112 -0
- package/src/setProfileGuard.js +45 -0
- package/src/setStoryReaction.js +64 -0
- package/src/setTitle.js +90 -0
- package/src/shareContact.js +110 -0
- package/src/shareLink.js +59 -0
- package/src/stopListenMqtt.js +23 -0
- package/src/threadColors.js +131 -0
- package/src/unfriend.js +52 -0
- package/src/unsendMessage.js +45 -0
- package/src/uploadAttachment.js +94 -0
- package/test/example-config.json +18 -0
- package/test/test-page.js +140 -0
- package/test/test.js +385 -0
- package/utils.js +2876 -0
| @@ -0,0 +1,233 @@ | |
| 1 | 
            +
            # asynckit [](https://www.npmjs.com/package/asynckit)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Minimal async jobs utility library, with streams support.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            [](https://travis-ci.org/alexindigo/asynckit)
         | 
| 6 | 
            +
            [](https://travis-ci.org/alexindigo/asynckit)
         | 
| 7 | 
            +
            [](https://ci.appveyor.com/project/alexindigo/asynckit)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            [](https://coveralls.io/github/alexindigo/asynckit?branch=master)
         | 
| 10 | 
            +
            [](https://david-dm.org/alexindigo/asynckit)
         | 
| 11 | 
            +
            [](https://www.bithound.io/github/alexindigo/asynckit)
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            <!-- [](https://www.npmjs.com/package/reamde) -->
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects.
         | 
| 16 | 
            +
            Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators.
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            | compression        |     size |
         | 
| 21 | 
            +
            | :----------------- | -------: |
         | 
| 22 | 
            +
            | asynckit.js        | 12.34 kB |
         | 
| 23 | 
            +
            | asynckit.min.js    |  4.11 kB |
         | 
| 24 | 
            +
            | asynckit.min.js.gz |  1.47 kB |
         | 
| 25 | 
            +
             | 
| 26 | 
            +
             | 
| 27 | 
            +
            ## Install
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            ```sh
         | 
| 30 | 
            +
            $ npm install --save asynckit
         | 
| 31 | 
            +
            ```
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            ## Examples
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            ### Parallel Jobs
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            Runs iterator over provided array in parallel. Stores output in the `result` array,
         | 
| 38 | 
            +
            on the matching positions. In unlikely event of an error from one of the jobs,
         | 
| 39 | 
            +
            will terminate rest of the active jobs (if abort function is provided)
         | 
| 40 | 
            +
            and return error along with salvaged data to the main callback function.
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            #### Input Array
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            ```javascript
         | 
| 45 | 
            +
            var parallel = require('asynckit').parallel
         | 
| 46 | 
            +
              , assert   = require('assert')
         | 
| 47 | 
            +
              ;
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            var source         = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
         | 
| 50 | 
            +
              , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
         | 
| 51 | 
            +
              , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ]
         | 
| 52 | 
            +
              , target         = []
         | 
| 53 | 
            +
              ;
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            parallel(source, asyncJob, function(err, result)
         | 
| 56 | 
            +
            {
         | 
| 57 | 
            +
              assert.deepEqual(result, expectedResult);
         | 
| 58 | 
            +
              assert.deepEqual(target, expectedTarget);
         | 
| 59 | 
            +
            });
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            // async job accepts one element from the array
         | 
| 62 | 
            +
            // and a callback function
         | 
| 63 | 
            +
            function asyncJob(item, cb)
         | 
| 64 | 
            +
            {
         | 
| 65 | 
            +
              // different delays (in ms) per item
         | 
| 66 | 
            +
              var delay = item * 25;
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              // pretend different jobs take different time to finish
         | 
| 69 | 
            +
              // and not in consequential order
         | 
| 70 | 
            +
              var timeoutId = setTimeout(function() {
         | 
| 71 | 
            +
                target.push(item);
         | 
| 72 | 
            +
                cb(null, item * 2);
         | 
| 73 | 
            +
              }, delay);
         | 
| 74 | 
            +
             | 
| 75 | 
            +
              // allow to cancel "leftover" jobs upon error
         | 
| 76 | 
            +
              // return function, invoking of which will abort this job
         | 
| 77 | 
            +
              return clearTimeout.bind(null, timeoutId);
         | 
| 78 | 
            +
            }
         | 
| 79 | 
            +
            ```
         | 
| 80 | 
            +
             | 
| 81 | 
            +
            More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js).
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            #### Input Object
         | 
| 84 | 
            +
             | 
| 85 | 
            +
            Also it supports named jobs, listed via object.
         | 
| 86 | 
            +
             | 
| 87 | 
            +
            ```javascript
         | 
| 88 | 
            +
            var parallel = require('asynckit/parallel')
         | 
| 89 | 
            +
              , assert   = require('assert')
         | 
| 90 | 
            +
              ;
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            var source         = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 }
         | 
| 93 | 
            +
              , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 }
         | 
| 94 | 
            +
              , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ]
         | 
| 95 | 
            +
              , expectedKeys   = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ]
         | 
| 96 | 
            +
              , target         = []
         | 
| 97 | 
            +
              , keys           = []
         | 
| 98 | 
            +
              ;
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            parallel(source, asyncJob, function(err, result)
         | 
| 101 | 
            +
            {
         | 
| 102 | 
            +
              assert.deepEqual(result, expectedResult);
         | 
| 103 | 
            +
              assert.deepEqual(target, expectedTarget);
         | 
| 104 | 
            +
              assert.deepEqual(keys, expectedKeys);
         | 
| 105 | 
            +
            });
         | 
| 106 | 
            +
             | 
| 107 | 
            +
            // supports full value, key, callback (shortcut) interface
         | 
| 108 | 
            +
            function asyncJob(item, key, cb)
         | 
| 109 | 
            +
            {
         | 
| 110 | 
            +
              // different delays (in ms) per item
         | 
| 111 | 
            +
              var delay = item * 25;
         | 
| 112 | 
            +
             | 
| 113 | 
            +
              // pretend different jobs take different time to finish
         | 
| 114 | 
            +
              // and not in consequential order
         | 
| 115 | 
            +
              var timeoutId = setTimeout(function() {
         | 
| 116 | 
            +
                keys.push(key);
         | 
| 117 | 
            +
                target.push(item);
         | 
| 118 | 
            +
                cb(null, item * 2);
         | 
| 119 | 
            +
              }, delay);
         | 
| 120 | 
            +
             | 
| 121 | 
            +
              // allow to cancel "leftover" jobs upon error
         | 
| 122 | 
            +
              // return function, invoking of which will abort this job
         | 
| 123 | 
            +
              return clearTimeout.bind(null, timeoutId);
         | 
| 124 | 
            +
            }
         | 
| 125 | 
            +
            ```
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js).
         | 
| 128 | 
            +
             | 
| 129 | 
            +
            ### Serial Jobs
         | 
| 130 | 
            +
             | 
| 131 | 
            +
            Runs iterator over provided array sequentially. Stores output in the `result` array,
         | 
| 132 | 
            +
            on the matching positions. In unlikely event of an error from one of the jobs,
         | 
| 133 | 
            +
            will not proceed to the rest of the items in the list
         | 
| 134 | 
            +
            and return error along with salvaged data to the main callback function.
         | 
| 135 | 
            +
             | 
| 136 | 
            +
            #### Input Array
         | 
| 137 | 
            +
             | 
| 138 | 
            +
            ```javascript
         | 
| 139 | 
            +
            var serial = require('asynckit/serial')
         | 
| 140 | 
            +
              , assert = require('assert')
         | 
| 141 | 
            +
              ;
         | 
| 142 | 
            +
             | 
| 143 | 
            +
            var source         = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
         | 
| 144 | 
            +
              , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
         | 
| 145 | 
            +
              , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
         | 
| 146 | 
            +
              , target         = []
         | 
| 147 | 
            +
              ;
         | 
| 148 | 
            +
             | 
| 149 | 
            +
            serial(source, asyncJob, function(err, result)
         | 
| 150 | 
            +
            {
         | 
| 151 | 
            +
              assert.deepEqual(result, expectedResult);
         | 
| 152 | 
            +
              assert.deepEqual(target, expectedTarget);
         | 
| 153 | 
            +
            });
         | 
| 154 | 
            +
             | 
| 155 | 
            +
            // extended interface (item, key, callback)
         | 
| 156 | 
            +
            // also supported for arrays
         | 
| 157 | 
            +
            function asyncJob(item, key, cb)
         | 
| 158 | 
            +
            {
         | 
| 159 | 
            +
              target.push(key);
         | 
| 160 | 
            +
             | 
| 161 | 
            +
              // it will be automatically made async
         | 
| 162 | 
            +
              // even it iterator "returns" in the same event loop
         | 
| 163 | 
            +
              cb(null, item * 2);
         | 
| 164 | 
            +
            }
         | 
| 165 | 
            +
            ```
         | 
| 166 | 
            +
             | 
| 167 | 
            +
            More examples could be found in [test/test-serial-array.js](test/test-serial-array.js).
         | 
| 168 | 
            +
             | 
| 169 | 
            +
            #### Input Object
         | 
| 170 | 
            +
             | 
| 171 | 
            +
            Also it supports named jobs, listed via object.
         | 
| 172 | 
            +
             | 
| 173 | 
            +
            ```javascript
         | 
| 174 | 
            +
            var serial = require('asynckit').serial
         | 
| 175 | 
            +
              , assert = require('assert')
         | 
| 176 | 
            +
              ;
         | 
| 177 | 
            +
             | 
| 178 | 
            +
            var source         = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
         | 
| 179 | 
            +
              , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
         | 
| 180 | 
            +
              , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
         | 
| 181 | 
            +
              , target         = []
         | 
| 182 | 
            +
              ;
         | 
| 183 | 
            +
             | 
| 184 | 
            +
            var source         = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 }
         | 
| 185 | 
            +
              , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 }
         | 
| 186 | 
            +
              , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
         | 
| 187 | 
            +
              , target         = []
         | 
| 188 | 
            +
              ;
         | 
| 189 | 
            +
             | 
| 190 | 
            +
             | 
| 191 | 
            +
            serial(source, asyncJob, function(err, result)
         | 
| 192 | 
            +
            {
         | 
| 193 | 
            +
              assert.deepEqual(result, expectedResult);
         | 
| 194 | 
            +
              assert.deepEqual(target, expectedTarget);
         | 
| 195 | 
            +
            });
         | 
| 196 | 
            +
             | 
| 197 | 
            +
            // shortcut interface (item, callback)
         | 
| 198 | 
            +
            // works for object as well as for the arrays
         | 
| 199 | 
            +
            function asyncJob(item, cb)
         | 
| 200 | 
            +
            {
         | 
| 201 | 
            +
              target.push(item);
         | 
| 202 | 
            +
             | 
| 203 | 
            +
              // it will be automatically made async
         | 
| 204 | 
            +
              // even it iterator "returns" in the same event loop
         | 
| 205 | 
            +
              cb(null, item * 2);
         | 
| 206 | 
            +
            }
         | 
| 207 | 
            +
            ```
         | 
| 208 | 
            +
             | 
| 209 | 
            +
            More examples could be found in [test/test-serial-object.js](test/test-serial-object.js).
         | 
| 210 | 
            +
             | 
| 211 | 
            +
            _Note: Since _object_ is an _unordered_ collection of properties,
         | 
| 212 | 
            +
            it may produce unexpected results with sequential iterations.
         | 
| 213 | 
            +
            Whenever order of the jobs' execution is important please use `serialOrdered` method._
         | 
| 214 | 
            +
             | 
| 215 | 
            +
            ### Ordered Serial Iterations
         | 
| 216 | 
            +
             | 
| 217 | 
            +
            TBD
         | 
| 218 | 
            +
             | 
| 219 | 
            +
            For example [compare-property](compare-property) package.
         | 
| 220 | 
            +
             | 
| 221 | 
            +
            ### Streaming interface
         | 
| 222 | 
            +
             | 
| 223 | 
            +
            TBD
         | 
| 224 | 
            +
             | 
| 225 | 
            +
            ## Want to Know More?
         | 
| 226 | 
            +
             | 
| 227 | 
            +
            More examples can be found in [test folder](test/).
         | 
| 228 | 
            +
             | 
| 229 | 
            +
            Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions.
         | 
| 230 | 
            +
             | 
| 231 | 
            +
            ## License
         | 
| 232 | 
            +
             | 
| 233 | 
            +
            AsyncKit is licensed under the MIT license.
         | 
| @@ -0,0 +1,76 @@ | |
| 1 | 
            +
            /* eslint no-console: "off" */
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            var asynckit = require('./')
         | 
| 4 | 
            +
              , async    = require('async')
         | 
| 5 | 
            +
              , assert   = require('assert')
         | 
| 6 | 
            +
              , expected = 0
         | 
| 7 | 
            +
              ;
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            var Benchmark = require('benchmark');
         | 
| 10 | 
            +
            var suite = new Benchmark.Suite;
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            var source = [];
         | 
| 13 | 
            +
            for (var z = 1; z < 100; z++)
         | 
| 14 | 
            +
            {
         | 
| 15 | 
            +
              source.push(z);
         | 
| 16 | 
            +
              expected += z;
         | 
| 17 | 
            +
            }
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            suite
         | 
| 20 | 
            +
            // add tests
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            .add('async.map', function(deferred)
         | 
| 23 | 
            +
            {
         | 
| 24 | 
            +
              var total = 0;
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              async.map(source,
         | 
| 27 | 
            +
              function(i, cb)
         | 
| 28 | 
            +
              {
         | 
| 29 | 
            +
                setImmediate(function()
         | 
| 30 | 
            +
                {
         | 
| 31 | 
            +
                  total += i;
         | 
| 32 | 
            +
                  cb(null, total);
         | 
| 33 | 
            +
                });
         | 
| 34 | 
            +
              },
         | 
| 35 | 
            +
              function(err, result)
         | 
| 36 | 
            +
              {
         | 
| 37 | 
            +
                assert.ifError(err);
         | 
| 38 | 
            +
                assert.equal(result[result.length - 1], expected);
         | 
| 39 | 
            +
                deferred.resolve();
         | 
| 40 | 
            +
              });
         | 
| 41 | 
            +
            }, {'defer': true})
         | 
| 42 | 
            +
             | 
| 43 | 
            +
             | 
| 44 | 
            +
            .add('asynckit.parallel', function(deferred)
         | 
| 45 | 
            +
            {
         | 
| 46 | 
            +
              var total = 0;
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              asynckit.parallel(source,
         | 
| 49 | 
            +
              function(i, cb)
         | 
| 50 | 
            +
              {
         | 
| 51 | 
            +
                setImmediate(function()
         | 
| 52 | 
            +
                {
         | 
| 53 | 
            +
                  total += i;
         | 
| 54 | 
            +
                  cb(null, total);
         | 
| 55 | 
            +
                });
         | 
| 56 | 
            +
              },
         | 
| 57 | 
            +
              function(err, result)
         | 
| 58 | 
            +
              {
         | 
| 59 | 
            +
                assert.ifError(err);
         | 
| 60 | 
            +
                assert.equal(result[result.length - 1], expected);
         | 
| 61 | 
            +
                deferred.resolve();
         | 
| 62 | 
            +
              });
         | 
| 63 | 
            +
            }, {'defer': true})
         | 
| 64 | 
            +
             | 
| 65 | 
            +
             | 
| 66 | 
            +
            // add listeners
         | 
| 67 | 
            +
            .on('cycle', function(ev)
         | 
| 68 | 
            +
            {
         | 
| 69 | 
            +
              console.log(String(ev.target));
         | 
| 70 | 
            +
            })
         | 
| 71 | 
            +
            .on('complete', function()
         | 
| 72 | 
            +
            {
         | 
| 73 | 
            +
              console.log('Fastest is ' + this.filter('fastest').map('name'));
         | 
| 74 | 
            +
            })
         | 
| 75 | 
            +
            // run async
         | 
| 76 | 
            +
            .run({ 'async': true });
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            // API
         | 
| 2 | 
            +
            module.exports = abort;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            /**
         | 
| 5 | 
            +
             * Aborts leftover active jobs
         | 
| 6 | 
            +
             *
         | 
| 7 | 
            +
             * @param {object} state - current state object
         | 
| 8 | 
            +
             */
         | 
| 9 | 
            +
            function abort(state)
         | 
| 10 | 
            +
            {
         | 
| 11 | 
            +
              Object.keys(state.jobs).forEach(clean.bind(state));
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              // reset leftover jobs
         | 
| 14 | 
            +
              state.jobs = {};
         | 
| 15 | 
            +
            }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            /**
         | 
| 18 | 
            +
             * Cleans up leftover job by invoking abort function for the provided job id
         | 
| 19 | 
            +
             *
         | 
| 20 | 
            +
             * @this  state
         | 
| 21 | 
            +
             * @param {string|number} key - job id to abort
         | 
| 22 | 
            +
             */
         | 
| 23 | 
            +
            function clean(key)
         | 
| 24 | 
            +
            {
         | 
| 25 | 
            +
              if (typeof this.jobs[key] == 'function')
         | 
| 26 | 
            +
              {
         | 
| 27 | 
            +
                this.jobs[key]();
         | 
| 28 | 
            +
              }
         | 
| 29 | 
            +
            }
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            var defer = require('./defer.js');
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            // API
         | 
| 4 | 
            +
            module.exports = async;
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            /**
         | 
| 7 | 
            +
             * Runs provided callback asynchronously
         | 
| 8 | 
            +
             * even if callback itself is not
         | 
| 9 | 
            +
             *
         | 
| 10 | 
            +
             * @param   {function} callback - callback to invoke
         | 
| 11 | 
            +
             * @returns {function} - augmented callback
         | 
| 12 | 
            +
             */
         | 
| 13 | 
            +
            function async(callback)
         | 
| 14 | 
            +
            {
         | 
| 15 | 
            +
              var isAsync = false;
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              // check if async happened
         | 
| 18 | 
            +
              defer(function() { isAsync = true; });
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              return function async_callback(err, result)
         | 
| 21 | 
            +
              {
         | 
| 22 | 
            +
                if (isAsync)
         | 
| 23 | 
            +
                {
         | 
| 24 | 
            +
                  callback(err, result);
         | 
| 25 | 
            +
                }
         | 
| 26 | 
            +
                else
         | 
| 27 | 
            +
                {
         | 
| 28 | 
            +
                  defer(function nextTick_callback()
         | 
| 29 | 
            +
                  {
         | 
| 30 | 
            +
                    callback(err, result);
         | 
| 31 | 
            +
                  });
         | 
| 32 | 
            +
                }
         | 
| 33 | 
            +
              };
         | 
| 34 | 
            +
            }
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            module.exports = defer;
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            /**
         | 
| 4 | 
            +
             * Runs provided function on next iteration of the event loop
         | 
| 5 | 
            +
             *
         | 
| 6 | 
            +
             * @param {function} fn - function to run
         | 
| 7 | 
            +
             */
         | 
| 8 | 
            +
            function defer(fn)
         | 
| 9 | 
            +
            {
         | 
| 10 | 
            +
              var nextTick = typeof setImmediate == 'function'
         | 
| 11 | 
            +
                ? setImmediate
         | 
| 12 | 
            +
                : (
         | 
| 13 | 
            +
                  typeof process == 'object' && typeof process.nextTick == 'function'
         | 
| 14 | 
            +
                  ? process.nextTick
         | 
| 15 | 
            +
                  : null
         | 
| 16 | 
            +
                );
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              if (nextTick)
         | 
| 19 | 
            +
              {
         | 
| 20 | 
            +
                nextTick(fn);
         | 
| 21 | 
            +
              }
         | 
| 22 | 
            +
              else
         | 
| 23 | 
            +
              {
         | 
| 24 | 
            +
                setTimeout(fn, 0);
         | 
| 25 | 
            +
              }
         | 
| 26 | 
            +
            }
         | 
| @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            var async = require('./async.js')
         | 
| 2 | 
            +
              , abort = require('./abort.js')
         | 
| 3 | 
            +
              ;
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            // API
         | 
| 6 | 
            +
            module.exports = iterate;
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            /**
         | 
| 9 | 
            +
             * Iterates over each job object
         | 
| 10 | 
            +
             *
         | 
| 11 | 
            +
             * @param {array|object} list - array or object (named list) to iterate over
         | 
| 12 | 
            +
             * @param {function} iterator - iterator to run
         | 
| 13 | 
            +
             * @param {object} state - current job status
         | 
| 14 | 
            +
             * @param {function} callback - invoked when all elements processed
         | 
| 15 | 
            +
             */
         | 
| 16 | 
            +
            function iterate(list, iterator, state, callback)
         | 
| 17 | 
            +
            {
         | 
| 18 | 
            +
              // store current index
         | 
| 19 | 
            +
              var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              state.jobs[key] = runJob(iterator, key, list[key], function(error, output)
         | 
| 22 | 
            +
              {
         | 
| 23 | 
            +
                // don't repeat yourself
         | 
| 24 | 
            +
                // skip secondary callbacks
         | 
| 25 | 
            +
                if (!(key in state.jobs))
         | 
| 26 | 
            +
                {
         | 
| 27 | 
            +
                  return;
         | 
| 28 | 
            +
                }
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                // clean up jobs
         | 
| 31 | 
            +
                delete state.jobs[key];
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                if (error)
         | 
| 34 | 
            +
                {
         | 
| 35 | 
            +
                  // don't process rest of the results
         | 
| 36 | 
            +
                  // stop still active jobs
         | 
| 37 | 
            +
                  // and reset the list
         | 
| 38 | 
            +
                  abort(state);
         | 
| 39 | 
            +
                }
         | 
| 40 | 
            +
                else
         | 
| 41 | 
            +
                {
         | 
| 42 | 
            +
                  state.results[key] = output;
         | 
| 43 | 
            +
                }
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                // return salvaged results
         | 
| 46 | 
            +
                callback(error, state.results);
         | 
| 47 | 
            +
              });
         | 
| 48 | 
            +
            }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            /**
         | 
| 51 | 
            +
             * Runs iterator over provided job element
         | 
| 52 | 
            +
             *
         | 
| 53 | 
            +
             * @param   {function} iterator - iterator to invoke
         | 
| 54 | 
            +
             * @param   {string|number} key - key/index of the element in the list of jobs
         | 
| 55 | 
            +
             * @param   {mixed} item - job description
         | 
| 56 | 
            +
             * @param   {function} callback - invoked after iterator is done with the job
         | 
| 57 | 
            +
             * @returns {function|mixed} - job abort function or something else
         | 
| 58 | 
            +
             */
         | 
| 59 | 
            +
            function runJob(iterator, key, item, callback)
         | 
| 60 | 
            +
            {
         | 
| 61 | 
            +
              var aborter;
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              // allow shortcut if iterator expects only two arguments
         | 
| 64 | 
            +
              if (iterator.length == 2)
         | 
| 65 | 
            +
              {
         | 
| 66 | 
            +
                aborter = iterator(item, async(callback));
         | 
| 67 | 
            +
              }
         | 
| 68 | 
            +
              // otherwise go with full three arguments
         | 
| 69 | 
            +
              else
         | 
| 70 | 
            +
              {
         | 
| 71 | 
            +
                aborter = iterator(item, key, async(callback));
         | 
| 72 | 
            +
              }
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              return aborter;
         | 
| 75 | 
            +
            }
         | 
| @@ -0,0 +1,91 @@ | |
| 1 | 
            +
            var streamify = require('./streamify.js')
         | 
| 2 | 
            +
              , defer     = require('./defer.js')
         | 
| 3 | 
            +
              ;
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            // API
         | 
| 6 | 
            +
            module.exports = ReadableAsyncKit;
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            /**
         | 
| 9 | 
            +
             * Base constructor for all streams
         | 
| 10 | 
            +
             * used to hold properties/methods
         | 
| 11 | 
            +
             */
         | 
| 12 | 
            +
            function ReadableAsyncKit()
         | 
| 13 | 
            +
            {
         | 
| 14 | 
            +
              ReadableAsyncKit.super_.apply(this, arguments);
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              // list of active jobs
         | 
| 17 | 
            +
              this.jobs = {};
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              // add stream methods
         | 
| 20 | 
            +
              this.destroy = destroy;
         | 
| 21 | 
            +
              this._start  = _start;
         | 
| 22 | 
            +
              this._read   = _read;
         | 
| 23 | 
            +
            }
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            /**
         | 
| 26 | 
            +
             * Destroys readable stream,
         | 
| 27 | 
            +
             * by aborting outstanding jobs
         | 
| 28 | 
            +
             *
         | 
| 29 | 
            +
             * @returns {void}
         | 
| 30 | 
            +
             */
         | 
| 31 | 
            +
            function destroy()
         | 
| 32 | 
            +
            {
         | 
| 33 | 
            +
              if (this.destroyed)
         | 
| 34 | 
            +
              {
         | 
| 35 | 
            +
                return;
         | 
| 36 | 
            +
              }
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              this.destroyed = true;
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              if (typeof this.terminator == 'function')
         | 
| 41 | 
            +
              {
         | 
| 42 | 
            +
                this.terminator();
         | 
| 43 | 
            +
              }
         | 
| 44 | 
            +
            }
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            /**
         | 
| 47 | 
            +
             * Starts provided jobs in async manner
         | 
| 48 | 
            +
             *
         | 
| 49 | 
            +
             * @private
         | 
| 50 | 
            +
             */
         | 
| 51 | 
            +
            function _start()
         | 
| 52 | 
            +
            {
         | 
| 53 | 
            +
              // first argument – runner function
         | 
| 54 | 
            +
              var runner = arguments[0]
         | 
| 55 | 
            +
                // take away first argument
         | 
| 56 | 
            +
                , args   = Array.prototype.slice.call(arguments, 1)
         | 
| 57 | 
            +
                  // second argument - input data
         | 
| 58 | 
            +
                , input  = args[0]
         | 
| 59 | 
            +
                  // last argument - result callback
         | 
| 60 | 
            +
                , endCb  = streamify.callback.call(this, args[args.length - 1])
         | 
| 61 | 
            +
                ;
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              args[args.length - 1] = endCb;
         | 
| 64 | 
            +
              // third argument - iterator
         | 
| 65 | 
            +
              args[1] = streamify.iterator.call(this, args[1]);
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              // allow time for proper setup
         | 
| 68 | 
            +
              defer(function()
         | 
| 69 | 
            +
              {
         | 
| 70 | 
            +
                if (!this.destroyed)
         | 
| 71 | 
            +
                {
         | 
| 72 | 
            +
                  this.terminator = runner.apply(null, args);
         | 
| 73 | 
            +
                }
         | 
| 74 | 
            +
                else
         | 
| 75 | 
            +
                {
         | 
| 76 | 
            +
                  endCb(null, Array.isArray(input) ? [] : {});
         | 
| 77 | 
            +
                }
         | 
| 78 | 
            +
              }.bind(this));
         | 
| 79 | 
            +
            }
         | 
| 80 | 
            +
             | 
| 81 | 
            +
             | 
| 82 | 
            +
            /**
         | 
| 83 | 
            +
             * Implement _read to comply with Readable streams
         | 
| 84 | 
            +
             * Doesn't really make sense for flowing object mode
         | 
| 85 | 
            +
             *
         | 
| 86 | 
            +
             * @private
         | 
| 87 | 
            +
             */
         | 
| 88 | 
            +
            function _read()
         | 
| 89 | 
            +
            {
         | 
| 90 | 
            +
             | 
| 91 | 
            +
            }
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            var parallel = require('../parallel.js');
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            // API
         | 
| 4 | 
            +
            module.exports = ReadableParallel;
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            /**
         | 
| 7 | 
            +
             * Streaming wrapper to `asynckit.parallel`
         | 
| 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 {stream.Readable#}
         | 
| 13 | 
            +
             */
         | 
| 14 | 
            +
            function ReadableParallel(list, iterator, callback)
         | 
| 15 | 
            +
            {
         | 
| 16 | 
            +
              if (!(this instanceof ReadableParallel))
         | 
| 17 | 
            +
              {
         | 
| 18 | 
            +
                return new ReadableParallel(list, iterator, callback);
         | 
| 19 | 
            +
              }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              // turn on object mode
         | 
| 22 | 
            +
              ReadableParallel.super_.call(this, {objectMode: true});
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              this._start(parallel, list, iterator, callback);
         | 
| 25 | 
            +
            }
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            var serial = require('../serial.js');
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            // API
         | 
| 4 | 
            +
            module.exports = ReadableSerial;
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            /**
         | 
| 7 | 
            +
             * Streaming wrapper to `asynckit.serial`
         | 
| 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 {stream.Readable#}
         | 
| 13 | 
            +
             */
         | 
| 14 | 
            +
            function ReadableSerial(list, iterator, callback)
         | 
| 15 | 
            +
            {
         | 
| 16 | 
            +
              if (!(this instanceof ReadableSerial))
         | 
| 17 | 
            +
              {
         | 
| 18 | 
            +
                return new ReadableSerial(list, iterator, callback);
         | 
| 19 | 
            +
              }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              // turn on object mode
         | 
| 22 | 
            +
              ReadableSerial.super_.call(this, {objectMode: true});
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              this._start(serial, list, iterator, callback);
         | 
| 25 | 
            +
            }
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            var serialOrdered = require('../serialOrdered.js');
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            // API
         | 
| 4 | 
            +
            module.exports = ReadableSerialOrdered;
         | 
| 5 | 
            +
            // expose sort helpers
         | 
| 6 | 
            +
            module.exports.ascending  = serialOrdered.ascending;
         | 
| 7 | 
            +
            module.exports.descending = serialOrdered.descending;
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            /**
         | 
| 10 | 
            +
             * Streaming wrapper to `asynckit.serialOrdered`
         | 
| 11 | 
            +
             *
         | 
| 12 | 
            +
             * @param   {array|object} list - array or object (named list) to iterate over
         | 
| 13 | 
            +
             * @param   {function} iterator - iterator to run
         | 
| 14 | 
            +
             * @param   {function} sortMethod - custom sort function
         | 
| 15 | 
            +
             * @param   {function} callback - invoked when all elements processed
         | 
| 16 | 
            +
             * @returns {stream.Readable#}
         | 
| 17 | 
            +
             */
         | 
| 18 | 
            +
            function ReadableSerialOrdered(list, iterator, sortMethod, callback)
         | 
| 19 | 
            +
            {
         | 
| 20 | 
            +
              if (!(this instanceof ReadableSerialOrdered))
         | 
| 21 | 
            +
              {
         | 
| 22 | 
            +
                return new ReadableSerialOrdered(list, iterator, sortMethod, callback);
         | 
| 23 | 
            +
              }
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              // turn on object mode
         | 
| 26 | 
            +
              ReadableSerialOrdered.super_.call(this, {objectMode: true});
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              this._start(serialOrdered, list, iterator, sortMethod, callback);
         | 
| 29 | 
            +
            }
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            // API
         | 
| 2 | 
            +
            module.exports = state;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            /**
         | 
| 5 | 
            +
             * Creates initial state object
         | 
| 6 | 
            +
             * for iteration over list
         | 
| 7 | 
            +
             *
         | 
| 8 | 
            +
             * @param   {array|object} list - list to iterate over
         | 
| 9 | 
            +
             * @param   {function|null} sortMethod - function to use for keys sort,
         | 
| 10 | 
            +
             *                                     or `null` to keep them as is
         | 
| 11 | 
            +
             * @returns {object} - initial state object
         | 
| 12 | 
            +
             */
         | 
| 13 | 
            +
            function state(list, sortMethod)
         | 
| 14 | 
            +
            {
         | 
| 15 | 
            +
              var isNamedList = !Array.isArray(list)
         | 
| 16 | 
            +
                , initState =
         | 
| 17 | 
            +
                {
         | 
| 18 | 
            +
                  index    : 0,
         | 
| 19 | 
            +
                  keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
         | 
| 20 | 
            +
                  jobs     : {},
         | 
| 21 | 
            +
                  results  : isNamedList ? {} : [],
         | 
| 22 | 
            +
                  size     : isNamedList ? Object.keys(list).length : list.length
         | 
| 23 | 
            +
                }
         | 
| 24 | 
            +
                ;
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              if (sortMethod)
         | 
| 27 | 
            +
              {
         | 
| 28 | 
            +
                // sort array keys based on it's values
         | 
| 29 | 
            +
                // sort object's keys just on own merit
         | 
| 30 | 
            +
                initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)
         | 
| 31 | 
            +
                {
         | 
| 32 | 
            +
                  return sortMethod(list[a], list[b]);
         | 
| 33 | 
            +
                });
         | 
| 34 | 
            +
              }
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              return initState;
         | 
| 37 | 
            +
            }
         |