boats
Version:
Beautiful Open / Async Template System - Write less yaml with BOATS and Nunjucks.
112 lines (111 loc) • 4.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const MethodAliasPosition_1 = require("./enums/MethodAliasPosition");
const StringStyle_1 = require("./enums/StringStyle");
const deepmerge_1 = tslib_1.__importDefault(require("deepmerge"));
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const upath_1 = tslib_1.__importDefault(require("upath"));
const init_1 = require("./init");
class GetCheckCorrectBoatsRc {
constructor() {
this.defaultRc = {
nunjucksOptions: {
autoescape: false,
tags: {
blockStart: '<%',
blockEnd: '%>',
variableStart: '<$',
variableEnd: '$>',
commentStart: '{#',
commentEnd: '#}'
}
},
permissionConfig: {
permissionStyle: StringStyle_1.StringStyle.camelCase,
permissionSegmentStyle: StringStyle_1.StringStyle.camelCase,
methodAliasPosition: MethodAliasPosition_1.MethodAliasPosition.AfterGlobalPrefix
},
paths: {}
};
}
/**
* Finds, parses and validates the boatsrc file
*/
getBoatsConfig() {
const boatsrc = upath_1.default.join(process.cwd(), '.boatsrc');
(0, init_1.createBoatsrcIfNotExists)();
try {
const boatsRcJson = fs_extra_1.default.readJsonSync(boatsrc);
if (!boatsRcJson.nunjucksOptions) {
boatsRcJson.nunjucksOptions = { tags: {} };
}
if (!boatsRcJson.nunjucksOptions.tags) {
boatsRcJson.nunjucksOptions.tags = {};
}
const json = (0, deepmerge_1.default)(this.defaultRc, boatsRcJson);
if (boatsRcJson.nunjucksOptions.tags) {
// as merging an {} into a full {} leaves the full {} intact
// in this specific use-case the user wants an empty {} to revert
// to nunjucks default tpl tags
json.nunjucksOptions.tags = boatsRcJson.nunjucksOptions.tags;
}
return this.parse(json);
// eslint-disable-next-line @typescript-eslint/no-unused-vars
}
catch (e) {
return {};
}
}
parse(boatsRc) {
this.boatsRc = boatsRc;
this.permissionConfigStyleCheck();
this.permissionConfigPrefixesCheck();
this.permissionConfigAliasChecks();
this.jsonSchemaRefParserBundleOpts();
this.ensureAtLeastEmptyPaths();
return this.boatsRc;
}
stringStyleCheck(input) {
if (!Object.values(StringStyle_1.StringStyle).includes(input)) {
console.warn(`WARNING: StringStyle provided does not match any of the available options, provided "${input}"`);
console.warn(`Available styles: ${Object.values(StringStyle_1.StringStyle)}`);
}
}
permissionConfigStyleCheck() {
var _a, _b, _c, _d;
if ((_b = (_a = this.boatsRc) === null || _a === void 0 ? void 0 : _a.permissionConfig) === null || _b === void 0 ? void 0 : _b.permissionStyle) {
this.stringStyleCheck(this.boatsRc.permissionConfig.permissionStyle);
}
if ((_d = (_c = this.boatsRc) === null || _c === void 0 ? void 0 : _c.permissionConfig) === null || _d === void 0 ? void 0 : _d.permissionSegmentStyle) {
this.stringStyleCheck(this.boatsRc.permissionConfig.permissionSegmentStyle);
}
}
permissionConfigPrefixesCheck() {
// nothing to check - deprecated code removed
}
permissionConfigAliasChecks() {
this.boatsRc.permissionConfig = this.boatsRc.permissionConfig || {};
if (!this.boatsRc.permissionConfig.methodAliasPosition) {
this.boatsRc.permissionConfig.methodAliasPosition = MethodAliasPosition_1.MethodAliasPosition.AfterGlobalPrefix;
}
}
jsonSchemaRefParserBundleOpts() {
if (process.env.jsonSchemaRefParserBundleOpts) {
try {
this.boatsRc.jsonSchemaRefParserBundleOpts = JSON.parse(process.env.jsonSchemaRefParserBundleOpts);
console.log('process.env.jsonSchemaRefParserBundleOpts parsed successfully.');
// eslint-disable-next-line @typescript-eslint/no-unused-vars
}
catch (e) {
throw new Error('Error parsing process.env.jsonSchemaRefParserBundleOpts, invalid JSON provided.');
}
}
}
ensureAtLeastEmptyPaths() {
if (!this.boatsRc.paths) {
this.boatsRc.paths = {};
}
}
}
exports.default = new GetCheckCorrectBoatsRc();