UNPKG

mili

Version:

Scaffolding with continuous control over the development of the project.

65 lines (64 loc) 3.06 kB
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()); }); }; import AJV from 'ajv8'; import * as R from 'ramda'; import * as path from 'path'; import { parseTemplate } from "../util/parse-template"; import * as logger from "../util/logger"; import { download } from './download'; import { loadConfig } from './load-config'; import { inquire } from './inquire'; import { execLoader } from './exec-loader'; import { compile } from './compile'; const ajv = new AJV(); export function render(cwd, repository, answers, initResource) { return __awaiter(this, void 0, void 0, function* () { const templatePath = yield download(repository, cwd); const config = yield loadConfig(templatePath); if (!initResource.mili) { initResource.mili = { stack: [], }; } if (!initResource.mili.stack) { initResource.mili.stack = []; } initResource.mili.stack.push(Object.assign(Object.assign({}, repository), { version: config.version })); answers = yield inquire(config.questions, answers); for (const extension of config.extends) { if (extension.when) { const validate = ajv.compile(extension.when); const valid = validate(answers); if (!valid) continue; } const subRepository = parseTemplate(extension.template, extension.version, { registry: initResource.mili.registry, cwd, }); let subAnwsers = R.clone(answers); if (extension.answers) subAnwsers = Object.assign(Object.assign({}, subAnwsers), extension.answers); yield render(cwd, subRepository, subAnwsers, R.clone(initResource)); } logger.info(`compile template ${repository.name}...`); const resource = new Map(Object.entries(initResource)); for (const loader of config.loaders) { const result = yield execLoader(cwd, loader); for (const [key, value] of Object.entries(result)) { if (resource.has(key)) throw new Error(`Key Confilct - Loader:${loader.name}, key:${key}`); resource.set(key, value); } } resource.set('answers', answers); yield compile(cwd, path.join(templatePath, 'templates'), config.templates, resource); }); }