UNPKG

5.71 kBJavaScriptView Raw
1import "regenerator-runtime/runtime.js";
2
3function 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); } }
4
5function _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); }); }; }
6
7import "core-js/modules/es.object.assign.js";
8import "core-js/modules/es.array.concat.js";
9import "core-js/modules/es.array.includes.js";
10import "core-js/modules/es.string.includes.js";
11import "core-js/modules/es.object.to-string.js";
12import "core-js/modules/es.promise.js";
13import global from 'global';
14import semver from '@storybook/semver';
15import memoize from 'memoizerific';
16import { version as currentVersion } from '../version';
17var VERSIONCHECK = global.VERSIONCHECK;
18var getVersionCheckData = memoize(1)(function () {
19 try {
20 return Object.assign({}, JSON.parse(VERSIONCHECK).data || {});
21 } catch (e) {
22 return {};
23 }
24});
25export var init = function init(_ref) {
26 var store = _ref.store,
27 mode = _ref.mode,
28 fullAPI = _ref.fullAPI;
29
30 var _store$getState = store.getState(),
31 dismissedVersionNotification = _store$getState.dismissedVersionNotification;
32
33 var state = {
34 versions: Object.assign({
35 current: {
36 version: currentVersion
37 }
38 }, getVersionCheckData()),
39 dismissedVersionNotification: dismissedVersionNotification
40 };
41 var api = {
42 getCurrentVersion: function getCurrentVersion() {
43 var _store$getState2 = store.getState(),
44 current = _store$getState2.versions.current;
45
46 return current;
47 },
48 getLatestVersion: function getLatestVersion() {
49 var _store$getState3 = store.getState(),
50 _store$getState3$vers = _store$getState3.versions,
51 latest = _store$getState3$vers.latest,
52 next = _store$getState3$vers.next,
53 current = _store$getState3$vers.current;
54
55 if (current && semver.prerelease(current.version) && next) {
56 return latest && semver.gt(latest.version, next.version) ? latest : next;
57 }
58
59 return latest;
60 },
61 versionUpdateAvailable: function versionUpdateAvailable() {
62 var latest = api.getLatestVersion();
63 var current = api.getCurrentVersion();
64
65 if (latest) {
66 if (!latest.version) {
67 return true;
68 }
69
70 if (!current.version) {
71 return true;
72 }
73
74 var onPrerelease = !!semver.prerelease(current.version);
75 var actualCurrent = onPrerelease ? "".concat(semver.major(current.version), ".").concat(semver.minor(current.version), ".").concat(semver.patch(current.version)) : current.version;
76 var diff = semver.diff(actualCurrent, latest.version);
77 return semver.gt(latest.version, actualCurrent) && diff !== 'patch' && !diff.includes('pre');
78 }
79
80 return false;
81 }
82 }; // Grab versions from the server/local storage right away
83
84 var initModule = /*#__PURE__*/function () {
85 var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
86 var _store$getState4, _store$getState4$vers, versions, _getVersionCheckData, latest, next, latestVersion, diff;
87
88 return regeneratorRuntime.wrap(function _callee$(_context) {
89 while (1) {
90 switch (_context.prev = _context.next) {
91 case 0:
92 _store$getState4 = store.getState(), _store$getState4$vers = _store$getState4.versions, versions = _store$getState4$vers === void 0 ? {} : _store$getState4$vers;
93 _getVersionCheckData = getVersionCheckData(), latest = _getVersionCheckData.latest, next = _getVersionCheckData.next;
94 _context.next = 4;
95 return store.setState({
96 versions: Object.assign({}, versions, {
97 latest: latest,
98 next: next
99 })
100 });
101
102 case 4:
103 if (api.versionUpdateAvailable()) {
104 latestVersion = api.getLatestVersion().version;
105 diff = semver.diff(versions.current.version, versions.latest.version);
106
107 if (latestVersion !== dismissedVersionNotification && diff !== 'patch' && !semver.prerelease(latestVersion) && mode !== 'production') {
108 fullAPI.addNotification({
109 id: 'update',
110 link: '/settings/about',
111 content: {
112 headline: "Storybook ".concat(latestVersion, " is available!"),
113 subHeadline: "Your current version is: ".concat(versions.current.version)
114 },
115 icon: {
116 name: 'book'
117 },
118 onClear: function onClear() {
119 store.setState({
120 dismissedVersionNotification: latestVersion
121 }, {
122 persistence: 'permanent'
123 });
124 }
125 });
126 }
127 }
128
129 case 5:
130 case "end":
131 return _context.stop();
132 }
133 }
134 }, _callee);
135 }));
136
137 return function initModule() {
138 return _ref2.apply(this, arguments);
139 };
140 }();
141
142 return {
143 init: initModule,
144 state: state,
145 api: api
146 };
147};
\No newline at end of file