Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const docGen = require('react-docgen-typescript')
- const docGenLoader = require('react-docgen-typescript-loader/dist/generateDocgenCodeBlock.js')
- const ts = require('typescript')
- class DocgenPlugin {
- apply(compiler) {
- // emit is asynchronous hook, tapping into it using tapAsync, you can use tapPromise/tap(synchronous) as well
- compiler.hooks.emit.tapAsync('DocgenPlugin', (compilation, callback) => {
- const modulesToProcess = []
- compilation.modules.forEach(module => {
- // Skip ignored / external modules
- if (!module.built || module.external || !module.rawRequest) {
- return
- }
- if (/@sensenet.+\/src.+.tsx/.test(module.id)) {
- modulesToProcess.push(module)
- }
- })
- const tsProgram = ts.createProgram(modulesToProcess.map(v => v.userRequest), {
- jsx: ts.JsxEmit.React,
- module: ts.ModuleKind.CommonJS,
- target: ts.ScriptTarget.Latest,
- })
- processModule(modulesToProcess[0], tsProgram)
- callback()
- })
- }
- }
- function processModule(module, tsProgram) {
- const componentDocs = docGen.withDefaultConfig().parseWithProgramProvider(module.userRequest, () => tsProgram)
- if (!componentDocs.length) return
- console.log(module.userRequest)
- const source = docGenLoader.default({
- filename: module.userRequest,
- source: module.userRequest,
- componentDocs,
- docgenCollectionName: 'STORYBOOK_REACT_CLASSES',
- setDisplayName: true,
- })
- module._source._value = source.substring(module.userRequest.length)
- console.log(module)
- }
- module.exports = DocgenPlugin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement