"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tokenizer_1 = require("./tokenizer"); const tokenparser_1 = require("./tokenparser"); class JSONParser { constructor(opts = {}) { this.tokenizer = new tokenizer_1.default(opts); this.tokenParser = new tokenparser_1.default(opts); this.tokenizer.onToken = this.tokenParser.write.bind(this.tokenParser); this.tokenizer.onEnd = () => { if (!this.tokenParser.isEnded) this.tokenParser.end(); }; this.tokenParser.onError = this.tokenizer.error.bind(this.tokenizer); this.tokenParser.onEnd = () => { if (!this.tokenizer.isEnded) this.tokenizer.end(); }; } get isEnded() { return this.tokenizer.isEnded && this.tokenParser.isEnded; } write(input) { this.tokenizer.write(input); } end() { this.tokenizer.end(); } set onToken(cb) { this.tokenizer.onToken = cb; } set onValue(cb) { this.tokenParser.onValue = cb; } set onError(cb) { this.tokenizer.onError = cb; } set onEnd(cb) { this.tokenParser.onEnd = () => { if (!this.tokenizer.isEnded) this.tokenizer.end(); cb.call(this.tokenParser); }; } } exports.default = JSONParser;