UNPKG

hexo-cli

Version:

Command line interface for Hexo

126 lines 5.44 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; const bluebird_1 = __importDefault(require("bluebird")); const path_1 = require("path"); const picocolors_1 = require("picocolors"); const hexo_fs_1 = require("hexo-fs"); const tildify_1 = __importDefault(require("tildify")); const spawn_1 = __importDefault(require("hexo-util/dist/spawn")); // for rewire const command_exists_1 = require("command-exists"); const ASSET_DIR = (0, path_1.join)(__dirname, '../../assets'); const GIT_REPO_URL = 'https://github.com/hexojs/hexo-starter.git'; function initConsole(args) { return __awaiter(this, void 0, void 0, function* () { args = Object.assign({ install: true, clone: true }, args); const baseDir = this.base_dir; const target = args._[0] ? (0, path_1.resolve)(baseDir, args._[0]) : baseDir; const { log } = this; if ((0, hexo_fs_1.existsSync)(target) && (0, hexo_fs_1.readdirSync)(target).length !== 0) { log.fatal(`${(0, picocolors_1.magenta)((0, tildify_1.default)(target))} not empty, please run \`hexo init\` on an empty folder and then copy your files into it`); yield bluebird_1.default.reject(new Error('target not empty')); } log.info('Cloning hexo-starter', GIT_REPO_URL); if (args.clone) { try { yield (0, spawn_1.default)('git', ['clone', '--recurse-submodules', '--depth=1', '--quiet', GIT_REPO_URL, target], { stdio: 'inherit' }); } catch (err) { log.warn('git clone failed. Copying data instead'); yield copyAsset(target); } } else { yield copyAsset(target); } yield bluebird_1.default.all([ removeGitDir(target), removeGitModules(target) ]); if (!args.install) return; log.info('Install dependencies'); let npmCommand = 'npm'; if ((0, command_exists_1.sync)('yarn')) { npmCommand = 'yarn'; } else if ((0, command_exists_1.sync)('pnpm')) { npmCommand = 'pnpm'; } try { if (npmCommand === 'yarn') { const yarnVer = yield (0, spawn_1.default)(npmCommand, ['--version'], { cwd: target }); if (typeof yarnVer === 'string' && yarnVer.startsWith('1')) { yield (0, spawn_1.default)(npmCommand, ['install', '--production', '--ignore-optional', '--silent'], { cwd: target, stdio: 'inherit' }); } else { npmCommand = 'npm'; } } else if (npmCommand === 'pnpm') { yield (0, spawn_1.default)(npmCommand, ['install', '--prod', '--no-optional', '--silent'], { cwd: target, stdio: 'inherit' }); } if (npmCommand === 'npm') { yield (0, spawn_1.default)(npmCommand, ['install', '--only=production', '--optional=false', '--silent'], { cwd: target, stdio: 'inherit' }); } log.info('Start blogging with Hexo!'); } catch (err) { log.warn(`Failed to install dependencies. Please run 'npm install' in "${target}" folder.`); } }); } function copyAsset(target) { return __awaiter(this, void 0, void 0, function* () { yield (0, hexo_fs_1.copyDir)(ASSET_DIR, target, { ignoreHidden: false }); }); } function removeGitDir(target) { const gitDir = (0, path_1.join)(target, '.git'); return (0, hexo_fs_1.stat)(gitDir).catch(err => { if (err && err.code === 'ENOENT') return; throw err; }).then(stats => { if (stats) { return stats.isDirectory() ? (0, hexo_fs_1.rmdir)(gitDir) : (0, hexo_fs_1.unlink)(gitDir); } }).then(() => (0, hexo_fs_1.readdir)(target)).map(path => (0, path_1.join)(target, path)).filter(path => (0, hexo_fs_1.stat)(path).then(stats => stats.isDirectory())).each(removeGitDir); } function removeGitModules(target) { return __awaiter(this, void 0, void 0, function* () { try { yield (0, hexo_fs_1.unlink)((0, path_1.join)(target, '.gitmodules')); } catch (err) { if (err && err.code === 'ENOENT') return; throw err; } }); } module.exports = initConsole; //# sourceMappingURL=init.js.map