async.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.maybeAsync = maybeAsync;
  6. exports.forwardAsync = forwardAsync;
  7. exports.isThenable = isThenable;
  8. exports.waitFor = exports.onFirstPause = exports.isAsync = void 0;
  9. function _gensync() {
  10. const data = _interopRequireDefault(require("gensync"));
  11. _gensync = function () {
  12. return data;
  13. };
  14. return data;
  15. }
  16. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  17. const id = x => x;
  18. const runGenerator = (0, _gensync().default)(function* (item) {
  19. return yield* item;
  20. });
  21. const isAsync = (0, _gensync().default)({
  22. sync: () => false,
  23. errback: cb => cb(null, true)
  24. });
  25. exports.isAsync = isAsync;
  26. function maybeAsync(fn, message) {
  27. return (0, _gensync().default)({
  28. sync(...args) {
  29. const result = fn.apply(this, args);
  30. if (isThenable(result)) throw new Error(message);
  31. return result;
  32. },
  33. async(...args) {
  34. return Promise.resolve(fn.apply(this, args));
  35. }
  36. });
  37. }
  38. const withKind = (0, _gensync().default)({
  39. sync: cb => cb("sync"),
  40. async: cb => cb("async")
  41. });
  42. function forwardAsync(action, cb) {
  43. const g = (0, _gensync().default)(action);
  44. return withKind(kind => {
  45. const adapted = g[kind];
  46. return cb(adapted);
  47. });
  48. }
  49. const onFirstPause = (0, _gensync().default)({
  50. name: "onFirstPause",
  51. arity: 2,
  52. sync: function (item) {
  53. return runGenerator.sync(item);
  54. },
  55. errback: function (item, firstPause, cb) {
  56. let completed = false;
  57. runGenerator.errback(item, (err, value) => {
  58. completed = true;
  59. cb(err, value);
  60. });
  61. if (!completed) {
  62. firstPause();
  63. }
  64. }
  65. });
  66. exports.onFirstPause = onFirstPause;
  67. const waitFor = (0, _gensync().default)({
  68. sync: id,
  69. async: id
  70. });
  71. exports.waitFor = waitFor;
  72. function isThenable(val) {
  73. return !!val && (typeof val === "object" || typeof val === "function") && !!val.then && typeof val.then === "function";
  74. }