{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\nimport path from \"node:path\";\n\nimport type {\n  ParserOptions,\n  ComponentDoc,\n  FileParser,\n} from \"react-docgen-typescript\";\nimport {\n  withCustomConfig,\n  withCompilerOptions,\n  withDefaultConfig,\n} from \"react-docgen-typescript\";\n\nimport type { Plugin, DocusaurusContext, RouteConfig } from \"@docusaurus/types\";\nimport { glob } from \"glob\";\nimport type { CompilerOptions } from \"typescript\";\n\ntype Route = Pick<RouteConfig, \"exact\" | \"component\" | \"path\" | \"priority\">;\n\ntype Union =\n  | {\n      global?: undefined | false;\n      route: Route;\n    }\n  | {\n      global: boolean;\n      route?: Route;\n    };\n\nexport type Options = Union & {\n  src: string | string[];\n  ignore?: string[];\n  tsConfig?: string;\n  compilerOptions?: CompilerOptions;\n  parserOptions?: ParserOptions;\n  globOptions: null;\n};\n\nfunction getParser(\n  config?: Options[\"tsConfig\"],\n  options?: Options[\"compilerOptions\"],\n  parserOptions?: Options[\"parserOptions\"],\n): FileParser[\"parse\"] {\n  if (config) {\n    return withCustomConfig(config, parserOptions ?? {}).parse;\n  } else if (options) {\n    return withCompilerOptions(options, parserOptions).parse;\n  }\n\n  return withDefaultConfig(parserOptions).parse;\n}\n\nexport default function plugin(\n  context: DocusaurusContext,\n  {\n    src,\n    ignore,\n    global = false,\n    route,\n    tsConfig,\n    compilerOptions,\n    parserOptions,\n  }: Options,\n): Plugin<ComponentDoc[]> {\n  return {\n    name: \"docusaurus-plugin-react-docgen-typescript\",\n    async loadContent() {\n      return getParser(\n        tsConfig,\n        compilerOptions,\n        parserOptions,\n      )(\n        await glob(src, {\n          absolute: true,\n          ignore,\n        }),\n      );\n    },\n    configureWebpack(config) {\n      return {\n        resolve: {\n          alias: {\n            \"@docgen\": path.join(\n              // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n              (config.resolve!.alias as any)[\"@generated\"],\n              \"docusaurus-plugin-react-docgen-typescript\",\n              \"default\",\n            ),\n          },\n        },\n      };\n    },\n    async contentLoaded({ content, actions }): Promise<void> {\n      const { createData, setGlobalData, addRoute } = actions;\n\n      if (global) {\n        console.warn(\n          \"Using global data can potentially slow down your entire app. Use with care ❤️\",\n        );\n\n        setGlobalData(content);\n      } else if (route) {\n        addRoute({\n          ...route,\n          modules: {\n            docgen: await createData(\"docgen.json\", JSON.stringify(content)),\n          },\n        });\n      } else {\n        const toProcess = content.reduce<\n          [\n            Record<string, string[]>,\n            { fileName: string; component: ComponentDoc }[],\n          ]\n        >(\n          ([processed, components], component) => {\n            const componentName = component.displayName;\n            let fileName = componentName;\n            const alreadyProcessed = processed[componentName];\n            if (alreadyProcessed && alreadyProcessed.length > 0) {\n              console.warn(\n                `Duplicate component '${componentName}' found (existing:\n                ${alreadyProcessed[alreadyProcessed.length - 1]})`,\n              );\n\n              fileName += `${alreadyProcessed.length}`;\n              console.warn(\n                `'${component.filePath}' will be written to '${fileName}.json'`,\n              );\n            }\n            return [\n              {\n                ...processed,\n                [componentName]: [\n                  ...(alreadyProcessed || []),\n                  component.filePath,\n                ],\n              },\n              [...components, { fileName, component }],\n            ];\n          },\n          [{}, []],\n        );\n        toProcess[1].forEach(({ fileName, component }) => {\n          void createData(`${fileName}.json`, JSON.stringify(component.props));\n        });\n      }\n    },\n  };\n}\n"],"mappings":";AACA,OAAO,UAAU;AAOjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,YAAY;AAwBrB,SAAS,UACP,QACA,SACA,eACqB;AACrB,MAAI,QAAQ;AACV,WAAO,iBAAiB,QAAQ,iBAAiB,CAAC,CAAC,EAAE;AAAA,EACvD,WAAW,SAAS;AAClB,WAAO,oBAAoB,SAAS,aAAa,EAAE;AAAA,EACrD;AAEA,SAAO,kBAAkB,aAAa,EAAE;AAC1C;AAEe,SAAR,OACL,SACA;AAAA,EACE;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACwB;AACxB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,cAAc;AAClB,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,QACE,MAAM,KAAK,KAAK;AAAA,UACd,UAAU;AAAA,UACV;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,iBAAiB,QAAQ;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,UACP,OAAO;AAAA,YACL,WAAW,KAAK;AAAA;AAAA,cAEb,OAAO,QAAS,MAAc,YAAY;AAAA,cAC3C;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,cAAc,EAAE,SAAS,QAAQ,GAAkB;AACvD,YAAM,EAAE,YAAY,eAAe,SAAS,IAAI;AAEhD,UAAI,QAAQ;AACV,gBAAQ;AAAA,UACN;AAAA,QACF;AAEA,sBAAc,OAAO;AAAA,MACvB,WAAW,OAAO;AAChB,iBAAS;AAAA,UACP,GAAG;AAAA,UACH,SAAS;AAAA,YACP,QAAQ,MAAM,WAAW,eAAe,KAAK,UAAU,OAAO,CAAC;AAAA,UACjE;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACL,cAAM,YAAY,QAAQ;AAAA,UAMxB,CAAC,CAAC,WAAW,UAAU,GAAG,cAAc;AACtC,kBAAM,gBAAgB,UAAU;AAChC,gBAAI,WAAW;AACf,kBAAM,mBAAmB,UAAU,aAAa;AAChD,gBAAI,oBAAoB,iBAAiB,SAAS,GAAG;AACnD,sBAAQ;AAAA,gBACN,wBAAwB,aAAa;AAAA,kBACnC,iBAAiB,iBAAiB,SAAS,CAAC,CAAC;AAAA,cACjD;AAEA,0BAAY,GAAG,iBAAiB,MAAM;AACtC,sBAAQ;AAAA,gBACN,IAAI,UAAU,QAAQ,yBAAyB,QAAQ;AAAA,cACzD;AAAA,YACF;AACA,mBAAO;AAAA,cACL;AAAA,gBACE,GAAG;AAAA,gBACH,CAAC,aAAa,GAAG;AAAA,kBACf,GAAI,oBAAoB,CAAC;AAAA,kBACzB,UAAU;AAAA,gBACZ;AAAA,cACF;AAAA,cACA,CAAC,GAAG,YAAY,EAAE,UAAU,UAAU,CAAC;AAAA,YACzC;AAAA,UACF;AAAA,UACA,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,QACT;AACA,kBAAU,CAAC,EAAE,QAAQ,CAAC,EAAE,UAAU,UAAU,MAAM;AAChD,eAAK,WAAW,GAAG,QAAQ,SAAS,KAAK,UAAU,UAAU,KAAK,CAAC;AAAA,QACrE,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;","names":[]}