parser-ts
Version:
String parser combinators for TypeScript
47 lines (46 loc) • 1.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.run = void 0;
/**
* @since 0.6.0
*/
var code_frame_1 = require("@babel/code-frame");
var Either_1 = require("fp-ts/lib/Either");
var function_1 = require("fp-ts/lib/function");
var Stream_1 = require("./Stream");
var lineTerminatorRegex = /^\r\n$|^[\n\r]$/;
var getLocation = function (source, cursor) {
var line = 1;
var column = 1;
var i = 0;
while (i < cursor) {
i++;
var c = source.charAt(i);
if (lineTerminatorRegex.test(c)) {
line++;
column = 1;
}
else {
column++;
}
}
return {
start: {
line: line,
column: column
}
};
};
/**
* Returns a pretty printed error message using `@babel/code-frame`
*
* @since 0.6.0
*/
var run = function (p, source) {
return (0, function_1.pipe)(p((0, Stream_1.stream)(source.split(''))), (0, Either_1.bimap)(function (err) {
return (0, code_frame_1.codeFrameColumns)(source, getLocation(source, err.input.cursor), {
message: 'Expected: ' + err.expected.join(', ')
});
}, function (succ) { return succ.value; }));
};
exports.run = run;