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.
3 lines (2 loc) • 13.6 kB
JavaScript
var t=function(r,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,r){t.__proto__=r}||function(t,r){for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])})(r,n)};function r(r,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function e(){this.constructor=r}t(r,n),r.prototype=null===n?Object.create(n):(e.prototype=n.prototype,new e)}var n=function(){return(n=Object.assign||function(t){for(var r,n=1,e=arguments.length;n<e;n++)for(var i in r=arguments[n])Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i]);return t}).apply(this,arguments)};function e(t){var r="function"==typeof Symbol&&Symbol.iterator,n=r&&t[r],e=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&e>=t.length&&(t=void 0),{value:t&&t[e++],done:!t}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function i(t,r){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var e,i,o=n.call(t),a=[];try{for(;(void 0===r||r-- >0)&&!(e=o.next()).done;)a.push(e.value)}catch(t){i={error:t}}finally{try{e&&!e.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function o(t,r){for(var n=0,e=r.length,i=t.length;n<e;n++,i++)t[i]=r[n];return t}var a,u=function(t){function n(r,n,e){var i=t.call(this,"")||this;return i.type=r,i.actual=n,i.expected=e,i}return r(n,t),n}(TypeError),s=function(t){function n(r,n,e,i,o){void 0===e&&(e=1),void 0===i&&(i="");var a=t.call(this,r)||this;return a.parsingType=n,a.parsingLineNumber=e,a.parsingLineContent=i,a.parsedValue=o,a}return r(n,t),n}(Error),c=function(t){return/[a-z]/i.test(t)},l=function(t){return/\d/.test(t)},f=function(t){return t.replace(/\.$/,"")},p=function(t){return f(t)+"."},h=function(t,r){return"string"==typeof r&&r.match(t)||[]},v=/(\d+)([a-z]+)/gim,d="\n",y=function(t){return t.replace(/\\n/,"\n").replace(/\r\n?/g,"\n")},T=function(t){return y(t).split("\n")},A=function(t){return t.replace(/\n/g," ")},g=function(t,r){var n,i,o=r||/\s/g,a=!1,u=!1,s=[],c=[],l=t.split("");try{for(var f=e(l),p=f.next();!p.done;p=f.next()){var h=p.value,v=h.match(o);"'"!==h||u?'"'!==h||a?a||u||!v?s.push(h):s.length>0?(c.push(s.join("")),s=[]):r&&c.push(h):(s.push(h),u=!u):(s.push(h),a=!a)}}catch(t){n={error:t}}finally{try{p&&!p.done&&(i=f.return)&&i.call(f)}finally{if(n)throw n.error}}return s.length>0?c.push(s.join("")):r&&c.push(""),c},O=function(t){for(var r=!1,n=!1,e="",i="",o=function(){i+=A(e).replace(/\s+/gm," ")+"\n",e="",n=!1},a=0;a<t.length;++a){var u=t[a];"S"===u&&"O"===t[a+1]&&"A"===t[a+2]&&(n=!0,e=""),n?"("!==u||r?")"===u&&r?(o(),r=!1):"\n"!==u||r?e+=u:o():r=!0:i+=u}return i},N=function(t){return t.replace(/\\"|"(?:\\"|[^"])*"|((^|[^\\])\;.*)/g,(function(t,r){return r?"":t}))},S=function(t){var r=N(t),n=O(r);return[n,T(n).filter((function(t){return""!==t.trim()}))]},m=function(t,r){return function(e,i){var o=e.tokens,a=function(t,r){var n={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&r.indexOf(e)<0&&(n[e]=t[e]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)r.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(n[e[i]]=t[e[i]])}return n}(e,["tokens"]),u=n({},a);return t.split(" ").forEach((function(t,r){u[t]=o[r]})),r?r(u,i):u}},I=function(t,r){var n=r.$ORIGIN;return t&&"@"!==t&&t!==n&&f(t)!==f(n)?!t.includes(n)&&t.endsWith(".")?t+n:t.includes(n)?t:t+"."+n:p(n)},x=function(){function t(t){var r=this;this.parser=t,this.index=0,this.lineContent="",this.lineParts=[],this.addMeta=function(t){r.parser.parsingMeta.set(r.index+1,n({lineContent:r.lineContent},t))}}return t.prototype.update=function(t,r){this.lineParts=g(t),this.index=r,this.lineContent=t},t}();!function(t){t.Origin="$ORIGIN",t.TimeToLive="$TTL"}(a||(a={}));var R,b,E,w=["TXT","NS","A","AAAA","CNAME","MX","PTR","SPF","SRV","CAA","NAPTR"],L=o(["SOA"],i(w)),M=o(o([],i(w)),[a.TimeToLive,a.Origin]);!function(t){t[t.TXT=1]="TXT",t[t.CNAME=1]="CNAME",t[t.A=1]="A",t[t.AAAA=1]="AAAA",t[t.NS=1]="NS",t[t.PTR=1]="PTR",t[t.MX=2]="MX",t[t.SPF=1]="SPF",t[t.CAA=3]="CAA",t[t.SRV=4]="SRV",t[t.NAPTR=6]="NAPTR",t[t.SOA=7]="SOA"}(R||(R={})),function(t){t[t.SPF=1/0]="SPF",t[t.SOA=1/0]="SOA",t[t.TXT=1]="TXT",t[t.CNAME=1]="CNAME",t[t.A=1]="A",t[t.AAAA=1]="AAAA",t[t.NS=1]="NS",t[t.PTR=1]="PTR",t[t.MX=2]="MX",t[t.CAA=3]="CAA",t[t.SRV=4]="SRV",t[t.NAPTR=6]="NAPTR"}(b||(b={})),function(t){t.Api="API",t.EmptyInput="EMPTY",t.NoRecords="NO_RECORDS_TO_CREATE",t.NoValidRecords="NO_VALID_RECORDS_TO_CREATE",t.BadDirective="BAD_DIRECTIVE",t.Duplicated="DUPLICATED",t.Unknown="UNKNOWN",t.Missing="",t.TtlInvalidFormat="TTL_INVALID_FORMAT",t.TtlOverflow="TTL_OVERFLOW",t.TtlMissingDefault="TTL_INVALID_FORMAT_MISSING_DEFAULT",t.WrongLength="WRONG_LENGTH",t.WrongNameArgsLength="EXTRA_NAME_TTL_ARGS"}(E||(E={}));var P,k=[E.Api,E.EmptyInput,E.NoRecords,E.NoValidRecords,E.BadDirective,E.TtlInvalidFormat,E.TtlOverflow,E.TtlMissingDefault,E.WrongLength,E.WrongNameArgsLength,E.Duplicated,E.Unknown];!function(t){t.NsIgnored="SOA_IGNORED",t.SoaIgnored="NS_IGNORED"}(P||(P={}));var _,C=2147483647;!function(t){t.Second="S",t.Hour="H",t.Day="D",t.Week="W",t.Month="M",t.Year="Y"}(_||(_={}));var D,j=[_.Day,_.Hour,_.Month,_.Second,_.Week,_.Year];!function(t){t[t.Second=1]="Second",t[t.Hour=3600]="Hour",t[t.Day=86400]="Day",t[t.Week=604800]="Week",t[t.Month=2419200]="Month",t[t.Year=29030400]="Year"}(D||(D={}));var V=function(t){return[+h(/\d+/,t).join(""),h(/[a-z]+/i,t).join("").toUpperCase()]},W=function(t){var r,n,o=0;try{for(var a=e(t),u=a.next();!u.done;u=a.next()){var s=i(u.value,2),c=s[0];switch(s[1]){case _.Second:o+=c*D.Second;break;case _.Hour:o+=c*D.Hour;break;case _.Day:o+=c*D.Day;break;case _.Week:o+=c*D.Week;break;case _.Month:o+=c*D.Month;break;case _.Year:o+=c*D.Year}}}catch(t){r={error:t}}finally{try{u&&!u.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return o},F=function(t){if("number"==typeof t)return[t];if("string"==typeof t&&!l(t))return[,E.TtlInvalidFormat];var r=t,n=parseInt(r,10);if(!c(r)&&!Number.isNaN(n))return[n];if(Number.isNaN(n)||!v.test(r))return[,E.TtlMissingDefault];var e=h(v,r).map(V);if(e.some((function(t){var r=i(t,2)[1];return r.length>1||!j.includes(r)})))return[n,E.TtlInvalidFormat];var o=W(e);return o>=2147483647?[o,E.TtlOverflow]:[o]},$=function(t){return!i(F(t),2)[1]},B=function(t,r,n,e){if(+n==+e&&n!==r||n>r)throw new u(t,r,n)},G=function(t,r,e,a,u){var s=r.lastIndexOf(e),c="";0!==s&&"IN"===r[s-1]||r.splice(s,0,"IN");var l=r.indexOf("IN");l!==r.lastIndexOf("IN")&&r.splice(l,1);var f=r.slice(r.lastIndexOf(e)+1),p=i(function(t,r,n){var e=r.length,i=R[t],o=b[t];return[n.length-e-2,e,i,o]}(e,f,r)),h=p[0],v=p.slice(1);B.apply(void 0,o([e],i(v)));var d=function(){switch(h){case 1:var n=!1===/^\s+/.test(t);return{hasTtl:!n,hasName:n};case 2:var o=i(r,2),a=o[0],u=o[1],s=$(a),c=$(u),l=s||c;return s&&!c&&(r[0]=u,r[1]=a),{hasTtl:l,hasName:""!==r[0]};case 0:return{hasTtl:!1,hasName:!1};default:throw new Error(e)}}(),y=d.hasName,T=d.hasTtl,A={values:f,recordType:e,tokens:r};if(y)c=A.tokens[0];else{var g=a[e];u?A.tokens.unshift(u):Array.isArray(g)&&g.length>0?A.tokens.unshift(g[g.length-1].name||"@"):A.tokens.unshift("@")}T?A.tokens[1]=""+F(A.tokens[1])[0]:(A.tokens.unshift(A.tokens[0]),A.tokens[1]=void 0===a.$TTL?void 0:""+a.$TTL);var O=i(A.tokens,2),N=O[0],S=O[1],m=I(N,a);return n(n({},A),{name:m,ttl:"string"==typeof S?+S:void 0,previousName:c||u})},X=function(t,r){var n=t.values,e=r.zoneObj;return n.map((function(t){return"@"===t&&e.$ORIGIN?e.$ORIGIN:"\\@"===t?"@":t}))},z={NS:m("host",(function(t,r){return n(n({},t),{values:X(t,r)})})),A:m("ip",(function(t,r){return n(n({},t),{values:X(t,r)})})),AAAA:m("ip",(function(t,r){return n(n({},t),{values:X(t,r)})})),CNAME:m("alias",(function(t,r){return n(n({},t),{values:X(t,r)})})),MX:m("preference host",(function(t,r){return n(n({},t),{values:X(t,r)})})),TXT:m("txt"),PTR:m("host",(function(t,r){return n(n({},t),{values:X(t,r)})})),SRV:m("target port weight priority"),NAPTR:m("order preference flags services regexp replacement"),SPF:m("data",(function(t){return n(n({},t),{values:[t.values.join(" ").trim()]})})),CAA:m("flags tag data",(function(t){return n(n({},t),{data:t.data.replace(/^"(.+?)"$/,"$1")})})),SOA:m("minimum expire retry refresh serial rname mname")},U=function(t){return w.find((function(r){return t.includes(r)}))},H=[{isSatisfied:function(t){return 0===t.lineParts.indexOf("$ORIGIN")},visit:function(t,r){var n=r.lineParts,e=r.addMeta;return t.zoneObj.$ORIGIN=n[1],e({instructionType:a.Origin,value:n[1]})}},{isSatisfied:function(t){return 0===t.lineParts.indexOf("$TTL")},visit:function(t,r){var n=t.zoneObj,e=r.addMeta,o=r.lineParts,u=i(F(o[1]),2),s=u[0],c=u[1];c?e({instructionType:a.TimeToLive,value:s,errorType:c,error:c}):(n.$TTL=s,e({instructionType:a.TimeToLive,value:s}))}},{isSatisfied:function(t){return t.lineParts.includes("SOA")},visit:function(t,r){var n=t.zoneObj,e=r.addMeta,i=r.lineParts;n.SOA=z.SOA({tokens:i,values:i.slice(i.indexOf("SOA")+1)}),e({instructionType:"SOA",value:n.SOA})}},{isSatisfied:function(t){var r=t.lineParts;return!!U(r)},visit:function(t,r){var n,e,i=r.addMeta,o=r.lineParts,a=r.lineContent,s=t.zoneObj,c=t.stack,l=U(o);Array.isArray(s[l])||(s[l]=[]);var f=s[l];try{var p=null!==(e=null===(n=c[c.length-1])||void 0===n?void 0:n.name)&&void 0!==e?e:"",h=G(a,o,l,s,p);c.push(h);var v=z[l](h,t);f.push(v),i({instructionType:l,value:v})}catch(t){i({instructionType:l,value:o.join(" "),error:t,errorType:t instanceof u?E.WrongLength:E.WrongNameArgsLength})}}},{isSatisfied:function(){return!0},visit:function(t,r){var n=r.addMeta,e=r.lineParts;n({instructionType:E.Unknown,errorType:E.BadDirective,value:e.join(" ")})}}],Y=function(){function t(t){void 0===t&&(t=""),this.parsingMeta=new Map,this.stack=[],this.visitors=H,this.input={textInput:null,textInputFlattened:"",textInputSplitByLine:[]},this.zoneObj={$ORIGIN:t},this.input.$originName=t}return t.prototype.setText=function(t){var r=i(S(t),2),n=r[0],e=r[1];return this.input.textInput=t,this.input.textInputFlattened=n,this.input.textInputSplitByLine=e,this},t.prototype.parse=function(){var t,r,n,o=new x(this),a=function(t){return t.isSatisfied(o)};try{for(var u=e(this.input.textInputSplitByLine.entries()),s=u.next();!s.done;s=u.next()){var c=i(s.value,2),l=c[0],f=c[1];o.update(f,l),null===(n=this.visitors.find(a))||void 0===n||n.visit(this,o)}}catch(r){t={error:r}}finally{try{s&&!s.done&&(r=u.return)&&r.call(u)}finally{if(t)throw t.error}}return this},t}(),K=function(t,r){if(""===t.input.textInput.replace(/\s+/,""))throw r.create({errorType:E.EmptyInput,instructionType:E.Unknown})},q=function(t,r){if(0===Object.keys(t.zoneObj).filter((function(t){return t!==a.Origin&&t!==a.TimeToLive})).length)throw r.create({errorType:E.NoRecords,instructionType:E.Unknown})},J=function(t,r){var n=r.entry.errorType;if(n&&k.includes(n))throw r.create(r.entry)},Q=function(t,r){if(r.entry.errorType===E.WrongLength){var n=r.entry.error,e=n.expected,i=n.type,o=n.actual;throw r.create(r.entry,{expected:e,actual:o,type:i})}},Z=function(){return{loopValidators:[Q,J],getErrorText:function(t){return t.errorType},preValidators:[K],postValidators:[q]}},tt=function(){function t(){this.parsingLineNumber=0,this.entry=void 0,this.getErrorText=void 0}return t.prototype.update=function(t,r){return this.parsingLineNumber=t,this.entry=r,this},t.prototype.create=function(t,r){var e=n(n({parsingLineNumber:this.parsingLineNumber},this.entry),t),i=this.getErrorText(e,r);return new s(i,e.instructionType,e.parsingLineNumber,e.lineContent,e.value)},t}(),rt=function(){function t(t){void 0===t&&(t={}),this.errors=[],this.options=Z(),this.errorBuilder=new tt,this.mergeOptions(t)}return t.prototype.mergeOptions=function(t){return function(t,r){Object.keys(r).forEach((function(n){"getErrorText"===n?t[n]=r[n]:Array.isArray(t[n])&&(t[n]=o(o([],i(t[n])),i(r[n])))}))}(this.options,t),this.errorBuilder.getErrorText=this.options.getErrorText,this},t.prototype.validate=function(t){var r,n,o=this;this.options.preValidators.forEach((function(r){try{r(t,o.errorBuilder)}catch(t){o.errors.push(t)}}));try{for(var a=e(t.parsingMeta),u=a.next();!u.done;u=a.next()){var s=i(u.value,2),c=s[0],l=s[1];this.errorBuilder.update(c,l),this.options.loopValidators.forEach((function(r){try{r(t,o.errorBuilder)}catch(t){o.errors.push(t)}}))}}catch(t){r={error:t}}finally{try{u&&!u.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return this.errorBuilder.update(0,{}),this.options.postValidators.forEach((function(r){try{r(t,o.errorBuilder)}catch(t){o.errors.push(t)}})),this},t}();export{L as ALL_RECORD_TYPES,a as DirectiveKind,k as ERROR_KEYS,tt as ErrorBuilder,E as ErrorKeyKind,M as INSTRUCTION_TYPES,C as MAX_TTL_API_VALUE,D as MultiplyByKind,Y as Parser,u as ParserInvalidArgumentsError,x as ParserNode,s as ParsingError,b as RecordMaxLengthKind,R as RecordMinLengthKind,w as SUPPORTED_RECORD_TYPES,_ as TimeLetterKind,d as UNIX_NEW_LINE_CHAR,j as VALID_LETTERS,rt as Validator,P as WarningKeyKind,B as assertRecordLengths,Z as createDefaultValidators,O as flattenStartOfAuthority,$ as getHasValidTtl,W as getNumberLetterPairSeconds,I as getRecordNameUsingOrigin,c as hasLetters,l as hasNumbers,h as match,v as matchDigitWithNumber,A as newLinesIntoSpaces,F as parseTtl,z as parsers,N as removeComments,g as splitArgs,T as splitByNewLine,S as transformInputText,f as trimDot,y as unifyNewLine,H as visitors,p as withDot,m as zipArrayToObj};
//# sourceMappingURL=index.es.js.map