{"version":3,"sources":["../ts/modules/utilities/string.ts"],"names":["whitespaceChars","trimLeft","v","characters","let","s","toString","s1","chars","Array","isArray","found","char","s2","len","sub","slice","length","trimRight","splitImpl","str","index","escape","retval","isFinite","map","splitFirst","sep","indexOf","splitLast","lastIndexOf","exports","trim","padLeft","character","padLeftMultiple","multiple","padRight","padRightMultiple","textBeforeFirst","textBeforeLast","textAfterFirst","textAfterLast"],"mappings":"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","file":"string.js","sourcesContent":["const whitespaceChars = [ '\\u0009', '\\u000A', '\\u000B', '\\u000C', '\\u000D', '\\u0020', '\\u00A0', '\\uFEFF' ];\r\n\r\nexport function trimLeft( v: string, characters: string|Array = whitespaceChars ) {\r\n\tlet s = ( v || '' ).toString();\r\n\tfunction matchLen( s1: string, s2: string ) {\r\n\t\tconst sub = s1.slice( 0, s2.length );\r\n\t\tif( sub === s2 ) return sub.length;\r\n\t\telse return 0;\r\n\t}\r\n\tconst chars = Array.isArray( characters ) ? characters : [ characters ];\r\n\tfor(;;) {\r\n\t\tlet found = false;\r\n\t\tfor( let char of chars ) {\r\n\t\t\tconst len = matchLen( s, char );\r\n\t\t\tif( len ) {\r\n\t\t\t\ts = s.slice( len );\r\n\t\t\t\tfound = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif( !found ) break;\r\n\t}\r\n\treturn s;\r\n}\r\n\r\nexport function trimRight( v: string, characters: string|Array = whitespaceChars ) {\r\n\tlet s = ( v || '' ).toString();\r\n\tfunction matchLen( s1: string, s2: string ) {\r\n\t\tconst sub = s1.slice( -s2.length );\r\n\t\tif( sub === s2 ) return sub.length;\r\n\t\telse return 0;\r\n\t}\r\n\tconst chars = Array.isArray( characters ) ? characters : [ characters ];\r\n\tfor(;;) {\r\n\t\tlet found = false;\r\n\t\tfor( let char of chars ) {\r\n\t\t\tconst len = matchLen( s, char );\r\n\t\t\tif( len ) {\r\n\t\t\t\ts = s.slice( 0, -len );\r\n\t\t\t\tfound = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif( !found ) break;\r\n\t}\r\n\treturn s;\r\n}\r\n\r\nexport function trim( v: string, characters: string|Array = whitespaceChars ) {\r\n\treturn trimRight( trimLeft( v, characters ), characters );\r\n}\r\n\r\nexport function padLeft( v: string|number, length: number, character: string ) {\r\n\tlet s = v.toString();\r\n\tif( !s ) s = '';\r\n\tif( s.length > length ) return s;\r\n\twhile( s.length < length ) s = character + s;\r\n\treturn s.slice( -length );\r\n}\r\n\r\nexport function padLeftMultiple( v: string|number, multiple: number, character: string ) {\r\n\tlet s = v.toString();\r\n\tif( !s ) s = '';\r\n\twhile( ( s.length % multiple ) > 0 ) s = character + s;\r\n\treturn s.slice( -length );\r\n}\r\n\r\nexport function padRight( v: string|number, length: number, character: string ) {\r\n\tlet s = v.toString();\r\n\tif( !s ) s = '';\r\n\tif( s.length > length ) return s;\r\n\twhile( s.length < length ) s = s + character;\r\n\treturn s.slice( 0, length );\r\n}\r\n\r\nexport function padRightMultiple( v: string|number, multiple: number, character: string ) {\r\n\tlet s = ( v || '' ).toString();\r\n\twhile( ( s.length % multiple ) > 0 ) s = s + character;\r\n\treturn s.slice( 0, length );\r\n}\r\n\r\nfunction splitImpl( str: string, index: number, length: number, escape = ( s: string ) => s ) {\r\n\tlet retval: Array;\r\n\r\n\tif( index < 0 || !isFinite( index ) ) retval = [ str ];\r\n\telse retval = [ str.slice( 0, index ), str.slice( index + length ) ];\r\n\r\n\treturn retval.map( escape );\r\n}\r\n\r\nexport function splitFirst( str: string, sep: string, escape?: ( str: string ) => string ) {\r\n\treturn splitImpl( str, str.indexOf( sep ), sep.length, escape );\r\n}\r\n\r\nexport function splitLast( str: string, sep: string, escape?: ( str: string ) => string ) {\r\n\treturn splitImpl( str, str.lastIndexOf( sep ), sep.length, escape );\r\n}\r\n\r\nexport function textBeforeFirst( str: string, sep: string ) {\r\n\treturn splitFirst( str, sep )[ 0 ];\r\n}\r\n\r\nexport function textBeforeLast( str: string, sep: string ) {\r\n\treturn splitLast( str, sep )[ 0 ];\r\n}\r\n\r\nexport function textAfterFirst( str: string, sep: string ) {\r\n\treturn splitFirst( str, sep )[ 1 ];\r\n}\r\n\r\nexport function textAfterLast( str: string, sep: string ) {\r\n\treturn splitLast( str, sep )[ 1 ];\r\n}"]}