@jsenv/core 27.0.0-alpha.10 → 27.0.0-alpha.13

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 (116) hide show
  1. package/main.js +4 -0
  2. package/package.json +13 -7
  3. package/readme.md +4 -12
  4. package/src/build/build.js +438 -387
  5. package/src/build/build_urls_generator.js +23 -20
  6. package/src/build/graph_utils.js +31 -0
  7. package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +31 -14
  8. package/src/build/inject_service_worker_urls.js +66 -12
  9. package/src/build/resync_ressource_hints.js +83 -0
  10. package/src/dev/plugins/autoreload/babel_plugin_metadata_import_meta_hot.js +1 -1
  11. package/src/dev/plugins/autoreload/client/import_meta_hot.js +3 -1
  12. package/src/dev/plugins/autoreload/html_hot_dependencies.js +2 -2
  13. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +61 -51
  14. package/src/dev/plugins/autoreload/sse_service.js +23 -3
  15. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +2 -2
  16. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
  17. package/src/dev/start_dev_server.js +10 -5
  18. package/src/execute/execute.js +10 -4
  19. package/src/execute/run.js +17 -54
  20. package/src/execute/runtimes/browsers/from_playwright.js +167 -146
  21. package/src/execute/runtimes/node/node_process.js +281 -37
  22. package/src/omega/{runtime_support/default_runtime_support.js → compat/default_runtime_compat.js} +3 -5
  23. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
  24. package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +14 -16
  25. package/src/omega/errors.js +51 -58
  26. package/src/omega/fetched_content_compliance.js +24 -0
  27. package/src/omega/kitchen.js +396 -280
  28. package/src/omega/server/file_service.js +9 -11
  29. package/src/omega/url_graph/url_graph_load.js +13 -7
  30. package/src/omega/url_graph/url_graph_report.js +7 -5
  31. package/src/omega/url_graph.js +22 -10
  32. package/src/omega/web_workers.js +42 -0
  33. package/src/plugins/bundling/css/bundle_css.js +17 -0
  34. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  35. package/src/{build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js → plugins/bundling/js_module/bundle_js_module.js} +100 -75
  36. package/src/plugins/bundling/jsenv_plugin_bundling.js +51 -0
  37. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +48 -41
  38. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +66 -0
  39. package/src/{omega/core_plugins → plugins}/filesystem_magic/jsenv_plugin_filesystem_magic.js +7 -4
  40. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  41. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  42. package/src/{omega/core_plugins → plugins}/html_supervisor/client/html_supervisor_installer.js +3 -2
  43. package/src/{omega/core_plugins → plugins}/html_supervisor/client/html_supervisor_setup.js +0 -0
  44. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  45. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  46. package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +38 -46
  47. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
  48. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +26 -8
  49. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  50. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  51. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +37 -31
  52. package/src/{omega/core_plugins → plugins}/inject_globals/jsenv_plugin_inject_globals.js +5 -7
  53. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  54. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +18 -14
  55. package/src/{omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js → plugins/inline/jsenv_plugin_html_inline_content.js} +61 -40
  56. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  57. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +6 -6
  58. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +263 -0
  59. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  60. package/src/plugins/minification/css/minify_css.js +9 -0
  61. package/src/plugins/minification/html/minify_html.js +15 -0
  62. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  63. package/src/plugins/minification/jsenv_plugin_minification.js +77 -0
  64. package/src/plugins/minification/json/minify_json.js +8 -0
  65. package/src/{omega/core_plugins → plugins}/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +15 -15
  66. package/src/{omega → plugins}/plugin_controller.js +18 -10
  67. package/src/plugins/plugins.js +50 -0
  68. package/src/plugins/transpilation/as_js_classic/client/s.js +808 -0
  69. package/src/plugins/transpilation/as_js_classic/client/s.js.md +1 -0
  70. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  71. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  72. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +178 -0
  73. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_script_type_module_as_classic.js +156 -0
  74. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_top_level_await.js +37 -0
  75. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_workers_type_module_as_classic.js +133 -0
  76. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
  77. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  78. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +0 -0
  79. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +3 -21
  80. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  81. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +29 -27
  82. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +0 -0
  83. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/.eslintrc.cjs +0 -0
  84. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  85. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
  86. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  87. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  88. package/src/{omega/core_plugins → plugins/transpilation}/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -0
  89. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +243 -0
  90. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +40 -0
  91. package/src/plugins/url_references/css/css_urls.js +49 -0
  92. package/src/plugins/url_references/html/html_urls.js +273 -0
  93. package/src/plugins/url_references/js/js_urls.js +170 -0
  94. package/src/plugins/url_references/jsenv_plugin_url_references.js +18 -0
  95. package/src/plugins/url_references/webmanifest/webmanifest_urls.js +17 -0
  96. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +12 -5
  97. package/src/{omega/core_plugins → plugins}/url_version/jsenv_plugin_url_version.js +8 -8
  98. package/src/preview/preview.js +3 -0
  99. package/src/test/execute_plan.js +18 -11
  100. package/src/test/execute_test_plan.js +5 -6
  101. package/src/test/logs_file_execution.js +8 -7
  102. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  103. package/src/execute/runtimes/node/controlled_process.js +0 -316
  104. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  105. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  106. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  107. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  108. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  109. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
  110. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  111. package/src/omega/core_plugins.js +0 -42
  112. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  113. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  114. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  115. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  116. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -0,0 +1,77 @@
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: minification,
12
+ json: minification,
13
+ svg: minification,
14
+ }
15
+ } else if (typeof minification !== "object") {
16
+ throw new Error(
17
+ `minification must be a boolean or an object, got ${minification}`,
18
+ )
19
+ }
20
+ Object.keys(minification).forEach((key) => {
21
+ if (minification[key] === true) minification[key] = {}
22
+ })
23
+ const htmlOptimizer = minification.html
24
+ ? (urlInfo, context) =>
25
+ minifyHtml({
26
+ htmlUrlInfo: urlInfo,
27
+ context,
28
+ options: minification.html,
29
+ })
30
+ : null
31
+ const jsonOptimizer = minification.json
32
+ ? (urlInfo, context) =>
33
+ minifyJson({
34
+ jsonUrlInfo: urlInfo,
35
+ context,
36
+ options: minification.json,
37
+ })
38
+ : null
39
+
40
+ return {
41
+ name: "jsenv:minification",
42
+ appliesDuring: {
43
+ build: true,
44
+ },
45
+ optimizeUrlContent: {
46
+ html: htmlOptimizer,
47
+ svg: htmlOptimizer,
48
+ css: minification.css
49
+ ? (urlInfo, context) =>
50
+ minifyCss({
51
+ cssUrlInfo: urlInfo,
52
+ context,
53
+ options: minification.css,
54
+ })
55
+ : null,
56
+ js_classic: minification.js_classic
57
+ ? (urlInfo, context) =>
58
+ minifyJs({
59
+ jsUrlInfo: urlInfo,
60
+ context,
61
+ options: minification.js_classic,
62
+ })
63
+ : null,
64
+ js_module: minification.js_module
65
+ ? (urlInfo, context) =>
66
+ minifyJs({
67
+ jsUrlInfo: urlInfo,
68
+ context,
69
+ options: minification.js_module,
70
+ })
71
+ : null,
72
+ json: jsonOptimizer,
73
+ importmap: jsonOptimizer,
74
+ webmanifest: jsonOptimizer,
75
+ },
76
+ }
77
+ }
@@ -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
+ }
@@ -20,18 +20,18 @@ export const jsenvPluginNodeEsmResolution = ({
20
20
  const nodeEsmResolution = {
21
21
  name: "jsenv:node_esm_resolve",
22
22
  appliesDuring: "*",
23
- resolve: {
24
- js_import_export: ({ parentUrl, specifier }) => {
23
+ resolveUrl: {
24
+ js_import_export: (reference) => {
25
25
  const { url } = applyNodeEsmResolution({
26
26
  conditions: packageConditions,
27
- parentUrl,
28
- specifier,
27
+ parentUrl: reference.parentUrl,
28
+ specifier: reference.specifier,
29
29
  })
30
30
  return url
31
31
  },
32
32
  },
33
- load: ({ url }) => {
34
- if (url.startsWith("file:///@ignore/")) {
33
+ fetchUrlContent: (urlInfo) => {
34
+ if (urlInfo.url.startsWith("file:///@ignore/")) {
35
35
  return {
36
36
  content: "export default {}",
37
37
  }
@@ -46,30 +46,30 @@ export const jsenvPluginNodeEsmResolution = ({
46
46
  dev: true,
47
47
  test: true,
48
48
  },
49
- transformReferencedUrl: ({ url }, { rootDirectoryUrl }) => {
50
- if (!url.startsWith("file:")) {
49
+ transformUrlSearchParams: (reference, context) => {
50
+ if (!reference.url.startsWith("file:")) {
51
51
  return null
52
52
  }
53
53
  // without this check a file inside a project without package.json
54
54
  // could be considered as a node module if there is a ancestor package.json
55
55
  // but we want to version only node modules
56
- if (!url.includes("/node_modules/")) {
56
+ if (!reference.url.includes("/node_modules/")) {
57
57
  return null
58
58
  }
59
- const urlObject = new URL(url)
60
- if (urlObject.searchParams.has("v")) {
59
+ if (reference.searchParams.has("v")) {
61
60
  return null
62
61
  }
63
- const packageUrl = lookupPackageScope(url)
62
+ const packageUrl = lookupPackageScope(reference.url)
64
63
  if (!packageUrl) {
65
64
  return null
66
65
  }
67
- if (packageUrl === rootDirectoryUrl) {
66
+ if (packageUrl === context.rootDirectoryUrl) {
68
67
  return null
69
68
  }
70
69
  const packageVersion = readPackageJson(packageUrl).version
71
- urlObject.searchParams.set("v", packageVersion)
72
- return urlObject.href
70
+ return {
71
+ v: packageVersion,
72
+ }
73
73
  },
74
74
  }
75
75
 
@@ -2,13 +2,13 @@ export const createPluginController = ({
2
2
  plugins,
3
3
  scenario,
4
4
  hooks = [
5
- "resolve",
6
- "normalize",
7
- "load",
8
- "transform",
9
- "transformReferencedUrl",
10
- "formatReferencedUrl",
11
- "finalize",
5
+ "resolveUrl",
6
+ "normalizeUrl",
7
+ "fetchUrlContent",
8
+ "transformUrlContent",
9
+ "transformUrlSearchParams",
10
+ "formatUrl",
11
+ "finalizeUrlContent",
12
12
  "cooked",
13
13
  "destroy",
14
14
  ],
@@ -203,7 +203,7 @@ const assertAndNormalizeReturnValue = (hookName, returnValue) => {
203
203
  const returnValueAssertions = [
204
204
  {
205
205
  name: "url_assertion",
206
- appliesTo: ["resolve", "redirect"],
206
+ appliesTo: ["resolveUrl", "normalizeUrl"],
207
207
  assertion: (valueReturned) => {
208
208
  if (valueReturned instanceof URL) {
209
209
  return valueReturned.href
@@ -218,13 +218,21 @@ const returnValueAssertions = [
218
218
  },
219
219
  {
220
220
  name: "content_assertion",
221
- appliesTo: ["load", "transform", "finalize"],
221
+ appliesTo: [
222
+ "fetchUrlContent",
223
+ "transformUrlContent",
224
+ "finalizeUrlContent",
225
+ "optimizeUrlContent",
226
+ ],
222
227
  assertion: (valueReturned) => {
223
228
  if (typeof valueReturned === "string" || Buffer.isBuffer(valueReturned)) {
224
229
  return { content: valueReturned }
225
230
  }
226
231
  if (typeof valueReturned === "object") {
227
- const { content } = valueReturned
232
+ const { external, content } = valueReturned
233
+ if (external) {
234
+ return undefined
235
+ }
228
236
  if (typeof content !== "string" && !Buffer.isBuffer(content)) {
229
237
  throw new Error(
230
238
  `Unexpected "content" returned by plugin: it must be a string or a buffer; got ${content}`,
@@ -0,0 +1,50 @@
1
+ import { jsenvPluginLeadingSlash } from "./leading_slash/jsenv_plugin_leading_slash.js"
2
+ import { jsenvPluginImportmap } from "./importmap/jsenv_plugin_importmap.js"
3
+ import { jsenvPluginUrlResolution } from "./url_resolution/jsenv_plugin_url_resolution.js"
4
+ import { jsenvPluginNodeEsmResolution } from "./node_esm_resolution/jsenv_plugin_node_esm_resolution.js"
5
+ import { jsenvPluginUrlVersion } from "./url_version/jsenv_plugin_url_version.js"
6
+ import { jsenvPluginFileUrls } from "./file_urls/jsenv_plugin_file_urls.js"
7
+ import { jsenvPluginHttpUrls } from "./http_urls/jsenv_plugin_http_urls.js"
8
+ import { jsenvPluginFileSystemMagic } from "./filesystem_magic/jsenv_plugin_filesystem_magic.js"
9
+ import { jsenvPluginInline } from "./inline/jsenv_plugin_inline.js"
10
+ import { jsenvPluginHtmlSupervisor } from "./html_supervisor/jsenv_plugin_html_supervisor.js"
11
+ import { jsenvPluginCommonJsGlobals } from "./commonjs_globals/jsenv_plugin_commonjs_globals.js"
12
+ import { jsenvPluginImportMetaScenarios } from "./import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js"
13
+ import { jsenvPluginInjectGlobals } from "./inject_globals/jsenv_plugin_inject_globals.js"
14
+ import { jsenvPluginTranspilation } from "./transpilation/jsenv_plugin_transpilation.js"
15
+ import { jsenvPluginBundling } from "./bundling/jsenv_plugin_bundling.js"
16
+ import { jsenvPluginMinification } from "./minification/jsenv_plugin_minification.js"
17
+
18
+ export const getCorePlugins = ({
19
+ htmlSupervisor,
20
+ nodeEsmResolution,
21
+ fileSystemMagicResolution,
22
+ injectedGlobals,
23
+ transpilation = true,
24
+ minification = false,
25
+ bundling = false,
26
+ } = {}) => {
27
+ if (htmlSupervisor === true) {
28
+ htmlSupervisor = {}
29
+ }
30
+ return [
31
+ jsenvPluginTranspilation(transpilation),
32
+ ...(htmlSupervisor ? [jsenvPluginHtmlSupervisor(htmlSupervisor)] : []), // before inline as it turns inline <script> into <script src>
33
+ jsenvPluginInline(), // before "file urls" to resolve and load inline urls
34
+ jsenvPluginImportmap(), // before node esm to handle bare specifiers before node esm
35
+ jsenvPluginFileUrls(),
36
+ jsenvPluginHttpUrls(),
37
+ jsenvPluginLeadingSlash(),
38
+ jsenvPluginNodeEsmResolution(nodeEsmResolution), // before url resolution to handle "js_import_export" resolution
39
+ jsenvPluginUrlResolution(),
40
+ jsenvPluginFileSystemMagic(fileSystemMagicResolution),
41
+ jsenvPluginUrlVersion(),
42
+ jsenvPluginInjectGlobals(injectedGlobals),
43
+ jsenvPluginCommonJsGlobals(),
44
+ jsenvPluginImportMetaScenarios(),
45
+ // jsenvPluginWorkers(),
46
+
47
+ jsenvPluginBundling(bundling),
48
+ jsenvPluginMinification(minification),
49
+ ]
50
+ }