const path = require('path') const globby = require('globby') const TypeDoc = require('typedoc') const packages = globby.sync('../packages/*', { onlyDirectories: true }) .map(name => name.replace('../packages/', '')) .filter(name => name.startsWith('core')) .map(name => { const app = new TypeDoc.Application() app.options.addReader(new TypeDoc.TSConfigReader()) app.options.addReader(new TypeDoc.TypeDocReader()) app.bootstrap({ mode: 'file', ignoreCompilerErrors: true, experimentalDecorators: true, excludeExternals: true, excludeNotExported: true, excludeProtected: true, excludePrivate: true, // excludeNotDocumented: true, exclude: [ '**/*.test.ts', '**/__tests__/*', '**/__mocks__/*', ], }) const project = app.convert(app.expandInputFiles([`../packages/${name}`])) if (project) { // app.generateDocs(project, `api/${name}`) // app.generateJson(project, `api/${name}.json`) const json = app.serializer.projectToObject(project) return json } return null }) .filter(package => !!package) module.exports = function (api) { api.loadSource(({ addCollection }) => { const appCollection = addCollection({ typeName: 'Package' }) packages.forEach(package => { appCollection.addNode(package) }) }) api.createPages(({ createPage }) => { packages.forEach(package => { createPage({ path: `/api/${package.name}`, component: './src/templates/ApiPage/index.vue', context: { package, }, }) }) }) api.chainWebpack(config => { config.resolve.extensions .add('.ts') .add('.jsx') config.module .rule('typescript') .test(/\.tsx?$/) .use() .loader('ts-loader') .options({ transpileOnly: false, appendTsSuffixTo: [/\.vue$/] }) config.module .rule('jsx') .test(/\.jsx?$/) .use() .loader('babel-loader') globby.sync('../packages/*', { onlyDirectories: true }) .map(name => name.replace('../packages/', '')) .forEach(name => { config.resolve.alias .set(`@tiptap/${name}`, path.resolve(`../packages/${name}/index.ts`)) }) }) }