UNPKG

parjs

Version:

A parser-combinator library for JavaScript.

38 lines (37 loc) 1.22 kB
"use strict"; /** * @module parjs/combinators */ /** */ Object.defineProperty(exports, "__esModule", { value: true }); const result_1 = require("../result"); const combinator_1 = require("./combinator"); const parser_1 = require("../parser"); function exactly(count) { return combinator_1.defineCombinator(source => { return new class Exactly extends parser_1.ParjserBase { constructor() { super(...arguments); this.type = "exactly"; this.expecting = source.expecting; } _apply(ps) { let arr = []; for (let i = 0; i < count; i++) { source.apply(ps); if (!ps.isOk) { if (ps.kind === result_1.ResultKind.SoftFail && i > 0) { ps.kind = result_1.ResultKind.HardFail; } // fail because the inner parser has failed. return; } arr.push(ps.value); } ps.value = arr; } }(); }); } exports.exactly = exactly; //# sourceMappingURL=exactly.js.map