fume-fhir-converter
Version:
FHIR-Utilized Mapping Engine - Community
94 lines • 3.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.pretty = void 0;
/**
* © Copyright Outburn Ltd. 2022-2024 All Rights Reserved
* Project name: FUME-COMMUNITY
*/
const stringFunctions_1 = require("../stringFunctions");
const pretty = async (expression) => {
let indentLevel = 0;
const exprLen = expression.length;
let prettyExpr = '';
let currentChar;
let indent = '';
let stringOpening = ''; // if we are inside a string, this will hold the opening quote symbol (single/double)
let closingBracket = '';
let openingBracket = '';
const bracketMap = { '(': ')', '[': ']', '{': '}' };
for (let i = 0; i < exprLen; i++) {
currentChar = expression.charAt(i);
switch (currentChar) {
case '(':
case '[':
case '{':
if (stringOpening === '') {
openingBracket = currentChar;
closingBracket = bracketMap[openingBracket];
indentLevel++;
if (expression.charAt(i + 1) === closingBracket) {
prettyExpr += currentChar;
}
else {
indent = await (0, stringFunctions_1.duplicate)(' ', indentLevel);
prettyExpr += currentChar + '\n' + indent;
}
}
else {
prettyExpr += currentChar;
}
;
break;
case ')':
case ']':
case '}':
if (stringOpening === '') {
if (indentLevel > 0) {
indentLevel--;
}
;
if (expression.charAt(i - 1) === openingBracket) {
prettyExpr += currentChar;
}
else {
indent = await (0, stringFunctions_1.duplicate)(' ', indentLevel);
prettyExpr += '\n' + indent + currentChar;
}
}
else {
prettyExpr += currentChar;
}
break;
case ',':
case ';':
if (stringOpening === '' && !(expression.charAt(i + 1) === '\r' || expression.charAt(i + 1) === '\n')) {
prettyExpr += currentChar + '\n' + indent;
}
else {
prettyExpr += currentChar;
}
break;
case '"':
case '\'':
stringOpening = (stringOpening === currentChar && (expression.charAt(i - 1) !== '\\' || expression.charAt(i - 2) === '\\')) ? '' : currentChar;
prettyExpr += currentChar;
break;
case '\n':
case '\r':
if (stringOpening === '' && expression.charAt(i - 1) !== '\\' && !(expression.charAt(i + 1) === '\r' || expression.charAt(i + 1) === '\n')) {
// it's an unescaped newline symbol (\n or \r) not followed by the other one
prettyExpr += currentChar + indent;
}
else {
prettyExpr += currentChar;
}
break;
default:
prettyExpr += currentChar;
}
}
;
return prettyExpr;
};
exports.pretty = pretty;
//# sourceMappingURL=pretty.js.map