-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
94 lines (82 loc) · 2.92 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
"use strict";
const os = require("os");
const http = require("http");
const readPkgUp = require("read-pkg-up").sync;
const portscanner = require("portscanner");
// const bonjour = require("nbonjour").create();
// const Bonjour = require("nbonjour");
// const bonjour = new Bonjour();
const Bonjour = require("bonjour");
const bonjour = new Bonjour("abc");
const pkg = readPkgUp({ normalize: false }).pkg;
const pluginName = "Browsersync mDNS";
// const mDNSAdvertise = require("./lib/mdns-advert");
const logAdvert = require("./lib/log-advert");
let nameIncrement = 1;
const safeNamePublish = advert => {
if (nameIncrement > 50) return;
console.log("in safeNamePublish", advert);
const advertClone = { ...advert };
if (!advertClone.hasOwnProperty("basename")) {
advertClone.basename = advertClone.name;
}
console.log('bonjour object', bonjour)
// console.log(bonjour.publish(advertClone))
//
// bonjour.publish(advertClone)
// console.log("bonjour", bonjour);
// const bnj =
bonjour.publish(advertClone)
// console.log(bnj);
// bnj
.on("error", (err, more) => {
console.log(err.message);
advertClone.name = `${advertClone.basename} (${nameIncrement++})`;
safeNamePublish(advertClone);
// return;
})
.on("up", () => console.log("up up up!", advert));
};
module.exports = {
"plugin:name": pluginName,
plugin: function(options, browsersync) {
const displayName = options.name || pkg.name || os.hostname();
const external = browsersync.options.get("urls").get("external");
const scheme = browsersync.options.get("scheme");
const port = browsersync.options.get("port");
// console.log(JSON.stringify(displayName));
const advert = {
name: displayName + Math.floor(Math.random() * 1000),
port,
type: "http"
};
// const browser = bonjour.find({}, serv => console.log(serv.name, serv.type, browser.services.length))
// console.log('services', browser.services)
// bonjour.find({ type: 'http' }, service => console.log('Found an HTTP server:', service.name));
// bonjour.findOne({ name: displayName }, service => console.log('Name in use:', service.name));
if (external) {
if (scheme !== "https") {
safeNamePublish(advert);
} else {
const redirector = http.createServer((req, res) => {
res.writeHead(302, { Location: external });
res.end();
});
portscanner.findAPortNotInUse(port + 1000, function(err, httpPort) {
if (err) throw err;
redirector.listen(httpPort);
advert.post = httpPort;
safeNamePublish(advert);
});
}
const logger = logAdvert.bind(null, advert.name, browsersync);
browsersync.emitter.on("service:running", logger);
browsersync.emitter.on("service:exit", () => {
console.log("shutting down");
bonjour.unpublishAll(() => {
bonjour.destroy();
});
});
}
}
};