47 lines
1.1 KiB
JavaScript
47 lines
1.1 KiB
JavaScript
import {
|
|
CURSOR_PLACEHOLDER,
|
|
RANGE_END_PLACEHOLDER,
|
|
RANGE_START_PLACEHOLDER,
|
|
} from "./constants.js";
|
|
|
|
const indexProperties = [
|
|
{
|
|
property: "cursorOffset",
|
|
placeholder: CURSOR_PLACEHOLDER,
|
|
},
|
|
{
|
|
property: "rangeStart",
|
|
placeholder: RANGE_START_PLACEHOLDER,
|
|
},
|
|
{
|
|
property: "rangeEnd",
|
|
placeholder: RANGE_END_PLACEHOLDER,
|
|
},
|
|
];
|
|
|
|
/**
|
|
@param {string} originalText
|
|
@param {any} originalOptions
|
|
*/
|
|
function replacePlaceholders(originalText, originalOptions) {
|
|
const indexes = indexProperties
|
|
.map(({ property, placeholder }) => {
|
|
const value = originalText.indexOf(placeholder);
|
|
return value === -1 ? undefined : { property, value, placeholder };
|
|
})
|
|
.filter(Boolean)
|
|
.sort((a, b) => a.value - b.value);
|
|
|
|
const options = { ...originalOptions };
|
|
let text = originalText;
|
|
let offset = 0;
|
|
for (const { property, value, placeholder } of indexes) {
|
|
text = text.replace(placeholder, "");
|
|
options[property] = value + offset;
|
|
offset -= placeholder.length;
|
|
}
|
|
return { text, options };
|
|
}
|
|
|
|
export { replacePlaceholders };
|