import os from 'node:os'
import path from 'node:path'
import util from 'node:util'
import { exec as execSync } from 'node:child_process'
import fse from 'fs-extra'
const exec = util . promisify ( execSync )
export default {
key : 'puppeteer' ,
title : 'Puppeteer' ,
description : 'Headless chromium browser for server-side rendering. Required for generating PDF versions of pages and render content elements on the server (e.g. Mermaid diagrams)' ,
async isCompatible ( ) {
return os . arch ( ) === 'x64'
} ,
isInstalled : false ,
isInstallable : true ,
async check ( ) {
try {
this . isInstalled = await fse . pathExists ( path . join ( WIKI . SERVERPATH , 'node_modules/puppeteer-core/.local-chromium' ) )
} catch ( err ) {
this . isInstalled = false
}
return this . isInstalled
} ,
async install ( ) {
try {
// TODO: https://pptr.dev/browsers-api/
// const { stdout, stderr } = await exec('node install.js', {
// cwd: path.join(WIKI.SERVERPATH, 'node_modules/puppeteer-core'),
// timeout: 300000,
// windowsHide: true
// })
// this.isInstalled = true
// WIKI.logger.info(stdout)
// WIKI.logger.warn(stderr)
throw new Error ( 'Not implemented yet.' )
} catch ( err ) {
WIKI . logger . error ( err )
throw err
}
}
}