renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
36 lines (35 loc) • 1.42 kB
JavaScript
import { parse } from "./parser.js";
import { isNumber, isString } from "@sindresorhus/is";
//#region lib/modules/manager/bazel/common.ts
function findCodeFragment(input, path) {
const parsed = parse(input);
if (!parsed) return null;
const [ruleIndex, ...restPath] = path;
let fragment = parsed[ruleIndex];
for (const key of restPath) {
if (!fragment) break;
if (fragment.type === "array" && isNumber(key)) fragment = fragment.children[key];
if (fragment.type === "record" && isString(key)) fragment = fragment.children[key];
}
return fragment ?? null;
}
function patchCodeAtFragment(input, fragment, updater) {
const { value, offset } = fragment;
const left = input.slice(0, offset);
const right = input.slice(offset + value.length);
return isString(updater) ? `${left}${updater}${right}` : `${left}${updater(value)}${right}`;
}
function patchCodeAtFragments(input, fragments, updater) {
const sortedFragments = fragments.sort(({ offset: a }, { offset: b }) => b - a);
let result = input;
for (const fragment of sortedFragments) result = patchCodeAtFragment(result, fragment, updater);
return result;
}
function updateCode(input, path, updater) {
const fragment = findCodeFragment(input, path);
if (!fragment) return input;
return patchCodeAtFragment(input, fragment, updater);
}
//#endregion
export { findCodeFragment, patchCodeAtFragments, updateCode };
//# sourceMappingURL=common.js.map