traceur-rb 0.0.2 → 0.0.4
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.
- checksums.yaml +8 -8
- data/lib/traceur/configuration.rb +1 -1
- data/lib/traceur/version.rb +1 -1
- data/{vendor/node_modules → node_modules}/.bin/traceur +0 -0
- data/{vendor/node_modules → node_modules}/traceur/LICENSE +0 -0
- data/{vendor/node_modules → node_modules}/traceur/README.md +0 -0
- data/node_modules/traceur/bin/traceur-runtime.js +3420 -0
- data/node_modules/traceur/bin/traceur.js +30354 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/.bin/semver +0 -0
- data/node_modules/traceur/node_modules/commander/History.md +256 -0
- data/node_modules/traceur/node_modules/commander/LICENSE +22 -0
- data/node_modules/traceur/node_modules/commander/Readme.md +342 -0
- data/node_modules/traceur/node_modules/commander/index.js +1103 -0
- data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/.npmignore +3 -0
- data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/.travis.yml +5 -0
- data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/LICENSE +22 -0
- data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/README.md +17 -0
- data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/index.js +12 -0
- data/node_modules/traceur/node_modules/commander/node_modules/graceful-readlink/package.json +48 -0
- data/node_modules/traceur/node_modules/commander/package.json +75 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/LICENSE +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/README.md +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/common.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/glob.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/.eslintrc +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/LICENSE +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/README.md +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/inflight.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md +0 -0
- data/node_modules/traceur/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json +52 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js +0 -0
- data/node_modules/traceur/node_modules/glob/node_modules/inflight/package.json +61 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inflight/test.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inherits/LICENSE +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inherits/README.md +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inherits/inherits.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inherits/inherits_browser.js +0 -0
- data/node_modules/traceur/node_modules/glob/node_modules/inherits/package.json +50 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/inherits/test.js +0 -0
- data/{vendor/node_modules/traceur/node_modules/glob/node_modules/once/node_modules/wrappy → node_modules/traceur/node_modules/glob/node_modules/minimatch}/LICENSE +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/README.md +0 -0
- data/node_modules/traceur/node_modules/glob/node_modules/minimatch/browser.js +1159 -0
- data/node_modules/traceur/node_modules/glob/node_modules/minimatch/minimatch.js +912 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js +0 -0
- data/node_modules/traceur/node_modules/glob/node_modules/minimatch/package.json +63 -0
- data/node_modules/traceur/node_modules/glob/node_modules/once/LICENSE +15 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/README.md +0 -0
- data/node_modules/traceur/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE +15 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/node_modules/wrappy/README.md +0 -0
- data/node_modules/traceur/node_modules/glob/node_modules/once/node_modules/wrappy/package.json +52 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/once.js +0 -0
- data/node_modules/traceur/node_modules/glob/node_modules/once/package.json +60 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/node_modules/once/test/once.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/package.json +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/glob/sync.js +0 -0
- data/node_modules/traceur/node_modules/rsvp/CHANGELOG.md +255 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/LICENSE +0 -0
- data/node_modules/traceur/node_modules/rsvp/README.md +366 -0
- data/node_modules/traceur/node_modules/rsvp/dist/rsvp.js +1597 -0
- data/node_modules/traceur/node_modules/rsvp/dist/rsvp.min.js +9 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp.js +70 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp.umd.js +51 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/-internal.js +0 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/all-settled.js +73 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/all.js +0 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/asap.js +112 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/config.js +0 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/defer.js +45 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/enumerator.js +130 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/events.js +205 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/filter.js +0 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/hash-settled.js +126 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/hash.js +94 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/instrument.js +41 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/map.js +0 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/node.js +281 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/platform.js +14 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/promise-hash.js +52 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/promise.js +496 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/promise/all.js +0 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/promise/race.js +105 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/promise/reject.js +47 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/promise/resolve.js +49 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/race.js +0 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/reject.js +16 -0
- data/node_modules/traceur/node_modules/rsvp/lib/rsvp/resolve.js +17 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/rethrow.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/rsvp/lib/rsvp/utils.js +0 -0
- data/node_modules/traceur/node_modules/rsvp/package.json +106 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/.npmignore +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/LICENSE +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/Makefile +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/README.md +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/bin/semver +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/foot.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/head.js +0 -0
- data/node_modules/traceur/node_modules/semver/package.json +50 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/semver.browser.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/semver.browser.js.gz +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/semver.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/semver.min.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/semver.min.js.gz +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/test/amd.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/test/gtr.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/test/index.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/test/ltr.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/semver/test/no-module.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/.npmignore +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/LICENSE.md +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/README.md +0 -0
- data/node_modules/traceur/node_modules/source-map-support/amd-test/browser-source-map-support.js +89 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/amd-test/index.html +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/amd-test/require.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/amd-test/script.coffee +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/amd-test/script.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/amd-test/script.map +0 -0
- data/node_modules/traceur/node_modules/source-map-support/browser-source-map-support.js +89 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/browser-test/index.html +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/browser-test/script.coffee +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/browser-test/script.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/browser-test/script.map +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/build.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/header-test/index.html +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/header-test/script.coffee +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/header-test/script.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/header-test/script.map +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/header-test/server.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/.npmignore +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/.travis.yml +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/CHANGELOG.md +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/LICENSE +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/Makefile.dryice.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/README.md +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/assert-shim.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/mini-require.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/prefix-source-map.jsm +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/prefix-utils.jsm +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/suffix-browser.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/suffix-source-map.jsm +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/suffix-utils.jsm +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/test-prefix.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/build/test-suffix.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/array-set.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/base64-vlq.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/base64.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/binary-search.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/source-map-consumer.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/source-map-generator.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/source-node.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/lib/source-map/util.js +0 -0
- data/node_modules/traceur/node_modules/source-map-support/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
- data/node_modules/traceur/node_modules/source-map-support/node_modules/source-map/node_modules/amdefine/README.md +171 -0
- data/node_modules/traceur/node_modules/source-map-support/node_modules/source-map/node_modules/amdefine/amdefine.js +301 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/node_modules/amdefine/intercept.js +0 -0
- data/node_modules/traceur/node_modules/source-map-support/node_modules/source-map/node_modules/amdefine/package.json +47 -0
- data/node_modules/traceur/node_modules/source-map-support/node_modules/source-map/package.json +142 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/run-tests.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-api.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-array-set.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-base64-vlq.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-base64.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-binary-search.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-dog-fooding.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-source-map-consumer.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-source-map-generator.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/test-source-node.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/node_modules/source-map-support/node_modules/source-map/test/source-map/util.js +0 -0
- data/node_modules/traceur/node_modules/source-map-support/package.json +52 -0
- data/node_modules/traceur/node_modules/source-map-support/source-map-support.js +386 -0
- data/node_modules/traceur/node_modules/source-map-support/test.js +384 -0
- data/node_modules/traceur/package.json +286 -0
- data/node_modules/traceur/src/node/NodeCompiler.js +81 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/System.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/api.js +0 -0
- data/node_modules/traceur/src/node/command.js +203 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/compileAllJsFilesInDir.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/deferred.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/file-util.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/getopt.js +0 -0
- data/node_modules/traceur/src/node/interpreter.js +37 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/nodeLoader.js +0 -0
- data/node_modules/traceur/src/node/recursiveModuleCompile.js +171 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/require.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/to-amd-compiler.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/to-closure-compiler.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/to-commonjs-compiler.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/src/node/traceur.js +0 -0
- data/{vendor/node_modules → node_modules}/traceur/traceur +0 -0
- data/package.json +15 -0
- data/spec/traceur/configuration_spec.rb +3 -3
- metadata +225 -161
|
File without changes
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import Promise from './promise';
|
|
2
|
+
import {
|
|
3
|
+
noop,
|
|
4
|
+
resolve,
|
|
5
|
+
reject
|
|
6
|
+
} from './-internal';
|
|
7
|
+
import { isArray } from './utils';
|
|
8
|
+
|
|
9
|
+
function Result() {
|
|
10
|
+
this.value = undefined;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
var ERROR = new Result();
|
|
14
|
+
var GET_THEN_ERROR = new Result();
|
|
15
|
+
|
|
16
|
+
function getThen(obj) {
|
|
17
|
+
try {
|
|
18
|
+
return obj.then;
|
|
19
|
+
} catch(error) {
|
|
20
|
+
ERROR.value= error;
|
|
21
|
+
return ERROR;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
function tryApply(f, s, a) {
|
|
27
|
+
try {
|
|
28
|
+
f.apply(s, a);
|
|
29
|
+
} catch(error) {
|
|
30
|
+
ERROR.value = error;
|
|
31
|
+
return ERROR;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function makeObject(_, argumentNames) {
|
|
36
|
+
var obj = {};
|
|
37
|
+
var name;
|
|
38
|
+
var i;
|
|
39
|
+
var length = _.length;
|
|
40
|
+
var args = new Array(length);
|
|
41
|
+
|
|
42
|
+
for (var x = 0; x < length; x++) {
|
|
43
|
+
args[x] = _[x];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
for (i = 0; i < argumentNames.length; i++) {
|
|
47
|
+
name = argumentNames[i];
|
|
48
|
+
obj[name] = args[i + 1];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return obj;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function arrayResult(_) {
|
|
55
|
+
var length = _.length;
|
|
56
|
+
var args = new Array(length - 1);
|
|
57
|
+
|
|
58
|
+
for (var i = 1; i < length; i++) {
|
|
59
|
+
args[i - 1] = _[i];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return args;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function wrapThenable(then, promise) {
|
|
66
|
+
return {
|
|
67
|
+
then: function(onFulFillment, onRejection) {
|
|
68
|
+
return then.call(promise, onFulFillment, onRejection);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
`RSVP.denodeify` takes a 'node-style' function and returns a function that
|
|
75
|
+
will return an `RSVP.Promise`. You can use `denodeify` in Node.js or the
|
|
76
|
+
browser when you'd prefer to use promises over using callbacks. For example,
|
|
77
|
+
`denodeify` transforms the following:
|
|
78
|
+
|
|
79
|
+
```javascript
|
|
80
|
+
var fs = require('fs');
|
|
81
|
+
|
|
82
|
+
fs.readFile('myfile.txt', function(err, data){
|
|
83
|
+
if (err) return handleError(err);
|
|
84
|
+
handleData(data);
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
into:
|
|
89
|
+
|
|
90
|
+
```javascript
|
|
91
|
+
var fs = require('fs');
|
|
92
|
+
var readFile = RSVP.denodeify(fs.readFile);
|
|
93
|
+
|
|
94
|
+
readFile('myfile.txt').then(handleData, handleError);
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
If the node function has multiple success parameters, then `denodeify`
|
|
98
|
+
just returns the first one:
|
|
99
|
+
|
|
100
|
+
```javascript
|
|
101
|
+
var request = RSVP.denodeify(require('request'));
|
|
102
|
+
|
|
103
|
+
request('http://example.com').then(function(res) {
|
|
104
|
+
// ...
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
However, if you need all success parameters, setting `denodeify`'s
|
|
109
|
+
second parameter to `true` causes it to return all success parameters
|
|
110
|
+
as an array:
|
|
111
|
+
|
|
112
|
+
```javascript
|
|
113
|
+
var request = RSVP.denodeify(require('request'), true);
|
|
114
|
+
|
|
115
|
+
request('http://example.com').then(function(result) {
|
|
116
|
+
// result[0] -> res
|
|
117
|
+
// result[1] -> body
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Or if you pass it an array with names it returns the parameters as a hash:
|
|
122
|
+
|
|
123
|
+
```javascript
|
|
124
|
+
var request = RSVP.denodeify(require('request'), ['res', 'body']);
|
|
125
|
+
|
|
126
|
+
request('http://example.com').then(function(result) {
|
|
127
|
+
// result.res
|
|
128
|
+
// result.body
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Sometimes you need to retain the `this`:
|
|
133
|
+
|
|
134
|
+
```javascript
|
|
135
|
+
var app = require('express')();
|
|
136
|
+
var render = RSVP.denodeify(app.render.bind(app));
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The denodified function inherits from the original function. It works in all
|
|
140
|
+
environments, except IE 10 and below. Consequently all properties of the original
|
|
141
|
+
function are available to you. However, any properties you change on the
|
|
142
|
+
denodeified function won't be changed on the original function. Example:
|
|
143
|
+
|
|
144
|
+
```javascript
|
|
145
|
+
var request = RSVP.denodeify(require('request')),
|
|
146
|
+
cookieJar = request.jar(); // <- Inheritance is used here
|
|
147
|
+
|
|
148
|
+
request('http://example.com', {jar: cookieJar}).then(function(res) {
|
|
149
|
+
// cookieJar.cookies holds now the cookies returned by example.com
|
|
150
|
+
});
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Using `denodeify` makes it easier to compose asynchronous operations instead
|
|
154
|
+
of using callbacks. For example, instead of:
|
|
155
|
+
|
|
156
|
+
```javascript
|
|
157
|
+
var fs = require('fs');
|
|
158
|
+
|
|
159
|
+
fs.readFile('myfile.txt', function(err, data){
|
|
160
|
+
if (err) { ... } // Handle error
|
|
161
|
+
fs.writeFile('myfile2.txt', data, function(err){
|
|
162
|
+
if (err) { ... } // Handle error
|
|
163
|
+
console.log('done')
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
you can chain the operations together using `then` from the returned promise:
|
|
169
|
+
|
|
170
|
+
```javascript
|
|
171
|
+
var fs = require('fs');
|
|
172
|
+
var readFile = RSVP.denodeify(fs.readFile);
|
|
173
|
+
var writeFile = RSVP.denodeify(fs.writeFile);
|
|
174
|
+
|
|
175
|
+
readFile('myfile.txt').then(function(data){
|
|
176
|
+
return writeFile('myfile2.txt', data);
|
|
177
|
+
}).then(function(){
|
|
178
|
+
console.log('done')
|
|
179
|
+
}).catch(function(error){
|
|
180
|
+
// Handle error
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
@method denodeify
|
|
185
|
+
@static
|
|
186
|
+
@for RSVP
|
|
187
|
+
@param {Function} nodeFunc a 'node-style' function that takes a callback as
|
|
188
|
+
its last argument. The callback expects an error to be passed as its first
|
|
189
|
+
argument (if an error occurred, otherwise null), and the value from the
|
|
190
|
+
operation as its second argument ('function(err, value){ }').
|
|
191
|
+
@param {Boolean|Array} [options] An optional paramter that if set
|
|
192
|
+
to `true` causes the promise to fulfill with the callback's success arguments
|
|
193
|
+
as an array. This is useful if the node function has multiple success
|
|
194
|
+
paramters. If you set this paramter to an array with names, the promise will
|
|
195
|
+
fulfill with a hash with these names as keys and the success parameters as
|
|
196
|
+
values.
|
|
197
|
+
@return {Function} a function that wraps `nodeFunc` to return an
|
|
198
|
+
`RSVP.Promise`
|
|
199
|
+
@static
|
|
200
|
+
*/
|
|
201
|
+
export default function denodeify(nodeFunc, options) {
|
|
202
|
+
var fn = function() {
|
|
203
|
+
var self = this;
|
|
204
|
+
var l = arguments.length;
|
|
205
|
+
var args = new Array(l + 1);
|
|
206
|
+
var arg;
|
|
207
|
+
var promiseInput = false;
|
|
208
|
+
|
|
209
|
+
for (var i = 0; i < l; ++i) {
|
|
210
|
+
arg = arguments[i];
|
|
211
|
+
|
|
212
|
+
if (!promiseInput) {
|
|
213
|
+
// TODO: clean this up
|
|
214
|
+
promiseInput = needsPromiseInput(arg);
|
|
215
|
+
if (promiseInput === GET_THEN_ERROR) {
|
|
216
|
+
var p = new Promise(noop);
|
|
217
|
+
reject(p, GET_THEN_ERROR.value);
|
|
218
|
+
return p;
|
|
219
|
+
} else if (promiseInput && promiseInput !== true) {
|
|
220
|
+
arg = wrapThenable(promiseInput, arg);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
args[i] = arg;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
var promise = new Promise(noop);
|
|
227
|
+
|
|
228
|
+
args[l] = function(err, val) {
|
|
229
|
+
if (err)
|
|
230
|
+
reject(promise, err);
|
|
231
|
+
else if (options === undefined)
|
|
232
|
+
resolve(promise, val);
|
|
233
|
+
else if (options === true)
|
|
234
|
+
resolve(promise, arrayResult(arguments));
|
|
235
|
+
else if (isArray(options))
|
|
236
|
+
resolve(promise, makeObject(arguments, options));
|
|
237
|
+
else
|
|
238
|
+
resolve(promise, val);
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
if (promiseInput) {
|
|
242
|
+
return handlePromiseInput(promise, args, nodeFunc, self);
|
|
243
|
+
} else {
|
|
244
|
+
return handleValueInput(promise, args, nodeFunc, self);
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
fn.__proto__ = nodeFunc;
|
|
249
|
+
|
|
250
|
+
return fn;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function handleValueInput(promise, args, nodeFunc, self) {
|
|
254
|
+
var result = tryApply(nodeFunc, self, args);
|
|
255
|
+
if (result === ERROR) {
|
|
256
|
+
reject(promise, result.value);
|
|
257
|
+
}
|
|
258
|
+
return promise;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function handlePromiseInput(promise, args, nodeFunc, self){
|
|
262
|
+
return Promise.all(args).then(function(args){
|
|
263
|
+
var result = tryApply(nodeFunc, self, args);
|
|
264
|
+
if (result === ERROR) {
|
|
265
|
+
reject(promise, result.value);
|
|
266
|
+
}
|
|
267
|
+
return promise;
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function needsPromiseInput(arg) {
|
|
272
|
+
if (arg && typeof arg === 'object') {
|
|
273
|
+
if (arg.constructor === Promise) {
|
|
274
|
+
return true;
|
|
275
|
+
} else {
|
|
276
|
+
return getThen(arg);
|
|
277
|
+
}
|
|
278
|
+
} else {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
var platform;
|
|
2
|
+
|
|
3
|
+
/* global self */
|
|
4
|
+
if (typeof self === 'object') {
|
|
5
|
+
platform = self;
|
|
6
|
+
|
|
7
|
+
/* global global */
|
|
8
|
+
} else if (typeof global === 'object') {
|
|
9
|
+
platform = global;
|
|
10
|
+
} else {
|
|
11
|
+
throw new Error('no global: `self` or `global` found');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default platform;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import Enumerator from './enumerator';
|
|
2
|
+
import {
|
|
3
|
+
PENDING
|
|
4
|
+
} from './-internal';
|
|
5
|
+
import {
|
|
6
|
+
o_create
|
|
7
|
+
} from './utils';
|
|
8
|
+
|
|
9
|
+
function PromiseHash(Constructor, object, label) {
|
|
10
|
+
this._superConstructor(Constructor, object, true, label);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default PromiseHash;
|
|
14
|
+
|
|
15
|
+
PromiseHash.prototype = o_create(Enumerator.prototype);
|
|
16
|
+
PromiseHash.prototype._superConstructor = Enumerator;
|
|
17
|
+
PromiseHash.prototype._init = function() {
|
|
18
|
+
this._result = {};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
PromiseHash.prototype._validateInput = function(input) {
|
|
22
|
+
return input && typeof input === 'object';
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
PromiseHash.prototype._validationError = function() {
|
|
26
|
+
return new Error('Promise.hash must be called with an object');
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
PromiseHash.prototype._enumerate = function() {
|
|
30
|
+
var enumerator = this;
|
|
31
|
+
var promise = enumerator.promise;
|
|
32
|
+
var input = enumerator._input;
|
|
33
|
+
var results = [];
|
|
34
|
+
|
|
35
|
+
for (var key in input) {
|
|
36
|
+
if (promise._state === PENDING && Object.prototype.hasOwnProperty.call(input, key)) {
|
|
37
|
+
results.push({
|
|
38
|
+
position: key,
|
|
39
|
+
entry: input[key]
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
var length = results.length;
|
|
45
|
+
enumerator._remaining = length;
|
|
46
|
+
var result;
|
|
47
|
+
|
|
48
|
+
for (var i = 0; promise._state === PENDING && i < length; i++) {
|
|
49
|
+
result = results[i];
|
|
50
|
+
enumerator._eachEntry(result.entry, result.position);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
import { config } from './config';
|
|
2
|
+
import instrument from './instrument';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
isFunction,
|
|
6
|
+
now
|
|
7
|
+
} from './utils';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
noop,
|
|
11
|
+
subscribe,
|
|
12
|
+
initializePromise,
|
|
13
|
+
invokeCallback,
|
|
14
|
+
FULFILLED,
|
|
15
|
+
REJECTED
|
|
16
|
+
} from './-internal';
|
|
17
|
+
|
|
18
|
+
import all from './promise/all';
|
|
19
|
+
import race from './promise/race';
|
|
20
|
+
import Resolve from './promise/resolve';
|
|
21
|
+
import Reject from './promise/reject';
|
|
22
|
+
|
|
23
|
+
var guidKey = 'rsvp_' + now() + '-';
|
|
24
|
+
var counter = 0;
|
|
25
|
+
|
|
26
|
+
function needsResolver() {
|
|
27
|
+
throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function needsNew() {
|
|
31
|
+
throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
Promise objects represent the eventual result of an asynchronous operation. The
|
|
36
|
+
primary way of interacting with a promise is through its `then` method, which
|
|
37
|
+
registers callbacks to receive either a promise’s eventual value or the reason
|
|
38
|
+
why the promise cannot be fulfilled.
|
|
39
|
+
|
|
40
|
+
Terminology
|
|
41
|
+
-----------
|
|
42
|
+
|
|
43
|
+
- `promise` is an object or function with a `then` method whose behavior conforms to this specification.
|
|
44
|
+
- `thenable` is an object or function that defines a `then` method.
|
|
45
|
+
- `value` is any legal JavaScript value (including undefined, a thenable, or a promise).
|
|
46
|
+
- `exception` is a value that is thrown using the throw statement.
|
|
47
|
+
- `reason` is a value that indicates why a promise was rejected.
|
|
48
|
+
- `settled` the final resting state of a promise, fulfilled or rejected.
|
|
49
|
+
|
|
50
|
+
A promise can be in one of three states: pending, fulfilled, or rejected.
|
|
51
|
+
|
|
52
|
+
Promises that are fulfilled have a fulfillment value and are in the fulfilled
|
|
53
|
+
state. Promises that are rejected have a rejection reason and are in the
|
|
54
|
+
rejected state. A fulfillment value is never a thenable.
|
|
55
|
+
|
|
56
|
+
Promises can also be said to *resolve* a value. If this value is also a
|
|
57
|
+
promise, then the original promise's settled state will match the value's
|
|
58
|
+
settled state. So a promise that *resolves* a promise that rejects will
|
|
59
|
+
itself reject, and a promise that *resolves* a promise that fulfills will
|
|
60
|
+
itself fulfill.
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
Basic Usage:
|
|
64
|
+
------------
|
|
65
|
+
|
|
66
|
+
```js
|
|
67
|
+
var promise = new Promise(function(resolve, reject) {
|
|
68
|
+
// on success
|
|
69
|
+
resolve(value);
|
|
70
|
+
|
|
71
|
+
// on failure
|
|
72
|
+
reject(reason);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
promise.then(function(value) {
|
|
76
|
+
// on fulfillment
|
|
77
|
+
}, function(reason) {
|
|
78
|
+
// on rejection
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Advanced Usage:
|
|
83
|
+
---------------
|
|
84
|
+
|
|
85
|
+
Promises shine when abstracting away asynchronous interactions such as
|
|
86
|
+
`XMLHttpRequest`s.
|
|
87
|
+
|
|
88
|
+
```js
|
|
89
|
+
function getJSON(url) {
|
|
90
|
+
return new Promise(function(resolve, reject){
|
|
91
|
+
var xhr = new XMLHttpRequest();
|
|
92
|
+
|
|
93
|
+
xhr.open('GET', url);
|
|
94
|
+
xhr.onreadystatechange = handler;
|
|
95
|
+
xhr.responseType = 'json';
|
|
96
|
+
xhr.setRequestHeader('Accept', 'application/json');
|
|
97
|
+
xhr.send();
|
|
98
|
+
|
|
99
|
+
function handler() {
|
|
100
|
+
if (this.readyState === this.DONE) {
|
|
101
|
+
if (this.status === 200) {
|
|
102
|
+
resolve(this.response);
|
|
103
|
+
} else {
|
|
104
|
+
reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
getJSON('/posts.json').then(function(json) {
|
|
112
|
+
// on fulfillment
|
|
113
|
+
}, function(reason) {
|
|
114
|
+
// on rejection
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Unlike callbacks, promises are great composable primitives.
|
|
119
|
+
|
|
120
|
+
```js
|
|
121
|
+
Promise.all([
|
|
122
|
+
getJSON('/posts'),
|
|
123
|
+
getJSON('/comments')
|
|
124
|
+
]).then(function(values){
|
|
125
|
+
values[0] // => postsJSON
|
|
126
|
+
values[1] // => commentsJSON
|
|
127
|
+
|
|
128
|
+
return values;
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
@class RSVP.Promise
|
|
133
|
+
@param {function} resolver
|
|
134
|
+
@param {String} label optional string for labeling the promise.
|
|
135
|
+
Useful for tooling.
|
|
136
|
+
@constructor
|
|
137
|
+
*/
|
|
138
|
+
export default function Promise(resolver, label) {
|
|
139
|
+
var promise = this;
|
|
140
|
+
|
|
141
|
+
promise._id = counter++;
|
|
142
|
+
promise._label = label;
|
|
143
|
+
promise._state = undefined;
|
|
144
|
+
promise._result = undefined;
|
|
145
|
+
promise._subscribers = [];
|
|
146
|
+
|
|
147
|
+
if (config.instrument) {
|
|
148
|
+
instrument('created', promise);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (noop !== resolver) {
|
|
152
|
+
if (!isFunction(resolver)) {
|
|
153
|
+
needsResolver();
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (!(promise instanceof Promise)) {
|
|
157
|
+
needsNew();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
initializePromise(promise, resolver);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
Promise.cast = Resolve; // deprecated
|
|
165
|
+
Promise.all = all;
|
|
166
|
+
Promise.race = race;
|
|
167
|
+
Promise.resolve = Resolve;
|
|
168
|
+
Promise.reject = Reject;
|
|
169
|
+
|
|
170
|
+
Promise.prototype = {
|
|
171
|
+
constructor: Promise,
|
|
172
|
+
|
|
173
|
+
_guidKey: guidKey,
|
|
174
|
+
|
|
175
|
+
_onError: function (reason) {
|
|
176
|
+
var promise = this;
|
|
177
|
+
config.after(function() {
|
|
178
|
+
if (promise._onError) {
|
|
179
|
+
config['trigger']('error', reason);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
},
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
The primary way of interacting with a promise is through its `then` method,
|
|
186
|
+
which registers callbacks to receive either a promise's eventual value or the
|
|
187
|
+
reason why the promise cannot be fulfilled.
|
|
188
|
+
|
|
189
|
+
```js
|
|
190
|
+
findUser().then(function(user){
|
|
191
|
+
// user is available
|
|
192
|
+
}, function(reason){
|
|
193
|
+
// user is unavailable, and you are given the reason why
|
|
194
|
+
});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Chaining
|
|
198
|
+
--------
|
|
199
|
+
|
|
200
|
+
The return value of `then` is itself a promise. This second, 'downstream'
|
|
201
|
+
promise is resolved with the return value of the first promise's fulfillment
|
|
202
|
+
or rejection handler, or rejected if the handler throws an exception.
|
|
203
|
+
|
|
204
|
+
```js
|
|
205
|
+
findUser().then(function (user) {
|
|
206
|
+
return user.name;
|
|
207
|
+
}, function (reason) {
|
|
208
|
+
return 'default name';
|
|
209
|
+
}).then(function (userName) {
|
|
210
|
+
// If `findUser` fulfilled, `userName` will be the user's name, otherwise it
|
|
211
|
+
// will be `'default name'`
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
findUser().then(function (user) {
|
|
215
|
+
throw new Error('Found user, but still unhappy');
|
|
216
|
+
}, function (reason) {
|
|
217
|
+
throw new Error('`findUser` rejected and we're unhappy');
|
|
218
|
+
}).then(function (value) {
|
|
219
|
+
// never reached
|
|
220
|
+
}, function (reason) {
|
|
221
|
+
// if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.
|
|
222
|
+
// If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.
|
|
226
|
+
|
|
227
|
+
```js
|
|
228
|
+
findUser().then(function (user) {
|
|
229
|
+
throw new PedagogicalException('Upstream error');
|
|
230
|
+
}).then(function (value) {
|
|
231
|
+
// never reached
|
|
232
|
+
}).then(function (value) {
|
|
233
|
+
// never reached
|
|
234
|
+
}, function (reason) {
|
|
235
|
+
// The `PedgagocialException` is propagated all the way down to here
|
|
236
|
+
});
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Assimilation
|
|
240
|
+
------------
|
|
241
|
+
|
|
242
|
+
Sometimes the value you want to propagate to a downstream promise can only be
|
|
243
|
+
retrieved asynchronously. This can be achieved by returning a promise in the
|
|
244
|
+
fulfillment or rejection handler. The downstream promise will then be pending
|
|
245
|
+
until the returned promise is settled. This is called *assimilation*.
|
|
246
|
+
|
|
247
|
+
```js
|
|
248
|
+
findUser().then(function (user) {
|
|
249
|
+
return findCommentsByAuthor(user);
|
|
250
|
+
}).then(function (comments) {
|
|
251
|
+
// The user's comments are now available
|
|
252
|
+
});
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
If the assimliated promise rejects, then the downstream promise will also reject.
|
|
256
|
+
|
|
257
|
+
```js
|
|
258
|
+
findUser().then(function (user) {
|
|
259
|
+
return findCommentsByAuthor(user);
|
|
260
|
+
}).then(function (comments) {
|
|
261
|
+
// If `findCommentsByAuthor` fulfills, we'll have the value here
|
|
262
|
+
}, function (reason) {
|
|
263
|
+
// If `findCommentsByAuthor` rejects, we'll have the reason here
|
|
264
|
+
});
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Simple Example
|
|
268
|
+
--------------
|
|
269
|
+
|
|
270
|
+
Synchronous Example
|
|
271
|
+
|
|
272
|
+
```javascript
|
|
273
|
+
var result;
|
|
274
|
+
|
|
275
|
+
try {
|
|
276
|
+
result = findResult();
|
|
277
|
+
// success
|
|
278
|
+
} catch(reason) {
|
|
279
|
+
// failure
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Errback Example
|
|
284
|
+
|
|
285
|
+
```js
|
|
286
|
+
findResult(function(result, err){
|
|
287
|
+
if (err) {
|
|
288
|
+
// failure
|
|
289
|
+
} else {
|
|
290
|
+
// success
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Promise Example;
|
|
296
|
+
|
|
297
|
+
```javascript
|
|
298
|
+
findResult().then(function(result){
|
|
299
|
+
// success
|
|
300
|
+
}, function(reason){
|
|
301
|
+
// failure
|
|
302
|
+
});
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Advanced Example
|
|
306
|
+
--------------
|
|
307
|
+
|
|
308
|
+
Synchronous Example
|
|
309
|
+
|
|
310
|
+
```javascript
|
|
311
|
+
var author, books;
|
|
312
|
+
|
|
313
|
+
try {
|
|
314
|
+
author = findAuthor();
|
|
315
|
+
books = findBooksByAuthor(author);
|
|
316
|
+
// success
|
|
317
|
+
} catch(reason) {
|
|
318
|
+
// failure
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
Errback Example
|
|
323
|
+
|
|
324
|
+
```js
|
|
325
|
+
|
|
326
|
+
function foundBooks(books) {
|
|
327
|
+
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function failure(reason) {
|
|
331
|
+
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
findAuthor(function(author, err){
|
|
335
|
+
if (err) {
|
|
336
|
+
failure(err);
|
|
337
|
+
// failure
|
|
338
|
+
} else {
|
|
339
|
+
try {
|
|
340
|
+
findBoooksByAuthor(author, function(books, err) {
|
|
341
|
+
if (err) {
|
|
342
|
+
failure(err);
|
|
343
|
+
} else {
|
|
344
|
+
try {
|
|
345
|
+
foundBooks(books);
|
|
346
|
+
} catch(reason) {
|
|
347
|
+
failure(reason);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
} catch(error) {
|
|
352
|
+
failure(err);
|
|
353
|
+
}
|
|
354
|
+
// success
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
Promise Example;
|
|
360
|
+
|
|
361
|
+
```javascript
|
|
362
|
+
findAuthor().
|
|
363
|
+
then(findBooksByAuthor).
|
|
364
|
+
then(function(books){
|
|
365
|
+
// found books
|
|
366
|
+
}).catch(function(reason){
|
|
367
|
+
// something went wrong
|
|
368
|
+
});
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
@method then
|
|
372
|
+
@param {Function} onFulfillment
|
|
373
|
+
@param {Function} onRejection
|
|
374
|
+
@param {String} label optional string for labeling the promise.
|
|
375
|
+
Useful for tooling.
|
|
376
|
+
@return {Promise}
|
|
377
|
+
*/
|
|
378
|
+
then: function(onFulfillment, onRejection, label) {
|
|
379
|
+
var parent = this;
|
|
380
|
+
var state = parent._state;
|
|
381
|
+
|
|
382
|
+
if (state === FULFILLED && !onFulfillment || state === REJECTED && !onRejection) {
|
|
383
|
+
if (config.instrument) {
|
|
384
|
+
instrument('chained', parent, parent);
|
|
385
|
+
}
|
|
386
|
+
return parent;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
parent._onError = null;
|
|
390
|
+
|
|
391
|
+
var child = new parent.constructor(noop, label);
|
|
392
|
+
var result = parent._result;
|
|
393
|
+
|
|
394
|
+
if (config.instrument) {
|
|
395
|
+
instrument('chained', parent, child);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
if (state) {
|
|
399
|
+
var callback = arguments[state - 1];
|
|
400
|
+
config.async(function(){
|
|
401
|
+
invokeCallback(state, child, callback, result);
|
|
402
|
+
});
|
|
403
|
+
} else {
|
|
404
|
+
subscribe(parent, child, onFulfillment, onRejection);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
return child;
|
|
408
|
+
},
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
|
|
412
|
+
as the catch block of a try/catch statement.
|
|
413
|
+
|
|
414
|
+
```js
|
|
415
|
+
function findAuthor(){
|
|
416
|
+
throw new Error('couldn't find that author');
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// synchronous
|
|
420
|
+
try {
|
|
421
|
+
findAuthor();
|
|
422
|
+
} catch(reason) {
|
|
423
|
+
// something went wrong
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// async with promises
|
|
427
|
+
findAuthor().catch(function(reason){
|
|
428
|
+
// something went wrong
|
|
429
|
+
});
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
@method catch
|
|
433
|
+
@param {Function} onRejection
|
|
434
|
+
@param {String} label optional string for labeling the promise.
|
|
435
|
+
Useful for tooling.
|
|
436
|
+
@return {Promise}
|
|
437
|
+
*/
|
|
438
|
+
'catch': function(onRejection, label) {
|
|
439
|
+
return this.then(undefined, onRejection, label);
|
|
440
|
+
},
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
`finally` will be invoked regardless of the promise's fate just as native
|
|
444
|
+
try/catch/finally behaves
|
|
445
|
+
|
|
446
|
+
Synchronous example:
|
|
447
|
+
|
|
448
|
+
```js
|
|
449
|
+
findAuthor() {
|
|
450
|
+
if (Math.random() > 0.5) {
|
|
451
|
+
throw new Error();
|
|
452
|
+
}
|
|
453
|
+
return new Author();
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
try {
|
|
457
|
+
return findAuthor(); // succeed or fail
|
|
458
|
+
} catch(error) {
|
|
459
|
+
return findOtherAuther();
|
|
460
|
+
} finally {
|
|
461
|
+
// always runs
|
|
462
|
+
// doesn't affect the return value
|
|
463
|
+
}
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
Asynchronous example:
|
|
467
|
+
|
|
468
|
+
```js
|
|
469
|
+
findAuthor().catch(function(reason){
|
|
470
|
+
return findOtherAuther();
|
|
471
|
+
}).finally(function(){
|
|
472
|
+
// author was either found, or not
|
|
473
|
+
});
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
@method finally
|
|
477
|
+
@param {Function} callback
|
|
478
|
+
@param {String} label optional string for labeling the promise.
|
|
479
|
+
Useful for tooling.
|
|
480
|
+
@return {Promise}
|
|
481
|
+
*/
|
|
482
|
+
'finally': function(callback, label) {
|
|
483
|
+
var promise = this;
|
|
484
|
+
var constructor = promise.constructor;
|
|
485
|
+
|
|
486
|
+
return promise.then(function(value) {
|
|
487
|
+
return constructor.resolve(callback()).then(function(){
|
|
488
|
+
return value;
|
|
489
|
+
});
|
|
490
|
+
}, function(reason) {
|
|
491
|
+
return constructor.resolve(callback()).then(function(){
|
|
492
|
+
throw reason;
|
|
493
|
+
});
|
|
494
|
+
}, label);
|
|
495
|
+
}
|
|
496
|
+
};
|