UNPKG

parser-ts

Version:

String parser combinators for TypeScript

89 lines (88 loc) 2.88 kB
"use strict"; 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); } }); };