UNPKG

fume-fhir-converter

Version:

FHIR-Utilized Mapping Engine - Community

94 lines 3.54 kB
"use strict"; 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