UNPKG

6.45 kBJavaScriptView Raw
1var imbadevtools = (() => {
2 function iter$__(a) {
3 let v;
4 return a ? (v = a.toIterable) ? v.call(a) : a : [];
5 }
6 var \u03C61 = Symbol.for("#type");
7 var \u03C620 = Symbol.for("#__listeners__");
8 function deserializeData(data, reviver = null) {
9 let objects = {};
10 let reg = /\$\$\d+\$\$/;
11 let lookup = function(value) {
12 return objects[value] || (objects[value] = reviver ? reviver(value) : {});
13 };
14 let parser = function(key, value) {
15 if (typeof value == "string") {
16 if (value[0] == "$" && reg.test(value)) {
17 return lookup(value);
18 }
19 ;
20 } else if (typeof key == "string" && key[0] == "$" && reg.test(key)) {
21 let obj = lookup(key);
22 Object.assign(obj, value);
23 return obj;
24 }
25 ;
26 return value;
27 };
28 let parsed = JSON.parse(data, parser);
29 return parsed;
30 }
31 function patchManifest(prev, curr) {
32 var \u03C67, \u03C66, \u03C611, \u03C618;
33 let origs = {};
34 let diff = {
35 added: [],
36 changed: [],
37 removed: [],
38 all: [],
39 urls: {}
40 };
41 if (prev.assets) {
42 for (let \u03C64 = 0, \u03C65 = iter$__(prev.assets), \u03C68 = \u03C65.length; \u03C64 < \u03C68; \u03C64++) {
43 let item = \u03C65[\u03C64];
44 let ref = item.originalPath || item.path;
45 origs[ref] = item;
46 if (item.url) {
47 (\u03C67 = curr.urls)[\u03C66 = item.url] || (\u03C67[\u03C66] = item);
48 }
49 ;
50 }
51 ;
52 }
53 ;
54 for (let \u03C69 = 0, \u03C610 = iter$__(curr.assets || []), \u03C612 = \u03C610.length; \u03C69 < \u03C612; \u03C69++) {
55 let item = \u03C610[\u03C69];
56 let ref = item.originalPath || item.path;
57 let orig = origs[ref];
58 if (item.url && prev.urls) {
59 prev.urls[item.url] = item;
60 }
61 ;
62 if (orig) {
63 if (orig.hash != item.hash) {
64 orig.invalidated = Date.now();
65 orig.replacedBy = item;
66 item.replaces = orig;
67 diff.changed.push(item);
68 diff.all.push(item);
69 if (orig == prev.main) {
70 diff.main = item;
71 }
72 ;
73 }
74 ;
75 \u03C611 = origs[ref], delete origs[ref], \u03C611;
76 } else {
77 diff.added.push(item);
78 diff.all.push(item);
79 }
80 ;
81 }
82 ;
83 for (let \u03C613 = 0, \u03C614 = Object.keys(origs), \u03C615 = \u03C614.length, path, item; \u03C613 < \u03C615; \u03C613++) {
84 path = \u03C614[\u03C613];
85 item = origs[path];
86 item.removed = Date.now();
87 diff.all.push(item);
88 }
89 ;
90 for (let \u03C616 = 0, \u03C617 = iter$__(diff.all), \u03C619 = \u03C617.length; \u03C616 < \u03C619; \u03C616++) {
91 let item = \u03C617[\u03C616];
92 let typ = diff[\u03C618 = item.type] || (diff[\u03C618] = []);
93 typ.push(item);
94 }
95 ;
96 diff.removed = Object.values(origs);
97 curr.changes = diff;
98 return curr;
99 }
100 function iter$__2(a) {
101 let v;
102 return a ? (v = a.toIterable) ? v.call(a) : a : [];
103 }
104 var doc = globalThis.document;
105 var Manifest = class {
106 constructor() {
107 this.data = {};
108 }
109 get changes() {
110 return this.data.changes || {};
111 }
112 get inputs() {
113 return this.data.inputs;
114 }
115 get outputs() {
116 return this.data.outputs;
117 }
118 get urls() {
119 return this.data.urls;
120 }
121 get main() {
122 return this.data.main;
123 }
124 init(raw) {
125 return this.update(raw);
126 }
127 update(raw) {
128 if (typeof raw == "string") {
129 raw = deserializeData(raw);
130 }
131 ;
132 this.data = patchManifest(this.data, raw);
133 return this.data.changes;
134 }
135 };
136 var DevTools = class {
137 constructor() {
138 this.start();
139 this.manifest = new Manifest({});
140 this.debug = false;
141 this;
142 }
143 log(...params) {
144 if (!this.debug) {
145 return;
146 }
147 ;
148 return console.log(...params);
149 }
150 refresh(changes) {
151 let dirty = {
152 css: [],
153 js: []
154 };
155 for (let sheet of iter$__2(doc.styleSheets)) {
156 let asset;
157 let url = sheet.ownerNode.getAttribute("href");
158 if (asset = this.manifest.urls[url]) {
159 if (asset.replacedBy) {
160 sheet.ownerNode.href = asset.replacedBy.url;
161 }
162 ;
163 }
164 ;
165 }
166 ;
167 for (let el of iter$__2(doc.querySelectorAll("script[src]"))) {
168 let asset1;
169 if (asset1 = this.manifest.urls[el.getAttribute("src")]) {
170 if (asset1.replacedBy) {
171 dirty.js.push(asset1);
172 }
173 ;
174 }
175 ;
176 }
177 ;
178 if (dirty.js.length) {
179 this.log("js changed - reload?", dirty.js);
180 doc.location.reload();
181 }
182 ;
183 return this;
184 }
185 start() {
186 var self = this;
187 if (this.socket) {
188 return;
189 }
190 ;
191 this.socket = new EventSource("/__hmr__");
192 this.socket.onmessage = function(e) {
193 return self.log("sse.onmessage", e);
194 };
195 this.socket.addEventListener("paused", function(e) {
196 self.log("server paused");
197 return true;
198 });
199 this.socket.addEventListener("state", function(e) {
200 let json = JSON.parse(e.data);
201 return self.log("server state", json);
202 });
203 this.socket.addEventListener("init", function(e) {
204 let json = JSON.parse(e.data);
205 self.manifest.init(json);
206 return self.log("hmr init", self.manifest.data);
207 });
208 this.socket.addEventListener("errors", function(e) {
209 let json = JSON.parse(e.data);
210 for (let \u03C612 = 0, \u03C62 = iter$__2(json), \u03C63 = \u03C62.length; \u03C612 < \u03C63; \u03C612++) {
211 let item = \u03C62[\u03C612];
212 console.error("error in " + item.location.file + ": " + item.location.lineText + " (" + item.text + ")");
213 }
214 ;
215 return;
216 });
217 this.socket.addEventListener("manifest", function(e) {
218 let json = JSON.parse(e.data);
219 let changes = self.manifest.update(json);
220 return self.refresh(changes);
221 });
222 this.socket.addEventListener("reload", function(e) {
223 self.log("asked to reload by server");
224 return doc.location.reload();
225 });
226 return this.socket.onerror = function(e) {
227 return self.log("hmr disconnected", e);
228 };
229 }
230 };
231 globalThis.imba_devtools = new DevTools();
232})();