47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
"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;
|