@diplodoc/transform
Version:
A simple transformer of text in YFM (Yandex Flavored Markdown) to HTML
51 lines • 1.84 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSourceMapApi = exports.prepareSourceMap = exports.getLineNumber = void 0;
const invert_1 = __importDefault(require("lodash/invert"));
const DELETED_LINE = Number.MIN_SAFE_INTEGER;
function getLineNumber(input, index) {
return input.substring(0, index).split('\n').length;
}
exports.getLineNumber = getLineNumber;
function prepareSourceMap(sourceMap) {
const newToOldMap = (0, invert_1.default)(sourceMap);
delete newToOldMap[DELETED_LINE];
return newToOldMap;
}
exports.prepareSourceMap = prepareSourceMap;
function createSourceMapApi(sourceMap) {
const newToOldIndexes = (0, invert_1.default)(sourceMap);
const getOriginIndex = (i) => Number(newToOldIndexes[i]);
const setSourceMapValue = (i, value) => {
sourceMap[getOriginIndex(i)] = value;
};
const getSourceMapValue = (i) => sourceMap[getOriginIndex(i)];
const moveLines = ({ start, end, offset, withReplace = false }) => {
for (let i = start; i <= end; i++) {
const newLineNumber = i + offset;
setSourceMapValue(i, newLineNumber);
if (withReplace) {
setSourceMapValue(newLineNumber, DELETED_LINE);
}
}
};
const removeLine = (i) => {
setSourceMapValue(i, DELETED_LINE);
};
const removeLines = ({ start, end }) => {
for (let i = start; i <= end; i++) {
removeLine(i);
}
};
return {
getSourceMapValue,
moveLines,
removeLines,
removeLine,
};
}
exports.createSourceMapApi = createSourceMapApi;
//# sourceMappingURL=sourceMap.js.map
;