@jsenv/core 27.0.0-alpha.82 → 27.0.0-alpha.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/js/event_source_client.js +208 -4
- package/dist/js/s.js +2 -2
- package/dist/main.js +1430 -615
- package/dist/s.js +2 -2
- package/dist/s.js.map +2 -1
- package/package.json +6 -2
- package/src/build/build.js +5 -8
- package/src/build/build_urls_generator.js +1 -2
- package/src/build/inject_global_version_mappings.js +4 -4
- package/src/build/inject_service_worker_urls.js +2 -2
- package/src/build/resync_ressource_hints.js +17 -18
- package/src/build/start_build_server.js +33 -26
- package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +1 -2
- package/src/dev/plugins/toolbar/client/util/fetching.js +1 -1
- package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -3
- package/src/dev/start_dev_server.js +38 -30
- package/src/execute/runtimes/browsers/from_playwright.js +5 -4
- package/src/execute/runtimes/node/node_process.js +2 -2
- package/src/helpers/command/command.js +73 -0
- package/src/helpers/event_source/event_source.js +197 -0
- package/src/helpers/event_source/sse_service.js +53 -0
- package/src/helpers/worker_reload.js +57 -0
- package/src/omega/compat/runtime_compat.js +2 -1
- package/src/omega/kitchen.js +4 -1
- package/src/omega/server/user_agent.js +2 -1
- package/src/omega/url_graph/sort_by_dependencies.js +27 -0
- package/src/omega/url_graph/url_info_transformations.js +24 -14
- package/src/plugins/autoreload/dev_sse/client/event_source_client.js +1 -1
- package/src/plugins/autoreload/dev_sse/client/reload.js +6 -3
- package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +3 -3
- package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +1 -1
- package/src/plugins/bundling/css/bundle_css.js +4 -4
- package/src/plugins/bundling/js_module/bundle_js_module.js +86 -67
- package/src/plugins/commonjs_globals/jsenv_plugin_commonjs_globals.js +2 -2
- package/src/plugins/file_urls/jsenv_plugin_file_urls.js +4 -5
- package/src/plugins/html_supervisor/jsenv_plugin_html_supervisor.js +62 -74
- package/src/plugins/import_meta_hot/html_hot_dependencies.js +9 -15
- package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +3 -3
- package/src/plugins/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +2 -2
- package/src/plugins/importmap/jsenv_plugin_importmap.js +25 -27
- package/src/plugins/inject_globals/inject_globals.js +4 -4
- package/src/plugins/inline/jsenv_plugin_data_urls.js +1 -1
- package/src/plugins/inline/jsenv_plugin_html_inline_content.js +41 -43
- package/src/plugins/inline/jsenv_plugin_js_inline_content.js +4 -4
- package/src/plugins/minification/css/minify_css.js +1 -1
- package/src/plugins/transpilation/as_js_classic/client/s.js +2 -2
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +2 -4
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +45 -67
- package/src/plugins/transpilation/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +2 -3
- package/src/plugins/transpilation/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +3 -4
- package/src/plugins/transpilation/babel/jsenv_plugin_babel.js +1 -1
- package/src/plugins/transpilation/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +2 -3
- package/src/plugins/transpilation/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +2 -3
- package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +1 -1
- package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +1 -1
- package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +2 -1
- package/src/plugins/url_analysis/css/css_urls.js +2 -3
- package/src/plugins/url_analysis/html/html_urls.js +98 -113
- package/src/plugins/url_analysis/js/js_urls.js +3 -2
- package/src/test/coverage/babel_plugin_instrument.js +82 -0
- package/src/test/coverage/coverage_reporter_html_directory.js +36 -0
- package/src/test/coverage/coverage_reporter_json_file.js +22 -0
- package/src/test/coverage/coverage_reporter_text_log.js +19 -0
- package/src/test/coverage/empty_coverage_factory.js +52 -0
- package/src/test/coverage/file_by_file_coverage.js +25 -0
- package/src/test/coverage/istanbul_coverage_composition.js +28 -0
- package/src/test/coverage/istanbul_coverage_map_from_coverage.js +16 -0
- package/src/test/coverage/list_files_not_covered.js +15 -0
- package/src/test/coverage/missing_coverage.js +41 -0
- package/src/test/coverage/report_to_coverage.js +196 -0
- package/src/test/coverage/v8_and_istanbul.js +37 -0
- package/src/test/coverage/v8_coverage_composition.js +24 -0
- package/src/test/coverage/v8_coverage_from_directory.js +87 -0
- package/src/test/coverage/v8_coverage_to_istanbul.js +99 -0
- package/src/test/execute_plan.js +2 -2
- package/src/test/execute_test_plan.js +3 -3
|
@@ -1,6 +1,210 @@
|
|
|
1
|
-
import { createEventSourceConnection } from "@jsenv/utils/event_source/event_source.js";
|
|
2
1
|
import { urlHotMetas } from "./import_meta_hot.js";
|
|
3
|
-
import {
|
|
2
|
+
import { parseSrcSet, stringifySrcSet } from "@jsenv/ast/src/html/html_src_set.js";
|
|
3
|
+
|
|
4
|
+
/* eslint-env browser */
|
|
5
|
+
const createEventSourceConnection = (eventSourceUrl, events = {}, {
|
|
6
|
+
retryMaxAttempt = Infinity,
|
|
7
|
+
retryAllocatedMs = Infinity,
|
|
8
|
+
lastEventId
|
|
9
|
+
} = {}) => {
|
|
10
|
+
const {
|
|
11
|
+
EventSource
|
|
12
|
+
} = window;
|
|
13
|
+
|
|
14
|
+
if (typeof EventSource !== "function") {
|
|
15
|
+
return () => {};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const eventSourceOrigin = new URL(eventSourceUrl).origin;
|
|
19
|
+
Object.keys(events).forEach(eventName => {
|
|
20
|
+
const eventCallback = events[eventName];
|
|
21
|
+
|
|
22
|
+
events[eventName] = e => {
|
|
23
|
+
if (e.origin === eventSourceOrigin) {
|
|
24
|
+
if (e.lastEventId) {
|
|
25
|
+
lastEventId = e.lastEventId;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
eventCallback(e);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
const status = {
|
|
33
|
+
value: "default",
|
|
34
|
+
goTo: value => {
|
|
35
|
+
if (value === status.value) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
status.value = value;
|
|
40
|
+
status.onchange();
|
|
41
|
+
},
|
|
42
|
+
onchange: () => {}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
let _disconnect = () => {};
|
|
46
|
+
|
|
47
|
+
const attemptConnection = url => {
|
|
48
|
+
const eventSource = new EventSource(url, {
|
|
49
|
+
withCredentials: true
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
_disconnect = () => {
|
|
53
|
+
if (status.value !== "connecting" && status.value !== "connected") {
|
|
54
|
+
console.warn(`disconnect() ignored because connection is ${status.value}`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
eventSource.onerror = undefined;
|
|
59
|
+
eventSource.close();
|
|
60
|
+
Object.keys(events).forEach(eventName => {
|
|
61
|
+
eventSource.removeEventListener(eventName, events[eventName]);
|
|
62
|
+
});
|
|
63
|
+
status.goTo("disconnected");
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
let retryCount = 0;
|
|
67
|
+
let firstRetryMs = Date.now();
|
|
68
|
+
|
|
69
|
+
eventSource.onerror = errorEvent => {
|
|
70
|
+
if (errorEvent.target.readyState === EventSource.CONNECTING) {
|
|
71
|
+
if (retryCount > retryMaxAttempt) {
|
|
72
|
+
console.info(`could not connect after ${retryMaxAttempt} attempt`);
|
|
73
|
+
|
|
74
|
+
_disconnect();
|
|
75
|
+
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (retryCount === 0) {
|
|
80
|
+
firstRetryMs = Date.now();
|
|
81
|
+
} else {
|
|
82
|
+
const allRetryDuration = Date.now() - firstRetryMs;
|
|
83
|
+
|
|
84
|
+
if (retryAllocatedMs && allRetryDuration > retryAllocatedMs) {
|
|
85
|
+
console.info(`could not connect in less than ${retryAllocatedMs} ms`);
|
|
86
|
+
|
|
87
|
+
_disconnect();
|
|
88
|
+
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
retryCount++;
|
|
94
|
+
status.goTo("connecting");
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (errorEvent.target.readyState === EventSource.CLOSED) {
|
|
99
|
+
_disconnect();
|
|
100
|
+
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
eventSource.onopen = () => {
|
|
106
|
+
status.goTo("connected");
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
Object.keys(events).forEach(eventName => {
|
|
110
|
+
eventSource.addEventListener(eventName, events[eventName]);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
if (!events.hasOwnProperty("welcome")) {
|
|
114
|
+
eventSource.addEventListener("welcome", e => {
|
|
115
|
+
if (e.origin === eventSourceOrigin && e.lastEventId) {
|
|
116
|
+
lastEventId = e.lastEventId;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
status.goTo("connecting");
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
let connect = () => {
|
|
125
|
+
attemptConnection(eventSourceUrl);
|
|
126
|
+
|
|
127
|
+
connect = () => {
|
|
128
|
+
attemptConnection(lastEventId ? addLastEventIdIntoUrlSearchParams(eventSourceUrl, lastEventId) : eventSourceUrl);
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const removePageUnloadListener = listenPageUnload(() => {
|
|
133
|
+
if (status.value === "connecting" || status.value === "connected") {
|
|
134
|
+
_disconnect();
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
const destroy = () => {
|
|
139
|
+
removePageUnloadListener();
|
|
140
|
+
|
|
141
|
+
_disconnect();
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
status,
|
|
146
|
+
connect,
|
|
147
|
+
disconnect: () => _disconnect(),
|
|
148
|
+
destroy
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
const addLastEventIdIntoUrlSearchParams = (url, lastEventId) => {
|
|
153
|
+
if (url.indexOf("?") === -1) {
|
|
154
|
+
url += "?";
|
|
155
|
+
} else {
|
|
156
|
+
url += "&";
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return `${url}last-event-id=${encodeURIComponent(lastEventId)}`;
|
|
160
|
+
}; // const listenPageMightFreeze = (callback) => {
|
|
161
|
+
// const removePageHideListener = listenEvent(window, "pagehide", (pageHideEvent) => {
|
|
162
|
+
// if (pageHideEvent.persisted === true) {
|
|
163
|
+
// callback(pageHideEvent)
|
|
164
|
+
// }
|
|
165
|
+
// })
|
|
166
|
+
// return removePageHideListener
|
|
167
|
+
// }
|
|
168
|
+
// const listenPageFreeze = (callback) => {
|
|
169
|
+
// const removeFreezeListener = listenEvent(document, "freeze", (freezeEvent) => {
|
|
170
|
+
// callback(freezeEvent)
|
|
171
|
+
// })
|
|
172
|
+
// return removeFreezeListener
|
|
173
|
+
// }
|
|
174
|
+
// const listenPageIsRestored = (callback) => {
|
|
175
|
+
// const removeResumeListener = listenEvent(document, "resume", (resumeEvent) => {
|
|
176
|
+
// removePageshowListener()
|
|
177
|
+
// callback(resumeEvent)
|
|
178
|
+
// })
|
|
179
|
+
// const removePageshowListener = listenEvent(window, "pageshow", (pageshowEvent) => {
|
|
180
|
+
// if (pageshowEvent.persisted === true) {
|
|
181
|
+
// removePageshowListener()
|
|
182
|
+
// removeResumeListener()
|
|
183
|
+
// callback(pageshowEvent)
|
|
184
|
+
// }
|
|
185
|
+
// })
|
|
186
|
+
// return () => {
|
|
187
|
+
// removeResumeListener()
|
|
188
|
+
// removePageshowListener()
|
|
189
|
+
// }
|
|
190
|
+
// }
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
const listenPageUnload = callback => {
|
|
194
|
+
const removePageHideListener = listenEvent(window, "pagehide", pageHideEvent => {
|
|
195
|
+
if (pageHideEvent.persisted !== true) {
|
|
196
|
+
callback(pageHideEvent);
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
return removePageHideListener;
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
const listenEvent = (emitter, event, callback) => {
|
|
203
|
+
emitter.addEventListener(event, callback);
|
|
204
|
+
return () => {
|
|
205
|
+
emitter.removeEventListener(event, callback);
|
|
206
|
+
};
|
|
207
|
+
};
|
|
4
208
|
|
|
5
209
|
const isAutoreloadEnabled = () => {
|
|
6
210
|
const value = window.localStorage.getItem("autoreload");
|
|
@@ -97,7 +301,7 @@ const reloadDOMNodesUsingUrl = urlToReload => {
|
|
|
97
301
|
const srcset = img.srcset;
|
|
98
302
|
|
|
99
303
|
if (srcset) {
|
|
100
|
-
const srcCandidates =
|
|
304
|
+
const srcCandidates = parseSrcSet(srcset);
|
|
101
305
|
srcCandidates.forEach(srcCandidate => {
|
|
102
306
|
const url = new URL(srcCandidate.specifier, `${window.location.href}`);
|
|
103
307
|
|
|
@@ -108,7 +312,7 @@ const reloadDOMNodesUsingUrl = urlToReload => {
|
|
|
108
312
|
}
|
|
109
313
|
});
|
|
110
314
|
mutations.push(() => {
|
|
111
|
-
img.srcset =
|
|
315
|
+
img.srcset = stringifySrcSet(srcCandidates);
|
|
112
316
|
});
|
|
113
317
|
}
|
|
114
318
|
});
|
package/dist/js/s.js
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
}
|
|
44
44
|
System.register = (deps, declare) => {
|
|
45
45
|
if (!document.currentScript) {
|
|
46
|
-
throw new Error("unexpected call")
|
|
46
|
+
throw new Error("unexpected call to System.register (document.currentScript is undefined)")
|
|
47
47
|
}
|
|
48
48
|
if (document.currentScript.__s__) {
|
|
49
49
|
registerRegistry[document.currentScript.src] = [deps, declare]
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
|
|
170
170
|
System.register = async (deps, declare) => {
|
|
171
171
|
System.register = () => {
|
|
172
|
-
throw new Error("unexpected call")
|
|
172
|
+
throw new Error("unexpected call to System.register (called outside url instantiation)")
|
|
173
173
|
}
|
|
174
174
|
const url = self.location.href
|
|
175
175
|
registerRegistry[url] = [deps, declare]
|