UNPKG

3.49 kBJavaScriptView Raw
1"use strict";
2
3require("core-js/modules/es.symbol.js");
4
5require("core-js/modules/es.symbol.description.js");
6
7require("core-js/modules/es.symbol.iterator.js");
8
9require("core-js/modules/es.array.concat.js");
10
11require("core-js/modules/es.array.iterator.js");
12
13require("core-js/modules/es.object.to-string.js");
14
15require("core-js/modules/es.set.js");
16
17require("core-js/modules/es.string.iterator.js");
18
19require("core-js/modules/web.dom-collections.iterator.js");
20
21Object.defineProperty(exports, "__esModule", {
22 value: true
23});
24exports.inferArgTypes = void 0;
25
26var _mapValues = _interopRequireDefault(require("lodash/mapValues"));
27
28var _tsDedent = _interopRequireDefault(require("ts-dedent"));
29
30var _clientLogger = require("@storybook/client-logger");
31
32var _parameters = require("./parameters");
33
34var _templateObject;
35
36function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
38function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
39
40function _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); }
41
42var inferType = function inferType(value, name, visited) {
43 var type = _typeof(value);
44
45 switch (type) {
46 case 'boolean':
47 case 'string':
48 case 'number':
49 case 'function':
50 return {
51 name: type
52 };
53
54 case 'symbol':
55 return {
56 name: 'other',
57 value: 'symbol'
58 };
59
60 default:
61 break;
62 }
63
64 if (value) {
65 if (visited.has(value)) {
66 _clientLogger.logger.warn((0, _tsDedent.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n We've detected a cycle in arg '", "'. Args should be JSON-serializable.\n\n More info: https://storybook.js.org/docs/react/essentials/controls#fully-custom-args\n "])), name));
67
68 return {
69 name: 'other',
70 value: 'cyclic object'
71 };
72 }
73
74 visited.add(value);
75
76 if (Array.isArray(value)) {
77 var childType = value.length > 0 ? inferType(value[0], name, new Set(visited)) : {
78 name: 'other',
79 value: 'unknown'
80 };
81 return {
82 name: 'array',
83 value: childType
84 };
85 }
86
87 var fieldTypes = (0, _mapValues.default)(value, function (field) {
88 return inferType(field, name, new Set(visited));
89 });
90 return {
91 name: 'object',
92 value: fieldTypes
93 };
94 }
95
96 return {
97 name: 'object',
98 value: {}
99 };
100};
101
102var inferArgTypes = function inferArgTypes(context) {
103 var id = context.id,
104 parameters = context.parameters;
105 var _parameters$argTypes = parameters.argTypes,
106 userArgTypes = _parameters$argTypes === void 0 ? {} : _parameters$argTypes,
107 _parameters$args = parameters.args,
108 args = _parameters$args === void 0 ? {} : _parameters$args;
109 if (!args) return userArgTypes;
110 var argTypes = (0, _mapValues.default)(args, function (arg, key) {
111 return {
112 type: inferType(arg, "".concat(id, ".").concat(key), new Set())
113 };
114 });
115 return (0, _parameters.combineParameters)(argTypes, userArgTypes);
116};
117
118exports.inferArgTypes = inferArgTypes;
\No newline at end of file