creevey
Version:
creevey is a tool for automated visual testing, that tightly integrated with storybook
132 lines (110 loc) • 13.2 kB
JavaScript
;
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