storybook-addon-playground
Version:
A playground to enable consumers learn how to use the component library or to reproduce bugs
67 lines (65 loc) • 2.13 kB
JavaScript
const excludedProps = ["children", "data-testid", "dataTestId", "id"];
function generateAutocompletion(input) {
return Object.values(input)
.flat()
.reduce((acc, { displayName, props = {} }) => {
return {
...acc,
[displayName]: Object.entries(props).filter(filterProps).map(mapProps),
};
}, {});
}
function filterProps([propName]) {
return !excludedProps.includes(propName);
}
function mapProps([propName, propValue]) {
const { tsType, type: jsType, required = false, description = "", defaultValue, } = propValue;
return {
[propName]: {
type: parseType(tsType ?? jsType),
required,
defaultValue: parseDefaultValue(defaultValue),
description,
},
};
}
function parseType(propType) {
if (!propType) {
return "unknown";
}
switch (propType.name) {
case "enum":
if ("value" in propType && propType.value) {
return Array.isArray(propType.value)
? propType.value.map((v) => typeof v === "object" && "value" in v
? v.value.replace(/"/g, "")
: "")
: propType.value;
}
break;
case "union":
case "arrayOf":
if ("elements" in propType && propType.elements) {
const elements = propType.elements
.map((element) => parseType(element))
.flat();
return propType.name === "arrayOf"
? elements.map((el) => `${el}[]`)
: elements;
}
break;
default: {
const raw = propType.raw;
return raw ? raw.replace(/\n/g, "") : propType.name || "unknown";
}
}
}
function parseDefaultValue(defaultValue) {
if (!defaultValue?.value ||
["null", "undefined"].includes(defaultValue?.value)) {
return;
}
return defaultValue.value;
}
export { generateAutocompletion };
//# sourceMappingURL=generate-autocompletion.js.map