let fs = require('node:fs'); const path = require("node:path"); class JsUtil { // 加载 js 文本 static async loadJs(document, areaName, cookie) { let js = ''; // 加载 页面上的js const allScript = document.querySelectorAll('script[r="m"]'); for (let i = 0; i < allScript.length; i++) { const script = allScript[i]; let attr = script.textContent; if (attr) { js += attr } else { //获取script @src 属性 let jsSrc = script.src; let url = new URL(jsSrc); let fileName = areaName + url.pathname.replaceAll('/', '_'); let filePath = path.resolve(__dirname, `../public/static/js/`); let existDir = fs.existsSync(filePath); if (!existDir) { fs.mkdirSync(filePath, {recursive: true}); } let file = path.resolve(filePath, fileName); let existFile = fs.existsSync(file); let jsText; if (existFile) { let buffer = fs.readFileSync(file); jsText = buffer.toString('utf8') } else { // 文件下载 jsText = await this.downloadJs(jsSrc, filePath, fileName, cookie) } js += jsText } js += ";\n" } return js; } static async downloadJs(downloadUrl, filePath, fileName) { let url = new URL(downloadUrl); const response = await fetch(url); if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } const arrayBuffer = await response.arrayBuffer(); const buffer = Buffer.from(arrayBuffer); let file = path.resolve(filePath, fileName); fs.writeFile(file, buffer, {encoding: 'utf8'}, (err) => { if (err) { console.error(`文件${file}写入失败 ---> ${err}`) } else { console.info(`文件${file}写入成功`) } }) return buffer.toString('utf8') } } module.exports = JsUtil