UNPKG

parjs

Version:

A parser-combinator library for JavaScript.

64 lines (63 loc) 2.2 kB
"use strict"; /** * @module parjs */ /** */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const numeric_helpers_1 = require("./numeric-helpers"); const result_1 = require("../result"); const errors_1 = require("../../errors"); const parser_1 = require("../parser"); const defaults_1 = __importDefault(require("lodash/defaults")); const defaultOptions = { allowSign: true, base: 10 }; /** * Returns a parser that will parse a single integer, with the options * given by `options`. * @param pOptions A set of options for parsing integers. */ function int(pOptions) { let options = defaults_1.default(pOptions, defaultOptions); if (options.base > 36) { throw new errors_1.ParserDefinitionError("int", "invalid base"); } let expecting = `expecting a ${options.allowSign ? "signed" : "unsigned"} integer in base ${options.base}`; return new class Int extends parser_1.ParjserBase { constructor() { super(...arguments); this.type = "int"; this.displayName = "int"; this.expecting = expecting; } _apply(ps) { let { allowSign, base } = options; let { position, input } = ps; let initPos = ps.position; let sign = allowSign ? numeric_helpers_1.NumericHelpers.parseSign(ps) : 0; let parsedSign = false; if (sign !== 0) { parsedSign = true; } else { sign = 1; } position = ps.position; numeric_helpers_1.NumericHelpers.parseDigitsInBase(ps, base); let value = parseInt(input.substring(initPos, ps.position), base); if (ps.position === position) { ps.kind = parsedSign ? result_1.ResultKind.HardFail : result_1.ResultKind.SoftFail; } else { ps.value = value; ps.kind = result_1.ResultKind.Ok; } } }(); } exports.int = int; //# sourceMappingURL=int.js.map