UNPKG

2.14 kBJavaScriptView Raw
1var pack = require('./utils/pack');
2var fs = require('fs');
3var path = require('path');
4var md5 = require('md5');
5var Client = require('./client/client');
6var doUpload = require('./utils/upload');
7var browser = require('./utils/browser');
8var chalk = require('chalk');
9var watchTimer = null;
10var group = null;
11var socket = null;
12function watch(projectPath) {
13 group = md5(Math.random() * 10000000 + Date.now());
14 setUpSocket().then(function () {
15 browser(group);
16 zipAndUpload(projectPath);
17 runWatch(projectPath);
18 }, function (e) {
19 console.log(e);
20 });
21}
22
23
24function zipAndUpload(projectPath) {
25 var config = JSON.parse(fs.readFileSync(path.resolve(projectPath, './offline-config.json')));
26 var zip = pack(path.resolve(projectPath, config.watch), false);
27 zip.file('socket-client.js', injectClientJS());
28 zip.generateAsync({type: "nodebuffer", compression: "DEFLATE"}).then(function (content) {
29 var zipPath = path.resolve(projectPath, './output_' + md5(Date.now()) + '.zip');
30 fs.writeFileSync(zipPath, content);
31 doUpload(zipPath).then(function (url) {
32 socket.updateUrl(url);
33 });
34 }, function (error) {
35 console.log(chalk.red(error));
36 });
37}
38
39function injectClientJS() {
40 var text = fs.readFileSync(path.resolve(__dirname, './mobile/socket-client.js'), 'utf8');
41 text = text.replace(/\{\{(.*?)\}\}/mg, function (s0, s1) {
42 return group;
43 });
44 return new Buffer(text);
45}
46
47function runWatch(projectPath) {
48 var config = JSON.parse(fs.readFileSync(path.resolve(projectPath, './offline-config.json')));
49 fs.watch(path.resolve(projectPath, config.watch), {
50 persistent: true
51 }, function () {
52 if (watchTimer) {
53 clearTimeout(watchTimer);
54 }
55 watchTimer = setTimeout(function () {
56 zipAndUpload(projectPath);
57 }, 1000);
58 });
59}
60
61function setUpSocket() {
62 socket = new Client(group);
63 return new Promise(function (resolve, reject) {
64 socket.ready(function () {
65 resolve();
66 });
67 })
68
69}
70module.exports = watch;
71
72