UNPKG

3 kBJavaScriptView Raw
1function iter$__(a){ let v; return a ? ((v=a.toIterable) ? v.call(a) : a) : a; };
2var $1 = Symbol();
3
4class DevTools {
5
6 constructor(){
7
8 this.start();
9 this.debug = false;
10 this;
11 }
12
13 log(...params){
14
15 // return unless debug
16 return console.log(...params);
17 }
18
19 refresh(manifest){
20
21 this.manifest = manifest;
22
23 let dirty = {
24 css: [],
25 js: []
26 };
27
28 let urls = Object.values(manifest).map(function(_0) { return _0.url; }).filter(function(_0) { return _0; });
29 let regex = /\.[A-Z\d]{8}\./;
30
31 for (let sheet of iter$__(globalThis.document.styleSheets)){
32
33 let url = sheet.ownerNode.getAttribute('href') || '';
34 let match = urls.find(function(_0) { return _0 && _0.replace(regex,'') == url.replace(regex,''); });
35 if (match && url != match) {
36
37 sheet.ownerNode.href = match;
38 };
39 };
40
41 let scripts = Object.keys(globalThis.IMBA_LOADED || {});
42
43 for (let $2 = 0, $3 = iter$__(scripts), $4 = $3.length; $2 < $4; $2++) {
44 let url = $3[$2];
45 let match = urls.find(function(_0) { return _0 && _0.replace(regex,'') == url.replace(regex,''); });
46 if (match && url != match && urls.indexOf(url) == -1) {
47
48 dirty.js.push([url,match]);
49 };
50 };
51 if (dirty.js.length) {
52
53 globalThis.document.location.reload();
54 };
55 return this;
56 }
57
58 start(){
59 var self = this;
60
61 if (this.socket) { return };
62
63 this.socket = new EventSource("/__hmr__");
64 this.socket.onmessage = function(e) {
65
66 return self.log('sse.onmessage',e);
67 };
68
69 this.socket.addEventListener("paused",function(e) {
70
71 self.log("server paused");
72 return true;
73 });
74
75 this.socket.addEventListener("resumed",function(e) {
76
77 self.log("server resumed");
78 return true;
79 });
80
81 this.socket.addEventListener("reloaded",function(e) {
82
83 self.log("server reloaded");
84 setTimeout(function() {
85 self.socket.close();
86 self.socket = null;
87 return self.start();
88 },200);
89 return true;
90 });
91
92 this.socket.addEventListener("rebuild",function(e) {
93
94 let manifest = JSON.parse(e.data);
95 return self.refresh(manifest);
96 });
97
98 this.socket.addEventListener("init",function(e) {
99
100 let manifest = JSON.parse(e.data);
101 return self.refresh(manifest);
102 });
103
104 this.socket.addEventListener("state",function(e) {
105
106 let json = JSON.parse(e.data);
107 return self.log("server state",json);
108 });
109
110 this.socket.addEventListener("errors",function(e) {
111
112 let json = JSON.parse(e.data);
113 for (let $5 = 0, $6 = iter$__(json), $7 = $6.length; $5 < $7; $5++) {
114 let item = $6[$5];
115 console.error(("error in " + (item.location.file) + ": " + (item.location.lineText) + " (" + (item.text) + ")"));
116 };
117 return;
118 });
119
120 this.socket.addEventListener("reload",function(e) {
121
122 self.log('asked to reload by server');
123 return globalThis.document.location.reload();
124 });
125
126 this.socket.onerror = function(e) {
127 return self.log('hmr disconnected',e);
128 };
129 }
130};
131
132globalThis.imba_devtools = new DevTools;