amazon-route-53-dns-zone-file
Version:
Makes DNS Zone File easy. Parses and validates BIND zone files and can be extended for custom features. Functionality is modular. Features are made open for extension and closed for runtime mutation. Written in TypeScript.
46 lines • 1.74 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Parser = void 0;
const utils_parser_1 = require("./utils_parser");
const visitors_1 = require("./visitors");
const parser_node_1 = require("./parser_node");
class Parser {
constructor($originName = '') {
this.parsingMeta = new Map();
this.stack = [];
this.visitors = visitors_1.visitors;
this.input = {
textInput: null,
textInputFlattened: '',
textInputSplitByLine: [],
};
this.zoneObj = { $ORIGIN: $originName };
this.input.$originName = $originName;
}
setText(textInput) {
const [flattened, splitByLine] = utils_parser_1.transformInputText(textInput);
this.input.textInput = textInput;
this.input.textInputFlattened = flattened;
this.input.textInputSplitByLine = splitByLine;
return this;
}
/**
* @perf can optimize this looping
* @note sharing the node instance across iterations can save memory but also add confusion like React SyntheticEvent
*/
parse() {
/* istanbul ignore next */
if (process.env.NODE_ENV !== 'production' && this.input.textInput == null) {
console.error(`[Parser] must setText(string) before calling parse()`);
}
const node = new parser_node_1.ParserNode(this);
const findVisitor = (x) => x.isSatisfied(node);
for (const [index, lineContent,] of this.input.textInputSplitByLine.entries()) {
node.update(lineContent, index);
this.visitors.find(findVisitor)?.visit(this, node);
}
return this;
}
}
exports.Parser = Parser;
//# sourceMappingURL=parser.js.map