storybook-react-rsbuild
Version:
Storybook for React and Rsbuild: Develop React components in isolation with Hot Reloading.
115 lines (109 loc) • 4.14 kB
JavaScript
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
};