1 | var pack = require('./utils/pack');
|
2 | var fs = require('fs');
|
3 | var path = require('path');
|
4 | var md5 = require('md5');
|
5 | var Client = require('./client/client');
|
6 | var doUpload = require('./utils/upload');
|
7 | var browser = require('./utils/browser');
|
8 | var chalk = require('chalk');
|
9 | var watchTimer = null;
|
10 | var group = null;
|
11 | var socket = null;
|
12 | function 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 |
|
24 | function 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 |
|
39 | function 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 |
|
47 | function 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 |
|
61 | function setUpSocket() {
|
62 | socket = new Client(group);
|
63 | return new Promise(function (resolve, reject) {
|
64 | socket.ready(function () {
|
65 | resolve();
|
66 | });
|
67 | })
|
68 |
|
69 | }
|
70 | module.exports = watch;
|
71 |
|
72 |
|