New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

zone-file

Package Overview
Dependencies
Maintainers
2
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

zone-file - npm Package Compare versions

Comparing version 0.2.3 to 1.0.0

.babelrc

29

lib/index.js

@@ -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"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc