parjs
Version:
Library for building parsers using combinators.
34 lines • 1.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.must = void 0;
const combinated_1 = require("../combinated");
const wrap_implicit_1 = require("../wrap-implicit");
class Must extends combinated_1.Combinated {
constructor(source, _predicate) {
super(source);
this._predicate = _predicate;
this.type = "must";
this.expecting = `internal parser ${this.source.type} yielding a result satisfying condition`;
}
_apply(ps) {
this.source.apply(ps);
if (!ps.isOk) {
return;
}
const result = this._predicate(ps.value, ps.userState);
if (result === true)
return;
ps.kind = result.kind || "Soft";
ps.reason = result.reason || "failed to fulfill a predicate";
}
}
/**
* Applies the source parser and makes sure its result fulfills `predicate`.
*
* @param predicate The condition to check for.
*/
function must(predicate) {
return source => new Must((0, wrap_implicit_1.wrapImplicit)(source), predicate);
}
exports.must = must;
//# sourceMappingURL=must.js.map