@jsenv/core 27.0.0-alpha.6 → 27.0.0-alpha.62

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 (150) hide show
  1. package/dist/event_source_client.js +549 -0
  2. package/dist/event_source_client.js.map +188 -0
  3. package/dist/html_supervisor_installer.js +1236 -0
  4. package/dist/html_supervisor_installer.js.map +337 -0
  5. package/dist/html_supervisor_setup.js +95 -0
  6. package/dist/html_supervisor_setup.js.map +57 -0
  7. package/dist/import_meta_hot.js +86 -0
  8. package/dist/import_meta_hot.js.map +42 -0
  9. package/main.js +8 -1
  10. package/package.json +36 -29
  11. package/readme.md +6 -14
  12. package/src/build/build.js +961 -559
  13. package/src/build/build_urls_generator.js +48 -23
  14. package/src/build/graph_utils.js +31 -0
  15. package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +33 -15
  16. package/src/build/inject_service_worker_urls.js +79 -0
  17. package/src/build/resync_ressource_hints.js +68 -0
  18. package/src/build/start_build_server.js +200 -0
  19. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +2 -2
  20. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
  21. package/src/dev/start_dev_server.js +150 -34
  22. package/src/execute/execute.js +33 -6
  23. package/src/execute/run.js +19 -56
  24. package/src/execute/runtimes/browsers/from_playwright.js +207 -147
  25. package/src/execute/runtimes/node/controllable_file.mjs +26 -10
  26. package/src/execute/runtimes/node/node_execution_performance.js +67 -0
  27. package/src/execute/runtimes/node/node_process.js +280 -39
  28. package/src/jsenv_root_directory_url.js +1 -0
  29. package/src/omega/{runtime_support/default_runtime_support.js → compat/default_runtime_compat.js} +3 -5
  30. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +66 -4
  31. package/src/omega/compat/runtime_compat.js +50 -0
  32. package/src/omega/errors.js +51 -58
  33. package/src/omega/fetched_content_compliance.js +24 -0
  34. package/src/omega/file_url_converter.js +8 -50
  35. package/src/omega/kitchen.js +475 -308
  36. package/src/omega/omega_server.js +2 -3
  37. package/src/omega/server/file_service.js +57 -26
  38. package/src/omega/server/user_agent.js +4 -2
  39. package/src/omega/url_graph/url_graph_load.js +22 -7
  40. package/src/omega/url_graph/url_graph_report.js +94 -51
  41. package/src/omega/url_graph/url_info_transformations.js +26 -9
  42. package/src/omega/url_graph.js +80 -16
  43. package/src/omega/web_workers.js +42 -0
  44. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  45. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
  46. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
  47. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  48. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +46 -0
  49. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
  50. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +27 -0
  51. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  52. package/src/plugins/bundling/css/bundle_css.js +140 -0
  53. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  54. package/src/plugins/bundling/js_module/bundle_js_module.js +309 -0
  55. package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
  56. package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
  57. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +54 -41
  58. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +66 -0
  59. package/src/{omega/core_plugins → plugins}/filesystem_magic/jsenv_plugin_filesystem_magic.js +8 -5
  60. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  61. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  62. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +242 -0
  63. package/src/plugins/html_supervisor/client/html_supervisor_setup.js +79 -0
  64. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  65. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  66. package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +83 -61
  67. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
  68. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  69. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  70. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +7 -4
  71. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +105 -0
  72. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +33 -8
  73. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  74. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  75. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +39 -33
  76. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +67 -0
  77. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  78. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +18 -14
  79. package/src/{omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js → plugins/inline/jsenv_plugin_html_inline_content.js} +65 -44
  80. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  81. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +6 -6
  82. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +297 -0
  83. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  84. package/src/plugins/minification/css/minify_css.js +9 -0
  85. package/src/plugins/minification/html/minify_html.js +15 -0
  86. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  87. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  88. package/src/plugins/minification/json/minify_json.js +8 -0
  89. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +146 -0
  90. package/src/{omega → plugins}/plugin_controller.js +42 -11
  91. package/src/plugins/plugins.js +92 -0
  92. package/src/plugins/transpilation/as_js_classic/client/s.js +874 -0
  93. package/src/plugins/transpilation/as_js_classic/client/s.js.md +1 -0
  94. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  95. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  96. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +199 -0
  97. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_script_type_module_as_classic.js +270 -0
  98. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_workers_type_module_as_classic.js +55 -0
  99. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
  100. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  101. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +0 -0
  102. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +12 -19
  103. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  104. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +45 -27
  105. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +30 -6
  106. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/.eslintrc.cjs +0 -0
  107. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  108. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
  109. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  110. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  111. package/src/plugins/transpilation/fetch_original_url_info.js +30 -0
  112. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +181 -0
  113. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +80 -0
  114. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +44 -0
  115. package/src/plugins/url_analysis/css/css_urls.js +49 -0
  116. package/src/plugins/url_analysis/html/html_urls.js +269 -0
  117. package/src/plugins/url_analysis/js/js_urls.js +67 -0
  118. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +18 -0
  119. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +17 -0
  120. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +12 -5
  121. package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
  122. package/src/test/execute_plan.js +38 -19
  123. package/src/test/execute_test_plan.js +25 -8
  124. package/src/test/logs_file_execution.js +10 -12
  125. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -225
  126. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  127. package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
  128. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
  129. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  130. package/src/execute/runtimes/node/controlled_process.js +0 -316
  131. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  132. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
  133. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
  134. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
  135. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  136. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  137. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  138. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  139. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -210
  140. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  141. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
  142. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
  143. package/src/omega/core_plugins.js +0 -39
  144. package/src/omega/runtime_support/runtime_support.js +0 -20
  145. package/src/omega/url_graph/url_graph_sort.js +0 -29
  146. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  147. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  148. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  149. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  150. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -0,0 +1,78 @@
1
+ import { minifyHtml } from "./html/minify_html.js"
2
+ import { minifyCss } from "./css/minify_css.js"
3
+ import { minifyJs } from "./js/minify_js.js"
4
+ import { minifyJson } from "./json/minify_json.js"
5
+
6
+ export const jsenvPluginMinification = (minification) => {
7
+ if (typeof minification === "boolean") {
8
+ minification = {
9
+ html: minification,
10
+ css: minification,
11
+ js_classic: minification,
12
+ js_module: minification,
13
+ json: minification,
14
+ svg: minification,
15
+ }
16
+ } else if (typeof minification !== "object") {
17
+ throw new Error(
18
+ `minification must be a boolean or an object, got ${minification}`,
19
+ )
20
+ }
21
+ Object.keys(minification).forEach((key) => {
22
+ if (minification[key] === true) minification[key] = {}
23
+ })
24
+ const htmlOptimizer = minification.html
25
+ ? (urlInfo, context) =>
26
+ minifyHtml({
27
+ htmlUrlInfo: urlInfo,
28
+ context,
29
+ options: minification.html,
30
+ })
31
+ : null
32
+ const jsonOptimizer = minification.json
33
+ ? (urlInfo, context) =>
34
+ minifyJson({
35
+ jsonUrlInfo: urlInfo,
36
+ context,
37
+ options: minification.json,
38
+ })
39
+ : null
40
+
41
+ return {
42
+ name: "jsenv:minification",
43
+ appliesDuring: {
44
+ build: true,
45
+ },
46
+ optimizeUrlContent: {
47
+ html: htmlOptimizer,
48
+ svg: htmlOptimizer,
49
+ css: minification.css
50
+ ? (urlInfo, context) =>
51
+ minifyCss({
52
+ cssUrlInfo: urlInfo,
53
+ context,
54
+ options: minification.css,
55
+ })
56
+ : null,
57
+ js_classic: minification.js_classic
58
+ ? (urlInfo, context) =>
59
+ minifyJs({
60
+ jsUrlInfo: urlInfo,
61
+ context,
62
+ options: minification.js_classic,
63
+ })
64
+ : null,
65
+ js_module: minification.js_module
66
+ ? (urlInfo, context) =>
67
+ minifyJs({
68
+ jsUrlInfo: urlInfo,
69
+ context,
70
+ options: minification.js_module,
71
+ })
72
+ : null,
73
+ json: jsonOptimizer,
74
+ importmap: jsonOptimizer,
75
+ webmanifest: jsonOptimizer,
76
+ },
77
+ }
78
+ }
@@ -0,0 +1,8 @@
1
+ export const minifyJson = ({ jsonUrlInfo }) => {
2
+ const { content } = jsonUrlInfo
3
+ if (content.startsWith("{\n")) {
4
+ const jsonWithoutWhitespaces = JSON.stringify(JSON.parse(content))
5
+ return jsonWithoutWhitespaces
6
+ }
7
+ return null
8
+ }
@@ -0,0 +1,146 @@
1
+ /*
2
+ * - should I restore eventual search params lost during node esm resolution
3
+ * - what about symlinks?
4
+ * It feels like I should apply symlink (when we don't want to preserve them)
5
+ * once a file:/// url is found, regardless
6
+ * if that comes from node resolution or anything else (not even magic resolution)
7
+ * it should likely be an other plugin happening after the others
8
+ */
9
+
10
+ import { registerFileLifecycle } from "@jsenv/filesystem"
11
+
12
+ import {
13
+ applyNodeEsmResolution,
14
+ defaultLookupPackageScope,
15
+ defaultReadPackageJson,
16
+ } from "@jsenv/node-esm-resolution"
17
+
18
+ export const jsenvPluginNodeEsmResolution = ({
19
+ rootDirectoryUrl,
20
+ // https://nodejs.org/api/esm.html#resolver-algorithm-specification
21
+ packageConditions = ["browser", "import"],
22
+ filesInvalidatingCache = ["package.json", "package-lock.json"],
23
+ }) => {
24
+ const packageScopesCache = new Map()
25
+ const lookupPackageScope = (url) => {
26
+ const fromCache = packageScopesCache.get(url)
27
+ if (fromCache) {
28
+ return fromCache
29
+ }
30
+ const packageScope = defaultLookupPackageScope(url)
31
+ packageScopesCache.set(url, packageScope)
32
+ return packageScope
33
+ }
34
+ const packageJsonsCache = new Map()
35
+ const readPackageJson = (url) => {
36
+ const fromCache = packageJsonsCache.get(url)
37
+ if (fromCache) {
38
+ return fromCache
39
+ }
40
+ const packageJson = defaultReadPackageJson(url)
41
+ packageJsonsCache.set(url, packageJson)
42
+ return packageJson
43
+ }
44
+
45
+ const unregisters = []
46
+ filesInvalidatingCache.forEach((file) => {
47
+ const unregister = registerFileLifecycle(new URL(file, rootDirectoryUrl), {
48
+ added: () => {
49
+ packageScopesCache.clear()
50
+ packageJsonsCache.clear()
51
+ },
52
+ updated: () => {
53
+ packageScopesCache.clear()
54
+ packageJsonsCache.clear()
55
+ },
56
+ removed: () => {
57
+ packageScopesCache.clear()
58
+ packageJsonsCache.clear()
59
+ },
60
+ keepProcessAlive: false,
61
+ })
62
+ unregisters.push(unregister)
63
+ })
64
+
65
+ return [
66
+ jsenvPluginNodeEsmResolver({
67
+ packageConditions,
68
+ lookupPackageScope,
69
+ readPackageJson,
70
+ }),
71
+ jsenvPluginNodeModulesVersionInUrls({
72
+ lookupPackageScope,
73
+ readPackageJson,
74
+ }),
75
+ ]
76
+ }
77
+
78
+ const jsenvPluginNodeEsmResolver = ({
79
+ packageConditions,
80
+ lookupPackageScope,
81
+ readPackageJson,
82
+ }) => {
83
+ return {
84
+ name: "jsenv:node_esm_resolve",
85
+ appliesDuring: "*",
86
+ resolveUrl: {
87
+ js_import_export: (reference) => {
88
+ const { parentUrl, specifier } = reference
89
+ const { url } = applyNodeEsmResolution({
90
+ conditions: packageConditions,
91
+ parentUrl,
92
+ specifier,
93
+ lookupPackageScope,
94
+ readPackageJson,
95
+ })
96
+ return url
97
+ },
98
+ },
99
+ fetchUrlContent: (urlInfo) => {
100
+ if (urlInfo.url.startsWith("file:///@ignore/")) {
101
+ return {
102
+ content: "export default {}",
103
+ }
104
+ }
105
+ return null
106
+ },
107
+ }
108
+ }
109
+
110
+ const jsenvPluginNodeModulesVersionInUrls = ({
111
+ lookupPackageScope,
112
+ readPackageJson,
113
+ }) => {
114
+ return {
115
+ name: "jsenv:node_modules_version_in_urls",
116
+ appliesDuring: {
117
+ dev: true,
118
+ test: true,
119
+ },
120
+ transformUrlSearchParams: (reference, context) => {
121
+ if (!reference.url.startsWith("file:")) {
122
+ return null
123
+ }
124
+ // without this check a file inside a project without package.json
125
+ // could be considered as a node module if there is a ancestor package.json
126
+ // but we want to version only node modules
127
+ if (!reference.url.includes("/node_modules/")) {
128
+ return null
129
+ }
130
+ if (reference.searchParams.has("v")) {
131
+ return null
132
+ }
133
+ const packageUrl = lookupPackageScope(reference.url)
134
+ if (!packageUrl) {
135
+ return null
136
+ }
137
+ if (packageUrl === context.rootDirectoryUrl) {
138
+ return null
139
+ }
140
+ const packageVersion = readPackageJson(packageUrl).version
141
+ return {
142
+ v: packageVersion,
143
+ }
144
+ },
145
+ }
146
+ }
@@ -1,14 +1,16 @@
1
+ import { timeStart } from "@jsenv/server"
2
+
1
3
  export const createPluginController = ({
2
4
  plugins,
3
5
  scenario,
4
6
  hooks = [
5
- "resolve",
6
- "normalize",
7
- "load",
8
- "transform",
9
- "transformReferencedUrl",
10
- "formatReferencedUrl",
11
- "finalize",
7
+ "resolveUrl",
8
+ "redirectUrl",
9
+ "fetchUrlContent",
10
+ "transformUrlContent",
11
+ "transformUrlSearchParams",
12
+ "formatUrl",
13
+ "finalizeUrlContent",
12
14
  "cooked",
13
15
  "destroy",
14
16
  ],
@@ -47,7 +49,13 @@ export const createPluginController = ({
47
49
  }
48
50
  currentPlugin = hook.plugin
49
51
  currentHookName = hook.hookName
52
+ const timeEnd = timeStart(
53
+ `${currentHookName}-${currentPlugin.name.replace("jsenv:", "")}`,
54
+ )
50
55
  let valueReturned = hookFn(info, context)
56
+ if (info.timing) {
57
+ Object.assign(info.timing, timeEnd())
58
+ }
51
59
  valueReturned = assertAndNormalizeReturnValue(hook.hookName, valueReturned)
52
60
  currentPlugin = null
53
61
  currentHookName = null
@@ -60,7 +68,13 @@ export const createPluginController = ({
60
68
  }
61
69
  currentPlugin = hook.plugin
62
70
  currentHookName = hook.hookName
71
+ const timeEnd = timeStart(
72
+ `${currentHookName}-${currentPlugin.name.replace("jsenv:", "")}`,
73
+ )
63
74
  let valueReturned = await hookFn(info, context)
75
+ if (info.timing) {
76
+ Object.assign(info.timing, timeEnd())
77
+ }
64
78
  valueReturned = assertAndNormalizeReturnValue(hook.hookName, valueReturned)
65
79
  currentPlugin = null
66
80
  currentHookName = null
@@ -99,6 +113,9 @@ export const createPluginController = ({
99
113
  }
100
114
  const callAsyncHooksUntil = (hookName, info, context) => {
101
115
  const hooks = hookGroups[hookName]
116
+ if (hooks.length === 0) {
117
+ return null
118
+ }
102
119
  return new Promise((resolve, reject) => {
103
120
  const visit = (index) => {
104
121
  if (index >= hooks.length) {
@@ -145,12 +162,18 @@ const flattenAndFilterPlugins = (pluginsRaw, { scenario }) => {
145
162
  const { appliesDuring } = pluginEntry
146
163
  if (appliesDuring === undefined) {
147
164
  console.warn(`"appliesDuring" is undefined on ${pluginEntry.name}`)
165
+ return
148
166
  }
149
167
  if (appliesDuring === "*") {
150
168
  plugins.push(pluginEntry)
151
169
  return
152
170
  }
153
- if (appliesDuring && appliesDuring[scenario]) {
171
+ if (typeof appliesDuring !== "object") {
172
+ throw new Error(
173
+ `"appliesDuring" must be an object or "*", got ${appliesDuring}`,
174
+ )
175
+ }
176
+ if (appliesDuring[scenario]) {
154
177
  plugins.push(pluginEntry)
155
178
  return
156
179
  }
@@ -203,7 +226,7 @@ const assertAndNormalizeReturnValue = (hookName, returnValue) => {
203
226
  const returnValueAssertions = [
204
227
  {
205
228
  name: "url_assertion",
206
- appliesTo: ["resolve", "redirect"],
229
+ appliesTo: ["resolveUrl", "redirectUrl"],
207
230
  assertion: (valueReturned) => {
208
231
  if (valueReturned instanceof URL) {
209
232
  return valueReturned.href
@@ -218,13 +241,21 @@ const returnValueAssertions = [
218
241
  },
219
242
  {
220
243
  name: "content_assertion",
221
- appliesTo: ["load", "transform", "finalize"],
244
+ appliesTo: [
245
+ "fetchUrlContent",
246
+ "transformUrlContent",
247
+ "finalizeUrlContent",
248
+ "optimizeUrlContent",
249
+ ],
222
250
  assertion: (valueReturned) => {
223
251
  if (typeof valueReturned === "string" || Buffer.isBuffer(valueReturned)) {
224
252
  return { content: valueReturned }
225
253
  }
226
254
  if (typeof valueReturned === "object") {
227
- const { content } = valueReturned
255
+ const { external, content } = valueReturned
256
+ if (external) {
257
+ return undefined
258
+ }
228
259
  if (typeof content !== "string" && !Buffer.isBuffer(content)) {
229
260
  throw new Error(
230
261
  `Unexpected "content" returned by plugin: it must be a string or a buffer; got ${content}`,
@@ -0,0 +1,92 @@
1
+ import { jsenvPluginUrlAnalysis } from "../plugins/url_analysis/jsenv_plugin_url_analysis.js"
2
+ import { jsenvPluginLeadingSlash } from "./leading_slash/jsenv_plugin_leading_slash.js"
3
+ import { jsenvPluginImportmap } from "./importmap/jsenv_plugin_importmap.js"
4
+ import { jsenvPluginUrlResolution } from "./url_resolution/jsenv_plugin_url_resolution.js"
5
+ import { jsenvPluginNodeEsmResolution } from "./node_esm_resolution/jsenv_plugin_node_esm_resolution.js"
6
+ import { jsenvPluginUrlVersion } from "./url_version/jsenv_plugin_url_version.js"
7
+ import { jsenvPluginFileUrls } from "./file_urls/jsenv_plugin_file_urls.js"
8
+ import { jsenvPluginHttpUrls } from "./http_urls/jsenv_plugin_http_urls.js"
9
+ import { jsenvPluginFileSystemMagic } from "./filesystem_magic/jsenv_plugin_filesystem_magic.js"
10
+ import { jsenvPluginInline } from "./inline/jsenv_plugin_inline.js"
11
+ import { jsenvPluginHtmlSupervisor } from "./html_supervisor/jsenv_plugin_html_supervisor.js"
12
+ import { jsenvPluginCommonJsGlobals } from "./commonjs_globals/jsenv_plugin_commonjs_globals.js"
13
+ import { jsenvPluginImportMetaScenarios } from "./import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js"
14
+ import { jsenvPluginInjectGlobals } from "./inject_globals/jsenv_plugin_inject_globals.js"
15
+ import { jsenvPluginTranspilation } from "./transpilation/jsenv_plugin_transpilation.js"
16
+ import { jsenvPluginBundling } from "./bundling/jsenv_plugin_bundling.js"
17
+ import { jsenvPluginMinification } from "./minification/jsenv_plugin_minification.js"
18
+ import { jsenvPluginImportMetaHot } from "./import_meta_hot/jsenv_plugin_import_meta_hot.js"
19
+ import { jsenvPluginAutoreload } from "./autoreload/jsenv_plugin_autoreload.js"
20
+ import { jsenvPluginCacheControl } from "./cache_control/jsenv_plugin_cache_control.js"
21
+
22
+ export const getCorePlugins = ({
23
+ rootDirectoryUrl,
24
+ urlGraph,
25
+ scenario,
26
+
27
+ htmlSupervisor,
28
+ nodeEsmResolution,
29
+ fileSystemMagicResolution,
30
+ injectedGlobals,
31
+ transpilation = true,
32
+ minification = false,
33
+ bundling = false,
34
+
35
+ clientAutoreload = false,
36
+ clientFileChangeCallbackList,
37
+ clientFilesPruneCallbackList,
38
+ } = {}) => {
39
+ if (htmlSupervisor === true) {
40
+ htmlSupervisor = {}
41
+ }
42
+ if (nodeEsmResolution === true) {
43
+ nodeEsmResolution = {}
44
+ }
45
+ return [
46
+ jsenvPluginUrlAnalysis(),
47
+ jsenvPluginTranspilation(transpilation),
48
+ ...(htmlSupervisor
49
+ ? [
50
+ jsenvPluginHtmlSupervisor({
51
+ rootDirectoryUrl,
52
+ ...htmlSupervisor,
53
+ }),
54
+ ]
55
+ : []), // before inline as it turns inline <script> into <script src>
56
+ jsenvPluginInline(), // before "file urls" to resolve and load inline urls
57
+ jsenvPluginImportmap(), // before node esm to handle bare specifiers before node esm
58
+ jsenvPluginFileUrls(),
59
+ jsenvPluginHttpUrls(),
60
+ jsenvPluginLeadingSlash(),
61
+ // before url resolution to handle "js_import_export" resolution
62
+ jsenvPluginNodeEsmResolution({
63
+ rootDirectoryUrl,
64
+ ...nodeEsmResolution,
65
+ }),
66
+ jsenvPluginUrlResolution(),
67
+ jsenvPluginFileSystemMagic(fileSystemMagicResolution),
68
+ jsenvPluginUrlVersion(),
69
+ jsenvPluginInjectGlobals(injectedGlobals),
70
+ jsenvPluginCommonJsGlobals(),
71
+ jsenvPluginImportMetaScenarios(),
72
+
73
+ jsenvPluginBundling(bundling),
74
+ jsenvPluginMinification(minification),
75
+
76
+ jsenvPluginImportMetaHot({
77
+ rootDirectoryUrl,
78
+ }),
79
+ ...(clientAutoreload
80
+ ? [
81
+ jsenvPluginAutoreload({
82
+ rootDirectoryUrl,
83
+ urlGraph,
84
+ scenario,
85
+ clientFileChangeCallbackList,
86
+ clientFilesPruneCallbackList,
87
+ }),
88
+ ]
89
+ : []),
90
+ jsenvPluginCacheControl(),
91
+ ]
92
+ }