mili
Version:
Scaffolding with continuous control over the development of the project.
76 lines (75 loc) • 3.68 kB
JavaScript
;
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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.download = exports.hasCache = void 0;
const simple_git_1 = require("simple-git");
const semver = require("semver");
const fs = require("fs-extra");
const path = require("path");
const copy_1 = require("../../util/copy");
const logger = require("../../util/logger");
const exec_1 = require("../../util/exec");
const install_deps_1 = require("./install-deps");
function hasCache(repository) {
return __awaiter(this, void 0, void 0, function* () {
if (semver.valid(repository.version)) {
const existed = yield fs.pathExists(repository.storage);
if (existed) {
logger.info(`use the ${repository.name} template cache`);
return existed;
}
}
return false;
});
}
exports.hasCache = hasCache;
function download(repository, cwd) {
return __awaiter(this, void 0, void 0, function* () {
if (repository.type === 'git') {
if (yield hasCache(repository))
return repository.storage;
yield fs.ensureDir(repository.storage);
logger.info(`clone ${repository.name} template from git...`);
const git = (0, simple_git_1.default)(repository.storage);
const version = semver.valid(repository.version) ? `v${repository.version}` : repository.version;
yield fs.emptyDir(repository.storage);
yield git.clone(repository.name, repository.storage, ['--branch', version, '--single-branch']);
yield (0, install_deps_1.installDeps)(repository.storage);
return repository.storage;
}
else if (repository.type === 'npm') {
logger.info(`install ${repository.name} template from npm...`);
const templatePath = path.join(repository.storage, 'node_modules', repository.name);
if (yield hasCache(repository))
templatePath;
yield fs.ensureDir(repository.storage);
yield fs.emptyDir(repository.storage);
yield fs.writeJSON(path.join(repository.storage, 'package.json'), {
main: 'index.js',
description: '',
license: 'MIT',
});
let command = `npm install --production ${repository.name}@${repository.version}`;
if (repository.registry)
command += ` --registry ${repository.registry}`;
yield (0, exec_1.exec)(command, { cwd: repository.storage });
return templatePath;
}
else if (repository.type === 'fs') {
logger.info(`copy ${repository.name} template from file system...`);
yield fs.emptyDir(repository.storage);
yield (0, copy_1.copy)(path.join(cwd, repository.name), repository.storage);
return repository.storage;
}
throw new Error('Unable download the repository');
});
}
exports.download = download;