import * as plugins from './plugins.js'; import * as paths from './paths.js'; export class TypeDoc { public smartshellInstance = new plugins.smartshell.Smartshell({ executor: 'bash', pathDirectories: [paths.binDir], }); // Static public static async isTypeDocDir(dirPathArg: string): Promise { return true; } // Instance public typedocDirectory: string; constructor(dirPathArg) { this.typedocDirectory = dirPathArg; } public async compile(options?: { publicSubdir?: string }) { const data = { compilerOptions: { experimentalDecorators: true, useDefineForClassFields: false, target: 'ES2022', module: 'NodeNext', moduleResolution: 'NodeNext', esModuleInterop: true, verbatimModuleSyntax: true, skipLibCheck: true, }, include: [], }; let startDirectory = ''; if (await plugins.fsInstance.directory(plugins.path.join(paths.cwd, './ts')).exists()) { data.include.push(plugins.path.join(paths.cwd, './ts/**/*')); startDirectory = 'ts'; } if (await plugins.fsInstance.directory(plugins.path.join(paths.cwd, './ts_web')).exists()) { data.include.push(plugins.path.join(paths.cwd, './ts_web/**/*')); if (!startDirectory) { startDirectory = 'ts_web'; } } await plugins.fsInstance.file(paths.tsconfigFile).encoding('utf8').write(JSON.stringify(data)); let targetDir = paths.publicDir; if (options?.publicSubdir) { targetDir = plugins.path.join(targetDir, options.publicSubdir); } await this.smartshellInstance.exec( `typedoc --tsconfig ${paths.tsconfigFile} --out ${targetDir} ${startDirectory}/index.ts`, ); await plugins.fsInstance.file(paths.tsconfigFile).delete(); } }