first commit

This commit is contained in:
Ilia Miheev
2025-11-22 22:14:33 +03:00
commit b4d17173e5
12 changed files with 422 additions and 0 deletions
+111
View File
@@ -0,0 +1,111 @@
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const AdmZip = require('adm-zip');
const minimist = require('minimist');
const helpMessage = `Список доступных команд docidoci:
help — вывод списка доступных команд
settings — создаёт файл в котором нужно указать мета-теги для сайта
init — создание структуры проекта на основе указанных настроек
`
function rebrendingData() {
const settingsPath = path.join(process.cwd(), 'docidociSettings.json')
const indexHtmlPath = path.join(process.cwd(), 'index.html')
const settings = JSON.parse(fs.readFileSync(settingsPath))
data = String(fs.readFileSync('./index.html'))
htmlSample = data.replace('{projectName}', settings.projectName)
htmlSample = htmlSample.replace('{repo}', settings.repo)
htmlSample = htmlSample.replace(/{themeColor}/g, settings.themeColor)
htmlSample = htmlSample.replace('{preloaderText}', settings.preloaderText)
htmlSample = htmlSample.replace(/{title}/g, settings.seo.title)
htmlSample = htmlSample.replace(/{description}/g, settings.seo.description)
htmlSample = htmlSample.replace('{keywords}', settings.seo.keywords)
htmlSample = htmlSample.replace('{image}', settings.seo.image)
htmlSample = htmlSample.replace('{url}', settings.seo.url)
fs.writeFileSync(indexHtmlPath, htmlSample)
}
function castomCopyFile(from, to) {
const originalFile = path.join(__dirname, from);
const copyFile = path.join(process.cwd(), to);
fs.copyFileSync(originalFile, copyFile);
}
function commandInit() {
const archivePath = path.join(__dirname, './files/files.zip');
const targetPath = process.cwd();
const settingsPath = path.join(process.cwd(), 'docidociSettings.json')
// Проверяем наличие архива
if (!fs.existsSync(archivePath)) {
console.log('Архив со структурой проекта не найден!');
process.exit(1)
}
// Проверяем, существует ли уже проект
let indexHtmlPath = path.join(process.cwd(), './index.html')
if (fs.existsSync(indexHtmlPath) && !argv.y) {
console.log(`Ошибка инициализации!
В папке "${targetPath}" уже существует проект!
Если хочешь его реинициализировать, то введи команду "docidoci init -y"`);
process.exit(1)
}
// Разархивировываем архив
const zip = new AdmZip(archivePath);
zip.extractAllTo(targetPath, true);
// Переносим html шаблон
if (fs.existsSync(settingsPath)) {
castomCopyFile('./files/index.html', 'index.html')
rebrendingData()
} else {
castomCopyFile('./files/indexWithoutSettings.html', 'index.html')
}
console.log(`Готово, проект инициализирован)
Проект находится в папке ${targetPath}
Запустить проект docsify можно командой "docsify serve"`);
process.exit()
};
function commandSettings() {
castomCopyFile('./files/docidociSettings.json', 'docidociSettings.json')
console.log(`Файл настроек скопирован!
Заполни поля своими данными или сделай их пустыми.
После выполни команду "docidoci init"`);
}
// Обработка аргументов из командной строки
const argv = minimist(process.argv.slice(2));
if (argv._.length == 0) {
console.log(helpMessage);
return
} else if (argv._.length > 1) {
console.log('За раз можно указывать только одну команду!!!\n');
console.log(helpMessage);
return
}
// Обработка команд
const command = argv._[0] // основная команда
if (command === 'init') {
commandInit();
} else if (command == 'help') {
console.log(helpMessage)
} else if (command == 'settings') {
commandSettings()
} else {
console.log(`Неизвестная команда "${command}". Введи "docidoci help", чтобы увидеть список доступных команд`);
}