UNPKG

boats

Version:

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

111 lines (110 loc) 5.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const lodash_1 = tslib_1.__importDefault(require("lodash")); const upath_1 = tslib_1.__importStar(require("upath")); const lcFirst_1 = tslib_1.__importDefault(require("./lcFirst")); const removeFileExtension_1 = tslib_1.__importDefault(require("./removeFileExtension")); const constants_1 = require("./constants"); const StringStyle_1 = require("./enums/StringStyle"); const ucFirst_1 = tslib_1.__importDefault(require("./ucFirst")); class UniqueOperationIds { // eslint-disable-next-line max-lines-per-function getUniqueOperationIdFromPath(input) { const { stripValue, removeMethod, prefixes, firstSegmentSplit } = input; const cwd = input.cwd || upath_1.default.toUnix(process.cwd()); const segmentStyle = input.segmentStyle || StringStyle_1.StringStyle.camelCase; const style = input.style || StringStyle_1.StringStyle.camelCase; let filePath = input.filePath.replace(cwd, ''); // Ensure tails is an array let tails = typeof input.tails === 'string' ? [input.tails] : input.tails || []; tails = tails.filter((tail) => tail.length > 0); filePath = (0, removeFileExtension_1.default)(filePath.replace(stripValue, '')); // split the path into parts governed by the path separator, sep used for unix and windows compatibility let filePathParts = filePath.split(upath_1.sep); // firstSegmentSplit is the highlight the 1st let iterationToNotCaseChange = -1; if (firstSegmentSplit) { iterationToNotCaseChange = 0; } // inject the prefixes if given if (prefixes && prefixes.length > 0) { if (firstSegmentSplit) { iterationToNotCaseChange = prefixes.length - 1; } filePathParts = prefixes.concat(filePathParts); } for (let i = 0; i < filePathParts.length; ++i) { if (filePathParts[i] !== upath_1.sep) { switch (segmentStyle) { case StringStyle_1.StringStyle.snakeCase: filePathParts[i] = lodash_1.default.snakeCase(this.removeCurlys(filePathParts[i])); break; case StringStyle_1.StringStyle.PascalCase: filePathParts[i] = (0, ucFirst_1.default)(lodash_1.default.camelCase(this.removeCurlys(filePathParts[i]))); break; case StringStyle_1.StringStyle.kebabCase: filePathParts[i] = lodash_1.default.kebabCase(this.removeCurlys(filePathParts[i])); break; case StringStyle_1.StringStyle.asIs: filePathParts[i] = this.removeCurlys(filePathParts[i]); break; default: filePathParts[i] = lodash_1.default.camelCase(this.removeCurlys(filePathParts[i])); break; } // upper case for camel and pascal for overall styling if ([StringStyle_1.StringStyle.camelCase, StringStyle_1.StringStyle.PascalCase].includes(style)) { filePathParts[i] = (0, ucFirst_1.default)(filePathParts[i]); if (iterationToNotCaseChange !== -1 && (i - 1) === iterationToNotCaseChange) { filePathParts[i] = (0, lcFirst_1.default)(filePathParts[i]); } } // Add the split highlight if (i === iterationToNotCaseChange) { filePathParts[i] += firstSegmentSplit; } } } if (removeMethod) { if (constants_1.METHODS.includes(filePathParts[filePathParts.length - 1].toLowerCase())) { filePathParts.pop(); } } if (tails) { filePathParts = filePathParts.concat(tails); } let operationId = ''; switch (style) { case StringStyle_1.StringStyle.kebabCase: operationId = (0, lcFirst_1.default)(filePathParts.join('-')); break; case StringStyle_1.StringStyle.PascalCase: operationId = filePathParts.join(''); break; case StringStyle_1.StringStyle.snakeCase: operationId = filePathParts.join('_'); break; case StringStyle_1.StringStyle.dotNotation: operationId = filePathParts.join('.'); break; default: operationId = (0, lcFirst_1.default)(filePathParts.join('')); break; } // lastly, if we have any replacements, apply them now if (input.replacements && input.replacements.length) { input.replacements.forEach((replacement) => { operationId = operationId.split(replacement.find).join(replacement.replace); }); } return operationId; } /** * Strings the path param curlies from a folder name */ removeCurlys(input) { return input.replace('{', '').replace('}', ''); } } exports.default = new UniqueOperationIds();