resolveCamofoxServer.mjs

import { createRequire } from 'module'
import { join } from 'path'


//Camofox server之模組入口
let CAMOFOX_SERVER = '@askjo/camofox-browser/server.js'


/**
 * 以Node模組解析機制取得已安裝之@askjo/camofox-browser之server.js位置
 *
 * 該套件之server.js無任何export,且於top-level即無條件listen,故只能spawn為子行程執行,
 * 不可直接import,否則載入本套件時即會於行程內啟動Camofox server;
 * 先由本模組位置解析,不論套件被hoist至哪一層node_modules皆可正確找到,
 * 再由使用端cwd解析,供打包後(import.meta.url已失真)之執行環境使用
 *
 * @returns {String|null} 回傳server.js之絕對路徑字串,未安裝時回傳null
 * @example
 *
 * import resolveCamofoxServer from './src/resolveCamofoxServer.mjs'
 *
 * console.log(resolveCamofoxServer())
 * // => 'D:\\my-proj\\node_modules\\@askjo\\camofox-browser\\server.js'
 *
 */
function resolveCamofoxServer() {

    //由本模組位置解析
    try {
        return createRequire(import.meta.url).resolve(CAMOFOX_SERVER)
    }
    catch {}

    //由使用端cwd解析
    try {
        return createRequire(join(process.cwd(), 'index.js')).resolve(CAMOFOX_SERVER)
    }
    catch {}

    return null
}


export default resolveCamofoxServer