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