{"version":3,"sources":["indent.ts"],"sourcesContent":["\n/**\n * Auto indent template strings:\n * ```ts\n * indent `\n *    first line, indentation is removed\n *    second line, also no indentation\n *       * item - relative indentation to first line is kept\n *       * also indented item\n * `\n * ```\n * Optional default indentation offset:\n * ```ts\n * indent(4) `\n * indented with 4 spaces\n * also indented with 4 spaces\n * `\n * ```\n * \n * @param string template string\n * @param insert \n */\n\nconst BASE_INDENT = Symbol(\"BASE_INDENT\")\n\nexport function indent(string:TemplateStringsArray, ...insert:(any|undefined)[]): string\nexport function indent(base_indentation:number): (string:TemplateStringsArray, ...insert:(any|undefined)[]) => string\nexport function indent(string:TemplateStringsArray|number, _base_indent?:any|{[BASE_INDENT]:number}, ...insert:(any|undefined)[]) {\n\t\n\t// create indent function with base indent\n\tif (typeof string == \"number\") return (_string:TemplateStringsArray, ...insert:(string|undefined)[])=>indent(_string, {[BASE_INDENT]:<any>string}, ...insert)\n\n\tlet base_indent = 0;\n\t// extract base indent\n\tif (typeof _base_indent == \"object\" && _base_indent && BASE_INDENT in _base_indent) {\n\t\tbase_indent = _base_indent[BASE_INDENT];\n\t}\n\t// base_indent not used, use as insert string\n\telse {\n\t\tinsert = [_base_indent, ...insert]; \n\t}\n\n\tconst tab_as_space = '    ';\n\tconst remove_indentation = string[0].replace(/\\t/gm, tab_as_space).match(/\\n*(\\s*)/)?.[1].length ?? 0;\n\n\tlet combined = \"\";\n\n\tfor (let i=0; i<string.length; i++) {\n\t\tlet nstring = string[i];\n\t\t// if (i == 0) nstring = nstring.trimStart(); // remove line breaks at beginning\n\t\t// if (i == string.length-1) nstring = nstring.trimEnd(); // remove line breaks at end\n\t\tnstring = nstring.replace(/\\t/gm, tab_as_space);\n\t\tconst line_indentation = nstring.match(/\\n*(\\s*)/)?.[1].length ?? 0;\n\t\tcombined += nstring.replace(new RegExp('\\\\n\\\\s{'+remove_indentation+'}', 'gm'), '\\n').replace(/\\n/gm, '\\n' + ' '.repeat(base_indent));\n\t\tif (i < insert.length) combined += insert[i]?.toString()?.replace(/\\n/gm, '\\n' + ' '.repeat(base_indent+Math.max(0,line_indentation-remove_indentation))) ?? '';\n\t}\n\n\treturn combined;\n}"],"names":["BASE_INDENT","Symbol","indent","string","_base_indent","insert","_string","base_indent","tab_as_space","remove_indentation","replace","match","length","combined","i","nstring","line_indentation","RegExp","repeat","toString","Math","max"],"mappings":"AAuBA,IAAMA,cAAcC,OAAO;AAI3B,OAAO,SAASC,OAAOC,MAAkC,EAAEC,YAAwC,EAAE,GAAGC,MAAwB;IAG/H,IAAI,AAAiB,YAAjB,OAAOF,QAAoB,OAAO,CAACG,SAA8B,GAAGD,SAA8BH,OAAOI,SAAS;YAAC,CAACN,YAAY,EAAMG;QAAM,MAAME;IAEtJ,IAAIE,cAAc;IAES,YAAvB,OAAOH,gBAA4BA,gBAAgBJ,eAAeI,eACrEG,cAAcH,YAAY,CAACJ,YAAY,GAIvCK,SAAS;QAACD;WAAiBC;KAAO;IAGnC,IAAMG,eAAe,QACfC,qBAAqBN,MAAM,CAAC,EAAE,CAACO,OAAO,CAAC,QAAQF,cAAcG,KAAK,CAAC,aAAa,CAAC,EAAE,CAACC,UAAU,GAEhGC,WAAW;IAEf,IAAK,IAAIC,IAAE,GAAGA,IAAEX,OAAOS,MAAM,EAAEE,IAAK;QACnC,IAAIC,UAAUZ,MAAM,CAACW,EAAE;QAGvBC,UAAUA,QAAQL,OAAO,CAAC,QAAQF;QAClC,IAAMQ,mBAAmBD,QAAQJ,KAAK,CAAC,aAAa,CAAC,EAAE,CAACC,UAAU;QAClEC,YAAYE,QAAQL,OAAO,CAAC,AAAIO,OAAO,YAAUR,qBAAmB,KAAK,OAAO,MAAMC,OAAO,CAAC,QAAQ,OAAO,IAAIQ,MAAM,CAACX,eACpHO,IAAIT,OAAOO,MAAM,IAAEC,CAAAA,YAAYR,MAAM,CAACS,EAAE,EAAEK,YAAYT,QAAQ,QAAQ,OAAO,IAAIQ,MAAM,CAACX,cAAYa,KAAKC,GAAG,CAAC,GAAEL,mBAAiBP,yBAAyB,EAAC;IAC/J;IAEA,OAAOI;AACR","sourceRoot":"/lib/datex-core-js-legacy-0.3.15/utils/","file":"indent.ts"}