提交 c2d5335d 编写于 作者: B beyondgfw

Merge branch 'hosts-source' of github.com:googlehosts/hosts into hosts-source

......@@ -2,4 +2,4 @@ language: node_js
node_js: node
script:
- bash deploy.sh
- ./deploy.sh
......@@ -15,5 +15,5 @@
1. 安装[Node.js](https://nodejs.org/en/download/current/)
2. 在项目的文件夹下打开终端。
3. 运行`npm install`
4. 运行`bash generate-local.sh`
4. 运行`./generate-local.sh`
5. 文件会被自动生成在`output`文件夹下。
......@@ -9,9 +9,9 @@ header: |
Modified Hosts Start
footer: |
Modified Hosts End
block_header: |
blockHeader: |
{NAME} Start
block_footer: |
blockFooter: |
{NAME} End
hosts:
......
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
var assert = require('assert');
function checkType(obj, propName, typeName) {
var prop = obj[propName];
var actualTypeName = Array.isArray(prop) ? 'array' : typeof prop;
var msg = `"${propName}" must be of type: ${typeName}, but it is: ${actualTypeName} "${prop}".`;
assert(actualTypeName === typeName, msg);
}
module.exports = function (data) {
checkType(data, 'header', 'string');
checkType(data, 'footer', 'string');
checkType(data, 'blockHeader', 'string');
checkType(data, 'blockFooter', 'string');
checkType(data, 'hosts', 'array');
data.hosts.forEach(function (block) {
checkType(block, 'name', 'string');
checkType(block, 'items', 'array');
block.items.forEach(function (item) {
if (item.comment !== undefined) checkType(item, 'comment', 'string');
else {
checkType(item, 'ip', 'string');
if (item.domain !== undefined) checkType(item, 'domain', 'string');
else {
checkType(item, 'domains', 'array');
item.domains.forEach(function (domain) {
checkType({ domains: domain }, 'domains', 'string');
});
}
}
});
});
};
......@@ -4,9 +4,9 @@ module.exports = function (generateEntry, generateComment) {
output += generateComment(data.header) + '\n';
data.hosts.forEach(function (block) {
var tmp = '';
tmp += generateComment(data.block_header.replace(/{NAME}/g, block.name));
tmp += generateComment(data.blockHeader.replace(/{NAME}/g, block.name));
block.items.forEach(function (item) {
if (item.comment != undefined) {
if (item.comment !== undefined) {
tmp += generateComment(item.comment);
} else {
if (item.domain !== undefined) tmp += generateEntry(item.ip, item.domain) + '\n';
......@@ -17,7 +17,7 @@ module.exports = function (generateEntry, generateComment) {
}
}
});
tmp += generateComment(data.block_footer.replace(/{NAME}/g, block.name));
tmp += generateComment(data.blockFooter.replace(/{NAME}/g, block.name));
blocks.push(tmp);
});
output += blocks.join('\n');
......
......@@ -2,22 +2,23 @@ var fs = require('fs');
var jsyaml = require('js-yaml')
var path = require('path');
var glob = require('glob');
glob.sync(path.join(process.argv[2], '*.yml')).forEach(function(spec_file) {
glob.sync(path.join(process.argv[2], '*.yml')).forEach(function(specFile) {
var data = jsyaml.safeLoad(fs.readFileSync(path.join(process.argv[2], 'hosts.yml'), 'utf-8'));
data.header = data.header.replace(/{DATE}/g, process.argv[3]);
var spec_suffix = '';
var spec_name = path.parse(spec_file).name;
if (spec_name != 'hosts') {
var spec_data = jsyaml.safeLoad(fs.readFileSync(spec_file), 'utf-8');
data.hosts = spec_data.hosts.concat(data.hosts);
spec_suffix = `-${spec_name}`;
var specSuffix = '';
var specName = path.parse(specFile).name;
if (specName !== 'hosts') {
var specData = jsyaml.safeLoad(fs.readFileSync(specFile), 'utf-8');
data.hosts = specData.hosts.concat(data.hosts);
specSuffix = `-${specName}`;
}
require('glob').sync(path.join(__dirname, 'generators/*.js')).forEach(function (gen_file) {
var generator = require(gen_file);
var output_path = path.parse(path.join(process.argv[4], generator.file_name));
output_path.base = null;
output_path.name += spec_suffix;
fs.writeFileSync(path.format(output_path), generator.generate(data));
require('./check-structure')(data);
glob.sync(path.join(__dirname, 'generators/*.js')).forEach(function (genFile) {
var generator = require(genFile);
var outputPath = path.parse(path.join(process.argv[4], generator.fileName));
outputPath.base = null;
outputPath.name += specSuffix;
fs.writeFileSync(path.format(outputPath), generator.generate(data));
});
});
module.exports = {
file_name: "dnsmasq.conf",
fileName: 'dnsmasq.conf',
generate: (function () {
var generateEntry = function (ip, domain) {
return `address=/${domain}/${ip}`;
......
module.exports = {
file_name: "hosts",
fileName: 'hosts',
generate: (function () {
var generateEntry = function (ip, domain) {
return `${ip}\t${domain}`;
......
module.exports = {
file_name: "hosts.rsc",
fileName: 'hosts.rsc',
generate: function (data) {
var generateEntry = function (ip, domain) {
return `add address=${ip} name=${domain}`;
......
module.exports = {
file_name: "surge.conf",
fileName: 'surge.conf',
generate: function (data) {
var generateEntry = function (ip, domain) {
return `${domain} = ${ip}`;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册