Generic DNS zone file parser and stringifier
All current and future record types are supported as the module makes no effort to parse a record's content. It is highly configurable and has no dependencies.
npm i dnsz
import {parseZone, stringifyZone} from "dnsz";
const data = parseZone("example.com 60 IN A 1.2.3.4");
// => {records: [{name: "example.com", ttl: 60, class: "IN", type: "A", content: "1.2.3.4"}]}
stringifyZone(data);
// => ";; A Records\nexample.com.\t60\tIN\tA\t1.2.3.4\n"
Parse a string of a DNS zone file and returns a data
object.
opts.replaceOrigin
string: When specified, replaces any@
inname
orcontent
with it. Default:null
.opts.crlf
boolean: When true, emit\r\n
instead of\n
inheader
. Default:false
.opts.defaultTTL
number: Default TTL when absent and$TTL
is not present. Default:60
.opts.dots
boolean: Ensure trailing dots on FQDNs in content. Supports a limited amount of record types. Default:false
.
Parse a data
object and return a string with the zone file contents.
opts.sections
boolean: Whether to group records into sections. Default:true
.opts.crlf
boolean: Whentrue
, emit\r\n
instead of\n
for the resulting zone file. Default:false
.opts.dots
boolean: Ensure trailing dots on FQDNs in content. Supports a limited amount of record types. Default:false
.
records
: Array ofrecord
with these props:name
: The lowercase DNS name without a trailing dot, e.g."example.com"
.ttl
: The TTL in seconds, e.g.60
.class
: The DNS class, e.g."IN"
.type
: The record type, e.g."A"
.content
: The record content, e.g."2001:db8::1"
or"example.com."
.comment
: A comment, e.g."a comment"
,null
if absent.
origin
: The value of$ORIGIN
in the zone file.ttl
: The value of$TTL
in the zone file.header
: An optional header at the start of the file. Can be multiline. Does not include comment markers.
If data.origin
is specified, the following things happen in the zone file output:
- A
$ORIGIN
variable is added. - All occurences of
data.origin
withincontent
are replaced with@
. - If
data.origin
matches thename
of arecord
,name
is replaced with@
.
$ORIGIN originzone.com.
;; SOA Records
@ 3600 IN SOA originzone.com. root.originzone.com. 2031242781 7200 3600 86400 3600
;; A Records
@ 60 IN A 1.2.3.4 ; a comment
mx 60 IN A 1.2.3.4 ; another comment
;; AAAA Records
@ 120 IN AAAA 2001:db8::1
mx 120 IN AAAA 2001:db8::1
{
"origin": "originzone.com",
"records": [
{
"name": "originzone.com",
"ttl": 3600,
"class": "IN",
"type": "SOA",
"content": "originzone.com. root.originzone.com. 2031242781 7200 3600 86400 3600",
"comment": null
},
{
"name": "originzone.com",
"ttl": 60,
"class": "IN",
"type": "A",
"content": "1.2.3.4",
"comment": "a comment"
},
{
"name": "mx",
"ttl": 60,
"class": "IN",
"type": "A",
"content": "1.2.3.4",
"comment": "another comment"
},
{
"name": "originzone.com",
"ttl": 120,
"class": "IN",
"type": "AAAA",
"content": "2001:db8::1",
"comment": null
},
{
"name": "mx",
"ttl": 120,
"class": "IN",
"type": "AAAA",
"content": "2001:db8::1",
"comment": null
}
]
}
© silverwind, distributed under BSD licence