Comparing version 0.2.3 to 1.0.0
@@ -6,28 +6,25 @@ 'use strict'; | ||
}); | ||
var _makeZoneFile = require('./makeZoneFile'); | ||
Object.defineProperty(exports, 'makeZoneFile', { | ||
Object.defineProperty(exports, "makeZoneFile", { | ||
enumerable: true, | ||
get: function get() { | ||
get: function () { | ||
return _makeZoneFile.makeZoneFile; | ||
} | ||
}); | ||
var _parseZoneFile = require('./parseZoneFile'); | ||
Object.defineProperty(exports, 'parseZoneFile', { | ||
Object.defineProperty(exports, "parseZoneFile", { | ||
enumerable: true, | ||
get: function get() { | ||
get: function () { | ||
return _parseZoneFile.parseZoneFile; | ||
} | ||
}); | ||
var _zoneFile = require('./zoneFile'); | ||
Object.defineProperty(exports, 'ZoneFile', { | ||
Object.defineProperty(exports, "ZoneFile", { | ||
enumerable: true, | ||
get: function get() { | ||
get: function () { | ||
return _zoneFile.ZoneFile; | ||
} | ||
}); | ||
}); | ||
var _makeZoneFile = require("./makeZoneFile"); | ||
var _parseZoneFile = require("./parseZoneFile"); | ||
var _zoneFile = require("./zoneFile"); |
'use strict'; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
value: true | ||
}); | ||
exports.makeZoneFile = makeZoneFile; | ||
var _zoneFileTemplate = require('./zoneFileTemplate'); | ||
var _zoneFileTemplate = require("./zoneFileTemplate"); | ||
function makeZoneFile(jsonZoneFile) { | ||
var template = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (0, _zoneFileTemplate.getZoneFileTemplate)(); | ||
function makeZoneFile(jsonZoneFile, template = (0, _zoneFileTemplate.getZoneFileTemplate)()) { | ||
template = processOrigin(jsonZoneFile['$origin'], template); | ||
template = processTTL(jsonZoneFile['$ttl'], template); | ||
template = processSOA(jsonZoneFile['soa'], template); | ||
template = processNS(jsonZoneFile['ns'], template); | ||
template = processA(jsonZoneFile['a'], template); | ||
template = processAAAA(jsonZoneFile['aaaa'], template); | ||
template = processCNAME(jsonZoneFile['cname'], template); | ||
template = processMX(jsonZoneFile['mx'], template); | ||
template = processPTR(jsonZoneFile['ptr'], template); | ||
template = processTXT(jsonZoneFile['txt'], template); | ||
template = processSRV(jsonZoneFile['srv'], template); | ||
template = processSPF(jsonZoneFile['spf'], template); | ||
template = processURI(jsonZoneFile['uri'], template); | ||
template = processValues(jsonZoneFile, template); | ||
return template.replace(/\n{2,}/gim, '\n\n'); | ||
} | ||
template = processOrigin(jsonZoneFile['$origin'], template); | ||
template = processTTL(jsonZoneFile['$ttl'], template); | ||
template = processSOA(jsonZoneFile['soa'], template); | ||
template = processNS(jsonZoneFile['ns'], template); | ||
template = processA(jsonZoneFile['a'], template); | ||
template = processAAAA(jsonZoneFile['aaaa'], template); | ||
template = processCNAME(jsonZoneFile['cname'], template); | ||
template = processMX(jsonZoneFile['mx'], template); | ||
template = processPTR(jsonZoneFile['ptr'], template); | ||
template = processTXT(jsonZoneFile['txt'], template); | ||
template = processSRV(jsonZoneFile['srv'], template); | ||
template = processSPF(jsonZoneFile['spf'], template); | ||
template = processURI(jsonZoneFile['uri'], template); | ||
template = processValues(jsonZoneFile, template); | ||
return template.replace(/\n{2,}/gim, '\n\n'); | ||
}; | ||
; | ||
var processOrigin = function processOrigin(data, template) { | ||
var ret = ''; | ||
if (typeof data !== 'undefined') { | ||
ret += '$ORIGIN ' + data; | ||
} | ||
return template.replace('{$origin}', ret); | ||
}; | ||
function processOrigin(data, template) { | ||
let ret = ''; | ||
var processTTL = function processTTL(data, template) { | ||
var ret = ''; | ||
if (typeof data !== 'undefined') { | ||
ret += '$TTL ' + data; | ||
} | ||
return template.replace('{$ttl}', ret); | ||
}; | ||
if (typeof data !== 'undefined') { | ||
ret += '$ORIGIN ' + data; | ||
} | ||
var processSOA = function processSOA(data, template) { | ||
var ret = template; | ||
if (typeof data !== 'undefined') { | ||
data.name = data.name || '@'; | ||
data.ttl = data.ttl || ''; | ||
for (var key in data) { | ||
var value = data[key]; | ||
ret = ret.replace('{' + key + '}', value + '\t'); | ||
} | ||
return template.replace('{$origin}', ret); | ||
} | ||
; | ||
function processTTL(data, template) { | ||
let ret = ''; | ||
if (typeof data !== 'undefined') { | ||
ret += '$TTL ' + data; | ||
} | ||
return template.replace('{$ttl}', ret); | ||
} | ||
; | ||
function processSOA(data, template) { | ||
let ret = template; | ||
if (typeof data !== 'undefined') { | ||
data.name = data.name || '@'; | ||
data.ttl = data.ttl || ''; | ||
for (const key in data) { | ||
const value = data[key]; | ||
ret = ret.replace('{' + key + '}', value + '\t'); | ||
} | ||
return ret; | ||
}; | ||
} | ||
var processNS = function processNS(data, template) { | ||
var ret = ''; | ||
for (var i in data) { | ||
ret += (data[i].name || '@') + '\t'; | ||
if (data[i].ttl) ret += data[i].ttl + '\t'; | ||
ret += 'IN\tNS\t' + data[i].host + '\n'; | ||
return ret; | ||
} | ||
; | ||
function processNS(data, template) { | ||
let ret = ''; | ||
if (data) { | ||
for (const record of data) { | ||
ret += (record.name || '@') + '\t'; | ||
if (record.ttl) ret += record.ttl + '\t'; | ||
ret += 'IN\tNS\t' + record.host + '\n'; | ||
} | ||
return template.replace('{ns}', ret); | ||
}; | ||
} | ||
var processA = function processA(data, template) { | ||
var ret = ''; | ||
for (var i in data) { | ||
ret += (data[i].name || '@') + '\t'; | ||
if (data[i].ttl) ret += data[i].ttl + '\t'; | ||
ret += 'IN\tA\t' + data[i].ip + '\n'; | ||
return template.replace('{ns}', ret); | ||
} | ||
; | ||
function processA(data, template) { | ||
let ret = ''; | ||
if (data) { | ||
for (const record of data) { | ||
ret += (record.name || '@') + '\t'; | ||
if (record.ttl) ret += record.ttl + '\t'; | ||
ret += 'IN\tA\t' + record.ip + '\n'; | ||
} | ||
return template.replace('{a}', ret); | ||
}; | ||
} | ||
var processAAAA = function processAAAA(data, template) { | ||
var ret = ''; | ||
for (var i in data) { | ||
ret += (data[i].name || '@') + '\t'; | ||
if (data[i].ttl) ret += data[i].ttl + '\t'; | ||
ret += 'IN\tAAAA\t' + data[i].ip + '\n'; | ||
return template.replace('{a}', ret); | ||
} | ||
; | ||
function processAAAA(data, template) { | ||
let ret = ''; | ||
if (data) { | ||
for (const record of data) { | ||
ret += (record.name || '@') + '\t'; | ||
if (record.ttl) ret += record.ttl + '\t'; | ||
ret += 'IN\tAAAA\t' + record.ip + '\n'; | ||
} | ||
return template.replace('{aaaa}', ret); | ||
}; | ||
} | ||
var processCNAME = function processCNAME(data, template) { | ||
var ret = ''; | ||
for (var i in data) { | ||
ret += (data[i].name || '@') + '\t'; | ||
if (data[i].ttl) ret += data[i].ttl + '\t'; | ||
ret += 'IN\tCNAME\t' + data[i].alias + '\n'; | ||
return template.replace('{aaaa}', ret); | ||
} | ||
; | ||
function processCNAME(data, template) { | ||
let ret = ''; | ||
if (data) { | ||
for (const record of data) { | ||
ret += (record.name || '@') + '\t'; | ||
if (record.ttl) ret += record.ttl + '\t'; | ||
ret += 'IN\tCNAME\t' + record.alias + '\n'; | ||
} | ||
return template.replace('{cname}', ret); | ||
}; | ||
} | ||
var processMX = function processMX(data, template) { | ||
var ret = ''; | ||
for (var i in data) { | ||
ret += (data[i].name || '@') + '\t'; | ||
if (data[i].ttl) ret += data[i].ttl + '\t'; | ||
ret += 'IN\tMX\t' + data[i].preference + '\t' + data[i].host + '\n'; | ||
return template.replace('{cname}', ret); | ||
} | ||
; | ||
function processMX(data, template) { | ||
let ret = ''; | ||
if (data) { | ||
for (const record of data) { | ||
ret += (record.name || '@') + '\t'; | ||
if (record.ttl) ret += record.ttl + '\t'; | ||
ret += 'IN\tMX\t' + record.preference + '\t' + record.host + '\n'; | ||
} | ||
return template.replace('{mx}', ret); | ||
}; | ||
} | ||
var processPTR = function processPTR(data, template) { | ||
var ret = ''; | ||
for (var i in data) { | ||
ret += (data[i].name || '@') + '\t'; | ||
if (data[i].ttl) ret += data[i].ttl + '\t'; | ||
ret += 'IN\tPTR\t' + data[i].host + '\n'; | ||
return template.replace('{mx}', ret); | ||
} | ||
; | ||
function processPTR(data, template) { | ||
let ret = ''; | ||
if (data) { | ||
for (const record of data) { | ||
ret += (record.name || '@') + '\t'; | ||
if (record.ttl) ret += record.ttl + '\t'; | ||
ret += 'IN\tPTR\t' + record.host + '\n'; | ||
} | ||
return template.replace('{ptr}', ret); | ||
}; | ||
} | ||
var processTXT = function processTXT(data, template) { | ||
var ret = ''; | ||
for (var i in data) { | ||
ret += (data[i].name || '@') + '\t'; | ||
if (data[i].ttl) ret += data[i].ttl + '\t'; | ||
ret += 'IN\tTXT\t'; | ||
var txtData = data[i].txt; | ||
if (txtData instanceof String || typeof txtData === 'string') { | ||
ret += '"' + txtData + '"'; | ||
} else if (txtData instanceof Array) { | ||
ret += txtData.map(function (datum) { | ||
return '"' + datum + '"'; | ||
}).join(' '); | ||
} | ||
ret += '\n'; | ||
return template.replace('{ptr}', ret); | ||
} | ||
; | ||
function processTXT(data, template) { | ||
let ret = ''; | ||
if (data) { | ||
for (const record of data) { | ||
ret += (record.name || '@') + '\t'; | ||
if (record.ttl) ret += record.ttl + '\t'; | ||
ret += 'IN\tTXT\t'; | ||
const txtData = record.txt; | ||
if (typeof txtData === 'string') { | ||
ret += '"' + txtData + '"'; | ||
} else if (txtData instanceof Array) { | ||
ret += txtData.map(function (datum) { | ||
return '"' + datum + '"'; | ||
}).join(' '); | ||
} | ||
ret += '\n'; | ||
} | ||
return template.replace('{txt}', ret); | ||
}; | ||
} | ||
var processSRV = function processSRV(data, template) { | ||
var ret = ''; | ||
for (var i in data) { | ||
ret += (data[i].name || '@') + '\t'; | ||
if (data[i].ttl) ret += data[i].ttl + '\t'; | ||
ret += 'IN\tSRV\t' + data[i].priority + '\t'; | ||
ret += data[i].weight + '\t'; | ||
ret += data[i].port + '\t'; | ||
ret += data[i].target + '\n'; | ||
return template.replace('{txt}', ret); | ||
} | ||
; | ||
function processSRV(data, template) { | ||
let ret = ''; | ||
if (data) { | ||
for (const record of data) { | ||
ret += (record.name || '@') + '\t'; | ||
if (record.ttl) ret += record.ttl + '\t'; | ||
ret += 'IN\tSRV\t' + record.priority + '\t'; | ||
ret += record.weight + '\t'; | ||
ret += record.port + '\t'; | ||
ret += record.target + '\n'; | ||
} | ||
return template.replace('{srv}', ret); | ||
}; | ||
} | ||
var processSPF = function processSPF(data, template) { | ||
var ret = ''; | ||
for (var i in data) { | ||
ret += (data[i].name || '@') + '\t'; | ||
if (data[i].ttl) ret += data[i].ttl + '\t'; | ||
ret += 'IN\tSPF\t' + data[i].data + '\n'; | ||
return template.replace('{srv}', ret); | ||
} | ||
; | ||
function processSPF(data, template) { | ||
let ret = ''; | ||
if (data) { | ||
for (const record of data) { | ||
ret += (record.name || '@') + '\t'; | ||
if (record.ttl) ret += record.ttl + '\t'; | ||
ret += 'IN\tSPF\t' + record.data + '\n'; | ||
} | ||
return template.replace('{spf}', ret); | ||
}; | ||
} | ||
var processURI = function processURI(data, template) { | ||
var ret = ''; | ||
for (var i in data) { | ||
ret += (data[i].name || '@') + '\t'; | ||
if (data[i].ttl) ret += data[i].ttl + '\t'; | ||
ret += 'IN\tURI\t' + data[i].priority + '\t'; | ||
ret += data[i].weight + '\t'; | ||
ret += '"' + data[i].target + '"\n'; | ||
return template.replace('{spf}', ret); | ||
} | ||
; | ||
function processURI(data, template) { | ||
let ret = ''; | ||
if (data) { | ||
for (const record of data) { | ||
ret += (record.name || '@') + '\t'; | ||
if (record.ttl) ret += record.ttl + '\t'; | ||
ret += 'IN\tURI\t' + record.priority + '\t'; | ||
ret += record.weight + '\t'; | ||
ret += '"' + record.target + '"\n'; | ||
} | ||
return template.replace('{uri}', ret); | ||
}; | ||
} | ||
var processValues = function processValues(jsonZoneFile, template) { | ||
template = template.replace('{zone}', jsonZoneFile['$origin'] || jsonZoneFile['soa']['name'] || ''); | ||
template = template.replace('{datetime}', new Date().toISOString()); | ||
return template.replace('{time}', Math.round(Date.now() / 1000)); | ||
}; | ||
return template.replace('{uri}', ret); | ||
} | ||
; | ||
function processValues(jsonZoneFile, template) { | ||
template = template.replace('{zone}', jsonZoneFile['$origin'] || (jsonZoneFile['soa'] ? jsonZoneFile['soa']['name'] : false) || ''); | ||
template = template.replace('{datetime}', new Date().toISOString()); | ||
const time = Math.round(Date.now() / 1000); | ||
return template.replace('{time}', `${time}`); | ||
} | ||
; |
'use strict'; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
value: true | ||
}); | ||
exports.parseZoneFile = parseZoneFile; | ||
function parseZoneFile(text) { | ||
text = removeComments(text); | ||
text = flatten(text); | ||
return parseRRs(text); | ||
}; | ||
text = removeComments(text); | ||
text = flatten(text); | ||
return parseRRs(text); | ||
} | ||
var removeComments = function removeComments(text) { | ||
var re = /(^|[^\\]);.*/g; | ||
return text.replace(re, function (m, g1) { | ||
return g1 ? g1 : ""; // if g1 is set/matched, re-insert it, else remove | ||
}); | ||
}; | ||
; | ||
var flatten = function flatten(text) { | ||
var captured = []; | ||
var re = /\([\s\S]*?\)/gim; | ||
var match = re.exec(text); | ||
while (match !== null) { | ||
match.replacement = match[0].replace(/\s+/gm, ' '); | ||
captured.push(match); | ||
// captured Text, index, input | ||
match = re.exec(text); | ||
} | ||
var arrText = text.split(''); | ||
for (var i in captured) { | ||
match = captured[i]; | ||
arrText.splice(match.index, match[0].length, match.replacement); | ||
} | ||
return arrText.join('').replace(/\(|\)/gim, ' '); | ||
}; | ||
function removeComments(text) { | ||
const re = /(^|[^\\]);.*/g; | ||
return text.replace(re, function (m, g1) { | ||
return g1 ? g1 : ''; // if g1 is set/matched, re-insert it, else remove | ||
}); | ||
} | ||
var parseRRs = function parseRRs(text) { | ||
var ret = {}; | ||
var rrs = text.split('\n'); | ||
for (var i in rrs) { | ||
var rr = rrs[i]; | ||
if (!rr || !rr.trim()) { | ||
continue; | ||
} | ||
var uRR = rr.toUpperCase(); | ||
if (/\s+TXT\s+/.test(uRR)) { | ||
ret.txt = ret.txt || []; | ||
ret.txt.push(parseTXT(rr)); | ||
} else if (uRR.indexOf('$ORIGIN') === 0) { | ||
ret.$origin = rr.split(/\s+/g)[1]; | ||
} else if (uRR.indexOf('$TTL') === 0) { | ||
ret.$ttl = parseInt(rr.split(/\s+/g)[1], 10); | ||
} else if (/\s+SOA\s+/.test(uRR)) { | ||
ret.soa = parseSOA(rr); | ||
} else if (/\s+NS\s+/.test(uRR)) { | ||
ret.ns = ret.ns || []; | ||
ret.ns.push(parseNS(rr)); | ||
} else if (/\s+A\s+/.test(uRR)) { | ||
ret.a = ret.a || []; | ||
ret.a.push(parseA(rr, ret.a)); | ||
} else if (/\s+AAAA\s+/.test(uRR)) { | ||
ret.aaaa = ret.aaaa || []; | ||
ret.aaaa.push(parseAAAA(rr)); | ||
} else if (/\s+CNAME\s+/.test(uRR)) { | ||
ret.cname = ret.cname || []; | ||
ret.cname.push(parseCNAME(rr)); | ||
} else if (/\s+MX\s+/.test(uRR)) { | ||
ret.mx = ret.mx || []; | ||
ret.mx.push(parseMX(rr)); | ||
} else if (/\s+PTR\s+/.test(uRR)) { | ||
ret.ptr = ret.ptr || []; | ||
ret.ptr.push(parsePTR(rr, ret.ptr, ret.$origin)); | ||
} else if (/\s+SRV\s+/.test(uRR)) { | ||
ret.srv = ret.srv || []; | ||
ret.srv.push(parseSRV(rr)); | ||
} else if (/\s+SPF\s+/.test(uRR)) { | ||
ret.spf = ret.spf || []; | ||
ret.spf.push(parseSPF(rr)); | ||
} else if (/\s+URI\s+/.test(uRR)) { | ||
ret.uri = ret.uri || []; | ||
ret.uri.push(parseURI(rr)); | ||
} | ||
} | ||
return ret; | ||
}; | ||
function flatten(text) { | ||
const captured = []; | ||
const re = /\([\s\S]*?\)/gim; | ||
let match = re.exec(text); | ||
var parseSOA = function parseSOA(rr) { | ||
var soa = {}; | ||
var rrTokens = rr.trim().split(/\s+/g); | ||
var l = rrTokens.length; | ||
soa.name = rrTokens[0]; | ||
soa.minimum = parseInt(rrTokens[l - 1], 10); | ||
soa.expire = parseInt(rrTokens[l - 2], 10); | ||
soa.retry = parseInt(rrTokens[l - 3], 10); | ||
soa.refresh = parseInt(rrTokens[l - 4], 10); | ||
soa.serial = parseInt(rrTokens[l - 5], 10); | ||
soa.rname = rrTokens[l - 6]; | ||
soa.mname = rrTokens[l - 7]; | ||
if (!isNaN(rrTokens[1])) soa.ttl = parseInt(rrTokens[1], 10); | ||
return soa; | ||
}; | ||
while (match !== null) { | ||
const replacement = match[0].replace(/\s+/gm, ' '); | ||
captured.push({ | ||
match, | ||
replacement | ||
}); // captured Text, index, input | ||
var parseNS = function parseNS(rr) { | ||
var rrTokens = rr.trim().split(/\s+/g); | ||
var l = rrTokens.length; | ||
var result = { | ||
name: rrTokens[0], | ||
host: rrTokens[l - 1] | ||
}; | ||
match = re.exec(text); | ||
} | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
}; | ||
const arrText = text.split(''); | ||
var parseA = function parseA(rr, recordsSoFar) { | ||
var rrTokens = rr.trim().split(/\s+/g); | ||
var urrTokens = rr.trim().toUpperCase().split(/\s+/g); | ||
var l = rrTokens.length; | ||
var result = { | ||
name: rrTokens[0], | ||
ip: rrTokens[l - 1] | ||
}; | ||
for (const cur of captured) { | ||
const { | ||
match, | ||
replacement | ||
} = cur; | ||
arrText.splice(match.index, match[0].length, replacement); | ||
} | ||
if (urrTokens.lastIndexOf('A') === 0) { | ||
if (recordsSoFar.length) { | ||
result.name = recordsSoFar[recordsSoFar.length - 1].name; | ||
} else { | ||
result.name = '@'; | ||
} | ||
} | ||
return arrText.join('').replace(/\(|\)/gim, ' '); | ||
} | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
}; | ||
function parseRRs(text) { | ||
const ret = {}; | ||
const rrs = text.split('\n'); | ||
var parseAAAA = function parseAAAA(rr) { | ||
var rrTokens = rr.trim().split(/\s+/g); | ||
var l = rrTokens.length; | ||
var result = { | ||
name: rrTokens[0], | ||
ip: rrTokens[l - 1] | ||
}; | ||
for (const rr of rrs) { | ||
if (!rr || !rr.trim()) { | ||
continue; | ||
} | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
}; | ||
const uRR = rr.toUpperCase(); | ||
var parseCNAME = function parseCNAME(rr) { | ||
var rrTokens = rr.trim().split(/\s+/g); | ||
var l = rrTokens.length; | ||
var result = { | ||
name: rrTokens[0], | ||
alias: rrTokens[l - 1] | ||
}; | ||
if (/\s+TXT\s+/.test(uRR)) { | ||
ret.txt = ret.txt || []; | ||
ret.txt.push(parseTXT(rr)); | ||
} else if (uRR.indexOf('$ORIGIN') === 0) { | ||
ret.$origin = rr.split(/\s+/g)[1]; | ||
} else if (uRR.indexOf('$TTL') === 0) { | ||
ret.$ttl = parseInt(rr.split(/\s+/g)[1], 10); | ||
} else if (/\s+SOA\s+/.test(uRR)) { | ||
ret.soa = parseSOA(rr); | ||
} else if (/\s+NS\s+/.test(uRR)) { | ||
ret.ns = ret.ns || []; | ||
ret.ns.push(parseNS(rr)); | ||
} else if (/\s+A\s+/.test(uRR)) { | ||
ret.a = ret.a || []; | ||
ret.a.push(parseA(rr, ret.a)); | ||
} else if (/\s+AAAA\s+/.test(uRR)) { | ||
ret.aaaa = ret.aaaa || []; | ||
ret.aaaa.push(parseAAAA(rr)); | ||
} else if (/\s+CNAME\s+/.test(uRR)) { | ||
ret.cname = ret.cname || []; | ||
ret.cname.push(parseCNAME(rr)); | ||
} else if (/\s+MX\s+/.test(uRR)) { | ||
ret.mx = ret.mx || []; | ||
ret.mx.push(parseMX(rr)); | ||
} else if (/\s+PTR\s+/.test(uRR)) { | ||
ret.ptr = ret.ptr || []; | ||
ret.ptr.push(parsePTR(rr, ret.ptr, ret.$origin)); | ||
} else if (/\s+SRV\s+/.test(uRR)) { | ||
ret.srv = ret.srv || []; | ||
ret.srv.push(parseSRV(rr)); | ||
} else if (/\s+SPF\s+/.test(uRR)) { | ||
ret.spf = ret.spf || []; | ||
ret.spf.push(parseSPF(rr)); | ||
} else if (/\s+URI\s+/.test(uRR)) { | ||
ret.uri = ret.uri || []; | ||
ret.uri.push(parseURI(rr)); | ||
} | ||
} | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
}; | ||
return ret; | ||
} | ||
var parseMX = function parseMX(rr) { | ||
var rrTokens = rr.trim().split(/\s+/g); | ||
var l = rrTokens.length; | ||
var result = { | ||
name: rrTokens[0], | ||
preference: parseInt(rrTokens[l - 2], 10), | ||
host: rrTokens[l - 1] | ||
}; | ||
function parseSOA(rr) { | ||
const soa = {}; | ||
const rrTokens = rr.trim().split(/\s+/g); | ||
const l = rrTokens.length; | ||
soa.name = rrTokens[0]; | ||
soa.minimum = parseInt(rrTokens[l - 1], 10); | ||
soa.expire = parseInt(rrTokens[l - 2], 10); | ||
soa.retry = parseInt(rrTokens[l - 3], 10); | ||
soa.refresh = parseInt(rrTokens[l - 4], 10); | ||
soa.serial = parseInt(rrTokens[l - 5], 10); | ||
soa.rname = rrTokens[l - 6]; | ||
soa.mname = rrTokens[l - 7]; | ||
if (!isNaN(rrTokens[1])) soa.ttl = parseInt(rrTokens[1], 10); | ||
return soa; | ||
} | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
}; | ||
function parseNS(rr) { | ||
const rrTokens = rr.trim().split(/\s+/g); | ||
const l = rrTokens.length; | ||
const result = { | ||
name: rrTokens[0], | ||
host: rrTokens[l - 1] | ||
}; | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
} | ||
var parseTXT = function parseTXT(rr) { | ||
var rrTokens = rr.trim().match(/[^\s\"']+|\"[^\"]*\"|'[^']*'/g); | ||
var l = rrTokens.length; | ||
var indexTXT = rrTokens.indexOf('TXT'); | ||
function parseA(rr, recordsSoFar) { | ||
const rrTokens = rr.trim().split(/\s+/g); | ||
const urrTokens = rr.trim().toUpperCase().split(/\s+/g); | ||
const l = rrTokens.length; | ||
const result = { | ||
name: rrTokens[0], | ||
ip: rrTokens[l - 1] | ||
}; | ||
var stripText = function stripText(txt) { | ||
if (txt.indexOf('\"') > -1) { | ||
txt = txt.split('\"')[1]; | ||
} | ||
if (txt.indexOf('"') > -1) { | ||
txt = txt.split('"')[1]; | ||
} | ||
return txt; | ||
}; | ||
var tokenTxt = void 0; | ||
if (l - indexTXT - 1 > 1) { | ||
tokenTxt = rrTokens.slice(indexTXT + 1).map(stripText); | ||
if (urrTokens.lastIndexOf('A') === 0) { | ||
if (recordsSoFar.length) { | ||
result.name = recordsSoFar[recordsSoFar.length - 1].name; | ||
} else { | ||
tokenTxt = stripText(rrTokens[l - 1]); | ||
result.name = '@'; | ||
} | ||
} | ||
var result = { | ||
name: rrTokens[0], | ||
txt: tokenTxt | ||
}; | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
} | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
}; | ||
function parseAAAA(rr) { | ||
const rrTokens = rr.trim().split(/\s+/g); | ||
const l = rrTokens.length; | ||
const result = { | ||
name: rrTokens[0], | ||
ip: rrTokens[l - 1] | ||
}; | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
} | ||
var parsePTR = function parsePTR(rr, recordsSoFar, currentOrigin) { | ||
var rrTokens = rr.trim().split(/\s+/g); | ||
var urrTokens = rr.trim().toUpperCase().split(/\s+/g); | ||
function parseCNAME(rr) { | ||
const rrTokens = rr.trim().split(/\s+/g); | ||
const l = rrTokens.length; | ||
const result = { | ||
name: rrTokens[0], | ||
alias: rrTokens[l - 1] | ||
}; | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
} | ||
if (urrTokens.lastIndexOf('PTR') === 0 && recordsSoFar[recordsSoFar.length - 1]) { | ||
rrTokens.unshift(recordsSoFar[recordsSoFar.length - 1].name); | ||
function parseMX(rr) { | ||
const rrTokens = rr.trim().split(/\s+/g); | ||
const l = rrTokens.length; | ||
const result = { | ||
name: rrTokens[0], | ||
preference: parseInt(rrTokens[l - 2], 10), | ||
host: rrTokens[l - 1] | ||
}; | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
} | ||
function parseTXT(rr) { | ||
const rrTokens = rr.trim().match(/[^\s\"']+|\"[^\"]*\"|'[^']*'/g); | ||
if (!rrTokens) throw new Error('Failure to tokenize TXT record'); | ||
const l = rrTokens.length; | ||
const indexTXT = rrTokens.indexOf('TXT'); | ||
function stripText(txt) { | ||
if (txt.indexOf('\"') > -1) { | ||
txt = txt.split('\"')[1]; | ||
} | ||
var l = rrTokens.length; | ||
var result = { | ||
name: rrTokens[0], | ||
fullname: rrTokens[0] + '.' + currentOrigin, | ||
host: rrTokens[l - 1] | ||
}; | ||
if (txt.indexOf('"') > -1) { | ||
txt = txt.split('"')[1]; | ||
} | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
}; | ||
return txt; | ||
} | ||
var parseSRV = function parseSRV(rr) { | ||
var rrTokens = rr.trim().split(/\s+/g); | ||
var l = rrTokens.length; | ||
var result = { | ||
name: rrTokens[0], | ||
target: rrTokens[l - 1], | ||
priority: parseInt(rrTokens[l - 4], 10), | ||
weight: parseInt(rrTokens[l - 3], 10), | ||
port: parseInt(rrTokens[l - 2], 10) | ||
}; | ||
let tokenTxt; | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
}; | ||
if (l - indexTXT - 1 > 1) { | ||
tokenTxt = rrTokens.slice(indexTXT + 1).map(stripText); | ||
} else { | ||
tokenTxt = stripText(rrTokens[l - 1]); | ||
} | ||
var parseSPF = function parseSPF(rr) { | ||
var rrTokens = rr.trim().split(/\s+/g); | ||
var result = { | ||
name: rrTokens[0], | ||
data: '' | ||
}; | ||
const result = { | ||
name: rrTokens[0], | ||
txt: tokenTxt | ||
}; | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
} | ||
var l = rrTokens.length; | ||
while (l-- > 4) { | ||
result.data = rrTokens[l] + ' ' + result.data.trim(); | ||
} | ||
function parsePTR(rr, recordsSoFar, currentOrigin) { | ||
const rrTokens = rr.trim().split(/\s+/g); | ||
const urrTokens = rr.trim().toUpperCase().split(/\s+/g); | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
}; | ||
if (urrTokens.lastIndexOf('PTR') === 0 && recordsSoFar[recordsSoFar.length - 1]) { | ||
rrTokens.unshift(recordsSoFar[recordsSoFar.length - 1].name); | ||
} | ||
var parseURI = function parseURI(rr) { | ||
var rrTokens = rr.trim().split(/\s+/g); | ||
var l = rrTokens.length; | ||
var result = { | ||
name: rrTokens[0], | ||
target: rrTokens[l - 1].replace(/"/g, ''), | ||
priority: parseInt(rrTokens[l - 3], 10), | ||
weight: parseInt(rrTokens[l - 2], 10) | ||
}; | ||
const l = rrTokens.length; | ||
const result = { | ||
name: rrTokens[0], | ||
fullname: rrTokens[0] + '.' + currentOrigin, | ||
host: rrTokens[l - 1] | ||
}; | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
} | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
}; | ||
function parseSRV(rr) { | ||
const rrTokens = rr.trim().split(/\s+/g); | ||
const l = rrTokens.length; | ||
const result = { | ||
name: rrTokens[0], | ||
target: rrTokens[l - 1], | ||
priority: parseInt(rrTokens[l - 4], 10), | ||
weight: parseInt(rrTokens[l - 3], 10), | ||
port: parseInt(rrTokens[l - 2], 10) | ||
}; | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
} | ||
function parseSPF(rr) { | ||
const rrTokens = rr.trim().split(/\s+/g); | ||
const result = { | ||
name: rrTokens[0], | ||
data: '' | ||
}; | ||
let l = rrTokens.length; | ||
while (l-- > 4) { | ||
result.data = rrTokens[l] + ' ' + result.data.trim(); | ||
} | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
} | ||
function parseURI(rr) { | ||
const rrTokens = rr.trim().split(/\s+/g); | ||
const l = rrTokens.length; | ||
const result = { | ||
name: rrTokens[0], | ||
target: rrTokens[l - 1].replace(/"/g, ''), | ||
priority: parseInt(rrTokens[l - 3], 10), | ||
weight: parseInt(rrTokens[l - 2], 10) | ||
}; | ||
if (!isNaN(rrTokens[1])) result.ttl = parseInt(rrTokens[1], 10); | ||
return result; | ||
} |
'use strict'; | ||
var _tape = require('tape'); | ||
var _tape = _interopRequireDefault(require("tape")); | ||
var _tape2 = _interopRequireDefault(_tape); | ||
var _fs = _interopRequireDefault(require("fs")); | ||
var _fs = require('fs'); | ||
var _index = require("../index"); | ||
var _fs2 = _interopRequireDefault(_fs); | ||
var _index = require('../index'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var zoneFileReferences = [{ | ||
const zoneFileReferences = [{ | ||
name: 'Forward', | ||
json: require('../../testData/zonefile_forward.json'), | ||
text: _fs2.default.readFileSync('./testData/zonefile_forward.txt', 'utf8'), | ||
text: _fs.default.readFileSync('./testData/zonefile_forward.txt', 'utf8'), | ||
records: ['soa', 'a', 'mx', 'txt'] | ||
@@ -23,3 +19,3 @@ }, { | ||
json: require('../../testData/zonefile_forward_2.json'), | ||
text: _fs2.default.readFileSync('./testData/zonefile_forward_2.txt', 'utf8'), | ||
text: _fs.default.readFileSync('./testData/zonefile_forward_2.txt', 'utf8'), | ||
records: ['soa', 'a', 'mx', 'txt'] | ||
@@ -29,3 +25,3 @@ }, { | ||
json: require('../../testData/zonefile_forward_3.json'), | ||
text: _fs2.default.readFileSync('./testData/zonefile_forward_3.txt', 'utf8'), | ||
text: _fs.default.readFileSync('./testData/zonefile_forward_3.txt', 'utf8'), | ||
records: ['uri'] | ||
@@ -35,3 +31,3 @@ }, { | ||
json: require('../../testData/zonefile_forward_4.json'), | ||
text: _fs2.default.readFileSync('./testData/zonefile_reverse_multitxt.txt', 'utf8'), | ||
text: _fs.default.readFileSync('./testData/zonefile_reverse_multitxt.txt', 'utf8'), | ||
records: ['uri', 'txt'] | ||
@@ -41,3 +37,3 @@ }, { | ||
json: require('../../testData/blockstack-cli-zonefile.json'), | ||
text: _fs2.default.readFileSync('./testData/blockstack-cli-zonefile.txt', 'utf8'), | ||
text: _fs.default.readFileSync('./testData/blockstack-cli-zonefile.txt', 'utf8'), | ||
records: ['uri', 'txt'] | ||
@@ -47,3 +43,3 @@ }, { | ||
json: require('../../testData/onename-transfer-zonefile.json'), | ||
text: _fs2.default.readFileSync('./testData/onename-transfer-zonefile.txt', 'utf8'), | ||
text: _fs.default.readFileSync('./testData/onename-transfer-zonefile.txt', 'utf8'), | ||
records: ['uri'] | ||
@@ -53,3 +49,3 @@ }, { | ||
json: require('../../testData/browser-generated-zonefile.json'), | ||
text: _fs2.default.readFileSync('./testData/browser-generated-zonefile.txt', 'utf8'), | ||
text: _fs.default.readFileSync('./testData/browser-generated-zonefile.txt', 'utf8'), | ||
records: ['uri'] | ||
@@ -59,6 +55,5 @@ }]; | ||
function testZoneFileToText(zoneFileReference) { | ||
(0, _tape2.default)(zoneFileReference.name + ' testToText', function (t) { | ||
(0, _tape.default)(zoneFileReference.name + ' testToText', t => { | ||
t.plan(1); | ||
var zoneFileText = (0, _index.makeZoneFile)(zoneFileReference.json); | ||
const zoneFileText = (0, _index.makeZoneFile)(zoneFileReference.json); | ||
t.equal(zoneFileText.split('\n')[0], zoneFileReference.text.split('\n')[0]); | ||
@@ -69,7 +64,6 @@ }); | ||
function testZoneFileToJson(zoneFileReference) { | ||
(0, _tape2.default)(zoneFileReference.name + ' testToJson', function (t) { | ||
var numberOfTests = 2 + zoneFileReference.records.length; | ||
(0, _tape.default)(zoneFileReference.name + ' testToJson', t => { | ||
const numberOfTests = 2 + zoneFileReference.records.length; | ||
t.plan(numberOfTests); | ||
var zoneFileJson = (0, _index.parseZoneFile)(zoneFileReference.text); | ||
const zoneFileJson = (0, _index.parseZoneFile)(zoneFileReference.text); | ||
t.equal(zoneFileJson['$origin'], zoneFileReference.json['$origin']); | ||
@@ -81,11 +75,15 @@ t.equal(zoneFileJson['$ttl'], zoneFileReference.json['$ttl']); | ||
} | ||
if (zoneFileReference.records.indexOf('a') > -1) { | ||
t.equal(zoneFileJson['a'][0]['ip'], zoneFileReference.json['a'][0]['ip']); | ||
} | ||
if (zoneFileReference.records.indexOf('mx') > -1) { | ||
t.equal(zoneFileJson['mx'][0]['preference'], zoneFileReference.json['mx'][0]['preference']); | ||
} | ||
if (zoneFileReference.records.indexOf('txt') > -1) { | ||
t.deepEqual(zoneFileJson['txt'][0]['txt'], zoneFileReference.json['txt'][0]['txt']); | ||
} | ||
if (zoneFileReference.records.indexOf('uri') > -1) { | ||
@@ -98,49 +96,75 @@ t.equal(zoneFileJson['uri'][0]['target'], zoneFileReference.json['uri'][0]['target']); | ||
function testZoneFileObjectFromJson(zoneFileReference) { | ||
(0, _tape2.default)('zoneFileFromJson', function (t) { | ||
(0, _tape.default)('zoneFileFromJson', function (t) { | ||
t.plan(5); | ||
var zoneFile = new _index.ZoneFile(zoneFileReference.json); | ||
const zoneFile = new _index.ZoneFile(zoneFileReference.json); | ||
t.ok(zoneFile, 'ZoneFile object should have been created'); | ||
var zoneFileJson = zoneFile.toJSON(); | ||
const zoneFileJson = zoneFile.toJSON(); | ||
t.ok(zoneFileJson, 'ZoneFile JSON should have been created'); | ||
t.equal(zoneFileJson['$ttl'], zoneFileReference.json['$ttl'], 'zone file TTL should match reference'); | ||
t.equal(zoneFileJson['$domain'], zoneFileReference.json['$domain'], 'zone file domain should match reference'); | ||
//t.equal(zoneFileJson['txt'][0]['txt'], zoneFileReference.json['txt'][0]['txt'], 'zone file TXT record should match reference') | ||
t.equal(zoneFileJson['$domain'], zoneFileReference.json['$domain'], 'zone file domain should match reference'); //t.equal(zoneFileJson['txt'][0]['txt'], zoneFileReference.json['txt'][0]['txt'], 'zone file TXT record should match reference') | ||
//t.equal(JSON.stringify(zoneFileJson), JSON.stringify(zoneFileJsonReference), 'ZoneFile JSON should match the reference') | ||
var zoneFileString = zoneFile.toString(); | ||
t.ok(zoneFileString, 'ZoneFile text should have been created'); | ||
//t.equal(zoneFileString.toString().split('; NS Records')[1], zoneFileStringReference.split('; NS Records')[1], 'Zonefile text should match the reference') | ||
const zoneFileString = zoneFile.toString(); | ||
t.ok(zoneFileString, 'ZoneFile text should have been created'); //t.equal(zoneFileString.toString().split('; NS Records')[1], zoneFileStringReference.split('; NS Records')[1], 'Zonefile text should match the reference') | ||
}); | ||
} | ||
function testZoneFileFromBlockstackJs() { | ||
(0, _tape.default)('test-zf-from-blockstack.js', function (t) { | ||
t.plan(2); | ||
const zf = { | ||
$origin: 'sweet.potato.pie', | ||
$ttl: 3600, | ||
uri: [{ | ||
name: '_http._tcp', | ||
priority: 10, | ||
weight: 1, | ||
target: 'https://potatos.com/hub/whatever' | ||
}] | ||
}; | ||
const zfTemplate = '{$origin}\n{$ttl}\n{uri}\n'; | ||
t.equal((0, _index.makeZoneFile)(zf, zfTemplate), '$ORIGIN sweet.potato.pie\n$TTL 3600\n_http._tcp\tIN\tURI\t10\t1\t"https://potatos.com/hub/whatever"\n\n'); | ||
t.equal((0, _index.makeZoneFile)(zf), '$ORIGIN sweet.potato.pie\n$TTL 3600\n\n; SOA Record\n{name} {ttl} IN SOA {mname}{rname}(\n{serial} ;serial\n{refresh} ;refresh\n{retry} ;retry\n{expire} ;expire\n{minimum} ;minimum ttl\n)\n\n; NS Records\n\n; MX Records\n\n; A Records\n\n; AAAA Records\n\n; CNAME Records\n\n; PTR Records\n\n; TXT Records\n\n; SRV Records\n\n; SPF Records\n\n; URI Records\n_http._tcp\tIN\tURI\t10\t1\t"https://potatos.com/hub/whatever"\n\n'); | ||
}); | ||
} | ||
function testZoneFileMakingFromExtendedArray() { | ||
(0, _tape.default)('makeZoneFileExtendedArray', function (t) { | ||
t.plan(1); | ||
Array.prototype.fail = 1; | ||
try { | ||
t.ok((0, _index.parseZoneFile)('$ORIGIN sweet.potato.pie\n$TTL 3600\n_http._tcp\tIN\tURI\t10\t1\t"https://potatos.com/hub/whatever"\n\n')); | ||
} catch (e) { | ||
t.fail(`Error parsing zonefile when array.prototype is extended: ${e}`); | ||
} finally { | ||
delete Array.prototype.fail; | ||
} | ||
}); | ||
} | ||
function testZoneFileObjectFromString(zoneFileReference) { | ||
(0, _tape2.default)('zoneFileFromString', function (t) { | ||
(0, _tape.default)('zoneFileFromString', function (t) { | ||
t.plan(5); | ||
var zoneFile = new _index.ZoneFile(zoneFileReference.text); | ||
const zoneFile = new _index.ZoneFile(zoneFileReference.text); | ||
t.ok(zoneFile, 'ZoneFile object should have been created'); | ||
var zoneFileJson = zoneFile.toJSON(); | ||
const zoneFileJson = zoneFile.toJSON(); | ||
t.ok(zoneFileJson, 'ZoneFile JSON should have been created'); | ||
t.equal(zoneFileJson['$ttl'], zoneFileReference.json['$ttl'], 'zone file TTL should match reference'); | ||
t.equal(zoneFileJson['$domain'], zoneFileReference.json['$domain'], 'zone file domain should match reference'); | ||
//t.equal(zoneFileJson['txt'][0]['txt'], zoneFileReference.json['txt'][0]['txt'], 'zone file TXT record should match reference') | ||
t.equal(zoneFileJson['$domain'], zoneFileReference.json['$domain'], 'zone file domain should match reference'); //t.equal(zoneFileJson['txt'][0]['txt'], zoneFileReference.json['txt'][0]['txt'], 'zone file TXT record should match reference') | ||
//t.equal(JSON.stringify(zoneFileJson), JSON.stringify(zoneFileJsonReference), 'ZoneFile JSON should match the reference') | ||
var zoneFileString = zoneFile.toString(); | ||
t.ok(zoneFileString, 'ZoneFile text should have been created'); | ||
//t.equal(zoneFileString.split('; NS Records')[1], zoneFileStringReference.split('; NS Records')[1], 'Zonefile text should match the reference') | ||
const zoneFileString = zoneFile.toString(); | ||
t.ok(zoneFileString, 'ZoneFile text should have been created'); //t.equal(zoneFileString.split('; NS Records')[1], zoneFileStringReference.split('; NS Records')[1], 'Zonefile text should match the reference') | ||
}); | ||
} | ||
zoneFileReferences.forEach(function (zoneFileReference) { | ||
zoneFileReferences.forEach(zoneFileReference => { | ||
testZoneFileToText(zoneFileReference); | ||
testZoneFileToJson(zoneFileReference); | ||
testZoneFileObjectFromJson(zoneFileReference); | ||
testZoneFileObjectFromString(zoneFileReference); | ||
}); | ||
testZoneFileFromBlockstackJs(); | ||
testZoneFileMakingFromExtendedArray(); | ||
/* | ||
@@ -147,0 +171,0 @@ let zoneFileReverseReferences = [{ |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,19 +6,11 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.ZoneFile = undefined; | ||
exports.ZoneFile = void 0; | ||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; | ||
var _makeZoneFile = require("./makeZoneFile"); | ||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | ||
var _parseZoneFile = require("./parseZoneFile"); | ||
var _makeZoneFile = require('./makeZoneFile'); | ||
var _parseZoneFile = require('./parseZoneFile'); | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
var ZoneFile = exports.ZoneFile = function () { | ||
function ZoneFile(zoneFile) { | ||
_classCallCheck(this, ZoneFile); | ||
if ((typeof zoneFile === 'undefined' ? 'undefined' : _typeof(zoneFile)) === 'object') { | ||
class ZoneFile { | ||
constructor(zoneFile) { | ||
if (typeof zoneFile === 'object') { | ||
this.jsonZoneFile = JSON.parse(JSON.stringify(zoneFile)); | ||
@@ -30,15 +22,12 @@ } else if (typeof zoneFile === 'string') { | ||
_createClass(ZoneFile, [{ | ||
key: 'toJSON', | ||
value: function toJSON() { | ||
return this.jsonZoneFile; | ||
} | ||
}, { | ||
key: 'toString', | ||
value: function toString() { | ||
return (0, _makeZoneFile.makeZoneFile)(this.toJSON()); | ||
} | ||
}]); | ||
toJSON() { | ||
return this.jsonZoneFile; | ||
} | ||
return ZoneFile; | ||
}(); | ||
toString() { | ||
return (0, _makeZoneFile.makeZoneFile)(this.toJSON()); | ||
} | ||
} | ||
exports.ZoneFile = ZoneFile; |
@@ -7,2 +7,3 @@ 'use strict'; | ||
exports.getZoneFileTemplate = getZoneFileTemplate; | ||
function getZoneFileTemplate() { | ||
@@ -9,0 +10,0 @@ return '{$origin}\n\ |
{ | ||
"name": "zone-file", | ||
"version": "0.2.3", | ||
"version": "1.0.0", | ||
"description": "A DNS zone file parser and generator", | ||
"main": "lib/index", | ||
"scripts": { | ||
"compile": "rm -rf lib; babel --presets env src -d lib", | ||
"compile": "rm -rf lib; babel src -d lib", | ||
"flow": "flow", | ||
"prepublish": "npm run compile", | ||
"test": "npm run compile; node lib/testing/unitTests.js" | ||
"lint": "eslint src", | ||
"test": "npm run lint && npm run compile && npm run flow && node lib/testing/unitTests.js" | ||
}, | ||
@@ -68,6 +70,12 @@ "repository": { | ||
"devDependencies": { | ||
"babel-cli": "^6.7.5", | ||
"babel-preset-env": "^1.6.1", | ||
"@babel/cli": "^7.2.3", | ||
"@babel/core": "^7.2.2", | ||
"@babel/plugin-transform-modules-commonjs": "^7.2.0", | ||
"@babel/preset-flow": "^7.0.0", | ||
"babel-eslint": "^10.0.1", | ||
"eslint": "^5.11.1", | ||
"eslint-plugin-flowtype": "^3.2.0", | ||
"flow-bin": "^0.89.0", | ||
"tape": "^4.5.1" | ||
} | ||
} |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
43358
32
919
1
0
9