parser-ts
Version:
String parser combinators for TypeScript
89 lines (88 loc) • 2.88 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.extend = exports.escalate = exports.withExpected = exports.error = exports.success = void 0;
/**
* @since 0.6.0
*/
var Array_1 = require("fp-ts/lib/Array");
var Either_1 = require("fp-ts/lib/Either");
var Semigroup_1 = require("fp-ts/lib/Semigroup");
// -------------------------------------------------------------------------------------
// constructors
// -------------------------------------------------------------------------------------
/**
* @category constructors
* @since 0.6.0
*/
var success = function (value, next, start) {
return (0, Either_1.right)({
value: value,
next: next,
start: start
});
};
exports.success = success;
/**
* @category constructors
* @since 0.6.0
*/
var error = function (input, expected, fatal) {
if (expected === void 0) { expected = []; }
if (fatal === void 0) { fatal = false; }
return (0, Either_1.left)({
input: input,
expected: expected,
fatal: fatal
});
};
exports.error = error;
// -------------------------------------------------------------------------------------
// combinators
// -------------------------------------------------------------------------------------
/**
* @category combinators
* @since 0.6.0
*/
var withExpected = function (err, expected) { return (__assign(__assign({}, err), { expected: expected })); };
exports.withExpected = withExpected;
/**
* @category combinators
* @since 0.6.0
*/
var escalate = function (err) { return (__assign(__assign({}, err), { fatal: true })); };
exports.escalate = escalate;
/**
* @category combinators
* @since 0.6.0
*/
var extend = function (err1, err2) {
return getSemigroup().concat(err1, err2);
};
exports.extend = extend;
// -------------------------------------------------------------------------------------
// instances
// -------------------------------------------------------------------------------------
var getSemigroup = function () { return ({
concat: function (x, y) {
if (x.input.cursor < y.input.cursor)
return (0, Semigroup_1.last)().concat(x, y);
if (x.input.cursor > y.input.cursor)
return (0, Semigroup_1.first)().concat(x, y);
return (0, Semigroup_1.struct)({
input: (0, Semigroup_1.first)(),
fatal: (0, Semigroup_1.first)(),
expected: (0, Array_1.getMonoid)()
}).concat(x, y);
}
}); };