UNPKG

4.05 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _regenerator = require('babel-runtime/regenerator');
8
9var _regenerator2 = _interopRequireDefault(_regenerator);
10
11var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
12
13var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
14
15var _promise = require('babel-runtime/core-js/promise');
16
17var _promise2 = _interopRequireDefault(_promise);
18
19var _jsdom = require('jsdom');
20
21var _jsdom2 = _interopRequireDefault(_jsdom);
22
23var _constants = require('./constants');
24
25function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
27// jsdom doesn't support Web Workers yet.
28// We use workerMock to allow the user's preview.js to interact with the Worker API.
29var workerMock = '\n function MockWorker(path) {\n var api = this;\n\n function addEventListener() {}\n function removeEventListener() {}\n function postMessage() {}\n function terminate() {}\n\n api.postMessage = postMessage;\n api.addEventListener = addEventListener;\n api.removeEventListener = removeEventListener;\n api.terminate = terminate;\n\n return api;\n }\n window.Worker = MockWorker;\n';
30
31// jsdom doesn't support localStorage yet.
32// We use localStorageMock to allow the user's preview.js to interact with localStorage.
33var localStorageMock = '\n var localStorageMock = (function() {\n var store = {};\n return {\n getItem: function(key) {\n return store[key];\n },\n setItem: function(key, value) {\n store[key] = value.toString();\n },\n clear: function() {\n store = {};\n }\n };\n })();\n Object.defineProperty(window, \'localStorage\', { value: localStorageMock });\n ';
34
35// jsdom doesn't support matchMedia yet.
36var matchMediaMock = '\n window.matchMedia = window.matchMedia || (() => {\n return {\n matches: false,\n addListener: () => {},\n removeListener: () => {},\n };\n });\n ';
37
38function getStoriesFromDom(previewJavascriptCode, options) {
39 return new _promise2.default(function (resolve, reject) {
40 var jsDomConfig = {
41 html: '',
42 url: 'https://example.com/iframe.js?selectedKind=none&selectedStory=none',
43 src: [workerMock, localStorageMock, matchMediaMock, previewJavascriptCode],
44 done: function done(err, window) {
45 if (err) return reject(err.response.body);
46 if (!window || !window[_constants.storiesKey]) {
47 var message = 'Storybook object not found on window. ' + "Check your call to serializeStories in your Storybook's config.js.";
48 reject(new Error(message));
49 }
50 resolve(window[_constants.storiesKey]);
51 }
52 };
53 if (options.debug) {
54 jsDomConfig.virtualConsole = _jsdom2.default.createVirtualConsole().sendTo(console);
55 }
56 _jsdom2.default.env(jsDomConfig);
57 });
58}
59
60exports.default = function () {
61 var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(storybookCode) {
62 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
63 var stories;
64 return _regenerator2.default.wrap(function _callee$(_context) {
65 while (1) {
66 switch (_context.prev = _context.next) {
67 case 0:
68 if (!(!storybookCode || storybookCode === '')) {
69 _context.next = 2;
70 break;
71 }
72
73 throw new Error('Storybook code was not received.');
74
75 case 2:
76 _context.next = 4;
77 return getStoriesFromDom(storybookCode, options);
78
79 case 4:
80 stories = _context.sent;
81 return _context.abrupt('return', stories);
82
83 case 6:
84 case 'end':
85 return _context.stop();
86 }
87 }
88 }, _callee, this);
89 }));
90
91 function getStories(_x2) {
92 return _ref.apply(this, arguments);
93 }
94
95 return getStories;
96}();
\No newline at end of file