UNPKG

storybook-react-rsbuild

Version:

Storybook for React and Rsbuild: Develop React components in isolation with Hot Reloading.

115 lines (109 loc) 4.14 kB
import CJS_COMPAT_NODE_URL_bce9f5a39a886437 from 'node:url'; import CJS_COMPAT_NODE_PATH_bce9f5a39a886437 from 'node:path'; import CJS_COMPAT_NODE_MODULE_bce9f5a39a886437 from "node:module"; var __filename = CJS_COMPAT_NODE_URL_bce9f5a39a886437.fileURLToPath(import.meta.url); var __dirname = CJS_COMPAT_NODE_PATH_bce9f5a39a886437.dirname(__filename); var require = CJS_COMPAT_NODE_MODULE_bce9f5a39a886437.createRequire(import.meta.url); // ------------------------------------------------------------ // end of CJS compatibility banner, injected by Storybook's esbuild configuration // ------------------------------------------------------------ import "./chunk-HLWUFMVK.js"; // src/plugins/react-docgen-typescript/index.ts import { createFilter } from "@rollup/pluginutils"; // src/plugins/react-docgen-typescript/utils/filter.ts var defaultPropFilter = (prop) => !prop.parent?.fileName.includes("node_modules"); // src/plugins/react-docgen-typescript/index.ts var getDocgen = async (config) => { let docGen = await import("react-docgen-typescript"), { tsconfigPath, compilerOptions, propFilter = defaultPropFilter, setDisplayName, typePropName, ...rest } = config, docgenOptions = { propFilter, ...rest }; return docGen.withCompilerOptions( // Compiler Options are passed in to the custom program. {}, docgenOptions ); }, startWatch = async (config, onProgramCreatedOrUpdated) => { let { default: ts } = await import("typescript"), { getTSConfigFile } = await import("./typescript-V32BD7J6.js"), compilerOptions = { jsx: ts.JsxEmit.React, module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.Latest }, tsconfigPath = config.tsconfigPath ?? "./tsconfig.json"; if (config.compilerOptions) compilerOptions = { ...compilerOptions, ...config.compilerOptions }; else { let { options: tsOptions } = getTSConfigFile(tsconfigPath); compilerOptions = { ...compilerOptions, ...tsOptions }; } let host = ts.createWatchCompilerHost( tsconfigPath, compilerOptions, ts.sys, ts.createSemanticDiagnosticsBuilderProgram, void 0, () => { } ); return host.afterProgramCreate = (program) => { onProgramCreatedOrUpdated(program.getProgram()); }, new Promise((resolve) => { let watch = ts.createWatchProgram(host); resolve([watch.getProgram().getProgram(), watch.close]); }); }, react_docgen_typescript_default = (config = {}) => { let tsProgram, docGenParser, generateDocgenCodeBlock, generateOptions, filter, moduleInvalidationQueue = /* @__PURE__ */ new Map(), closeWatch; return { name: "rsbuild-plugin-react-docgen-typescript", setup(api) { api.modifyRsbuildConfig(async () => { let { getGenerateOptions } = await import("./options-PTSZHBIB.js"); generateDocgenCodeBlock = (await import("./generate-VIQ2RH4I.js")).generateDocgenCodeBlock, docGenParser = await getDocgen(config), generateOptions = getGenerateOptions(config), [tsProgram, closeWatch] = await startWatch(config, (program) => { tsProgram = program; for (let [ filepath, invalidateModule ] of moduleInvalidationQueue.entries()) invalidateModule(), moduleInvalidationQueue.delete(filepath); }), filter = createFilter( config.include ?? ["**/**.tsx"], config.exclude ?? ["**/**.stories.tsx"] ); }), api.transform( { test: (id) => filter(id) }, async ({ code: src, resource: id }) => { try { let componentDocs = docGenParser.parseWithProgramProvider( id, () => tsProgram ); return componentDocs.length ? generateDocgenCodeBlock({ filename: id, source: src, componentDocs, ...generateOptions }) : { code: src }; } catch { return src; } } ), api.onCloseBuild(() => { closeWatch(); }); } }; }; export { react_docgen_typescript_default as default };