@skbkontur/storybook-addon-live-examples
Version:
Storybook live examples plugin
139 lines (138 loc) • 5.92 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.formatCode = void 0;
exports.useCode = useCode;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _react = require("react");
var _standalone = require("prettier/standalone");
var prettierPluginBabel = _interopRequireWildcard(require("prettier/plugins/babel"));
var prettierPluginEstree = _interopRequireWildcard(require("prettier/plugins/estree"));
var _utils = require("./utils");
var _events = require("./events");
var _useStorage2 = require("./useStorage");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
var CHUNK_SEPARATOR = /^\s*(?:@|\/\/)MOBILE@?/m;
var formatCode = exports.formatCode = /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(code) {
return _regenerator["default"].wrap(function (_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 1;
return (0, _standalone.format)(code, {
parser: 'babel',
plugins: [prettierPluginBabel, prettierPluginEstree]
});
case 1:
return _context.abrupt("return", _context.sent);
case 2:
case "end":
return _context.stop();
}
}, _callee);
}));
return function formatCode(_x) {
return _ref.apply(this, arguments);
};
}();
var transpile = function transpile(code) {
return (0, _utils.transpileTs)(code).then(function (jsCode) {
return formatCode(jsCode).then(function (code) {
return code;
});
});
};
function useCode(_ref2) {
var initialCode = _ref2.initialCode,
live = _ref2.live,
language = _ref2.language,
_ref2$storage = _ref2.storage,
storage = _ref2$storage === void 0 ? sessionStorage : _ref2$storage,
storageKey = _ref2.storageKey;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
ready = _useState2[0],
setReady = _useState2[1];
var needsTranspile = live && ['typescript', 'tsx'].includes(language);
var _useState3 = (0, _react.useState)(+new Date()),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
resetKey = _useState4[0],
setResetKey = _useState4[1];
var _useStorage = (0, _useStorage2.useStorage)({
storageKey: storageKey,
storage: storage
}),
codeInStorage = _useStorage.codeInStorage,
updateCodeInStorage = _useStorage.updateCodeInStorage,
resetCodeInStorage = _useStorage.resetCodeInStorage;
var _useState5 = (0, _react.useState)(''),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
commonCode = _useState6[0],
setCommonCode = _useState6[1];
var initialCodeRef = (0, _react.useRef)();
var hasCodeInStorage = codeInStorage !== null;
(0, _react.useEffect)(function () {
(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
var _t;
return _regenerator["default"].wrap(function (_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
if (hasCodeInStorage) {
setCommonCode(codeInStorage);
setReady(true);
}
_context2.prev = 1;
_context2.next = 2;
return Promise.all(initialCode.split(CHUNK_SEPARATOR).map(function (s) {
return s.trim();
}).map(function (codeChunk) {
return needsTranspile ? transpile(codeChunk) : codeChunk;
})).then(function (_ref4) {
var _ref5 = (0, _slicedToArray2["default"])(_ref4, 1),
_ref5$ = _ref5[0],
commonCode = _ref5$ === void 0 ? '' : _ref5$;
initialCodeRef.current = commonCode;
if (!hasCodeInStorage) {
setCommonCode(commonCode);
setReady(true);
}
});
case 2:
_context2.next = 4;
break;
case 3:
_context2.prev = 3;
_t = _context2["catch"](1);
initialCodeRef.current = initialCode;
case 4:
case "end":
return _context2.stop();
}
}, _callee2, null, [[1, 3]]);
}))();
}, []);
var resetCode = (0, _react.useCallback)(function () {
setResetKey(+new Date());
(0, _events.dispatchCustomEvent)(_events.CUSTOM_EVENTS.REFRESH);
setCommonCode(initialCodeRef.current);
resetCodeInStorage();
}, [resetCodeInStorage, setCommonCode, setResetKey]);
var setCode = (0, _react.useCallback)(function (code) {
setCommonCode(code);
updateCodeInStorage(code);
}, [setCommonCode, updateCodeInStorage]);
return {
code: commonCode,
setCode: setCode,
resetCode: resetCode,
resetKey: resetKey,
setResetKey: setResetKey,
ready: ready,
hasCodeInStorage: hasCodeInStorage
};
}