UNPKG

5.4 kBJavaScriptView Raw
1'use strict';
2
3var _regenerator = require('babel-runtime/regenerator');
4
5var _regenerator2 = _interopRequireDefault(_regenerator);
6
7var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
8
9var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
10
11var _keys = require('babel-runtime/core-js/object/keys');
12
13var _keys2 = _interopRequireDefault(_keys);
14
15var main = function () {
16 var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
17 var storybook, addons, channel, result, fails, exitCode;
18 return _regenerator2.default.wrap(function _callee$(_context) {
19 while (1) {
20 switch (_context.prev = _context.next) {
21 case 0:
22 _context.prev = 0;
23
24 require(configPath);
25 storybook = require('@kadira/storybook').getStorybook();
26 addons = require('@kadira/storybook-addons').default;
27
28 // Channel for addons is created by storybook manager from the client side.
29 // We need to polyfill it for the server side.
30
31 channel = new _events2.default();
32
33 addons.setChannel(channel);
34 _context.next = 8;
35 return runner.run((0, _util.filterStorybook)(storybook, grep, exclude));
36
37 case 8:
38 result = _context.sent;
39 fails = result.errored + result.unmatched;
40 exitCode = fails > 0 ? 1 : 0;
41
42 if (!_commander2.default.watch) {
43 process.exit(exitCode);
44 }
45 _context.next = 18;
46 break;
47
48 case 14:
49 _context.prev = 14;
50 _context.t0 = _context['catch'](0);
51
52 console.log(_context.t0.stack || _context.t0);
53
54 if (!_commander2.default.watch) {
55 process.exit(1);
56 }
57
58 case 18:
59 case 'end':
60 return _context.stop();
61 }
62 }
63 }, _callee, this, [[0, 14]]);
64 }));
65
66 return function main() {
67 return _ref.apply(this, arguments);
68 };
69}();
70
71var _test_runner = require('./test_runner');
72
73var _test_runner2 = _interopRequireDefault(_test_runner);
74
75var _storybook = require('@kadira/storybook');
76
77var _path = require('path');
78
79var _path2 = _interopRequireDefault(_path);
80
81var _commander = require('commander');
82
83var _commander2 = _interopRequireDefault(_commander);
84
85var _chokidar = require('chokidar');
86
87var _chokidar2 = _interopRequireDefault(_chokidar);
88
89var _events = require('events');
90
91var _events2 = _interopRequireDefault(_events);
92
93var _babel_config = require('@kadira/storybook/dist/server/babel_config');
94
95var _babel_config2 = _interopRequireDefault(_babel_config);
96
97var _util = require('./util');
98
99function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
100
101_commander2.default.option('-c, --config-dir [dir-name]', 'Directory where to load Storybook configurations from').option('-u, --update [boolean]', 'Update saved story snapshots').option('-i, --update-interactive [boolean]', 'Update saved story snapshots interactively').option('-g, --grep [string]', 'only test stories matching regexp').option('-x, --exclude [string]', 'exclude stories matching regexp').option('-w, --watch [boolean]', 'watch file changes and rerun tests').option('--polyfills [string]', 'add global polyfills').option('--loaders [string]', 'add loaders').parse(process.argv); /* eslint-disable */
102
103var _program$configDir = _commander2.default.configDir;
104var configDir = _program$configDir === undefined ? './.storybook' : _program$configDir;
105var _program$polyfills = _commander2.default.polyfills;
106var polyfillsPath = _program$polyfills === undefined ? require.resolve('./default_config/polyfills.js') : _program$polyfills;
107var _program$loaders = _commander2.default.loaders;
108var loadersPath = _program$loaders === undefined ? require.resolve('./default_config/loaders.js') : _program$loaders;
109var grep = _commander2.default.grep;
110var exclude = _commander2.default.exclude;
111
112
113var configPath = _path2.default.resolve('' + configDir, 'config');
114
115var babelConfig = (0, _babel_config2.default)(configDir);
116
117// cacheDir is webpack babel loader specific. We don't run webpack.
118delete babelConfig.cacheDirectory;
119
120require('babel-register')(babelConfig);
121require('babel-polyfill');
122
123// load loaders
124var loaders = require(_path2.default.resolve(loadersPath));
125
126(0, _keys2.default)(loaders).forEach(function (ext) {
127 var loader = loaders[ext];
128 require.extensions['.' + ext] = function (m, filepath) {
129 m.exports = loader(filepath);
130 };
131});
132
133// load polyfills
134require(_path2.default.resolve(polyfillsPath));
135
136// set userAgent so storybook knows we're storyshots
137if (!global.navigator) {
138 global.navigator = {};
139};
140global.navigator.userAgent = 'storyshots';
141
142var runner = new _test_runner2.default(_commander2.default);
143
144if (_commander2.default.watch) {
145 var watcher = _chokidar2.default.watch('.', {
146 ignored: 'node_modules', // TODO: Should node_modules also be watched?
147 persistent: true
148 });
149
150 watcher.on('ready', function () {
151 console.log('\nStoryshots is in watch mode.\n');
152 watcher.on('all', function () {
153 // Need to remove the require cache. Because it containes modules before
154 // changes were made.
155 (0, _keys2.default)(require.cache).forEach(function (key) {
156 delete require.cache[key];
157 });
158
159 main();
160 });
161 });
162}
163
164main();
\No newline at end of file