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.
84 lines • 7.9 kB
JavaScript
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
import { transformInputText } from './utils_parser';
import { visitors } from './visitors';
import { ParserNode } from './parser_node';
var Parser = /** @class */ (function () {
function Parser($originName) {
if ($originName === void 0) { $originName = ''; }
this.parsingMeta = new Map();
this.stack = [];
this.visitors = visitors;
this.input = {
textInput: null,
textInputFlattened: '',
textInputSplitByLine: []
};
this.zoneObj = { $ORIGIN: $originName };
this.input.$originName = $originName;
}
Parser.prototype.setText = function (textInput) {
var _a = __read(transformInputText(textInput), 2), flattened = _a[0], splitByLine = _a[1];
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
*/
Parser.prototype.parse = function () {
var e_1, _a;
var _b;
/* istanbul ignore next */
if (process.env.NODE_ENV !== 'production' && this.input.textInput == null) {
console.error("[Parser] must setText(string) before calling parse()");
}
var node = new ParserNode(this);
var findVisitor = function (x) { return x.isSatisfied(node); };
try {
for (var _c = __values(this.input.textInputSplitByLine.entries()), _d = _c.next(); !_d.done; _d = _c.next()) {
var _e = __read(_d.value, 2), index = _e[0], lineContent = _e[1];
node.update(lineContent, index);
(_b = this.visitors.find(findVisitor)) === null || _b === void 0 ? void 0 : _b.visit(this, node);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_d && !_d.done && (_a = _c["return"])) _a.call(_c);
}
finally { if (e_1) throw e_1.error; }
}
return this;
};
return Parser;
}());
export { Parser };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlci9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDO0lBV0UsZ0JBQVksV0FBd0I7UUFBeEIsNEJBQUEsRUFBQSxnQkFBd0I7UUFUN0IsZ0JBQVcsR0FBd0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM3RCxVQUFLLEdBQWtDLEVBQUUsQ0FBQztRQUMxQyxhQUFRLEdBQXFDLFFBQVEsQ0FBQztRQUN0RCxVQUFLLEdBQWtDO1lBQzVDLFNBQVMsRUFBRSxJQUFXO1lBQ3RCLGtCQUFrQixFQUFFLEVBQUU7WUFDdEIsb0JBQW9CLEVBQUUsRUFBRTtTQUN6QixDQUFDO1FBR0EsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQXVCLENBQUM7UUFDN0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSx3QkFBTyxHQUFkLFVBQWUsU0FBaUI7UUFDeEIsSUFBQSxLQUFBLE9BQTJCLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFBLEVBQXZELFNBQVMsUUFBQSxFQUFFLFdBQVcsUUFBaUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7UUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxXQUFXLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksc0JBQUssR0FBWjs7O1FBQ0UsMEJBQTBCO1FBQzFCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUN6RSxPQUFPLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFNLFdBQVcsR0FBRyxVQUFDLENBQXdCLElBQUssT0FBQSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFuQixDQUFtQixDQUFDOztZQUV0RSxLQUdLLElBQUEsS0FBQSxTQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUEsZ0JBQUEsNEJBQUU7Z0JBSHJDLElBQUEsS0FBQSxtQkFHVixFQUZDLEtBQUssUUFBQSxFQUNMLFdBQVcsUUFBQTtnQkFFWCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEMsTUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsMENBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNwRDs7Ozs7Ozs7O1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0gsYUFBQztBQUFELENBQUMsQUEvQ0QsSUErQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJzZWRUeXBpbmdzIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzX2RvbWFpbl9zcGVjaWZpYyc7XG5pbXBvcnQgeyBQYXJzZXJUeXBpbmdzIH0gZnJvbSAnLi90eXBlc19wYXJzZXInO1xuaW1wb3J0IHsgdHJhbnNmb3JtSW5wdXRUZXh0IH0gZnJvbSAnLi91dGlsc19wYXJzZXInO1xuaW1wb3J0IHsgdmlzaXRvcnMgfSBmcm9tICcuL3Zpc2l0b3JzJztcbmltcG9ydCB7IFBhcnNlck5vZGUgfSBmcm9tICcuL3BhcnNlcl9ub2RlJztcblxuZXhwb3J0IGNsYXNzIFBhcnNlciBpbXBsZW1lbnRzIFBhcnNlclR5cGluZ3MuUGFyc2VyIHtcbiAgcHVibGljIHpvbmVPYmo6IFBhcnNlclR5cGluZ3MuUGFyc2VyWyd6b25lT2JqJ107XG4gIHB1YmxpYyBwYXJzaW5nTWV0YTogUGFyc2VyVHlwaW5ncy5QYXJzZXJbJ3BhcnNpbmdNZXRhJ10gPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzdGFjazogUGFyc2VyVHlwaW5ncy5QYXJzZXJbJ3N0YWNrJ10gPSBbXTtcbiAgcHVibGljIHZpc2l0b3JzOiBQYXJzZXJUeXBpbmdzLlBhcnNlclsndmlzaXRvcnMnXSA9IHZpc2l0b3JzO1xuICBwdWJsaWMgaW5wdXQ6IFBhcnNlclR5cGluZ3MuUGFyc2VyWydpbnB1dCddID0ge1xuICAgIHRleHRJbnB1dDogbnVsbCBhcyBhbnksXG4gICAgdGV4dElucHV0RmxhdHRlbmVkOiAnJyxcbiAgICB0ZXh0SW5wdXRTcGxpdEJ5TGluZTogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IoJG9yaWdpbk5hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgdGhpcy56b25lT2JqID0geyAkT1JJR0lOOiAkb3JpZ2luTmFtZSB9IGFzIFBhcnNlZFR5cGluZ3MuT2JqO1xuICAgIHRoaXMuaW5wdXQuJG9yaWdpbk5hbWUgPSAkb3JpZ2luTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUZXh0KHRleHRJbnB1dDogc3RyaW5nKTogdGhpcyB7XG4gICAgY29uc3QgW2ZsYXR0ZW5lZCwgc3BsaXRCeUxpbmVdID0gdHJhbnNmb3JtSW5wdXRUZXh0KHRleHRJbnB1dCk7XG4gICAgdGhpcy5pbnB1dC50ZXh0SW5wdXQgPSB0ZXh0SW5wdXQ7XG4gICAgdGhpcy5pbnB1dC50ZXh0SW5wdXRGbGF0dGVuZWQgPSBmbGF0dGVuZWQ7XG4gICAgdGhpcy5pbnB1dC50ZXh0SW5wdXRTcGxpdEJ5TGluZSA9IHNwbGl0QnlMaW5lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwZXJmIGNhbiBvcHRpbWl6ZSB0aGlzIGxvb3BpbmdcbiAgICogQG5vdGUgc2hhcmluZyB0aGUgbm9kZSBpbnN0YW5jZSBhY3Jvc3MgaXRlcmF0aW9ucyBjYW4gc2F2ZSBtZW1vcnkgYnV0IGFsc28gYWRkIGNvbmZ1c2lvbiBsaWtlIFJlYWN0IFN5bnRoZXRpY0V2ZW50XG4gICAqL1xuICBwdWJsaWMgcGFyc2UoKTogdGhpcyB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0aGlzLmlucHV0LnRleHRJbnB1dCA9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbUGFyc2VyXSBtdXN0IHNldFRleHQoc3RyaW5nKSBiZWZvcmUgY2FsbGluZyBwYXJzZSgpYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IG5ldyBQYXJzZXJOb2RlKHRoaXMpO1xuICAgIGNvbnN0IGZpbmRWaXNpdG9yID0gKHg6IFBhcnNlclR5cGluZ3MuVmlzaXRvcikgPT4geC5pc1NhdGlzZmllZChub2RlKTtcblxuICAgIGZvciAoY29uc3QgW1xuICAgICAgaW5kZXgsXG4gICAgICBsaW5lQ29udGVudCxcbiAgICBdIG9mIHRoaXMuaW5wdXQudGV4dElucHV0U3BsaXRCeUxpbmUuZW50cmllcygpKSB7XG4gICAgICBub2RlLnVwZGF0ZShsaW5lQ29udGVudCwgaW5kZXgpO1xuICAgICAgdGhpcy52aXNpdG9ycy5maW5kKGZpbmRWaXNpdG9yKT8udmlzaXQodGhpcywgbm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiJdfQ==