UNPKG

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
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