UNPKG

storybook-framework-cedarjs

Version:

Storybook for CedarJS

61 lines (60 loc) 1.76 kB
import path from "path"; import { createFilter } from "@rollup/pluginutils"; import MagicString from "magic-string"; import { ERROR_CODES, parse, builtinHandlers as docgenHandlers, builtinResolvers as docgenResolver, builtinImporters as docgenImporters } from "react-docgen"; import actualNameHandler from "./docgen-handlers/actualNameHandler.js"; const defaultHandlers = Object.values(docgenHandlers).map((handler) => handler); const defaultResolver = new docgenResolver.FindExportedDefinitionsResolver(); const defaultImporter = docgenImporters.fsImporter; const handlers = [...defaultHandlers, actualNameHandler]; function reactDocgen({ include = /\.(tsx?|jsx?)$/, exclude = [/node_modules\/.*/] } = {}) { const cwd = process.cwd(); const filter = createFilter(include, exclude); return { name: "storybook:react-docgen-plugin", enforce: "pre", async transform(src, id) { const relPath = path.relative(cwd, id); if (!filter(relPath)) { return; } try { const docgenResults = parse(src, { resolver: defaultResolver, handlers, importer: defaultImporter, filename: id }); const s = new MagicString(src); docgenResults.forEach((info) => { const { actualName, ...docgenInfo } = info; if (actualName) { const docNode = JSON.stringify(docgenInfo); s.append(`;${actualName}.__docgenInfo=${docNode}`); } }); return { code: s.toString(), map: s.generateMap() }; } catch (e) { if (e.code === ERROR_CODES.MISSING_DEFINITION) { return; } throw e; } } }; } export { reactDocgen };