@jsenv/core 39.14.3 → 40.0.1

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.
Files changed (34) hide show
  1. package/dist/js/directory_listing.js +16 -9
  2. package/dist/js/server_events_client.js +2 -2
  3. package/dist/jsenv_core.js +7220 -11089
  4. package/package.json +22 -19
  5. package/src/build/build.js +122 -93
  6. package/src/build/build_specifier_manager.js +103 -94
  7. package/src/build/build_urls_generator.js +1 -1
  8. package/src/build/{version_mappings_injection.js → mappings_injection.js} +62 -21
  9. package/src/build/start_build_server.js +46 -36
  10. package/src/dev/start_dev_server.js +246 -248
  11. package/src/helpers/watch_source_files.js +50 -36
  12. package/src/kitchen/fetched_content_compliance.js +4 -2
  13. package/src/kitchen/kitchen.js +31 -24
  14. package/src/kitchen/url_graph/references.js +10 -2
  15. package/src/kitchen/url_graph/url_graph.js +3 -0
  16. package/src/kitchen/url_graph/url_graph_visitor.js +3 -0
  17. package/src/plugins/autoreload/jsenv_plugin_autoreload_server.js +29 -16
  18. package/src/plugins/html_syntax_error_fallback/jsenv_plugin_html_syntax_error_fallback.js +1 -1
  19. package/src/plugins/plugin_controller.js +194 -200
  20. package/src/plugins/plugins.js +5 -0
  21. package/src/plugins/protocol_file/client/directory_listing.jsx +5 -0
  22. package/src/plugins/protocol_file/jsenv_plugin_directory_listing.js +92 -67
  23. package/src/plugins/protocol_file/jsenv_plugin_fs_redirection.js +17 -7
  24. package/src/plugins/protocol_file/jsenv_plugin_protocol_file.js +6 -0
  25. package/src/plugins/protocol_http/jsenv_plugin_protocol_http.js +33 -3
  26. package/src/plugins/reference_analysis/html/jsenv_plugin_html_reference_analysis.js +15 -22
  27. package/src/plugins/reference_analysis/js/jsenv_plugin_js_reference_analysis.js +53 -2
  28. package/src/plugins/resolution_node_esm/jsenv_plugin_node_esm_resolution.js +37 -30
  29. package/src/plugins/resolution_node_esm/node_esm_resolver.js +4 -8
  30. package/src/plugins/resolution_web/jsenv_plugin_web_resolution.js +8 -6
  31. package/src/plugins/server_events/client/server_events_client.js +2 -2
  32. package/src/plugins/server_events/jsenv_plugin_server_events.js +18 -16
  33. package/dist/js/ws.js +0 -6863
  34. package/src/helpers/lookup_package_directory.js +0 -9
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { injectJsenvScript, parseHtml, stringifyHtmlAst } from "@jsenv/ast";
7
- import { createServerEventsDispatcher } from "./server_events_dispatcher.js";
7
+ import { ServerEvents } from "@jsenv/server";
8
8
 
9
9
  const serverEventsClientFileUrl = new URL(
10
10
  "./client/server_events_client.js",
@@ -12,8 +12,9 @@ const serverEventsClientFileUrl = new URL(
12
12
  ).href;
13
13
 
14
14
  export const jsenvPluginServerEvents = ({ clientAutoreload }) => {
15
- let serverEventsDispatcher;
16
-
15
+ let serverEvents = new ServerEvents({
16
+ actionOnClientLimitReached: "kick-oldest",
17
+ });
17
18
  const { clientServerEventsConfig } = clientAutoreload;
18
19
  const { logs = true } = clientServerEventsConfig;
19
20
 
@@ -37,9 +38,9 @@ export const jsenvPluginServerEvents = ({ clientAutoreload }) => {
37
38
  if (serverEventNames.length === 0) {
38
39
  return false;
39
40
  }
40
- serverEventsDispatcher = createServerEventsDispatcher();
41
+
41
42
  const onabort = () => {
42
- serverEventsDispatcher.destroy();
43
+ serverEvents.close();
43
44
  };
44
45
  kitchenContext.signal.addEventListener("abort", onabort);
45
46
  for (const serverEventName of Object.keys(allServerEvents)) {
@@ -48,14 +49,14 @@ export const jsenvPluginServerEvents = ({ clientAutoreload }) => {
48
49
  // serverEventsDispatcher variable is safe, we can disable esling warning
49
50
  // eslint-disable-next-line no-loop-func
50
51
  sendServerEvent: (data) => {
51
- if (!serverEventsDispatcher) {
52
+ if (!serverEvents) {
52
53
  // this can happen if a plugin wants to send a server event but
53
54
  // server is closing or the plugin got destroyed but still wants to do things
54
55
  // if plugin code is correctly written it is never supposed to happen
55
56
  // because it means a plugin is still trying to do stuff after being destroyed
56
57
  return;
57
58
  }
58
- serverEventsDispatcher.dispatch({
59
+ serverEvents.sendEventToAllClients({
59
60
  type: serverEventName,
60
61
  data,
61
62
  });
@@ -66,17 +67,10 @@ export const jsenvPluginServerEvents = ({ clientAutoreload }) => {
66
67
  }
67
68
  return () => {
68
69
  kitchenContext.signal.removeEventListener("abort", onabort);
69
- serverEventsDispatcher.destroy();
70
- serverEventsDispatcher = undefined;
70
+ serverEvents.close();
71
+ serverEvents = undefined;
71
72
  };
72
73
  },
73
- serveWebsocket: async ({ websocket, request }) => {
74
- if (request.headers["sec-websocket-protocol"] !== "jsenv") {
75
- return false;
76
- }
77
- serverEventsDispatcher.addWebsocket(websocket, request);
78
- return true;
79
- },
80
74
  transformUrlContent: {
81
75
  html: (urlInfo) => {
82
76
  const htmlAst = parseHtml({
@@ -96,5 +90,13 @@ export const jsenvPluginServerEvents = ({ clientAutoreload }) => {
96
90
  return stringifyHtmlAst(htmlAst);
97
91
  },
98
92
  },
93
+ devServerRoutes: [
94
+ {
95
+ endpoint: "GET /.internal/events.websocket",
96
+ description: `Jsenv dev server emit server events on this endpoint. When a file is saved the "reload" event is sent here.`,
97
+ fetch: serverEvents.fetch,
98
+ declarationSource: import.meta.url,
99
+ },
100
+ ],
99
101
  };
100
102
  };