@storybook/react
Version:
Storybook React renderer
104 lines (98 loc) • 3.81 kB
JavaScript
import CJS_COMPAT_NODE_URL_0ccojhbbgp74 from 'node:url';
import CJS_COMPAT_NODE_PATH_0ccojhbbgp74 from 'node:path';
import CJS_COMPAT_NODE_MODULE_0ccojhbbgp74 from "node:module";
var __filename = CJS_COMPAT_NODE_URL_0ccojhbbgp74.fileURLToPath(import.meta.url);
var __dirname = CJS_COMPAT_NODE_PATH_0ccojhbbgp74.dirname(__filename);
var require = CJS_COMPAT_NODE_MODULE_0ccojhbbgp74.createRequire(import.meta.url);
// ------------------------------------------------------------
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
// ------------------------------------------------------------
import {
ComponentMetaManager,
buildComponentDocgenFromResolved,
extractArgTypes,
path,
resolveStoryFileComponents
} from "../_node-chunks/chunk-ZUN4ALWM.js";
// src/docgen/docgen-worker.ts
import { STORY_FILE_TEST_REGEXP, getStoryImportPathFromEntry as getStoryImportPathFromEntry2 } from "storybook/internal/common";
// src/docgen/buildDocgen.ts
import { getStoryImportPathFromEntry } from "storybook/internal/common";
function extractArgTypesFromComponentMeta(componentMeta) {
return componentMeta ? extractArgTypes({ __docgenInfo: componentMeta }) ?? void 0 : void 0;
}
function addArgTypesFromComponentMeta(payload) {
let argTypes = extractArgTypesFromComponentMeta(payload.reactComponentMeta), subcomponents = payload.subcomponents ? Object.fromEntries(
Object.entries(payload.subcomponents).map(([name, subcomponent]) => [
name,
{
...subcomponent,
argTypes: extractArgTypesFromComponentMeta(subcomponent.reactComponentMeta)
}
])
) : void 0;
return {
...payload,
...argTypes ? { argTypes } : {},
...subcomponents ? { subcomponents } : {}
};
}
async function buildDocgenPayload(input, context) {
let storyFilePath = getStoryImportPathFromEntry(input.entry);
if (!storyFilePath)
return;
let storyPath = (context.resolvePath ?? ((importPath) => path.join(process.cwd(), importPath)))(storyFilePath), resolved;
try {
resolved = await resolveStoryFileComponents({
storyPath,
title: input.entry.title,
typescriptOptions: context.typescriptOptions,
docgenEngine: "react-component-meta"
});
} catch {
return;
}
let { csf, componentName, component, subcomponents, storyFile } = resolved, usableSubcomponents = subcomponents.filter(
(sub) => sub.component !== void 0
), storyRefs = [
...component ? [{ storyPath, component }] : [],
...usableSubcomponents.map((sub) => ({ storyPath, component: sub.component }))
];
storyRefs.length > 0 && context.componentMetaManager.batchExtract(storyRefs);
let componentDocgen = buildComponentDocgenFromResolved({
entry: input.entry,
storyPath,
storyFilePath,
storyFile,
csf,
componentName,
component,
subcomponents,
docgenEngine: "react-component-meta"
});
return addArgTypesFromComponentMeta(componentDocgen);
}
// src/docgen/docgen-worker.ts
var createDocgenProvider = () => {
let managerPromise, getManager = () => (managerPromise || (managerPromise = (async () => {
try {
let ts = await import("typescript");
return new ComponentMetaManager(ts);
} catch {
return;
}
})()), managerPromise);
return (nextDocgen) => async (input) => {
let storyImportPath = getStoryImportPathFromEntry2(input.entry);
if (!storyImportPath || !STORY_FILE_TEST_REGEXP.test(storyImportPath))
return nextDocgen(input);
let componentMetaManager = await getManager();
if (!componentMetaManager)
return nextDocgen(input);
let ours = await buildDocgenPayload(input, { componentMetaManager });
return ours ? { ...await nextDocgen(input), ...ours } : nextDocgen(input);
};
};
export {
createDocgenProvider
};