UNPKG

8.23 kBJavaScriptView Raw
1"use strict";
2
3function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
5require("core-js/modules/es.weak-map.js");
6
7require("core-js/modules/es.object.to-string.js");
8
9require("core-js/modules/es.string.iterator.js");
10
11require("core-js/modules/es.array.iterator.js");
12
13require("core-js/modules/web.dom-collections.iterator.js");
14
15require("core-js/modules/es.object.get-own-property-descriptor.js");
16
17require("core-js/modules/es.symbol.js");
18
19require("core-js/modules/es.symbol.description.js");
20
21require("core-js/modules/es.symbol.iterator.js");
22
23Object.defineProperty(exports, "__esModule", {
24 value: true
25});
26exports.Source = exports.getSourceProps = exports.SourceState = void 0;
27
28require("core-js/modules/es.array.filter.js");
29
30require("core-js/modules/es.array.map.js");
31
32require("core-js/modules/es.array.join.js");
33
34var _react = _interopRequireWildcard(require("react"));
35
36var _components = require("@storybook/components");
37
38var _DocsContext = require("./DocsContext");
39
40var _SourceContainer = require("./SourceContainer");
41
42var _types = require("./types");
43
44var _shared = require("../shared");
45
46var _enhanceSource = require("./enhanceSource");
47
48var _useStory = require("./useStory");
49
50function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
51
52function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
53
54var SourceState;
55exports.SourceState = SourceState;
56
57(function (SourceState) {
58 SourceState["OPEN"] = "open";
59 SourceState["CLOSED"] = "closed";
60 SourceState["NONE"] = "none";
61})(SourceState || (exports.SourceState = SourceState = {}));
62
63var getSourceState = function getSourceState(stories) {
64 var states = stories.map(function (story) {
65 var _story$parameters$doc, _story$parameters$doc2;
66
67 return (_story$parameters$doc = story.parameters.docs) === null || _story$parameters$doc === void 0 ? void 0 : (_story$parameters$doc2 = _story$parameters$doc.source) === null || _story$parameters$doc2 === void 0 ? void 0 : _story$parameters$doc2.state;
68 }).filter(Boolean);
69 if (states.length === 0) return SourceState.CLOSED; // FIXME: handling multiple stories is a pain
70
71 return states[0];
72};
73
74var getStorySource = function getStorySource(storyId, sourceContext) {
75 var sources = sourceContext.sources; // source rendering is async so source is unavailable at the start of the render cycle,
76 // so we fail gracefully here without warning
77
78 return (sources === null || sources === void 0 ? void 0 : sources[storyId]) || '';
79};
80
81var getSnippet = function getSnippet(snippet, story) {
82 var _parameters$docs, _parameters$docs$sour, _parameters$docs2, _parameters$docs2$sou, _enhanced$docs, _enhanced$docs$source;
83
84 if (!story) {
85 return snippet;
86 }
87
88 var parameters = story.parameters; // eslint-disable-next-line no-underscore-dangle
89
90 var isArgsStory = parameters.__isArgsStory;
91 var type = ((_parameters$docs = parameters.docs) === null || _parameters$docs === void 0 ? void 0 : (_parameters$docs$sour = _parameters$docs.source) === null || _parameters$docs$sour === void 0 ? void 0 : _parameters$docs$sour.type) || _shared.SourceType.AUTO; // if user has hard-coded the snippet, that takes precedence
92
93 var userCode = (_parameters$docs2 = parameters.docs) === null || _parameters$docs2 === void 0 ? void 0 : (_parameters$docs2$sou = _parameters$docs2.source) === null || _parameters$docs2$sou === void 0 ? void 0 : _parameters$docs2$sou.code;
94
95 if (userCode !== undefined) {
96 return userCode;
97 } // if user has explicitly set this as dynamic, use snippet
98
99
100 if (type === _shared.SourceType.DYNAMIC) {
101 var _parameters$docs3, _parameters$docs3$tra;
102
103 return ((_parameters$docs3 = parameters.docs) === null || _parameters$docs3 === void 0 ? void 0 : (_parameters$docs3$tra = _parameters$docs3.transformSource) === null || _parameters$docs3$tra === void 0 ? void 0 : _parameters$docs3$tra.call(_parameters$docs3, snippet, story)) || snippet;
104 } // if this is an args story and there's a snippet
105
106
107 if (type === _shared.SourceType.AUTO && snippet && isArgsStory) {
108 var _parameters$docs4, _parameters$docs4$tra;
109
110 return ((_parameters$docs4 = parameters.docs) === null || _parameters$docs4 === void 0 ? void 0 : (_parameters$docs4$tra = _parameters$docs4.transformSource) === null || _parameters$docs4$tra === void 0 ? void 0 : _parameters$docs4$tra.call(_parameters$docs4, snippet, story)) || snippet;
111 } // otherwise, use the source code logic
112
113
114 var enhanced = (0, _enhanceSource.enhanceSource)(story) || parameters;
115 return (enhanced === null || enhanced === void 0 ? void 0 : (_enhanced$docs = enhanced.docs) === null || _enhanced$docs === void 0 ? void 0 : (_enhanced$docs$source = _enhanced$docs.source) === null || _enhanced$docs$source === void 0 ? void 0 : _enhanced$docs$source.code) || '';
116};
117
118var getSourceProps = function getSourceProps(props, docsContext, sourceContext) {
119 var currentId = docsContext.id,
120 storyById = docsContext.storyById;
121
122 var _storyById = storyById(currentId),
123 parameters = _storyById.parameters;
124
125 var codeProps = props;
126 var singleProps = props;
127 var multiProps = props;
128 var source = codeProps.code; // prefer user-specified code
129
130 var targetIds = multiProps.ids || [singleProps.id || currentId];
131 var storyIds = targetIds.map(function (targetId) {
132 return targetId === _types.CURRENT_SELECTION ? currentId : targetId;
133 });
134 var stories = (0, _useStory.useStories)(storyIds, docsContext);
135
136 if (!stories.every(Boolean)) {
137 return {
138 error: _components.SourceError.SOURCE_UNAVAILABLE,
139 state: SourceState.NONE
140 };
141 }
142
143 if (!source) {
144 source = storyIds.map(function (storyId, idx) {
145 var storySource = getStorySource(storyId, sourceContext);
146 var storyObj = stories[idx];
147 return getSnippet(storySource, storyObj);
148 }).join('\n\n');
149 }
150
151 var state = getSourceState(stories);
152 var _parameters$docs5 = parameters.docs,
153 docsParameters = _parameters$docs5 === void 0 ? {} : _parameters$docs5;
154 var _docsParameters$sourc = docsParameters.source,
155 sourceParameters = _docsParameters$sourc === void 0 ? {} : _docsParameters$sourc;
156 var _sourceParameters$lan = sourceParameters.language,
157 docsLanguage = _sourceParameters$lan === void 0 ? null : _sourceParameters$lan;
158 return source ? {
159 code: source,
160 state: state,
161 language: props.language || docsLanguage || 'jsx',
162 dark: props.dark || false
163 } : {
164 error: _components.SourceError.SOURCE_UNAVAILABLE,
165 state: state
166 };
167};
168/**
169 * Story source doc block renders source code if provided,
170 * or the source for a story if `storyId` is provided, or
171 * the source for the current story if nothing is provided.
172 */
173
174
175exports.getSourceProps = getSourceProps;
176
177var Source = function Source(props) {
178 var sourceContext = (0, _react.useContext)(_SourceContainer.SourceContext);
179 var docsContext = (0, _react.useContext)(_DocsContext.DocsContext);
180 var sourceProps = getSourceProps(props, docsContext, sourceContext);
181 return /*#__PURE__*/_react.default.createElement(_components.Source, sourceProps);
182};
183
184exports.Source = Source;
\No newline at end of file