2017-04-28 22:44:23 +00:00
|
|
|
"use strict";
|
|
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
|
|
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
|
});
|
|
|
|
};
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
const plugins = require("./smartscaf.plugins");
|
2017-05-25 16:32:53 +00:00
|
|
|
const helpers = require("./smartscaf.helpers");
|
2017-04-28 22:44:23 +00:00
|
|
|
class ScafTemplate {
|
2017-05-03 07:45:22 +00:00
|
|
|
constructor() {
|
2017-05-25 16:32:53 +00:00
|
|
|
this.suppliedVariables = {};
|
2017-05-03 07:45:22 +00:00
|
|
|
this.missingVariables = [];
|
|
|
|
}
|
2017-04-28 22:44:23 +00:00
|
|
|
/**
|
|
|
|
* read a template from a directory
|
|
|
|
*/
|
2017-05-03 07:45:22 +00:00
|
|
|
readTemplateFromDir(dirPathArg) {
|
2017-04-28 22:44:23 +00:00
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
2017-05-03 07:45:22 +00:00
|
|
|
let dirPath = plugins.path.resolve(dirPathArg);
|
|
|
|
this.templateSmartfileArray = yield plugins.smartfile.fs.fileTreeToObject(dirPath, '**/*');
|
2017-05-25 16:32:53 +00:00
|
|
|
yield this._findVariablesInTemplate();
|
|
|
|
yield this._checkSuppliedVariables();
|
|
|
|
yield this._checkDefaultVariables();
|
2017-04-28 22:44:23 +00:00
|
|
|
});
|
|
|
|
}
|
2017-05-03 07:45:22 +00:00
|
|
|
/**
|
|
|
|
* supply the variables to render the teplate with
|
2017-05-25 16:32:53 +00:00
|
|
|
* @param variablesArg gets merged with this.suppliedVariables
|
2017-05-03 07:45:22 +00:00
|
|
|
*/
|
|
|
|
supplyVariables(variablesArg) {
|
2017-04-28 22:44:23 +00:00
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
2018-08-27 21:55:14 +00:00
|
|
|
this.suppliedVariables = Object.assign({}, this.suppliedVariables, variablesArg);
|
2017-05-06 23:23:03 +00:00
|
|
|
this.missingVariables = yield this._checkSuppliedVariables();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Will ask for the missing variables by cli interaction
|
|
|
|
*/
|
|
|
|
askCliForMissingVariables() {
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
this.missingVariables = yield this._checkSuppliedVariables();
|
|
|
|
let localSmartInteract = new plugins.smartinteract.SmartInteract();
|
|
|
|
for (let missingVariable of this.missingVariables) {
|
2018-08-27 21:55:14 +00:00
|
|
|
localSmartInteract.addQuestions([
|
|
|
|
{
|
2017-05-06 23:23:03 +00:00
|
|
|
name: missingVariable,
|
|
|
|
type: 'input',
|
2017-05-25 16:32:53 +00:00
|
|
|
default: (() => {
|
2017-06-01 23:03:24 +00:00
|
|
|
if (this.defaultVariables && this.defaultVariables[missingVariable]) {
|
2017-05-25 16:32:53 +00:00
|
|
|
return this.defaultVariables[missingVariable];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return 'undefined variable';
|
|
|
|
}
|
|
|
|
})(),
|
2017-05-06 23:23:03 +00:00
|
|
|
message: `What is the value of ${missingVariable}?`
|
2018-08-27 21:55:14 +00:00
|
|
|
}
|
|
|
|
]);
|
2017-05-06 23:23:03 +00:00
|
|
|
}
|
2017-05-25 16:32:53 +00:00
|
|
|
let answerBucket = yield localSmartInteract.runQueue();
|
|
|
|
answerBucket.answerMap.forEach((answer) => __awaiter(this, void 0, void 0, function* () {
|
|
|
|
yield helpers.deepAddToObject(this.suppliedVariables, answer.name, answer.value);
|
|
|
|
}));
|
2017-04-28 22:44:23 +00:00
|
|
|
});
|
|
|
|
}
|
2017-05-26 13:32:50 +00:00
|
|
|
writeToDisk(destinationDirArg) {
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
2018-08-27 21:55:14 +00:00
|
|
|
let smartfileArrayToWrite = this.templateSmartfileArray;
|
2017-05-26 13:32:50 +00:00
|
|
|
for (let smartfile of smartfileArrayToWrite) {
|
2017-05-27 21:52:58 +00:00
|
|
|
// render the template
|
2017-05-26 13:32:50 +00:00
|
|
|
let template = yield plugins.smarthbs.getTemplateForString(smartfile.contents.toString());
|
|
|
|
let renderedTemplateString = template(this.suppliedVariables);
|
2017-05-27 21:52:58 +00:00
|
|
|
// handle frontmatter
|
|
|
|
let parsedTemplate = plugins.smartfm.parse(renderedTemplateString);
|
|
|
|
if (parsedTemplate.data.fileName) {
|
|
|
|
smartfile.updateFileName(parsedTemplate.data.fileName);
|
|
|
|
}
|
|
|
|
smartfile.contents = Buffer.from(parsedTemplate.content);
|
2017-05-26 13:32:50 +00:00
|
|
|
}
|
|
|
|
yield plugins.smartfile.memory.smartfileArrayToFs(smartfileArrayToWrite, destinationDirArg);
|
|
|
|
});
|
|
|
|
}
|
2017-04-28 22:44:23 +00:00
|
|
|
/**
|
2017-05-25 16:32:53 +00:00
|
|
|
* finds all variables in a Template in as string
|
|
|
|
* e.g. myobject.someKey and myobject.someOtherKey
|
2017-04-28 22:44:23 +00:00
|
|
|
*/
|
|
|
|
_findVariablesInTemplate() {
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
2017-05-25 16:32:53 +00:00
|
|
|
let templateVariables = [];
|
|
|
|
for (let templateSmartfile of this.templateSmartfileArray) {
|
|
|
|
let localTemplateVariables = yield plugins.smarthbs.findVarsInHbsString(templateSmartfile.contents.toString());
|
2018-08-27 21:55:14 +00:00
|
|
|
templateVariables = [...templateVariables, ...localTemplateVariables];
|
2017-05-03 07:45:22 +00:00
|
|
|
}
|
2018-08-27 21:55:14 +00:00
|
|
|
templateVariables = templateVariables.filter((value, index, self) => {
|
|
|
|
return self.indexOf(value) === index;
|
|
|
|
});
|
2017-04-28 22:44:23 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* checks if supplied Variables satisfy the template
|
|
|
|
*/
|
2017-05-06 23:23:03 +00:00
|
|
|
_checkSuppliedVariables() {
|
2017-04-28 22:44:23 +00:00
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
2017-05-03 07:45:22 +00:00
|
|
|
let missingVars = [];
|
2017-05-25 16:32:53 +00:00
|
|
|
for (let templateSmartfile of this.templateSmartfileArray) {
|
|
|
|
let localMissingVars = yield plugins.smarthbs.checkVarsSatisfaction(templateSmartfile.contents.toString(), this.suppliedVariables);
|
2018-08-27 21:55:14 +00:00
|
|
|
missingVars = [
|
|
|
|
...missingVars,
|
|
|
|
...localMissingVars
|
|
|
|
];
|
2017-05-03 07:45:22 +00:00
|
|
|
}
|
2018-08-27 21:55:14 +00:00
|
|
|
missingVars = missingVars.filter((value, index, self) => {
|
|
|
|
return self.indexOf(value) === index;
|
|
|
|
});
|
2017-05-03 07:45:22 +00:00
|
|
|
return missingVars;
|
2017-04-28 22:44:23 +00:00
|
|
|
});
|
|
|
|
}
|
2017-05-25 16:32:53 +00:00
|
|
|
/**
|
|
|
|
* checks the default.yml at the root of a template for default variables
|
|
|
|
* allows 2 ways of notation in YAML:
|
|
|
|
* >> myObject.myKey.someDeeperKey: someValue
|
|
|
|
* >> myObject.yourKey.yourDeeperKey: yourValue
|
|
|
|
* or
|
|
|
|
* >> myObject:
|
|
|
|
* >> - someKey:
|
|
|
|
* >> - someDeeperKey: someValue
|
|
|
|
* >> - yourKey:
|
|
|
|
* >> - yourDeeperKey: yourValue
|
|
|
|
*/
|
|
|
|
_checkDefaultVariables() {
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
let defaultsSmartfile = this.templateSmartfileArray.filter(smartfileArg => {
|
|
|
|
return smartfileArg.parsedPath.base === 'defaults.yml';
|
|
|
|
})[0];
|
|
|
|
if (defaultsSmartfile) {
|
|
|
|
let defaultObject = yield plugins.smartyaml.yamlStringToObject(defaultsSmartfile.contents.toString());
|
|
|
|
this.defaultVariables = defaultObject;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
this.defaultVariables = {};
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2017-04-28 22:44:23 +00:00
|
|
|
}
|
|
|
|
exports.ScafTemplate = ScafTemplate;
|
2018-08-27 21:55:14 +00:00
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzY2FmLmNsYXNzZXMuc21hcnRzY2FmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzY2FmLmNsYXNzZXMuc21hcnRzY2FmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSwrQ0FBK0M7QUFDL0MsK0NBQStDO0FBVy9DO0lBQUE7UUFNRSxzQkFBaUIsR0FBUSxFQUFFLENBQUM7UUFDNUIscUJBQWdCLEdBQWEsRUFBRSxDQUFDO0lBd0lsQyxDQUFDO0lBdElDOztPQUVHO0lBQ0csbUJBQW1CLENBQUMsVUFBa0I7O1lBQzFDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzRixNQUFNLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN0QyxDQUFDO0tBQUE7SUFFRDs7O09BR0c7SUFDRyxlQUFlLENBQUMsWUFBWTs7WUFDaEMsSUFBSSxDQUFDLGlCQUFpQixxQkFDakIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixZQUFZLENBQ2hCLENBQUM7WUFDRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvRCxDQUFDO0tBQUE7SUFFRDs7T0FFRztJQUNHLHlCQUF5Qjs7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDN0QsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFB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
|