:bird: :zap: Bluebird is a full featured promise library with unmatched performance.

Overview
Promises/A+ logo

Build Status coverage-98%

Got a question? Join us on stackoverflow, the mailing list or chat on IRC

Introduction

Bluebird is a fully featured promise library with focus on innovative features and performance

See the bluebird website for further documentation, references and instructions. See the API reference here.

For bluebird 2.x documentation and files, see the 2.x tree.

Note

Promises in Node.js 10 are significantly faster than before. Bluebird still includes a lot of features like cancellation, iteration methods and warnings that native promises don't. If you are using Bluebird for performance rather than for those - please consider giving native promises a shot and running the benchmarks yourself.

Questions and issues

The github issue tracker is only for bug reports and feature requests. Anything else, such as questions for help in using the library, should be posted in StackOverflow under tags promise and bluebird.

Thanks

Thanks to BrowserStack for providing us with a free account which lets us support old browsers like IE8.

License

The MIT License (MIT)

Copyright (c) 2013-2020 Petka Antonov

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Comments
  • 3.0 cancellation overhaul

    3.0 cancellation overhaul

    The current cancellation seems to be the most problematic feature due to some annoying limits in the design:

    • Awkward API for attaching the callback that cancels the work (through typed catch handler)
    • Cannot compose because it is impossible to tell the difference between rejection and cancellation (e.g. Promise.all(...).cancel() cannot do the obvious thing and also call cancel() on the promises in the array)
    • .cancel() is asynchronous

    Since all consumers and producers must be trusted/"your code", there is no reason to enforce that cancellable promises are single-consumer or create new primitives.

    Edit: The below design has been scratched, see https://github.com/petkaantonov/bluebird/issues/415#issuecomment-73242358

    In the new cancellation you would register the callback while marking the promise cancellable:
    promise.cancellable(function onCancel(reason) {
    
    });
    

    This returns a new cancellable promise (unlike right now which just mutates existing promise which causes a lot of headache internally) and the flag will automatically propagate to all derived promises. However, the reference to the onCancel callback will only be held by the new promise created by .cancellable(). Calling .cancel() on a cancellable promise will keep propagating to cancellable parents and calling their onCancel callbacks.

    The onCancel callback will receive the cancellation reason as its only argument (the default is a CancellationError instance).

    From the callback it's possible to decide the fate of the promise:

    • Throwing an error will reject the promise with the error as the rejection reason
    • Returning a value will fulfill the promise with the value as the fulfillment value

    (However I guess 99.99% of the time you want throw reason, so this flexibility adds a lot of inconvenience?)

    Bad (should use .timeout() for this) example of usage:

    function delay(value, time) {
        var timerId;
        return new Promise(function(resolve, reject) {
            timerId = setTimeout(function() {
                resolve(value);
            }, time || value);
        }).cancellable(function(reason) {
            clearTimeout(timerId);
            throw reason;
        });
    }
    
    
    var after500ms = delay(500).catch(CancellationError, function(e) {
        console.log("Your request took too long");
    });
    delay(250).then(function() {
        after500ms.cancel();
    });
    
    3.0.0 
    opened by petkaantonov 101
  • Warning: a promise was created in a handler but none were returned from it

    Warning: a promise was created in a handler but none were returned from it

    Hello, trying out the 3.0 branch. Have a question regarding this commit: https://github.com/petkaantonov/bluebird/commit/54b627d243556399c9b3f99555d2aaede34cb27c

    Is it best practice to always return a promise created in a promise handler? What's the reasoning behind it?

    opened by rayshan 76
  • Benchmark: unfair advantage to some implementations

    Benchmark: unfair advantage to some implementations

    The benchmark results depend immensely on the performance of the denodeify implementation - results can change by an order of magnitude depending on the performance of denodeify (this also holds true for the .all implementations, though to a lesser extent).

    However, not all Promise implementations which are being tested at the benchmark implement this functionality internally, and for those, Bluebird benchmark includes a "fake" implementation at benchmark/lib/fakesP.js.

    This file also includes a fallback implementation as:

    else {
        var lifter = require('when/node').lift;
    }
    

    which is used for at least one of the benchmarked implementations: promises-dfilatov-vow.js (beyond the obvious promises-cujojs-when.js).

    I believe that the benchmark should only test what the library provides, and if the library's API is slightly different than what the code needs, then a wrapper should be used in a way which will not put this library at a disadvantage. However, I believe that the wrapper at fakesP.js is very far from providing equal grounds.

    The following examples are with parallel, but a similar pattern also shows with doxbee.

    Example: normal run of the benchmark on my system using ./bench parallel:

    results for 10000 parallel executions, 1 ms per I/O op
    
    file                                time(ms)  memory(MB)
    promises-bluebird.js                     359      109.33
    promises-bluebird-generator.js           422      113.92
    promises-cujojs-when.js                  594      164.51
    promises-tildeio-rsvp.js                 625      217.22
    callbacks-caolan-async-parallel.js       922      225.85
    promises-lvivski-davy.js                 922      280.55
    promises-calvinmetcalf-lie.js           1062      380.36
    callbacks-baseline.js                   1093       37.64
    promises-dfilatov-vow.js                2187      534.49
    promises-ecmascript6-native.js          2391      542.76
    promises-then-promise.js                2453      695.89
    promises-medikoo-deferred.js            3078      535.80
    promises-obvious-kew.js                 4594      963.20
    
    Platform info:
    Windows_NT 6.3.9600 x64
    Node.JS 1.8.1  <-- that's actually io.js v1.8.1
    V8 4.1.0.27
    Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz × 4
    

    However, if we modify fakesP.js to always use one implementation for all the libraries with the following patch which changes it from fallback to always:

    -else {
         var lifter = require('when/node').lift;
    -}
    

    Then the results look like this (obviously same system and same invocation as above):

    results for 10000 parallel executions, 1 ms per I/O op
    
    file                                time(ms)  memory(MB)
    promises-cujojs-when.js                  563      163.62
    promises-lvivski-davy.js                 625      198.71
    promises-then-promise.js                 672      218.51
    promises-bluebird.js                     891      251.84
    promises-bluebird-generator.js           937      255.72
    callbacks-caolan-async-parallel.js       969      225.84
    promises-tildeio-rsvp.js                1078      360.25
    callbacks-baseline.js                   1110       37.63
    promises-obvious-kew.js                 1203      319.76
    promises-calvinmetcalf-lie.js           1750      431.94
    promises-dfilatov-vow.js                2157      535.04
    promises-medikoo-deferred.js            3359      554.31
    promises-ecmascript6-native.js          6188      937.73
    

    and suddenly the numbers look very different. Some implementation go up the ladder, while other go down (well, except for promises-dfilatov-vow.js and promises-cujojs-when.js which were already using this implementation before the patch, though they may still appear now higher or lower because others have moved).

    For instance:

    • promises-bluebird.js "deteriorated" by a factor of ~2.5 from 359 ms / 109 MB to 851 ms / 251 MB
    • promises-then-promise.js "improved" by a factor of ~3.5 from 2453 ms / 696 MB to 672 ms / 218 MB
    • promises-obvious-kew.js "improved" by a factor of ~3 from 4600 ms / 963 MB to 1203 ms / 320 MB.

    Relative to each other, some of the results changed by a factor of ~10.

    The results with the patch can actually be considered much more "fair", since it makes use of "external independent" code (external to all the three libs listed above) as lifter, thus putting them on equal grounds.

    (I do realize that of those three, only kew has a wrapper implementation at fakesP.js, while the other two do seem to provide internal implementation, but the example is to make a point of how the results can change when using the same "construction" to test different implementation).

    So, what does this mean? It means that code outside the benchmarked library greatly affects the numbers which the benchmark reports as the score of that library, and this effect (and its magnitude) is different for different libraries.

    How can it be improved?

    IMO the best thing to do is to use the absolutely minimal API possible from the libraries (probably what the specifications define and what the promises-aplus-tests suit expects - plain Promise API), and then build the whole benchmark construction on top of that. This way, libraries which don't implement denodify or all will still get exactly the same treatment as those who do - benchmarking of their Promise implementation.

    Obviously, not everyone would like this suggestion, since clearly some/many library authors have put a lot of time and effort into improving and fine tuning these features, and with such suggestion this effort might not manifest at all at the benchmark.

    OTOH, authors of libraries which have not implemented those (and possibly others - I didn't examine the benchmark code much) would finally have a benchmark which actually tests only what their library provide, and doesn't make their library "look bad" due to code which isn't part of the library.

    The solution to this is, IMO, a different benchmark for features which are not considered core features of Promises.

    One (or several) benchmark will build only on top of the common Promise features and will test how good does that work in itself and compared to other libraries, and another benchmark which can test the performance of "extra" features. If a library provides this feature, it would make sense to test it.

    But what does not make much sense IMO, is that the benchmark itself includes wrappers which put some implementations at great disadvantage as far as the benchmark results go.

    opened by avih 50
  • Promise.map concurrency execution order

    Promise.map concurrency execution order

    I am having a problem with the concurrency option for Promise.map. I'm my code I want the order of execution of promises to match the order of the input (in my case optimizing file reads from a CDROM)

    Consider this example:

    Promise.map([1, 2, 3, 4, 5], function(val) {
        return new Promise.delay(100).then(function() {
            console.log(val);
        });
    }, {concurrency: 2});
    

    The console output of this code will be 1 2 5 4 3

    opened by henryqdineen 49
  • Don't use a third

    Don't use a third "cancelled" state

    (please tag 3.0)

    It seems that #415 established that there should be no extra "cancelled" state. However, the current implementation seems to do just that - it settles the promise, and propagates this downstream, calling only onCancel and finally handlers but no onFulfilled or onRejected ones. E.g. in the test case described in #564, where a then callback returns a cancelled promise that is subsequently adopted and triggers a downstream onCancel.

    For me, a cancellation should only propagate upstream, where it prevents fulfillment/rejection callbacks from being invoked, stops ongoing tasks and cleans up resources (by triggering onCancel and finally callbacks).

    var p = Promise.delay(50).onCancel(expectCall()).then(expectNoCall(), expectNoCall()).finally(expectCall());
    Promise.delay(25).then(() => { p.cancel(); assert(expectations); });
    

    The cancellation should not propagate downstream. Instead, rejection with a CancellationError (for those who peek, usually .cancel() is called at the end of the chain anyway) seems appropriate here.

    p.then(expectNoCall, expectCall()).onCancel(expectNoCall()); // regardless whether they are directly chained
    Promise.delay(50).then(() => p.then(expectNoCall, expectCall()).onCancel(expectNoCall()) ); // or come later
    Promise.delay(75).then(() => { assert(expectations); });
    
    3.0.0 
    opened by bergus 47
  • fetch() showing

    fetch() showing "a promise was created in a handler but was not returned from it" warning

    I am getting this warning:

    a promise was created in a  handler but was not returned from it
    

    For this code:

    return new Promise((resolve, reject) => {
        return fetch(`${BASEURL}test/`)
        .then((response) => response.json())
        .then(resolve)
        .catch(reject);
    });
    

    Looking over the bluebird docs, I don't understand why I'm getting this warning. My promise handler definitely returns a value. So why the warning?

    P.S. You also have a double space in your warning message before the word 'handler'.

    opened by EvHaus 40
  • New .each behaviour and implicit returns

    New .each behaviour and implicit returns

    In 3.0, the behaviour of each was changed to behave like a sequential map. I feel this was a mistake. The following code:

    Promise.each(["a", "b", "c"], item => console.log(item) ).then(result => console.log(final) )
    

    ... will result in final holding [undefined, undefined, undefined], which is not what one would expect for an iterator that is meant to be used for side-effects.

    > Promise.each(["a", "b", "c"], item => console.log(item) ).then(result => console.log(result) )
    Promise {
      _bitField: 0,
      _fulfillmentHandler0: undefined,
      _rejectionHandler0: undefined,
      _promise0: undefined,
      _receiver0: undefined }
    > a
    b
    c
    [ undefined, undefined, undefined ]
    

    This problem occurs not only with ES6 arrow functions, but also with implicit returns in other languages like CoffeeScript. I'd consider this a major footgun, as virtually no side-effect-y methods will return the original value.

    Should this 'sequential map' behaviour not simply have moved to a new, separate method, without affecting the behaviour of each?

    opened by joepie91 39
  • Implement Promise.using

    Implement Promise.using

    After having this discussion on IRC, making this a little more official.

    Having a method allowing us to handle resource lifecycles is a pretty good idea, for any application communicating with a database for example.

    It's basically the same concept as C#'s using or Java's try.

    Here is the proposed syntax:

    return Promise.using(getConnection(), function(connection) {
        return connection.query(fn).then(fn);
    });
    

    A naive (i.e. not fully working) implementation of this would be:

    Promise.using = function(resource, fn) {
      // wraps it in case the resource was not promise
      var pResource = Promise.cast(resource);
      return pResource.then(fn).finally(function() {
        return pResource.then(function(resource) {
          return resource.close();
        });
      });
    }
    

    This means that we require the resource object to implement a close method, that will take care of freeing the resource. It's the same concept as Java requiring an AutoCloseable interface. The method can be dispose or whatever.

    Thoughts?

    opened by ralt 39
  • Promise.cancel()

    Promise.cancel()

    Would it be consistent in 3.0 to add static Promise.cancel() to return a new promise in cancelled state? (like Promise.resolve() and Promise.reject())

    Promise.cancel = function() {
          var p = Promise(function(){});
          p.cancel();
          return p;
    }
    
    opened by Artazor 35
  • Ten Thousand Stars

    Ten Thousand Stars

    Bluebird just passed 10,000 stars on GitHub :bird: :balloon: :balloon: :balloon: :bird:

    We'd like to thank all the support and great work from everyone. This has been a fun ride and we'd like to thank you all. The project has over 6 million monthly downloads and is one of the most popular NodeJS packages.

    We'd like to celebrate this occasion (inspired by Ramda) by giving away a few bluebird coffee* mugs.

    Below are everyone who pushed code minus @petkaantonov @spion and myself. This can be a small fix like a typo in the docs or a large fix.

    We will be giving two mugs at random to two bluebird contributors.

    If you would like to be excluded from consideration, please let me know in the comments below.

    (List ordered alphabetically)

    @Artazor @Dashron @JonAbrams @Joris-van-der-Wel @L8D @MadaraUchiha @Matthew-Davey @MetaMemoryT @Page- @alexanderkjeldaas @alubbe @andyfischer @anvaka @askhogan @azu @bcaudesaygues @bergus @bjouhier @bryanburgers @calvinmetcalf @chetbox @codeNgJon @cscott @cspotcode @d6u @dantman @demmer @designeng @dotnil @dungsaga @evanlucas @fasterthanlime @floatdrop @gabrielf @gdi2290 @gordonwoodhull @grncdr @hawkrives @hvrauhal @iarna @jamesmanning @jasonmerino @jimlloyd @jmm @jonasi @jordangray @kevinburke

    (Next comment with more people as GH excludes more than 50 pings per comment) (* tea has been tested to work, but is not an officially supported platform)

    mug-giveaway 
    opened by benjamingr 34
  • Invalid anti-pattern premise

    Invalid anti-pattern premise

    In the following anti-pattern chapter you are going way off on a limb, only to confuse people:

    The .then(success, fail) anti-pattern

    The word anti-pattern in programming refers to code redundancy or compromised algorithmic efficiency.

    What you refer to is simply a coding style, which got nothing to do with anti-patterns.

    opened by vitaly-t 32
  • Feature: use ES6 proxy to support all methods on promised objects

    Feature: use ES6 proxy to support all methods on promised objects

    If we could chain async method calls on promised objects, we could eliminate intermediate awaits and just have a single await on the result: await Promise.resolve('hello').toUpperCase().replace(/$/, ', world!')

    My proposal is to use ES6 Proxy so that any unknown method call is a promise to perform it on the promised object.

    opened by Tantalon 1
  • Certificate error for bluebird documentation site

    Certificate error for bluebird documentation site

    This might be a known problem but there are links on search aggregators which use https links, example

    image

    Clicking on the link from example goes to https://bluebirdjs.com/docs/api/promise.fromcallback.html with following cert error

    image

    You can see that certificate from github is used instead of one for bluebird

    image

    opened by webuniverseio 0
  • Bump minimatch, browserify, glob, istanbul and mocha

    Bump minimatch, browserify, glob, istanbul and mocha

    Bumps minimatch to 5.1.1 and updates ancestor dependencies minimatch, browserify, glob, istanbul and mocha. These dependencies need to be updated together.

    Updates minimatch from 3.0.4 to 5.1.1

    Changelog

    Sourced from minimatch's changelog.

    change log

    5.1

    • use windowsPathNoEscape/allowWindowsEscape opts

    5.0

    • brace-expansion: ignore only blocks that begins with $
    • Expect exclusively forward slash as path sep, same as node-glob

    4.2

    • makeRe: globstar should match zero+ path portions
    • Fix bug with escaped '@' in patterns

    4.1

    • treat nocase:true as always having magic
    • expose GLOBSTAR marker

    4.0

    • Update to modern JS syntax
    • Add allowWindowsEscape option

    3.x

    • Added basic redos protection
    • Handle unfinished !( extglob patterns
    • Add partial: true option
    Commits

    Updates browserify from 8.1.3 to 17.0.0

    Release notes

    Sourced from browserify's releases.

    v17.0.0

    • Upgrade events to v3.x. EventEmitter instances now have an off() method. require('events').once can be used to react to an event being emitted with async/await syntax. (#1839)
    • Upgrade path-browserify to v1.x. (#1838)
    • Upgrade stream-browserify to v3.x. require('stream') now matches the Node.js 10+ API. (#1970)
    • Upgrade util to v0.12. Most notably, util.promisify and util.callbackify are finally available by default in browserify. (#1844)
    • Add JSON syntax checking. Syntax errors in .json files will now fail to bundle. (#1700)

    v16.5.1

    Remove deprecated mkdirp version in favour of mkdirp-classic.

    https://github.com/browserify/browserify/commit/00c913fa345dbb7f612bdad6b4acc91c706e98b2

    Pin dependencies for Node.js 0.8 support.

    browserify/browserify#1939

    v16.5.0

    Support custom name for "browser" field resolution in package.json using the browserField option.

    browserify/browserify#1918

    v16.4.0

    Upgrade stream-http to v3. This version drops support for IE10 and below.

    browserify/browserify#1916

    v16.3.0

    add empty stub for the http2 builtin module.

    browserify/browserify#1913

    update license text to remove references to code that is no longer included.

    browserify/browserify#1906

    add more tests for folder resolution.

    browserify/browserify#1139

    v16.2.3

    add empty stub for the inspector builtin module.

    browserify/browserify#1854

    change the "browser" field link to the browser-field-spec repo instead of the old gist.

    ... (truncated)

    Changelog

    Sourced from browserify's changelog.

    17.0.0

    • Upgrade events to v3.x. EventEmitter instances now have an off() method. require('events').once can be used to react to an event being emitted with async/await syntax. (#1839)
    • Upgrade path-browserify to v1.x. (#1838)
    • Upgrade stream-browserify to v3.x. require('stream') now matches the Node.js 10+ API. (#1970)
    • Upgrade util to v0.12. Most notably, util.promisify and util.callbackify are finally available by default in browserify. (#1844)
    • Add JSON syntax checking. Syntax errors in .json files will now fail to bundle. (#1700)

    16.5.2

    Upgrade browser-resolve to v2.

    browserify/browserify#1973

    16.5.1

    Remove deprecated mkdirp version in favour of mkdirp-classic.

    https://github.com/browserify/browserify/commit/00c913fa345dbb7f612bdad6b4acc91c706e98b2

    Pin dependencies for Node.js 0.8 support.

    browserify/browserify#1939

    16.5.0

    Support custom name for "browser" field resolution in package.json using the browserField option.

    browserify/browserify#1918

    16.4.0

    Upgrade stream-http to v3. This version drops support for IE10 and below.

    browserify/browserify#1916

    16.3.0

    add empty stub for the http2 builtin module.

    browserify/browserify#1913

    update license text to remove references to code that is no longer included.

    browserify/browserify#1906

    add more tests for folder resolution.

    browserify/browserify#1139

    16.2.3

    ... (truncated)

    Commits
    Maintainer changes

    This version was pushed to npm by goto-bus-stop, a new releaser for browserify since your current version.


    Updates glob from 4.5.3 to 8.0.3

    Changelog

    Sourced from glob's changelog.

    8.0

    • Only support node v12 and higher
    • \ is now only used as an escape character, and never as a path separator in glob patterns, so that Windows users have a way to match against filenames containing literal glob pattern characters.
    • Glob pattern paths must use forward-slashes as path separators, since \ is an escape character to match literal glob pattern characters.
    • (8.0.2) cwd and root will always be automatically coerced to use / as path separators on Windows, as they cannot contain glob patterns anyway, and are often supplied by path.resolve() and other methods that will use \ path separators by default.

    7.2

    • Add fs option to allow passing virtual filesystem

    7.1

    • Ignore stat errors that are not ENOENT to work around Windows issues.
    • Support using root and absolute options together
    • Bring back lumpy space princess
    • force 'en' locale in string sorting

    7.0

    • Raise error if options.cwd is specified, and not a directory

    6.0

    • Remove comment and negation pattern support
    • Ignore patterns are always in dot:true mode

    5.0

    • Deprecate comment and negation patterns
    • Fix regression in mark and nodir options from making all cache keys absolute path.
    • Abort if fs.readdir returns an error that's unexpected
    • Don't emit match events for ignored items
    • Treat ENOTSUP like ENOTDIR in readdir

    4.5

    • Add options.follow to always follow directory symlinks in globstar
    • Add options.realpath to call fs.realpath on all results
    • Always cache based on absolute path

    ... (truncated)

    Commits

    Updates istanbul from 0.3.22 to 0.4.5

    Changelog

    Sourced from istanbul's changelog.

    Changelog

    ... (truncated)

    Commits

    Updates mocha from 2.1.0 to 10.1.0

    Release notes

    Sourced from mocha's releases.

    v10.1.0

    10.1.0 / 2022-10-16

    :tada: Enhancements

    :nut_and_bolt: Other

    v10.0.0

    10.0.0 / 2022-05-01

    :boom: Breaking Changes

    :nut_and_bolt: Other

    Also thanks to @​ea2305 and @​SukkaW for improvements to our documentation.

    v9.2.2

    9.2.2 / 2022-03-11

    Please also note our announcements.

    :bug: Fixes

    ... (truncated)

    Changelog

    Sourced from mocha's changelog.

    10.1.0 / 2022-10-16

    :tada: Enhancements

    :nut_and_bolt: Other

    10.0.0 / 2022-05-01

    :boom: Breaking Changes

    :nut_and_bolt: Other

    Also thanks to @​ea2305 and @​SukkaW for improvements to our documentation.

    9.2.2 / 2022-03-11

    :bug: Fixes

    :nut_and_bolt: Other

    ... (truncated)

    Commits
    • 5f96d51 build(v10.1.0): release
    • ed74f16 build(v10.1.0): update CHANGELOG
    • 51d4746 chore(devDeps): update 'ESLint' to v8 (#4926)
    • 4e06a6f fix(browser): increase contrast for replay buttons (#4912)
    • 41567df Support prefers-color-scheme: dark (#4896)
    • 61b4b92 fix the regular expression for function clean in utils.js (#4770)
    • 77c18d2 chore: use standard 'Promise.allSettled' instead of polyfill (#4905)
    • 84b2f84 chore(ci): upgrade GH actions to latest versions (#4899)
    • 023f548 build(v10.0.0): release
    • 62b1566 build(v10.0.0): update CHANGELOG
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by juergba, a new releaser for mocha since your current version.


    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump https-proxy-agent and grunt-saucelabs

    Bump https-proxy-agent and grunt-saucelabs

    Bumps https-proxy-agent to 2.2.4 and updates ancestor dependency grunt-saucelabs. These dependencies need to be updated together.

    Updates https-proxy-agent from 1.0.0 to 2.2.4

    Release notes

    Sourced from https-proxy-agent's releases.

    2.2.4

    Patches

    • Add .editorconfig file: a0d4a20458498fc31e5721471bd2b655e992d44b
    • Add .eslintrc.js file: eecea74a1db1c943eaa4f667a561fd47c33da897
    • Use a net.Socket instead of a plain EventEmitter for replaying proxy errors: #83
    • Remove unused stream module: 9fdcd47bd813e9979ee57920c69e2ee2e0683cd4

    Credits

    Huge thanks to @​lpinca for helping!

    2.2.3

    Patches

    • Update README with actual secureProxy behavior: #65
    • Update proxy to v1.0.0: d0e3c18079119057b05582cb72d4fda21dfc2546
    • Remove unreachable code: 46aad0988b471f042856436cf3192b0e09e36fe6
    • Test on Node.js 10 and 12: 3535951e482ea52af4888938f59649ed92e81b2b
    • Fix compatibility with Node.js >= 10.0.0: #73
    • Use an EventEmitter to replay failed proxy connect HTTP requests: #77

    Credits

    Huge thanks to @​stoically, @​lpinca, and @​zkochan for helping!

    2.2.2

    Patches

    • Remove package-lock.json: c881009b9873707f5c4a0e9c277dde588e1139c7
    • Ignore test directory, History.md and .travis.yml when creating npm package. Fixes #42: #45
    • Update agent-base to v4.2: #50
    • Add TypeScript type definitions: #66
    • Feat(typescript): Allow input to be options or string: #68
    • Update agent-base to v4.3: #69

    Credits

    Huge thanks to @​marco-c, @​tareqhs, @​ianhowe76, and @​BYK for helping!

    2.2.1

    Patches

    • Add defaultPort field: #43

    Credits

    Huge thanks to @​jan-auer for helping!

    2.2.0

    ... (truncated)

    Commits

    Updates grunt-saucelabs from 8.6.3 to 9.0.1

    Release notes

    Sourced from grunt-saucelabs's releases.

    v9.0.0

    ####9.0.0####

    • removed support for YUI Test (Yahoo deprecated the framework a year ago). It will still work but we are not planning support for it moving forward
    • update Sauce Connect to version 4.3.16
    • updated dependencies (grunt not updated because we are waiting on grunt-sauce-tunnel)
    Commits
    • 127cac2 9.0.1
    • a1168fb Merge pull request #231 from digitalfrost/patch-1
    • 6bc91b4 Merge pull request #232 from digitalfrost/patch-2
    • 5d8c4a6 fix no license warning
    • d5ee483 updated saucelabs and lodash versions to fix security vulnerabilities
    • aa53f32 Merge pull request #227 from EsrefDurna/master
    • c09fd99 updated package merge from 1.1.3 to 1.2.0
    • 09bbcef Merge pull request #226 from bryant1410/master
    • 4caa37d Fix broken Markdown headings
    • bfbb218 v9.0.0
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump shell-quote and browserify

    Bump shell-quote and browserify

    Bumps shell-quote to 1.7.4 and updates ancestor dependency browserify. These dependencies need to be updated together.

    Updates shell-quote from 0.0.1 to 1.7.4

    Changelog

    Sourced from shell-quote's changelog.

    v1.7.4 - 2022-10-12

    Merged

    Commits

    • [eslint] fix indentation and whitespace aaa9d1f
    • [eslint] additional cleanup 397cb62
    • [meta] add auto-changelog 497fca5
    • [actions] add reusable workflows 4763c36
    • [eslint] add eslint 6ee1437
    • [readme] rename, add badges 7eb5134
    • [meta] update URLs 67381b6
    • [meta] create FUNDING.yml; add funding in package.json 8641572
    • [meta] use npmignore to autogenerate an npmignore file 2e2007a
    • Only apps should have lockfiles f97411e
    • [Dev Deps] update tape 051f608
    • [meta] add safe-publish-latest 18cadf9
    • [Tests] add aud in posttest dc1cc12

    1.7.3

    • Fix a security issue where the regex for windows drive letters allowed some shell meta-characters to escape the quoting rules. (CVE-2021-42740)

    1.7.2

    • Fix a regression introduced in 1.6.3. This reverts the Windows path quoting fix. (144e1c2)

    1.7.1

    • Fix $ being removed when not part of an environment variable name. (@​Adman in #32)

    1.7.0

    • Add support for parsing >> and >& redirection operators. (@​forivall in #16)
    • Add support for parsing <( process substitution operator. (@​cuonglm in #15)

    1.6.3

    • Fix Windows path quoting problems. (@​dy in #34)

    v1.6.2 - 2019-08-13

    Merged

    Commits

    ... (truncated)

    Commits
    • 5409e72 v1.7.4
    • 4763c36 [actions] add reusable workflows
    • 8641572 [meta] create FUNDING.yml; add funding in package.json
    • 497fca5 [meta] add auto-changelog
    • 7eb5134 [readme] rename, add badges
    • 67381b6 [meta] update URLs
    • 2e2007a [meta] use npmignore to autogenerate an npmignore file
    • 18cadf9 [meta] add safe-publish-latest
    • 397cb62 [eslint] additional cleanup
    • aaa9d1f [eslint] fix indentation and whitespace
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by ljharb, a new releaser for shell-quote since your current version.


    Updates browserify from 8.1.3 to 17.0.0

    Release notes

    Sourced from browserify's releases.

    v17.0.0

    • Upgrade events to v3.x. EventEmitter instances now have an off() method. require('events').once can be used to react to an event being emitted with async/await syntax. (#1839)
    • Upgrade path-browserify to v1.x. (#1838)
    • Upgrade stream-browserify to v3.x. require('stream') now matches the Node.js 10+ API. (#1970)
    • Upgrade util to v0.12. Most notably, util.promisify and util.callbackify are finally available by default in browserify. (#1844)
    • Add JSON syntax checking. Syntax errors in .json files will now fail to bundle. (#1700)

    v16.5.1

    Remove deprecated mkdirp version in favour of mkdirp-classic.

    https://github.com/browserify/browserify/commit/00c913fa345dbb7f612bdad6b4acc91c706e98b2

    Pin dependencies for Node.js 0.8 support.

    browserify/browserify#1939

    v16.5.0

    Support custom name for "browser" field resolution in package.json using the browserField option.

    browserify/browserify#1918

    v16.4.0

    Upgrade stream-http to v3. This version drops support for IE10 and below.

    browserify/browserify#1916

    v16.3.0

    add empty stub for the http2 builtin module.

    browserify/browserify#1913

    update license text to remove references to code that is no longer included.

    browserify/browserify#1906

    add more tests for folder resolution.

    browserify/browserify#1139

    v16.2.3

    add empty stub for the inspector builtin module.

    browserify/browserify#1854

    change the "browser" field link to the browser-field-spec repo instead of the old gist.

    ... (truncated)

    Changelog

    Sourced from browserify's changelog.

    17.0.0

    • Upgrade events to v3.x. EventEmitter instances now have an off() method. require('events').once can be used to react to an event being emitted with async/await syntax. (#1839)
    • Upgrade path-browserify to v1.x. (#1838)
    • Upgrade stream-browserify to v3.x. require('stream') now matches the Node.js 10+ API. (#1970)
    • Upgrade util to v0.12. Most notably, util.promisify and util.callbackify are finally available by default in browserify. (#1844)
    • Add JSON syntax checking. Syntax errors in .json files will now fail to bundle. (#1700)

    16.5.2

    Upgrade browser-resolve to v2.

    browserify/browserify#1973

    16.5.1

    Remove deprecated mkdirp version in favour of mkdirp-classic.

    https://github.com/browserify/browserify/commit/00c913fa345dbb7f612bdad6b4acc91c706e98b2

    Pin dependencies for Node.js 0.8 support.

    browserify/browserify#1939

    16.5.0

    Support custom name for "browser" field resolution in package.json using the browserField option.

    browserify/browserify#1918

    16.4.0

    Upgrade stream-http to v3. This version drops support for IE10 and below.

    browserify/browserify#1916

    16.3.0

    add empty stub for the http2 builtin module.

    browserify/browserify#1913

    update license text to remove references to code that is no longer included.

    browserify/browserify#1906

    add more tests for folder resolution.

    browserify/browserify#1139

    16.2.3

    ... (truncated)

    Commits
    Maintainer changes

    This version was pushed to npm by goto-bus-stop, a new releaser for browserify since your current version.


    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v3.7.2)
Owner
Petka Antonov
Petka Antonov
A set of high performance yield handlers for Bluebird coroutines

bluebird-co A set of high performance yield handlers for Bluebird coroutines. Description bluebird-co is a reimplementation of tj/co generator corouti

null 76 May 30, 2022
🐦 Bluebird alternative within ~200 loc

NativeBird Ultralight promise extension compatible with Bluebird Introduction 中文介绍 As a pioneer in JavaScript async ecosystem, Bluebird is a great use

Yifeng Wang 60 Jan 1, 2023
A promise library for JavaScript

If a function cannot return a value or throw an exception without blocking, it can return a promise instead. A promise is an object that represents th

Kris Kowal 15k Dec 30, 2022
Delay a promise a specified amount of time

delay Delay a promise a specified amount of time If you target Node.js 15 or later, you can do await require('timers/promises').setTimeout(1000) inste

Sindre Sorhus 518 Dec 26, 2022
Promise ponyfill with pinkie

pinkie-promise ES2015 Promise ponyfill Module exports global Promise object (if available) or pinkie Promise polyfill. Install $ npm install --save pi

Vsevolod Strukchinsky 120 Jan 16, 2022
Memoize promise-returning functions. Includes cache expire and prefetch.

promise-memoize Memoize promise-returning functions. Includes cache expire and prefetch. When data expire mode enabled, new values are fetched in adva

Nodeca 56 Nov 1, 2022
An async control-flow library that makes stepping through logic easy.

Step A simple control-flow library for node.JS that makes parallel execution, serial execution, and error handling painless. How to install Simply cop

Tim Caswell 2.2k Dec 22, 2022
:bird: :zap: Bluebird is a full featured promise library with unmatched performance.

Got a question? Join us on stackoverflow, the mailing list or chat on IRC Introduction Bluebird is a fully featured promise library with focus on inno

Petka Antonov 20.2k Dec 31, 2022
Flappy Bird is an arcade-style game in which the player controls the bird Faby, which moves persistently to the right

Flappy Bird is an arcade-style game in which the player controls the bird Faby, which moves persistently to the right. The player is tasked with navigating Faby through pairs of pipes that have equally sized gaps placed at random heights. Faby automatically descends and only ascends when the player taps the touchscreen.

Ali Yaghoubi 5 Aug 16, 2022
:zap: RAN! React . GraphQL . Next.js Toolkit :zap: - SEO-Ready, Production-Ready, SSR, Hot-Reload, CSS-in-JS, Caching, CLI commands and more...

RAN : React . GraphQL . Next.js Toolkit New version is coming... Follow up here: https://github.com/Sly777/ran/issues/677 Features Hot-Reload Ready fo

Ilker Guller 2.2k Jan 3, 2023
A set of high performance yield handlers for Bluebird coroutines

bluebird-co A set of high performance yield handlers for Bluebird coroutines. Description bluebird-co is a reimplementation of tj/co generator corouti

null 76 May 30, 2022
🚀 A robust, performance-focused and full-featured Redis client for Node.js.

A robust, performance-focused and full-featured Redis client for Node.js. Supports Redis >= 2.6.12 and (Node.js >= 6). Completely compatible with Redi

Zihua Li 11.6k Jan 8, 2023
Inside-out promise; lets you call resolve and reject from outside the Promise constructor function.

Inside-out promise; lets you call resolve and reject from outside the Promise constructor function.

Lily Scott 3 Feb 28, 2022
Adds promise support (rejects(), doesNotReject()) to tape by decorating it using tape-promise.

Tape With Promises Adds promise support (rejects(), doesNotReject()) to tape by decorating it using tape-promise. Install npm install --save-dev @smal

Small Technology Foundation 3 Mar 21, 2022
ApostropheCMS is a full-featured, open-source CMS built with Node.js that seeks to empower organizations by combining in-context editing and headless architecture in a full-stack JS environment.

ApostropheCMS ApostropheCMS is a full-featured, open source CMS built with Node.js that seeks to empower organizations by combining in-context editing

Apostrophe Technologies 3.9k Jan 4, 2023
ApostropheCMS is a full-featured, open-source CMS built with Node.js that seeks to empower organizations by combining in-context editing and headless architecture in a full-stack JS environment.

ApostropheCMS ApostropheCMS is a full-featured, open source CMS built with Node.js that seeks to empower organizations by combining in-context editing

Apostrophe Technologies 3.9k Jan 4, 2023
A basic implementation of Flappy Bird with real-time multiplayer using Hathora

Multiplayer Flappy Bird with Hathora A basic implementation of Flappy Bird with real-time multiplayer Overview This is a simple game of Flappy Bird ex

ourcade 11 Jul 1, 2022
🐦 Bluebird alternative within ~200 loc

NativeBird Ultralight promise extension compatible with Bluebird Introduction 中文介绍 As a pioneer in JavaScript async ecosystem, Bluebird is a great use

Yifeng Wang 60 Jan 1, 2023
:zap: A sliding swipe menu that works with touchSwipe library.

Slide and swipe menu A sliding menu that works with touchSwipe library. Online demo Visit plugin site. Appszoom also uses it! So cool! What's the diff

Joan Claret 138 Sep 27, 2022
🔮 Fast and full-featured autocomplete library

Autocomplete A JavaScript library that lets you quickly build autocomplete experiences ?? Autocomplete v1 is in an alpha phase and early feedback is w

Algolia 2.3k Jan 6, 2023