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.
139 lines • 12.9 kB
JavaScript
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.");
};
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;
};
/**
* @see https://github.com/date-fns/date-fns/pull/348
* @see https://github.com/date-fns/date-fns/pull/364
* @see https://github.com/date-fns/date-fns/issues/277
* @see https://github.com/date-fns/date-fns/issues/284
* @see https://www.npmjs.com/package/pomeranian-durations
* @see https://github.com/webpapaya/zeitgeist.js
* @see https://stackoverflow.com/questions/54103133/parse-time-1hr-30m-4s-as-time-ahead-in-javascript
*
* @see ISO_8601
* @note it accepts `1ssssss`, but not `1ymd` or `1yyyy` (in prod)
*
* @example valid
* - '1w1d'
* - '1w'
* - '1m'
* - '1d'
* - '1s'
* - '1m1w1d1h1000s'
* - '1M1w1D1h1S'
* - '10000'
*
* @example invalid
* - '1yyy'
* - '10y' (_too big_)
* - '5y1m1w1d1h1s' (_too big_)
*/
import { matchDigitWithNumber, match, hasLetters, hasNumbers, } from '../shared/utils_generic';
import { ErrorKeyKind, } from '../shared/constants_domain_specific';
import { TimeLetterKind, MultiplyByKind, VALID_LETTERS, MAX_TTL_API_VALUE, } from './ttl_constants';
/** @perf optimize */
var splitNumberAndLetter = function (x) {
return [
+match(/\d+/, x).join(''),
match(/[a-z]+/i, x)
.join('')
.toUpperCase(),
];
};
export var getNumberLetterPairSeconds = function (matches) {
var e_1, _a;
var inSeconds = 0;
try {
for (var matches_1 = __values(matches), matches_1_1 = matches_1.next(); !matches_1_1.done; matches_1_1 = matches_1.next()) {
var _b = __read(matches_1_1.value, 2), digits = _b[0], letter = _b[1];
switch (letter) {
case TimeLetterKind.Second:
inSeconds += digits * MultiplyByKind.Second;
break;
case TimeLetterKind.Hour:
inSeconds += digits * MultiplyByKind.Hour;
break;
case TimeLetterKind.Day:
inSeconds += digits * MultiplyByKind.Day;
break;
case TimeLetterKind.Week:
inSeconds += digits * MultiplyByKind.Week;
break;
case TimeLetterKind.Month:
inSeconds += digits * MultiplyByKind.Month;
break;
case TimeLetterKind.Year:
inSeconds += digits * MultiplyByKind.Year;
break;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (matches_1_1 && !matches_1_1.done && (_a = matches_1["return"])) _a.call(matches_1);
}
finally { if (e_1) throw e_1.error; }
}
return inSeconds;
};
/** @perf could keep TTL always a string */
export var parseTtl = function (valueInput) {
if (typeof valueInput === 'number') {
return [valueInput];
}
else if (typeof valueInput === 'string' && !hasNumbers(valueInput)) {
return [, ErrorKeyKind.TtlInvalidFormat];
}
var value = valueInput;
var ttl = parseInt(value, 10);
if (!hasLetters(value) && !Number.isNaN(ttl)) {
return [ttl];
}
else if (Number.isNaN(ttl) || !matchDigitWithNumber.test(value)) {
return [, ErrorKeyKind.TtlMissingDefault];
}
var matches = match(matchDigitWithNumber, value).map(splitNumberAndLetter);
if (matches.some(function (_a) {
var _b = __read(_a, 2), letter = _b[1];
return letter.length > 1 || !VALID_LETTERS.includes(letter);
})) {
return [ttl, ErrorKeyKind.TtlInvalidFormat];
}
var seconds = getNumberLetterPairSeconds(matches);
if (seconds >= MAX_TTL_API_VALUE) {
return [seconds, ErrorKeyKind.TtlOverflow];
}
else {
return [seconds];
}
};
export var getHasValidTtl = function (value) {
var _a = __read(parseTtl(value), 2), error = _a[1];
return !error;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VfdHRsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R0bC9wYXJzZV90dGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixLQUFLLEVBQ0wsVUFBVSxFQUNWLFVBQVUsR0FDWCxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxZQUFZLEdBRWIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGNBQWMsRUFDZCxhQUFhLEVBQ2IsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUM7QUFFekIscUJBQXFCO0FBQ3JCLElBQU0sb0JBQW9CLEdBQUcsVUFBQyxDQUFTO0lBQ3JDLE9BQUE7UUFDRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQzthQUNoQixJQUFJLENBQUMsRUFBRSxDQUFDO2FBQ1IsV0FBVyxFQUFvQjtLQUNmO0FBTHJCLENBS3FCLENBQUM7QUFFeEIsTUFBTSxDQUFDLElBQU0sMEJBQTBCLEdBQUcsVUFDeEMsT0FBMkI7O0lBRTNCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQzs7UUFFbEIsS0FBK0IsSUFBQSxZQUFBLFNBQUEsT0FBTyxDQUFBLGdDQUFBLHFEQUFFO1lBQTdCLElBQUEsS0FBQSw0QkFBZ0IsRUFBZixNQUFNLFFBQUEsRUFBRSxNQUFNLFFBQUE7WUFDeEIsUUFBUSxNQUFNLEVBQUU7Z0JBQ2QsS0FBSyxjQUFjLENBQUMsTUFBTTtvQkFDeEIsU0FBUyxJQUFJLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO29CQUM1QyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLElBQUk7b0JBQ3RCLFNBQVMsSUFBSSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztvQkFDMUMsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxHQUFHO29CQUNyQixTQUFTLElBQUksTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsSUFBSTtvQkFDdEIsU0FBUyxJQUFJLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO29CQUMxQyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLEtBQUs7b0JBQ3ZCLFNBQVMsSUFBSSxNQUFNLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQztvQkFDM0MsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxJQUFJO29CQUN0QixTQUFTLElBQUksTUFBTSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7b0JBQzFDLE1BQU07YUFDVDtTQUNGOzs7Ozs7Ozs7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRiwyQ0FBMkM7QUFDM0MsTUFBTSxDQUFDLElBQU0sUUFBUSxHQUFHLFVBQ3RCLFVBQXFCO0lBRXJCLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFO1FBQ2xDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNyQjtTQUFNLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ3BFLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQzFDO0lBRUQsSUFBTSxLQUFLLEdBQUcsVUFBb0IsQ0FBQztJQUNuQyxJQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWhDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkO1NBQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2pFLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQzNDO0lBRUQsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRTdFLElBQ0UsT0FBTyxDQUFDLElBQUksQ0FDVixVQUFDLEVBQVU7WUFBVixLQUFBLGFBQVUsRUFBUCxNQUFNLFFBQUE7UUFBTSxPQUFBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFBcEQsQ0FBb0QsQ0FDckUsRUFDRDtRQUNBLE9BQU8sQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDN0M7SUFFRCxJQUFNLE9BQU8sR0FBRywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVwRCxJQUFJLE9BQU8sSUFBSSxpQkFBaUIsRUFBRTtRQUNoQyxPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUM1QztTQUFNO1FBQ0wsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLElBQU0sY0FBYyxHQUFHLFVBQUMsS0FBc0I7SUFDN0MsSUFBQSxLQUFBLE9BQVksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFBLEVBQXhCLEtBQUssUUFBbUIsQ0FBQztJQUVsQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvcHVsbC8zNDhcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL3B1bGwvMzY0XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMjc3XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMjg0XG4gKiBAc2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL3BvbWVyYW5pYW4tZHVyYXRpb25zXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYXBheWEvemVpdGdlaXN0LmpzXG4gKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU0MTAzMTMzL3BhcnNlLXRpbWUtMWhyLTMwbS00cy1hcy10aW1lLWFoZWFkLWluLWphdmFzY3JpcHRcbiAqXG4gKiBAc2VlIElTT184NjAxXG4gKiBAbm90ZSBpdCBhY2NlcHRzIGAxc3Nzc3NzYCwgYnV0IG5vdCBgMXltZGAgb3IgYDF5eXl5YCAoaW4gcHJvZClcbiAqXG4gKiBAZXhhbXBsZSB2YWxpZFxuICogICAgLSAnMXcxZCdcbiAqICAgIC0gJzF3J1xuICogICAgLSAnMW0nXG4gKiAgICAtICcxZCdcbiAqICAgIC0gJzFzJ1xuICogICAgLSAnMW0xdzFkMWgxMDAwcydcbiAqICAgIC0gJzFNMXcxRDFoMVMnXG4gKiAgICAtICcxMDAwMCdcbiAqXG4gKiBAZXhhbXBsZSBpbnZhbGlkXG4gKiAgICAtICcxeXl5J1xuICogICAgLSAnMTB5JyAoX3RvbyBiaWdfKVxuICogICAgLSAnNXkxbTF3MWQxaDFzJyAoX3RvbyBiaWdfKVxuICovXG5pbXBvcnQge1xuICBtYXRjaERpZ2l0V2l0aE51bWJlcixcbiAgbWF0Y2gsXG4gIGhhc0xldHRlcnMsXG4gIGhhc051bWJlcnMsXG59IGZyb20gJy4uL3NoYXJlZC91dGlsc19nZW5lcmljJztcbmltcG9ydCB7XG4gIEVycm9yS2V5S2luZCxcbiAgVHRsRXJyb3JLZXlUeXBlLFxufSBmcm9tICcuLi9zaGFyZWQvY29uc3RhbnRzX2RvbWFpbl9zcGVjaWZpYyc7XG5pbXBvcnQge1xuICBUaW1lTGV0dGVyS2luZCxcbiAgTXVsdGlwbHlCeUtpbmQsXG4gIFZBTElEX0xFVFRFUlMsXG4gIE1BWF9UVExfQVBJX1ZBTFVFLFxufSBmcm9tICcuL3R0bF9jb25zdGFudHMnO1xuXG4vKiogQHBlcmYgb3B0aW1pemUgKi9cbmNvbnN0IHNwbGl0TnVtYmVyQW5kTGV0dGVyID0gKHg6IHN0cmluZykgPT5cbiAgW1xuICAgICttYXRjaCgvXFxkKy8sIHgpLmpvaW4oJycpLFxuICAgIG1hdGNoKC9bYS16XSsvaSwgeClcbiAgICAgIC5qb2luKCcnKVxuICAgICAgLnRvVXBwZXJDYXNlKCkgYXMgVGltZUxldHRlcktpbmQsXG4gIF0gYXMgW251bWJlciwgc3RyaW5nXTtcblxuZXhwb3J0IGNvbnN0IGdldE51bWJlckxldHRlclBhaXJTZWNvbmRzID0gKFxuICBtYXRjaGVzOiBbbnVtYmVyLCBzdHJpbmddW11cbik6IG51bWJlciA9PiB7XG4gIGxldCBpblNlY29uZHMgPSAwO1xuXG4gIGZvciAoY29uc3QgW2RpZ2l0cywgbGV0dGVyXSBvZiBtYXRjaGVzKSB7XG4gICAgc3dpdGNoIChsZXR0ZXIpIHtcbiAgICAgIGNhc2UgVGltZUxldHRlcktpbmQuU2Vjb25kOlxuICAgICAgICBpblNlY29uZHMgKz0gZGlnaXRzICogTXVsdGlwbHlCeUtpbmQuU2Vjb25kO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVGltZUxldHRlcktpbmQuSG91cjpcbiAgICAgICAgaW5TZWNvbmRzICs9IGRpZ2l0cyAqIE11bHRpcGx5QnlLaW5kLkhvdXI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUaW1lTGV0dGVyS2luZC5EYXk6XG4gICAgICAgIGluU2Vjb25kcyArPSBkaWdpdHMgKiBNdWx0aXBseUJ5S2luZC5EYXk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUaW1lTGV0dGVyS2luZC5XZWVrOlxuICAgICAgICBpblNlY29uZHMgKz0gZGlnaXRzICogTXVsdGlwbHlCeUtpbmQuV2VlaztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRpbWVMZXR0ZXJLaW5kLk1vbnRoOlxuICAgICAgICBpblNlY29uZHMgKz0gZGlnaXRzICogTXVsdGlwbHlCeUtpbmQuTW9udGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUaW1lTGV0dGVyS2luZC5ZZWFyOlxuICAgICAgICBpblNlY29uZHMgKz0gZGlnaXRzICogTXVsdGlwbHlCeUtpbmQuWWVhcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluU2Vjb25kcztcbn07XG5cbi8qKiBAcGVyZiBjb3VsZCBrZWVwIFRUTCBhbHdheXMgYSBzdHJpbmcgKi9cbmV4cG9ydCBjb25zdCBwYXJzZVR0bCA9IDxWYWx1ZVR5cGUgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXI+KFxuICB2YWx1ZUlucHV0OiBWYWx1ZVR5cGVcbik6IFtudW1iZXJdIHwgW251bWJlciB8IHVuZGVmaW5lZCwgVHRsRXJyb3JLZXlUeXBlXSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWVJbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW3ZhbHVlSW5wdXRdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZUlucHV0ID09PSAnc3RyaW5nJyAmJiAhaGFzTnVtYmVycyh2YWx1ZUlucHV0KSkge1xuICAgIHJldHVybiBbLCBFcnJvcktleUtpbmQuVHRsSW52YWxpZEZvcm1hdF07XG4gIH1cblxuICBjb25zdCB2YWx1ZSA9IHZhbHVlSW5wdXQgYXMgc3RyaW5nO1xuICBjb25zdCB0dGwgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuXG4gIGlmICghaGFzTGV0dGVycyh2YWx1ZSkgJiYgIU51bWJlci5pc05hTih0dGwpKSB7XG4gICAgcmV0dXJuIFt0dGxdO1xuICB9IGVsc2UgaWYgKE51bWJlci5pc05hTih0dGwpIHx8ICFtYXRjaERpZ2l0V2l0aE51bWJlci50ZXN0KHZhbHVlKSkge1xuICAgIHJldHVybiBbLCBFcnJvcktleUtpbmQuVHRsTWlzc2luZ0RlZmF1bHRdO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hlcyA9IG1hdGNoKG1hdGNoRGlnaXRXaXRoTnVtYmVyLCB2YWx1ZSkubWFwKHNwbGl0TnVtYmVyQW5kTGV0dGVyKTtcblxuICBpZiAoXG4gICAgbWF0Y2hlcy5zb21lKFxuICAgICAgKFssIGxldHRlcl0pID0+IGxldHRlci5sZW5ndGggPiAxIHx8ICFWQUxJRF9MRVRURVJTLmluY2x1ZGVzKGxldHRlcilcbiAgICApXG4gICkge1xuICAgIHJldHVybiBbdHRsLCBFcnJvcktleUtpbmQuVHRsSW52YWxpZEZvcm1hdF07XG4gIH1cblxuICBjb25zdCBzZWNvbmRzID0gZ2V0TnVtYmVyTGV0dGVyUGFpclNlY29uZHMobWF0Y2hlcyk7XG5cbiAgaWYgKHNlY29uZHMgPj0gTUFYX1RUTF9BUElfVkFMVUUpIHtcbiAgICByZXR1cm4gW3NlY29uZHMsIEVycm9yS2V5S2luZC5UdGxPdmVyZmxvd107XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFtzZWNvbmRzXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEhhc1ZhbGlkVHRsID0gKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgY29uc3QgWywgZXJyb3JdID0gcGFyc2VUdGwodmFsdWUpO1xuXG4gIHJldHVybiAhZXJyb3I7XG59O1xuIl19