react-say
Version:
[](https://badge.fury.io/js/react-say) [](https://travis-ci.org/compulim/react-say)
123 lines (102 loc) • 8.37 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = createSynthesize;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _QueuedUtterance = _interopRequireDefault(require("./QueuedUtterance"));
function createSynthesize() {
var queueWithCurrent = [];
var running;
var run = /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!running) {
_context2.next = 2;
break;
}
return _context2.abrupt("return");
case 2:
running = true;
_context2.prev = 3;
return _context2.delegateYield( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var queuedUtterance;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(queuedUtterance = queueWithCurrent[0])) {
_context.next = 12;
break;
}
_context.prev = 1;
_context.next = 4;
return queuedUtterance.speak();
case 4:
_context.next = 9;
break;
case 6:
_context.prev = 6;
_context.t0 = _context["catch"](1);
// TODO: If the error is due to Safari restriction on user touch
// The next loop on the next audio will also fail because it was not queued with a user touch
_context.t0.message !== 'cancelled' && console.error(_context.t0);
case 9:
queueWithCurrent = queueWithCurrent.filter(function (target) {
return target !== queuedUtterance;
});
_context.next = 0;
break;
case 12:
case "end":
return _context.stop();
}
}
}, _callee, null, [[1, 6]]);
})(), "t0", 5);
case 5:
_context2.prev = 5;
running = false;
return _context2.finish(5);
case 8:
case "end":
return _context2.stop();
}
}
}, _callee2, null, [[3,, 5, 8]]);
}));
return function run() {
return _ref.apply(this, arguments);
};
}();
return function (ponyfill, utterance) {
var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
onEnd = _ref2.onEnd,
onError = _ref2.onError,
onStart = _ref2.onStart;
if (!(utterance instanceof ponyfill.SpeechSynthesisUtterance)) {
throw new Error('utterance must be instance of the ponyfill');
}
var queuedUtterance = new _QueuedUtterance["default"](ponyfill, utterance, {
onEnd: onEnd,
onError: onError,
onStart: onStart
});
queueWithCurrent = [].concat((0, _toConsumableArray2["default"])(queueWithCurrent), [queuedUtterance]);
run();
return {
// The cancel() function returns a Promise
cancel: function cancel() {
return queuedUtterance.cancel();
},
promise: queuedUtterance.promise
};
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jcmVhdGVTeW50aGVzaXplLmpzIl0sIm5hbWVzIjpbImNyZWF0ZVN5bnRoZXNpemUiLCJxdWV1ZVdpdGhDdXJyZW50IiwicnVubmluZyIsInJ1biIsInF1ZXVlZFV0dGVyYW5jZSIsInNwZWFrIiwibWVzc2FnZSIsImNvbnNvbGUiLCJlcnJvciIsImZpbHRlciIsInRhcmdldCIsInBvbnlmaWxsIiwidXR0ZXJhbmNlIiwib25FbmQiLCJvbkVycm9yIiwib25TdGFydCIsIlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSIsIkVycm9yIiwiUXVldWVkVXR0ZXJhbmNlIiwiY2FuY2VsIiwicHJvbWlzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRWUsU0FBU0EsZ0JBQVQsR0FBNEI7QUFDekMsTUFBSUMsZ0JBQWdCLEdBQUcsRUFBdkI7QUFDQSxNQUFJQyxPQUFKOztBQUVBLE1BQU1DLEdBQUc7QUFBQSw2RkFBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQ05ELE9BRE07QUFBQTtBQUFBO0FBQUE7O0FBQUE7O0FBQUE7QUFLVkEsY0FBQUEsT0FBTyxHQUFHLElBQVY7QUFMVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDhCQVVBRSxlQUFlLEdBQUdILGdCQUFnQixDQUFDLENBQUQsQ0FWbEM7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBLCtCQVlFRyxlQUFlLENBQUNDLEtBQWhCLEVBWkY7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQWNKO0FBQ0E7QUFFQSxvQ0FBSUMsT0FBSixLQUFnQixXQUFoQixJQUErQkMsT0FBTyxDQUFDQyxLQUFSLGFBQS9COztBQWpCSTtBQW9CTlAsd0JBQUFBLGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ1EsTUFBakIsQ0FBd0IsVUFBQUMsTUFBTTtBQUFBLGlDQUFJQSxNQUFNLEtBQUtOLGVBQWY7QUFBQSx5QkFBOUIsQ0FBbkI7QUFwQk07QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBdUJSRixjQUFBQSxPQUFPLEdBQUcsS0FBVjtBQXZCUTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUFIOztBQUFBLG9CQUFIQyxHQUFHO0FBQUE7QUFBQTtBQUFBLEtBQVQ7O0FBMkJBLFNBQU8sVUFBQ1EsUUFBRCxFQUFXQyxTQUFYLEVBQTJEO0FBQUEsb0ZBQVAsRUFBTztBQUFBLFFBQW5DQyxLQUFtQyxTQUFuQ0EsS0FBbUM7QUFBQSxRQUE1QkMsT0FBNEIsU0FBNUJBLE9BQTRCO0FBQUEsUUFBbkJDLE9BQW1CLFNBQW5CQSxPQUFtQjs7QUFDaEUsUUFBSSxFQUFFSCxTQUFTLFlBQVlELFFBQVEsQ0FBQ0ssd0JBQWhDLENBQUosRUFBK0Q7QUFDN0QsWUFBTSxJQUFJQyxLQUFKLENBQVUsNENBQVYsQ0FBTjtBQUNEOztBQUVELFFBQU1iLGVBQWUsR0FBRyxJQUFJYywyQkFBSixDQUFvQlAsUUFBcEIsRUFBOEJDLFNBQTlCLEVBQXlDO0FBQUVDLE1BQUFBLEtBQUssRUFBTEEsS0FBRjtBQUFTQyxNQUFBQSxPQUFPLEVBQVBBLE9BQVQ7QUFBa0JDLE1BQUFBLE9BQU8sRUFBUEE7QUFBbEIsS0FBekMsQ0FBeEI7QUFFQWQsSUFBQUEsZ0JBQWdCLGlEQUFPQSxnQkFBUCxJQUF5QkcsZUFBekIsRUFBaEI7QUFDQUQsSUFBQUEsR0FBRztBQUVILFdBQU87QUFDTDtBQUNBZ0IsTUFBQUEsTUFBTSxFQUFFO0FBQUEsZUFBTWYsZUFBZSxDQUFDZSxNQUFoQixFQUFOO0FBQUEsT0FGSDtBQUdMQyxNQUFBQSxPQUFPLEVBQUVoQixlQUFlLENBQUNnQjtBQUhwQixLQUFQO0FBS0QsR0FmRDtBQWdCRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBRdWV1ZWRVdHRlcmFuY2UgZnJvbSAnLi9RdWV1ZWRVdHRlcmFuY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTeW50aGVzaXplKCkge1xuICBsZXQgcXVldWVXaXRoQ3VycmVudCA9IFtdO1xuICBsZXQgcnVubmluZztcblxuICBjb25zdCBydW4gPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHJ1bm5pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBydW5uaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcXVldWVkVXR0ZXJhbmNlO1xuXG4gICAgICB3aGlsZSAoKHF1ZXVlZFV0dGVyYW5jZSA9IHF1ZXVlV2l0aEN1cnJlbnRbMF0pKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcXVldWVkVXR0ZXJhbmNlLnNwZWFrKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIFRPRE86IElmIHRoZSBlcnJvciBpcyBkdWUgdG8gU2FmYXJpIHJlc3RyaWN0aW9uIG9uIHVzZXIgdG91Y2hcbiAgICAgICAgICAvLyAgICAgICBUaGUgbmV4dCBsb29wIG9uIHRoZSBuZXh0IGF1ZGlvIHdpbGwgYWxzbyBmYWlsIGJlY2F1c2UgaXQgd2FzIG5vdCBxdWV1ZWQgd2l0aCBhIHVzZXIgdG91Y2hcblxuICAgICAgICAgIGVyci5tZXNzYWdlICE9PSAnY2FuY2VsbGVkJyAmJiBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBxdWV1ZVdpdGhDdXJyZW50ID0gcXVldWVXaXRoQ3VycmVudC5maWx0ZXIodGFyZ2V0ID0+IHRhcmdldCAhPT0gcXVldWVkVXR0ZXJhbmNlKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgcnVubmluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAocG9ueWZpbGwsIHV0dGVyYW5jZSwgeyBvbkVuZCwgb25FcnJvciwgb25TdGFydCB9ID0ge30pID0+IHtcbiAgICBpZiAoISh1dHRlcmFuY2UgaW5zdGFuY2VvZiBwb255ZmlsbC5TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3V0dGVyYW5jZSBtdXN0IGJlIGluc3RhbmNlIG9mIHRoZSBwb255ZmlsbCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXVlZFV0dGVyYW5jZSA9IG5ldyBRdWV1ZWRVdHRlcmFuY2UocG9ueWZpbGwsIHV0dGVyYW5jZSwgeyBvbkVuZCwgb25FcnJvciwgb25TdGFydCB9KTtcblxuICAgIHF1ZXVlV2l0aEN1cnJlbnQgPSBbLi4ucXVldWVXaXRoQ3VycmVudCwgcXVldWVkVXR0ZXJhbmNlXTtcbiAgICBydW4oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBUaGUgY2FuY2VsKCkgZnVuY3Rpb24gcmV0dXJucyBhIFByb21pc2VcbiAgICAgIGNhbmNlbDogKCkgPT4gcXVldWVkVXR0ZXJhbmNlLmNhbmNlbCgpLFxuICAgICAgcHJvbWlzZTogcXVldWVkVXR0ZXJhbmNlLnByb21pc2VcbiAgICB9O1xuICB9O1xufVxuIl19