288 lines
8.9 KiB
JavaScript
288 lines
8.9 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Streamingle Camera Plugin Build Script
|
|
* StreamDock 플러그인 폴더에 자동 복사 기능 포함
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// 설정
|
|
const PLUGIN_NAME = 'com.mirabox.streamingle.sdPlugin';
|
|
const STREAMDOCK_PLUGINS_PATH = 'C:\\Users\\qscft\\AppData\\Roaming\\HotSpot\\StreamDock\\plugins';
|
|
const CURRENT_DIR = __dirname;
|
|
|
|
// 색상 출력 함수
|
|
function log(message, color = 'white') {
|
|
const colors = {
|
|
red: '\x1b[31m',
|
|
green: '\x1b[32m',
|
|
yellow: '\x1b[33m',
|
|
blue: '\x1b[34m',
|
|
magenta: '\x1b[35m',
|
|
cyan: '\x1b[36m',
|
|
white: '\x1b[37m',
|
|
reset: '\x1b[0m'
|
|
};
|
|
console.log(`${colors[color]}${message}${colors.reset}`);
|
|
}
|
|
|
|
// 디렉토리 복사 함수 (제외할 파일/폴더 필터링 포함)
|
|
function copyDirectory(src, dest) {
|
|
// 제외할 파일/폴더 목록
|
|
const excludePatterns = [
|
|
'dist',
|
|
'dist-dev',
|
|
'node_modules',
|
|
'.git',
|
|
'.gitignore',
|
|
'build.js',
|
|
'build.log',
|
|
'README.md'
|
|
// package.json과 package-lock.json은 제외하지 않음 (MiraBox StreamDock에서 필요할 수 있음)
|
|
];
|
|
|
|
if (!fs.existsSync(dest)) {
|
|
fs.mkdirSync(dest, { recursive: true });
|
|
}
|
|
|
|
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
|
|
for (const entry of entries) {
|
|
// 제외할 파일/폴더 체크
|
|
if (excludePatterns.includes(entry.name)) {
|
|
console.log(`⏭️ 제외: ${entry.name}`);
|
|
continue;
|
|
}
|
|
|
|
const srcPath = path.join(src, entry.name);
|
|
const destPath = path.join(dest, entry.name);
|
|
|
|
if (entry.isDirectory()) {
|
|
copyDirectory(srcPath, destPath);
|
|
} else {
|
|
fs.copyFileSync(srcPath, destPath);
|
|
}
|
|
}
|
|
}
|
|
|
|
// 디렉토리 삭제 함수
|
|
function removeDirectory(dirPath) {
|
|
if (fs.existsSync(dirPath)) {
|
|
fs.rmSync(dirPath, { recursive: true, force: true });
|
|
}
|
|
}
|
|
|
|
// 빌드 함수 - StreamDock 플러그인 폴더에 직접 빌드
|
|
function build() {
|
|
log('🔨 Streamingle Camera Plugin 빌드 시작...', 'cyan');
|
|
|
|
const buildDir = path.join(STREAMDOCK_PLUGINS_PATH, PLUGIN_NAME);
|
|
const pluginDir = CURRENT_DIR;
|
|
|
|
// StreamDock 플러그인 폴더 확인
|
|
if (!fs.existsSync(STREAMDOCK_PLUGINS_PATH)) {
|
|
log('❌ StreamDock 플러그인 폴더를 찾을 수 없습니다', 'red');
|
|
log(`📁 예상 경로: ${STREAMDOCK_PLUGINS_PATH}`, 'yellow');
|
|
return false;
|
|
}
|
|
|
|
// 기존 플러그인 삭제
|
|
if (fs.existsSync(buildDir)) {
|
|
removeDirectory(buildDir);
|
|
log('🗑️ 기존 플러그인 삭제 완료', 'yellow');
|
|
}
|
|
|
|
// 빌드 폴더 생성
|
|
fs.mkdirSync(buildDir, { recursive: true });
|
|
|
|
// 플러그인 폴더 복사
|
|
if (fs.existsSync(pluginDir)) {
|
|
copyDirectory(pluginDir, buildDir);
|
|
log('✅ 플러그인 파일 복사 완료', 'green');
|
|
} else {
|
|
log('❌ 플러그인 폴더를 찾을 수 없습니다', 'red');
|
|
return false;
|
|
}
|
|
|
|
log('🎉 빌드 완료!', 'green');
|
|
log(`📁 빌드 위치: ${buildDir}`, 'blue');
|
|
log('💡 StreamDock을 재시작하면 플러그인이 활성화됩니다', 'cyan');
|
|
return true;
|
|
}
|
|
|
|
// 개발 빌드 함수
|
|
function buildDev() {
|
|
log('🔨 Streamingle Camera Plugin 개발 빌드 시작...', 'cyan');
|
|
|
|
const buildDir = path.join(CURRENT_DIR, 'dist-dev');
|
|
const pluginDir = CURRENT_DIR;
|
|
|
|
// 기존 빌드 폴더 정리
|
|
if (fs.existsSync(buildDir)) {
|
|
removeDirectory(buildDir);
|
|
}
|
|
|
|
// 빌드 폴더 생성
|
|
fs.mkdirSync(buildDir, { recursive: true });
|
|
|
|
// 플러그인 폴더 복사
|
|
if (fs.existsSync(pluginDir)) {
|
|
copyDirectory(pluginDir, path.join(buildDir, PLUGIN_NAME));
|
|
log('✅ 플러그인 파일 복사 완료', 'green');
|
|
} else {
|
|
log('❌ 플러그인 폴더를 찾을 수 없습니다', 'red');
|
|
return false;
|
|
}
|
|
|
|
log('🎉 개발 빌드 완료!', 'green');
|
|
log(`📁 빌드 위치: ${buildDir}`, 'blue');
|
|
return true;
|
|
}
|
|
|
|
// StreamDock에 배포 함수
|
|
function deploy() {
|
|
log('🚀 StreamDock에 플러그인 배포 시작...', 'magenta');
|
|
|
|
const pluginDir = CURRENT_DIR;
|
|
const streamdockPluginPath = path.join(STREAMDOCK_PLUGINS_PATH, PLUGIN_NAME);
|
|
|
|
// StreamDock 플러그인 폴더 확인
|
|
if (!fs.existsSync(STREAMDOCK_PLUGINS_PATH)) {
|
|
log('❌ StreamDock 플러그인 폴더를 찾을 수 없습니다', 'red');
|
|
log(`📁 예상 경로: ${STREAMDOCK_PLUGINS_PATH}`, 'yellow');
|
|
return false;
|
|
}
|
|
|
|
// 기존 플러그인 삭제
|
|
if (fs.existsSync(streamdockPluginPath)) {
|
|
removeDirectory(streamdockPluginPath);
|
|
log('🗑️ 기존 플러그인 삭제 완료', 'yellow');
|
|
}
|
|
|
|
// 새 플러그인 복사
|
|
if (fs.existsSync(pluginDir)) {
|
|
copyDirectory(pluginDir, streamdockPluginPath);
|
|
log('✅ 플러그인 복사 완료', 'green');
|
|
} else {
|
|
log('❌ 플러그인 폴더를 찾을 수 없습니다', 'red');
|
|
return false;
|
|
}
|
|
|
|
log('🎉 StreamDock 배포 완료!', 'green');
|
|
log(`📁 배포 위치: ${streamdockPluginPath}`, 'blue');
|
|
log('💡 StreamDock을 재시작하면 플러그인이 활성화됩니다', 'cyan');
|
|
return true;
|
|
}
|
|
|
|
// 개발용 배포 함수 (빌드 후 배포)
|
|
function deployDev() {
|
|
log('🚀 개발용 StreamDock 배포 시작...', 'magenta');
|
|
|
|
// 먼저 빌드
|
|
if (!buildDev()) {
|
|
return false;
|
|
}
|
|
|
|
const buildDir = path.join(CURRENT_DIR, 'dist-dev', PLUGIN_NAME);
|
|
const streamdockPluginPath = path.join(STREAMDOCK_PLUGINS_PATH, PLUGIN_NAME);
|
|
|
|
// StreamDock 플러그인 폴더 확인
|
|
if (!fs.existsSync(STREAMDOCK_PLUGINS_PATH)) {
|
|
log('❌ StreamDock 플러그인 폴더를 찾을 수 없습니다', 'red');
|
|
log(`📁 예상 경로: ${STREAMDOCK_PLUGINS_PATH}`, 'yellow');
|
|
return false;
|
|
}
|
|
|
|
// 기존 플러그인 삭제
|
|
if (fs.existsSync(streamdockPluginPath)) {
|
|
removeDirectory(streamdockPluginPath);
|
|
log('🗑️ 기존 플러그인 삭제 완료', 'yellow');
|
|
}
|
|
|
|
// 새 플러그인 복사
|
|
if (fs.existsSync(buildDir)) {
|
|
copyDirectory(buildDir, streamdockPluginPath);
|
|
log('✅ 플러그인 복사 완료', 'green');
|
|
} else {
|
|
log('❌ 빌드된 플러그인 폴더를 찾을 수 없습니다', 'red');
|
|
return false;
|
|
}
|
|
|
|
log('🎉 개발용 StreamDock 배포 완료!', 'green');
|
|
log(`📁 배포 위치: ${streamdockPluginPath}`, 'blue');
|
|
log('💡 StreamDock을 재시작하면 플러그인이 활성화됩니다', 'cyan');
|
|
return true;
|
|
}
|
|
|
|
// 정리 함수
|
|
function clean() {
|
|
log('🧹 빌드 폴더 정리 시작...', 'yellow');
|
|
|
|
const buildDir = path.join(CURRENT_DIR, 'dist');
|
|
const buildDevDir = path.join(CURRENT_DIR, 'dist-dev');
|
|
|
|
if (fs.existsSync(buildDir)) {
|
|
removeDirectory(buildDir);
|
|
log('✅ dist 폴더 삭제 완료', 'green');
|
|
}
|
|
|
|
if (fs.existsSync(buildDevDir)) {
|
|
removeDirectory(buildDevDir);
|
|
log('✅ dist-dev 폴더 삭제 완료', 'green');
|
|
}
|
|
|
|
log('🎉 정리 완료!', 'green');
|
|
}
|
|
|
|
// 도움말 함수
|
|
function help() {
|
|
log('📖 Streamingle Camera Plugin 빌드 도구', 'cyan');
|
|
log('', 'white');
|
|
log('사용법:', 'yellow');
|
|
log(' node build.js <명령>', 'white');
|
|
log('', 'white');
|
|
log('명령:', 'yellow');
|
|
log(' build - 프로덕션 빌드 (dist 폴더에 생성)', 'white');
|
|
log(' build:dev - 개발 빌드 (dist-dev 폴더에 생성)', 'white');
|
|
log(' deploy - StreamDock에 직접 배포', 'white');
|
|
log(' deploy:dev - 개발 빌드 후 StreamDock에 배포', 'white');
|
|
log(' clean - 빌드 폴더 정리', 'white');
|
|
log(' help - 이 도움말 표시', 'white');
|
|
log('', 'white');
|
|
log('예시:', 'yellow');
|
|
log(' node build.js deploy # 바로 StreamDock에 배포', 'white');
|
|
log(' node build.js deploy:dev # 개발 빌드 후 배포', 'white');
|
|
}
|
|
|
|
// 메인 실행
|
|
const command = process.argv[2];
|
|
|
|
switch (command) {
|
|
case 'build':
|
|
build();
|
|
break;
|
|
case 'build:dev':
|
|
buildDev();
|
|
break;
|
|
case 'deploy':
|
|
deploy();
|
|
break;
|
|
case 'deploy:dev':
|
|
deployDev();
|
|
break;
|
|
case 'clean':
|
|
clean();
|
|
break;
|
|
case 'help':
|
|
case '--help':
|
|
case '-h':
|
|
help();
|
|
break;
|
|
default:
|
|
log('❌ 알 수 없는 명령입니다', 'red');
|
|
log('', 'white');
|
|
help();
|
|
break;
|
|
} |