1082815dcSEvan Bacon"use strict"; 2082815dcSEvan Bacon 3082815dcSEvan BaconObject.defineProperty(exports, "__esModule", { 4082815dcSEvan Bacon value: true 5082815dcSEvan Bacon}); 6082815dcSEvan Baconexports.insertContentsAtOffset = insertContentsAtOffset; 7082815dcSEvan Baconexports.replaceContentsWithOffset = replaceContentsWithOffset; 8082815dcSEvan Baconexports.searchFromOffset = searchFromOffset; 9082815dcSEvan Bacon/** 10082815dcSEvan Bacon * Insert contents at given offset 11082815dcSEvan Bacon * @param srcContents source contents 12082815dcSEvan Bacon * @param insertion content to insert 13082815dcSEvan Bacon * @param offset `srcContents` offset to insert `insertion` 14082815dcSEvan Bacon * @returns updated contents 15082815dcSEvan Bacon */ 16082815dcSEvan Baconfunction insertContentsAtOffset(srcContents, insertion, offset) { 17082815dcSEvan Bacon const srcContentsLength = srcContents.length; 18082815dcSEvan Bacon if (offset < 0 || offset > srcContentsLength) { 19082815dcSEvan Bacon throw new Error('Invalid parameters.'); 20082815dcSEvan Bacon } 21082815dcSEvan Bacon if (offset === 0) { 22082815dcSEvan Bacon return `${insertion}${srcContents}`; 23082815dcSEvan Bacon } else if (offset === srcContentsLength) { 24082815dcSEvan Bacon return `${srcContents}${insertion}`; 25082815dcSEvan Bacon } 26082815dcSEvan Bacon const prefix = srcContents.substring(0, offset); 27082815dcSEvan Bacon const suffix = srcContents.substring(offset); 28082815dcSEvan Bacon return `${prefix}${insertion}${suffix}`; 29082815dcSEvan Bacon} 30*ee216927STomasz Sapeta 31082815dcSEvan Bacon/** 32082815dcSEvan Bacon * Replace contents at given start and end offset 33082815dcSEvan Bacon * 34082815dcSEvan Bacon * @param contents source contents 35082815dcSEvan Bacon * @param replacement new contents to place in [startOffset:endOffset] 36082815dcSEvan Bacon * @param startOffset `contents` start offset for replacement 37082815dcSEvan Bacon * @param endOffset `contents` end offset for replacement 38082815dcSEvan Bacon * @returns updated contents 39082815dcSEvan Bacon */ 40082815dcSEvan Baconfunction replaceContentsWithOffset(contents, replacement, startOffset, endOffset) { 41082815dcSEvan Bacon const contentsLength = contents.length; 42082815dcSEvan Bacon if (startOffset < 0 || endOffset < 0 || startOffset >= contentsLength || endOffset >= contentsLength || startOffset > endOffset) { 43082815dcSEvan Bacon throw new Error('Invalid parameters.'); 44082815dcSEvan Bacon } 45082815dcSEvan Bacon const prefix = contents.substring(0, startOffset); 46082815dcSEvan Bacon const suffix = contents.substring(endOffset + 1); 47082815dcSEvan Bacon return `${prefix}${replacement}${suffix}`; 48082815dcSEvan Bacon} 49*ee216927STomasz Sapeta 50082815dcSEvan Bacon/** 51082815dcSEvan Bacon * String.prototype.search() with offset support 52082815dcSEvan Bacon * 53082815dcSEvan Bacon * @param source source string to search 54082815dcSEvan Bacon * @param regexp RegExp pattern to search 55082815dcSEvan Bacon * @param offset start offset of `source` to search `regexp` pattern 56082815dcSEvan Bacon * @returns The index of the first match between the regular expression and the given string, or -1 if no match was found. 57082815dcSEvan Bacon */ 58082815dcSEvan Baconfunction searchFromOffset(source, regexp, offset) { 59082815dcSEvan Bacon const target = source.substring(offset); 60082815dcSEvan Bacon const matchedIndex = target.search(regexp); 61082815dcSEvan Bacon return matchedIndex < 0 ? matchedIndex : matchedIndex + offset; 62082815dcSEvan Bacon} 63082815dcSEvan Bacon//# sourceMappingURL=commonCodeMod.js.map