UNPKG

creevey

Version:

creevey is a tool for automated visual testing, that tightly integrated with storybook

132 lines (110 loc) 13.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withCreevey = withCreevey; var _eventSourcePolyfill = require("event-source-polyfill"); var _coreEvents = _interopRequireDefault(require("@storybook/core-events")); var _addons = require("@storybook/addons"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } // NOTE If you don't use babel-polyfill or any other polyfills that add EventSource for IE11 // You don't get hot reload in IE11. So put polyfill for that to better UX window.EventSource = _eventSourcePolyfill.NativeEventSource || _eventSourcePolyfill.EventSourcePolyfill; function withCreevey() { var channel = _addons.addons.getChannel(); var currentStory = ''; function selectStory(_x, _x2, _x3, _x4) { return _selectStory.apply(this, arguments); } function _selectStory() { _selectStory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(storyId, kind, name, callback) { var storyMissingPromise, storyRenderedPromise, errorMessage; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(storyId == currentStory)) { _context.next = 5; break; } storyMissingPromise = new Promise(function (resolve) { return channel.once(_coreEvents.default.STORY_MISSING, resolve); }); channel.emit(_coreEvents.default.SET_CURRENT_STORY, { storyId: true, name: name, kind: kind }); _context.next = 5; return storyMissingPromise; case 5: currentStory = storyId; storyRenderedPromise = new Promise(function (resolve, reject) { function removeHandlers() { /* eslint-disable @typescript-eslint/no-use-before-define */ channel.off(_coreEvents.default.STORY_RENDERED, renderHandler); channel.off(_coreEvents.default.STORY_ERRORED, errorHandler); channel.off(_coreEvents.default.STORY_THREW_EXCEPTION, errorHandler); /* eslint-enable @typescript-eslint/no-use-before-define */ } function renderHandler() { removeHandlers(); resolve(); } function errorHandler(_ref) { var title = _ref.title, description = _ref.description; removeHandlers(); reject({ message: title, stack: description }); } function exceptionHandler(exception) { removeHandlers(); reject(exception); } channel.once(_coreEvents.default.STORY_RENDERED, renderHandler); channel.once(_coreEvents.default.STORY_ERRORED, errorHandler); channel.once(_coreEvents.default.STORY_THREW_EXCEPTION, exceptionHandler); }); channel.emit(_coreEvents.default.SET_CURRENT_STORY, { storyId: storyId, name: name, kind: kind }); _context.prev = 8; _context.next = 11; return storyRenderedPromise; case 11: callback(); _context.next = 18; break; case 14: _context.prev = 14; _context.t0 = _context["catch"](8); // NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance // NOTE Event `STORY_ERRORED` return error-like object without `name` field errorMessage = _context.t0 instanceof Error ? _context.t0.stack || _context.t0.message : "".concat(_context.t0.message, "\n ").concat(_context.t0.stack); callback(errorMessage); case 18: case "end": return _context.stop(); } } }, _callee, null, [[8, 14]]); })); return _selectStory.apply(this, arguments); } window.__CREEVEY_SELECT_STORY__ = selectStory; return (0, _addons.makeDecorator)({ name: 'withCreevey', parameterName: 'creevey', wrapper: function wrapper(getStory, context) { return getStory(context); } }); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdG9yeWJvb2sudHMiXSwibmFtZXMiOlsid2luZG93IiwiRXZlbnRTb3VyY2UiLCJOYXRpdmVFdmVudFNvdXJjZSIsIkV2ZW50U291cmNlUG9seWZpbGwiLCJ3aXRoQ3JlZXZleSIsImNoYW5uZWwiLCJhZGRvbnMiLCJnZXRDaGFubmVsIiwiY3VycmVudFN0b3J5Iiwic2VsZWN0U3RvcnkiLCJzdG9yeUlkIiwia2luZCIsIm5hbWUiLCJjYWxsYmFjayIsInN0b3J5TWlzc2luZ1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9uY2UiLCJFdmVudHMiLCJTVE9SWV9NSVNTSU5HIiwiZW1pdCIsIlNFVF9DVVJSRU5UX1NUT1JZIiwic3RvcnlSZW5kZXJlZFByb21pc2UiLCJyZWplY3QiLCJyZW1vdmVIYW5kbGVycyIsIm9mZiIsIlNUT1JZX1JFTkRFUkVEIiwicmVuZGVySGFuZGxlciIsIlNUT1JZX0VSUk9SRUQiLCJlcnJvckhhbmRsZXIiLCJTVE9SWV9USFJFV19FWENFUFRJT04iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibWVzc2FnZSIsInN0YWNrIiwiZXhjZXB0aW9uSGFuZGxlciIsImV4Y2VwdGlvbiIsImVycm9yTWVzc2FnZSIsIkVycm9yIiwiX19DUkVFVkVZX1NFTEVDVF9TVE9SWV9fIiwicGFyYW1ldGVyTmFtZSIsIndyYXBwZXIiLCJnZXRTdG9yeSIsImNvbnRleHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0FBLE1BQU0sQ0FBQ0MsV0FBUCxHQUFxQkMsMENBQXFCQyx3Q0FBMUM7O0FBUU8sU0FBU0MsV0FBVCxHQUE0QztBQUNqRCxNQUFNQyxPQUFPLEdBQUdDLGVBQU9DLFVBQVAsRUFBaEI7O0FBQ0EsTUFBSUMsWUFBWSxHQUFHLEVBQW5COztBQUZpRCxXQUlsQ0MsV0FKa0M7QUFBQTtBQUFBOztBQUFBO0FBQUEsMkVBSWpELGlCQUNFQyxPQURGLEVBRUVDLElB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V0FBbEM7QUFFQSxTQUFPLDJCQUFjO0FBQ25CRyxJQUFBQSxJQUFJLEVBQUUsYUFEYTtBQUVuQjRCLElBQUFBLGFBQWEsRUFBRSxTQUZJO0FBR25CQyxJQUFBQSxPQUFPLEVBQUUsaUJBQUNDLFFBQUQsRUFBV0MsT0FBWDtBQUFBLGFBQXVCRCxRQUFRLENBQUNDLE9BQUQsQ0FBL0I7QUFBQTtBQUhVLEdBQWQsQ0FBUDtBQUtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmF0aXZlRXZlbnRTb3VyY2UsIEV2ZW50U291cmNlUG9seWZpbGwgfSBmcm9tICdldmVudC1zb3VyY2UtcG9seWZpbGwnO1xuaW1wb3J0IEV2ZW50cyBmcm9tICdAc3Rvcnlib29rL2NvcmUtZXZlbnRzJztcbmltcG9ydCB7IGFkZG9ucywgTWFrZURlY29yYXRvclJlc3VsdCwgbWFrZURlY29yYXRvciB9IGZyb20gJ0BzdG9yeWJvb2svYWRkb25zJztcblxuLy8gTk9URSBJZiB5b3UgZG9uJ3QgdXNlIGJhYmVsLXBvbHlmaWxsIG9yIGFueSBvdGhlciBwb2x5ZmlsbHMgdGhhdCBhZGQgRXZlbnRTb3VyY2UgZm9yIElFMTFcbi8vIFlvdSBkb24ndCBnZXQgaG90IHJlbG9hZCBpbiBJRTExLiBTbyBwdXQgcG9seWZpbGwgZm9yIHRoYXQgdG8gYmV0dGVyIFVYXG53aW5kb3cuRXZlbnRTb3VyY2UgPSBOYXRpdmVFdmVudFNvdXJjZSB8fCBFdmVudFNvdXJjZVBvbHlmaWxsO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fQ1JFRVZFWV9TRUxFQ1RfU1RPUllfXzogKHN0b3J5SWQ6IHN0cmluZywga2luZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBzdHJpbmcpID0+IHZvaWQpID0+IHZvaWQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDcmVldmV5KCk6IE1ha2VEZWNvcmF0b3JSZXN1bHQge1xuICBjb25zdCBjaGFubmVsID0gYWRkb25zLmdldENoYW5uZWwoKTtcbiAgbGV0IGN1cnJlbnRTdG9yeSA9ICcnO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbGVjdFN0b3J5KFxuICAgIHN0b3J5SWQ6IHN0cmluZyxcbiAgICBraW5kOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAoZXJyb3I/OiBzdHJpbmcpID0+IHZvaWQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChzdG9yeUlkID09IGN1cnJlbnRTdG9yeSkge1xuICAgICAgY29uc3Qgc3RvcnlNaXNzaW5nUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBjaGFubmVsLm9uY2UoRXZlbnRzLlNUT1JZX01JU1NJTkcsIHJlc29sdmUpKTtcbiAgICAgIGNoYW5uZWwuZW1pdChFdmVudHMuU0VUX0NVUlJFTlRfU1RPUlksIHsgc3RvcnlJZDogdHJ1ZSwgbmFtZSwga2luZCB9KTtcbiAgICAgIGF3YWl0IHN0b3J5TWlzc2luZ1Byb21pc2U7XG4gICAgfVxuICAgIGN1cnJlbnRTdG9yeSA9IHN0b3J5SWQ7XG4gICAgY29uc3Qgc3RvcnlSZW5kZXJlZFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmdW5jdGlvbiByZW1vdmVIYW5kbGVycygpOiB2b2lkIHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4gICAgICAgIGNoYW5uZWwub2ZmKEV2ZW50cy5TVE9SWV9SRU5ERVJFRCwgcmVuZGVySGFuZGxlcik7XG4gICAgICAgIGNoYW5uZWwub2ZmKEV2ZW50cy5TVE9SWV9FUlJPUkVELCBlcnJvckhhbmRsZXIpO1xuICAgICAgICBjaGFubmVsLm9mZihFdmVudHMuU1RPUllfVEhSRVdfRVhDRVBUSU9OLCBlcnJvckhhbmRsZXIpO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmVuZGVySGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgcmVtb3ZlSGFuZGxlcnMoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZXJyb3JIYW5kbGVyKHsgdGl0bGUsIGRlc2NyaXB0aW9uIH06IHsgdGl0bGU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9KTogdm9pZCB7XG4gICAgICAgIHJlbW92ZUhhbmRsZXJzKCk7XG4gICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgbWVzc2FnZTogdGl0bGUsXG4gICAgICAgICAgc3RhY2s6IGRlc2NyaXB0aW9uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGV4Y2VwdGlvbkhhbmRsZXIoZXhjZXB0aW9uOiBFcnJvcik6IHZvaWQge1xuICAgICAgICByZW1vdmVIYW5kbGVycygpO1xuICAgICAgICByZWplY3QoZXhjZXB0aW9uKTtcbiAgICAgIH1cbiAgICAgIGNoYW5uZWwub25jZShFdmVudHMuU1RPUllfUkVOREVSRUQsIHJlbmRlckhhbmRsZXIpO1xuICAgICAgY2hhbm5lbC5vbmNlKEV2ZW50cy5TVE9SWV9FUlJPUkVELCBlcnJvckhhbmRsZXIpO1xuICAgICAgY2hhbm5lbC5vbmNlKEV2ZW50cy5TVE9SWV9USFJFV19FWENFUFRJT04sIGV4Y2VwdGlvbkhhbmRsZXIpO1xuICAgIH0pO1xuICAgIGNoYW5uZWwuZW1pdChFdmVudHMuU0VUX0NVUlJFTlRfU1RPUlksIHsgc3RvcnlJZCwgbmFtZSwga2luZCB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3RvcnlSZW5kZXJlZFByb21pc2U7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0gY2F0Y2ggKHJlYXNvbikge1xuICAgICAgLy8gTk9URSBFdmVudCBgU1RPUllfVEhSRVdfRVhDRVBUSU9OYCB0cmlnZ2VyZWQgb25seSBpbiByZWFjdCBhbmQgdnVlIGZyYW1ld29ya3MgYW5kIHJldHVybiBFcnJvciBpbnN0YW5jZVxuICAgICAgLy8gTk9URSBFdmVudCBgU1RPUllfRVJST1JFRGAgcmV0dXJuIGVycm9yLWxpa2Ugb2JqZWN0IHdpdGhvdXQgYG5hbWVgIGZpZWxkXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbi5zdGFjayB8fCByZWFzb24ubWVzc2FnZSA6IGAke3JlYXNvbi5tZXNzYWdlfVxcbiAgICAke3JlYXNvbi5zdGFja31gO1xuICAgICAgY2FsbGJhY2soZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICB3aW5kb3cuX19DUkVFVkVZX1NFTEVDVF9TVE9SWV9fID0gc2VsZWN0U3Rvcnk7XG5cbiAgcmV0dXJuIG1ha2VEZWNvcmF0b3Ioe1xuICAgIG5hbWU6ICd3aXRoQ3JlZXZleScsXG4gICAgcGFyYW1ldGVyTmFtZTogJ2NyZWV2ZXknLFxuICAgIHdyYXBwZXI6IChnZXRTdG9yeSwgY29udGV4dCkgPT4gZ2V0U3RvcnkoY29udGV4dCksXG4gIH0pO1xufVxuIl19