UNPKG

roomkit-web-vue3

Version:

<h1 align="center"> TUIRoomKit</h1> Conference (TUIRoomKit) is a product suitable for multi-person audio and video conversation scenarios such as business meetings, webinars, and online education. By integrating this product, you can add room management,

95 lines (87 loc) 2.69 kB
const fs = require('fs'); const path = require('path'); const readline = require('readline'); class UseRoomExtension { projectPath = process.cwd(); matchStrings = [ 'import ConferenceMainView', '<ConferenceMainView', '/message-room/message-room.vue', '/message-room/message-room-default.vue', "import { createPinia } from 'pinia';", 'app.use(createPinia());', ]; init() { this.changeLine(path.join(this.projectPath, './src')); } changeLine(dirPath) { processDirectory(dirPath, filePath => { changeLine(filePath, filePath, this.matchStrings); }); } } const useRoomExtension = new UseRoomExtension(); useRoomExtension.init(); // utils function changeLine(inputFile, outputFile, matchStrings) { let foundMatch = false; const tempFile = `${outputFile}.tmp`; const readInterface = readline.createInterface({ input: fs.createReadStream(inputFile), output: fs.createWriteStream(tempFile), console: false, }); readInterface.on('line', line => { const needReplace = matchStrings.some(ms => line.includes(ms)); if (needReplace) { line = line.replace(/\/\/\s*/, ''); line = line.replace(/<!--\s*/, '').replace(/\s*-->/, ''); line = line.replace( /import MessageRoom from '.\/message-room\/message-room-default.vue';/, "// import MessageRoom from './message-room/message-room-default.vue';" ); foundMatch = true; } readInterface.output.write(`${line}\n`); }); readInterface.on('close', () => { if (foundMatch) { fs.rename(tempFile, outputFile, err => { if (err) { console.error(`Unable to rename temporary file:${err.message}`); return; } console.log(`Introduce room for file ${inputFile}`); }); } else { fs.unlink(tempFile, err => { if (err) { console.error(`Unable to delete temporary files:${err.message}`); return; } }); } }); } function processDirectory(directoryPath, callback) { fs.readdir(directoryPath, (err, files) => { if (err) { console.error(`Unable to read folder:${err.message}`); return; } files.forEach(file => { const filePath = path.join(directoryPath, file); fs.stat(filePath, (err, stats) => { if (err) { console.error(`Unable to get file information:${err.message}`); return; } if (stats.isDirectory()) { processDirectory(filePath, callback); } else { callback(filePath); } }); }); }); }