UNPKG

boats

Version:

Beautiful Open / Async Template System - Write less yaml with BOATS and Nunjucks.

112 lines (111 loc) 4.77 kB
"use strict"; 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();