@jsenv/core 27.0.0-alpha.64 → 27.0.0-alpha.65

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 (146) hide show
  1. package/dist/html/explorer.html +557 -0
  2. package/dist/js/controllable_file.mjs +227 -0
  3. package/dist/{event_source_client.js → js/event_source_client.js} +19 -244
  4. package/dist/js/global_this.js +32 -0
  5. package/dist/js/html_supervisor_installer.js +522 -0
  6. package/dist/js/html_supervisor_setup.js +79 -0
  7. package/dist/{import_meta_hot.js → js/import_meta_hot.js} +1 -3
  8. package/dist/js/inline_content.js +8 -0
  9. package/dist/js/new_stylesheet.js +409 -0
  10. package/dist/js/regenerator_runtime.js +721 -0
  11. package/dist/js/s.js +429 -0
  12. package/dist/main.js +13362 -0
  13. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/AsyncGenerator/AsyncGenerator.js +95 -0
  14. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/AwaitValue/AwaitValue.js +3 -0
  15. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/applyDecoratorDescriptor/applyDecoratorDescriptor.js +29 -0
  16. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
  17. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
  18. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
  19. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
  20. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
  21. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/asyncIterator/asyncIterator.js +78 -0
  22. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
  23. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
  24. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
  25. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
  26. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
  27. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classCallCheck/classCallCheck.js +5 -0
  28. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
  29. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
  30. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
  31. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
  32. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
  33. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
  34. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
  35. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
  36. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
  37. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
  38. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
  39. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
  40. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
  41. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
  42. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
  43. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/construct/construct.js +15 -0
  44. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/createClass/createClass.js +18 -0
  45. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
  46. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
  47. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
  48. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/createSuper/createSuper.js +22 -0
  49. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/decorate/decorate.js +622 -0
  50. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/defaults/defaults.js +14 -0
  51. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
  52. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/defineProperty/defineProperty.js +19 -0
  53. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/extends/extends.js +16 -0
  54. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/get/get.js +21 -0
  55. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
  56. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/inherits/inherits.js +21 -0
  57. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
  58. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
  59. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
  60. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/instanceof/instanceof.js +7 -0
  61. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
  62. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
  63. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
  64. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
  65. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/iterableToArray/iterableToArray.js +3 -0
  66. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
  67. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
  68. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/jsx/jsx.js +49 -0
  69. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
  70. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
  71. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
  72. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
  73. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
  74. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/objectSpread/objectSpread.js +22 -0
  75. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/objectSpread2/objectSpread2.js +41 -0
  76. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
  77. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
  78. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
  79. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/readOnlyError/readOnlyError.js +4 -0
  80. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/readme.md +8 -0
  81. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/set/set.js +51 -0
  82. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
  83. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
  84. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/slicedToArray/slicedToArray.js +5 -0
  85. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
  86. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/superPropBase/superPropBase.js +10 -0
  87. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
  88. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
  89. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/tdz/tdz.js +4 -0
  90. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/temporalRef/temporalRef.js +5 -0
  91. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
  92. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/toArray/toArray.js +5 -0
  93. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
  94. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/toPrimitive/toPrimitive.js +14 -0
  95. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
  96. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/typeof/typeof.js +7 -0
  97. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
  98. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
  99. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
  100. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
  101. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
  102. package/dist/other/jsenv.png +0 -0
  103. package/package.json +15 -11
  104. package/src/build/build.js +152 -67
  105. package/src/build/build_urls_generator.js +18 -2
  106. package/src/build/inject_service_worker_urls.js +1 -1
  107. package/src/build/resync_ressource_hints.js +56 -9
  108. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  109. package/src/dev/start_dev_server.js +17 -3
  110. package/src/execute/execute.js +3 -0
  111. package/src/omega/errors.js +10 -7
  112. package/src/omega/kitchen.js +209 -216
  113. package/src/omega/url_graph/url_graph_report.js +2 -2
  114. package/src/omega/url_graph.js +1 -1
  115. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +5 -10
  116. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +1 -3
  117. package/src/plugins/bundling/js_module/bundle_js_module.js +66 -24
  118. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +171 -53
  119. package/src/plugins/html_supervisor/jsenv_plugin_html_supervisor.js +9 -13
  120. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +6 -6
  121. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +5 -10
  122. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +12 -2
  123. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  124. package/src/plugins/plugin_controller.js +17 -3
  125. package/src/plugins/plugins.js +16 -19
  126. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +7 -13
  127. package/src/plugins/transpilation/as_js_classic/{jsenv_plugin_script_type_module_as_classic.js → jsenv_plugin_as_js_classic_html.js} +0 -0
  128. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +1 -2
  129. package/src/plugins/url_analysis/html/html_urls.js +3 -0
  130. package/src/plugins/url_analysis/js/js_urls.js +2 -1
  131. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +87 -1
  132. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +3 -0
  133. package/src/plugins/url_resolution/jsenv_plugin_url_resolution.js +0 -3
  134. package/src/test/execute_plan.js +2 -0
  135. package/dist/event_source_client.js.map +0 -188
  136. package/dist/html_supervisor_installer.js +0 -1236
  137. package/dist/html_supervisor_installer.js.map +0 -337
  138. package/dist/html_supervisor_setup.js +0 -95
  139. package/dist/html_supervisor_setup.js.map +0 -57
  140. package/dist/import_meta_hot.js.map +0 -42
  141. package/dist/s.js +0 -626
  142. package/dist/s.js.map +0 -207
  143. package/src/jsenv_root_directory_url.js +0 -1
  144. package/src/omega/compat/default_runtime_compat.js +0 -11
  145. package/src/plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -61
  146. package/src/plugins/transpilation/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
@@ -14,7 +14,7 @@ import { createKitchen } from "@jsenv/core/src/omega/kitchen.js"
14
14
  import { startOmegaServer } from "@jsenv/core/src/omega/omega_server.js"
15
15
 
16
16
  import { jsenvPluginExplorer } from "./plugins/explorer/jsenv_plugin_explorer.js"
17
- import { jsenvPluginToolbar } from "./plugins/toolbar/jsenv_plugin_toolbar.js"
17
+ // import { jsenvPluginToolbar } from "./plugins/toolbar/jsenv_plugin_toolbar.js"
18
18
 
19
19
  export const startDevServer = async ({
20
20
  signal = new AbortController().signal,
@@ -53,7 +53,18 @@ export const startDevServer = async ({
53
53
  clientAutoreload = true,
54
54
 
55
55
  sourcemaps = "inline",
56
+ // default runtimeCompat assume dev server will be request by recent browsers
57
+ // Used by "jsenv_plugin_node_runtime.js" to deactivate itself
58
+ // If dev server can be requested by Node.js to exec files
59
+ // we would add "node" to the potential runtimes. For now it's out of the scope of the dev server
60
+ // and "jsenv_plugin_node_runtime.js" applies only during build made for node.js
61
+ runtimeCompat = {
62
+ chrome: "100",
63
+ firefox: "100",
64
+ safari: "15.5",
65
+ },
56
66
  plugins = [],
67
+ urlAnalysis = {},
57
68
  htmlSupervisor = true,
58
69
  injectedGlobals,
59
70
  nodeEsmResolution,
@@ -68,7 +79,7 @@ export const startDevServer = async ({
68
79
  "./test/**/*.test.html": true,
69
80
  },
70
81
  },
71
- toolbar = false,
82
+ // toolbar = false,
72
83
  writeGeneratedFiles = true,
73
84
  }) => {
74
85
  const logger = createLogger({ logLevel })
@@ -164,6 +175,7 @@ export const startDevServer = async ({
164
175
  rootDirectoryUrl,
165
176
  urlGraph,
166
177
  scenario: "dev",
178
+ runtimeCompat,
167
179
  sourcemaps,
168
180
  writeGeneratedFiles,
169
181
  plugins: [
@@ -172,7 +184,9 @@ export const startDevServer = async ({
172
184
  rootDirectoryUrl,
173
185
  urlGraph,
174
186
  scenario: "dev",
187
+ runtimeCompat,
175
188
 
189
+ urlAnalysis,
176
190
  htmlSupervisor,
177
191
  injectedGlobals,
178
192
  nodeEsmResolution,
@@ -185,7 +199,7 @@ export const startDevServer = async ({
185
199
  jsenvPluginExplorer({
186
200
  groups: explorerGroups,
187
201
  }),
188
- ...(toolbar ? [jsenvPluginToolbar(toolbar)] : []),
202
+ // ...(toolbar ? [jsenvPluginToolbar(toolbar)] : []),
189
203
  ],
190
204
  })
191
205
  const server = await startOmegaServer({
@@ -68,6 +68,7 @@ export const execute = async ({
68
68
  }
69
69
  if (runtime.needsServer) {
70
70
  const urlGraph = createUrlGraph()
71
+ const runtimeCompat = { [runtime.name]: runtime.version }
71
72
  const kitchen = createKitchen({
72
73
  signal,
73
74
  logger,
@@ -75,6 +76,7 @@ export const execute = async ({
75
76
  urlGraph,
76
77
  scenario,
77
78
  sourcemaps,
79
+ runtimeCompat,
78
80
  writeGeneratedFiles,
79
81
  plugins: [
80
82
  ...plugins,
@@ -82,6 +84,7 @@ export const execute = async ({
82
84
  rootDirectoryUrl,
83
85
  urlGraph,
84
86
  scenario,
87
+ runtimeCompat,
85
88
 
86
89
  htmlSupervisor,
87
90
  injectedGlobals,
@@ -97,13 +97,16 @@ export const createTransformUrlContentError = ({
97
97
  ...details
98
98
  }) => {
99
99
  const transformError = new Error(
100
- createDetailedMessage(`Failed to transform ${urlInfo.type} url content`, {
101
- reason,
102
- ...details,
103
- "url": urlInfo.url,
104
- "url reference trace": reference.trace,
105
- ...detailsFromPluginController(pluginController),
106
- }),
100
+ createDetailedMessage(
101
+ `Failed to transform url content of "${urlInfo.type}"`,
102
+ {
103
+ reason,
104
+ ...details,
105
+ "url": urlInfo.url,
106
+ "url reference trace": reference.trace,
107
+ ...detailsFromPluginController(pluginController),
108
+ },
109
+ ),
107
110
  )
108
111
  transformError.name = "TRANSFORM_URL_CONTENT_ERROR"
109
112
  transformError.code = code
@@ -15,7 +15,6 @@ import { createPluginController } from "../plugins/plugin_controller.js"
15
15
  import { urlSpecifierEncoding } from "./url_specifier_encoding.js"
16
16
  import { createUrlInfoTransformer } from "./url_graph/url_info_transformations.js"
17
17
  import { RUNTIME_COMPAT } from "./compat/runtime_compat.js"
18
- import { defaultRuntimeCompat } from "./compat/default_runtime_compat.js"
19
18
  import {
20
19
  createResolveUrlError,
21
20
  createFetchUrlContentError,
@@ -46,7 +45,7 @@ export const createKitchen = ({
46
45
  build: true,
47
46
  }[scenario],
48
47
  sourcemapsRelativeSources,
49
- runtimeCompat = defaultRuntimeCompat,
48
+ runtimeCompat,
50
49
  writeGeneratedFiles,
51
50
  }) => {
52
51
  const pluginController = createPluginController({
@@ -86,7 +85,7 @@ export const createKitchen = ({
86
85
  specifierColumn,
87
86
  baseUrl,
88
87
  isOriginalPosition,
89
- external = false,
88
+ shouldHandle,
90
89
  isInline = false,
91
90
  injected = false,
92
91
  isRessourceHint = false,
@@ -122,7 +121,7 @@ export const createKitchen = ({
122
121
  specifierColumn,
123
122
  baseUrl,
124
123
  isOriginalPosition,
125
- external,
124
+ shouldHandle,
126
125
  isInline,
127
126
  injected,
128
127
  isRessourceHint,
@@ -152,11 +151,6 @@ export const createKitchen = ({
152
151
  }
153
152
  resolvedUrl = normalizeUrl(resolvedUrl)
154
153
  reference.url = resolvedUrl
155
- if (reference.external) {
156
- reference.generatedUrl = resolvedUrl
157
- reference.generatedSpecifier = reference.specifier
158
- return urlGraph.reuseOrCreateUrlInfo(reference.url)
159
- }
160
154
  pluginController.callHooks(
161
155
  "redirectUrl",
162
156
  reference,
@@ -259,10 +253,6 @@ export const createKitchen = ({
259
253
  })
260
254
 
261
255
  const fetchUrlContent = async (urlInfo, { reference, context }) => {
262
- if (reference.external) {
263
- urlInfo.external = true
264
- return
265
- }
266
256
  try {
267
257
  const fetchUrlContentReturnValue =
268
258
  await pluginController.callAsyncHooksUntil(
@@ -273,18 +263,13 @@ export const createKitchen = ({
273
263
  if (!fetchUrlContentReturnValue) {
274
264
  logger.warn(
275
265
  createDetailedMessage(
276
- `no plugin has handled the url during "fetchUrlContent" hook -> consider url as external (ignore it)`,
266
+ `no plugin has handled url during "fetchUrlContent" hook -> url will be ignored`,
277
267
  {
278
268
  "url": urlInfo.url,
279
269
  "url reference trace": reference.trace,
280
270
  },
281
271
  ),
282
272
  )
283
- urlInfo.external = true
284
- return
285
- }
286
- if (fetchUrlContentReturnValue.external) {
287
- urlInfo.external = true
288
273
  return
289
274
  }
290
275
  const {
@@ -367,206 +352,207 @@ export const createKitchen = ({
367
352
  return fetchUrlContent(urlInfo, { reference, context })
368
353
  }
369
354
 
370
- // "fetchUrlContent" hook
371
- await fetchUrlContent(urlInfo, { reference: context.reference, context })
372
- if (urlInfo.external) {
373
- return
374
- }
355
+ if (urlInfo.shouldHandle) {
356
+ // "fetchUrlContent" hook
357
+ await fetchUrlContent(urlInfo, { reference: context.reference, context })
375
358
 
376
- // parsing
377
- const references = []
378
- const addReference = (props) => {
379
- const reference = createReference({
380
- parentUrl: urlInfo.url,
381
- ...props,
382
- })
383
- references.push(reference)
384
- const referencedUrlInfo = resolveReference(reference)
385
- return [reference, referencedUrlInfo]
386
- }
387
- const referenceUtils = {
388
- readGeneratedSpecifier: async (reference) => {
389
- // "formatReferencedUrl" can be async BUT this is an exception
390
- // for most cases it will be sync. We want to favor the sync signature to keep things simpler
391
- // The only case where it needs to be async is when
392
- // the specifier is a `data:*` url
393
- // in this case we'll wait for the promise returned by
394
- // "formatReferencedUrl"
395
- if (reference.generatedSpecifier.then) {
396
- return reference.generatedSpecifier.then((value) => {
397
- reference.generatedSpecifier = value
398
- return value
399
- })
400
- }
401
- return reference.generatedSpecifier
402
- },
403
- found: ({ specifierLine, specifierColumn, ...rest }) => {
404
- const trace = stringifyUrlSite(
405
- adjustUrlSite(urlInfo, {
406
- urlGraph,
407
- url: urlInfo.url,
408
- line: specifierLine,
409
- column: specifierColumn,
410
- }),
411
- )
412
- // console.log(trace)
413
- return addReference({
414
- trace,
415
- specifierLine,
416
- specifierColumn,
417
- ...rest,
418
- })
419
- },
420
- foundInline: ({ isOriginalPosition, line, column, ...rest }) => {
421
- const parentUrl = isOriginalPosition
422
- ? urlInfo.url
423
- : urlInfo.generatedUrl
424
- const parentContent = isOriginalPosition
425
- ? urlInfo.originalContent
426
- : urlInfo.content
427
- return addReference({
428
- trace: stringifyUrlSite({
429
- url: parentUrl,
430
- content: parentContent,
431
- line,
432
- column,
433
- }),
434
- isOriginalPosition,
435
- line,
436
- column,
437
- isInline: true,
438
- ...rest,
359
+ // parsing
360
+ const references = []
361
+ const addReference = (props) => {
362
+ const reference = createReference({
363
+ parentUrl: urlInfo.url,
364
+ ...props,
439
365
  })
440
- },
441
- update: (currentReference, newReferenceParams) => {
442
- const index = references.indexOf(currentReference)
443
- if (index === -1) {
444
- throw new Error(`reference do not exists`)
445
- }
446
- const previousReference = currentReference
447
- const nextReference = createReference({
448
- ...previousReference,
449
- ...newReferenceParams,
450
- })
451
- references[index] = nextReference
452
- mutateReference(previousReference, nextReference)
453
- const newUrlInfo = resolveReference(nextReference)
454
- const currentUrlInfo = context.urlGraph.getUrlInfo(currentReference.url)
455
- if (
456
- currentUrlInfo &&
457
- currentUrlInfo !== newUrlInfo &&
458
- currentUrlInfo.dependents.size === 0
459
- ) {
460
- context.urlGraph.deleteUrlInfo(currentReference.url)
461
- }
462
- return [nextReference, newUrlInfo]
463
- },
464
- becomesInline: (
465
- reference,
466
- {
467
- isOriginalPosition,
468
- specifier,
469
- specifierLine,
470
- specifierColumn,
471
- contentType,
472
- content,
366
+ references.push(reference)
367
+ const referencedUrlInfo = resolveReference(reference)
368
+ return [reference, referencedUrlInfo]
369
+ }
370
+ const referenceUtils = {
371
+ readGeneratedSpecifier: async (reference) => {
372
+ // "formatReferencedUrl" can be async BUT this is an exception
373
+ // for most cases it will be sync. We want to favor the sync signature to keep things simpler
374
+ // The only case where it needs to be async is when
375
+ // the specifier is a `data:*` url
376
+ // in this case we'll wait for the promise returned by
377
+ // "formatReferencedUrl"
378
+ if (reference.generatedSpecifier.then) {
379
+ return reference.generatedSpecifier.then((value) => {
380
+ reference.generatedSpecifier = value
381
+ return value
382
+ })
383
+ }
384
+ return reference.generatedSpecifier
473
385
  },
474
- ) => {
475
- const parentUrl = isOriginalPosition
476
- ? urlInfo.url
477
- : urlInfo.generatedUrl
478
- const parentContent = isOriginalPosition
479
- ? urlInfo.originalContent
480
- : urlInfo.content
481
- return referenceUtils.update(reference, {
482
- trace: stringifyUrlSite({
483
- url: parentUrl,
484
- content: parentContent,
485
- line: specifierLine,
486
- column: specifierColumn,
487
- }),
488
- isOriginalPosition,
489
- isInline: true,
490
- specifier,
491
- specifierLine,
492
- specifierColumn,
493
- contentType,
494
- content,
495
- })
496
- },
497
- inject: ({ trace, ...rest }) => {
498
- if (trace === undefined) {
499
- const { url, line, column } = getCallerPosition()
500
- trace = stringifyUrlSite({
501
- url,
386
+ found: ({ trace, ...rest }) => {
387
+ if (trace === undefined) {
388
+ trace = stringifyUrlSite(
389
+ adjustUrlSite(urlInfo, {
390
+ urlGraph,
391
+ url: urlInfo.url,
392
+ line: rest.specifierLine,
393
+ column: rest.specifierColumn,
394
+ }),
395
+ )
396
+ }
397
+ // console.log(trace)
398
+ return addReference({
399
+ trace,
400
+ ...rest,
401
+ })
402
+ },
403
+ foundInline: ({ isOriginalPosition, line, column, ...rest }) => {
404
+ const parentUrl = isOriginalPosition
405
+ ? urlInfo.url
406
+ : urlInfo.generatedUrl
407
+ const parentContent = isOriginalPosition
408
+ ? urlInfo.originalContent
409
+ : urlInfo.content
410
+ return addReference({
411
+ trace: stringifyUrlSite({
412
+ url: parentUrl,
413
+ content: parentContent,
414
+ line,
415
+ column,
416
+ }),
417
+ isOriginalPosition,
502
418
  line,
503
419
  column,
420
+ isInline: true,
421
+ ...rest,
504
422
  })
505
- }
506
- return addReference({
507
- trace,
508
- injected: true,
509
- ...rest,
510
- })
511
- },
512
- findByGeneratedSpecifier: (generatedSpecifier) => {
513
- const reference = references.find(
514
- (ref) => ref.generatedSpecifier === generatedSpecifier,
515
- )
516
- if (!reference) {
517
- throw new Error(
518
- `No reference found using the following generatedSpecifier: "${generatedSpecifier}"`,
423
+ },
424
+ update: (currentReference, newReferenceParams) => {
425
+ const index = references.indexOf(currentReference)
426
+ if (index === -1) {
427
+ throw new Error(`reference do not exists`)
428
+ }
429
+ const previousReference = currentReference
430
+ const nextReference = createReference({
431
+ ...previousReference,
432
+ ...newReferenceParams,
433
+ })
434
+ references[index] = nextReference
435
+ mutateReference(previousReference, nextReference)
436
+ const newUrlInfo = resolveReference(nextReference)
437
+ const currentUrlInfo = context.urlGraph.getUrlInfo(
438
+ currentReference.url,
519
439
  )
520
- }
521
- return reference
522
- },
523
- }
524
-
525
- // "transform" hook
526
- urlInfo.references = references
527
- context.referenceUtils = referenceUtils
528
- try {
529
- await pluginController.callAsyncHooks(
530
- "transformUrlContent",
531
- urlInfo,
532
- context,
533
- async (transformReturnValue) => {
534
- await urlInfoTransformer.applyIntermediateTransformations(
535
- urlInfo,
536
- transformReturnValue,
440
+ if (
441
+ currentUrlInfo &&
442
+ currentUrlInfo !== newUrlInfo &&
443
+ currentUrlInfo.dependents.size === 0
444
+ ) {
445
+ context.urlGraph.deleteUrlInfo(currentReference.url)
446
+ }
447
+ return [nextReference, newUrlInfo]
448
+ },
449
+ becomesInline: (
450
+ reference,
451
+ {
452
+ isOriginalPosition,
453
+ specifier,
454
+ specifierLine,
455
+ specifierColumn,
456
+ contentType,
457
+ content,
458
+ },
459
+ ) => {
460
+ const parentUrl = isOriginalPosition
461
+ ? urlInfo.url
462
+ : urlInfo.generatedUrl
463
+ const parentContent = isOriginalPosition
464
+ ? urlInfo.originalContent
465
+ : urlInfo.content
466
+ return referenceUtils.update(reference, {
467
+ trace: stringifyUrlSite({
468
+ url: parentUrl,
469
+ content: parentContent,
470
+ line: specifierLine,
471
+ column: specifierColumn,
472
+ }),
473
+ isOriginalPosition,
474
+ isInline: true,
475
+ specifier,
476
+ specifierLine,
477
+ specifierColumn,
478
+ contentType,
479
+ content,
480
+ })
481
+ },
482
+ inject: ({ trace, ...rest }) => {
483
+ if (trace === undefined) {
484
+ const { url, line, column } = getCallerPosition()
485
+ trace = stringifyUrlSite({
486
+ url,
487
+ line,
488
+ column,
489
+ })
490
+ }
491
+ return addReference({
492
+ trace,
493
+ injected: true,
494
+ ...rest,
495
+ })
496
+ },
497
+ findByGeneratedSpecifier: (generatedSpecifier) => {
498
+ const reference = references.find(
499
+ (ref) => ref.generatedSpecifier === generatedSpecifier,
537
500
  )
501
+ if (!reference) {
502
+ throw new Error(
503
+ `No reference found using the following generatedSpecifier: "${generatedSpecifier}"`,
504
+ )
505
+ }
506
+ return reference
538
507
  },
539
- )
540
- } catch (error) {
541
- throw createTransformUrlContentError({
542
- pluginController,
543
- reference: context.reference,
544
- urlInfo,
545
- error,
546
- })
547
- }
548
- // after "transform" all references from originalContent
549
- // and the one injected by plugin are known
550
- urlGraph.updateReferences(urlInfo, references)
508
+ }
551
509
 
552
- // "finalize" hook
553
- try {
554
- const finalizeReturnValue = await pluginController.callAsyncHooksUntil(
555
- "finalizeUrlContent",
556
- urlInfo,
557
- context,
558
- )
559
- await urlInfoTransformer.applyFinalTransformations(
560
- urlInfo,
561
- finalizeReturnValue,
562
- )
563
- } catch (error) {
564
- throw createFinalizeUrlContentError({
565
- pluginController,
566
- reference: context.reference,
567
- urlInfo,
568
- error,
569
- })
510
+ // "transform" hook
511
+ urlInfo.references = references
512
+ context.referenceUtils = referenceUtils
513
+ try {
514
+ await pluginController.callAsyncHooks(
515
+ "transformUrlContent",
516
+ urlInfo,
517
+ context,
518
+ async (transformReturnValue) => {
519
+ await urlInfoTransformer.applyIntermediateTransformations(
520
+ urlInfo,
521
+ transformReturnValue,
522
+ )
523
+ },
524
+ )
525
+ } catch (error) {
526
+ throw createTransformUrlContentError({
527
+ pluginController,
528
+ reference: context.reference,
529
+ urlInfo,
530
+ error,
531
+ })
532
+ }
533
+ // after "transform" all references from originalContent
534
+ // and the one injected by plugin are known
535
+ urlGraph.updateReferences(urlInfo, references)
536
+
537
+ // "finalize" hook
538
+ try {
539
+ const finalizeReturnValue = await pluginController.callAsyncHooksUntil(
540
+ "finalizeUrlContent",
541
+ urlInfo,
542
+ context,
543
+ )
544
+ await urlInfoTransformer.applyFinalTransformations(
545
+ urlInfo,
546
+ finalizeReturnValue,
547
+ )
548
+ } catch (error) {
549
+ throw createFinalizeUrlContentError({
550
+ pluginController,
551
+ reference: context.reference,
552
+ urlInfo,
553
+ error,
554
+ })
555
+ }
570
556
  }
571
557
 
572
558
  // "cooked" hook
@@ -602,13 +588,17 @@ export const createKitchen = ({
602
588
  } finally {
603
589
  const { generatedUrl } = urlInfo
604
590
  if (generatedUrl && generatedUrl.startsWith("file:")) {
605
- writeFileSync(new URL(generatedUrl), urlInfo.content)
606
- const { sourcemapGeneratedUrl, sourcemap } = urlInfo
607
- if (sourcemapGeneratedUrl && sourcemap) {
608
- writeFileSync(
609
- new URL(sourcemapGeneratedUrl),
610
- JSON.stringify(sourcemap, null, " "),
611
- )
591
+ if (urlInfo.type === "directory") {
592
+ // no need to write the directory
593
+ } else {
594
+ writeFileSync(new URL(generatedUrl), urlInfo.content)
595
+ const { sourcemapGeneratedUrl, sourcemap } = urlInfo
596
+ if (sourcemapGeneratedUrl && sourcemap) {
597
+ writeFileSync(
598
+ new URL(sourcemapGeneratedUrl),
599
+ JSON.stringify(sourcemap, null, " "),
600
+ )
601
+ }
612
602
  }
613
603
  }
614
604
  }
@@ -671,6 +661,9 @@ const memoizeCook = (cook) => {
671
661
  }
672
662
 
673
663
  const applyReferenceEffectsOnUrlInfo = (reference, urlInfo, context) => {
664
+ if (reference.shouldHandle) {
665
+ urlInfo.shouldHandle = true
666
+ }
674
667
  Object.assign(urlInfo.data, reference.data)
675
668
  Object.assign(urlInfo.timing, reference.timing)
676
669
  if (reference.injected) {
@@ -37,8 +37,8 @@ const createUrlGraphReport = (urlGraph) => {
37
37
  const urlInfo = urlInfos[url]
38
38
  // ignore:
39
39
  // - inline files: they are already taken into account in the file where they appear
40
- // - external files: we don't know their content
41
- if (urlInfo.isInline || urlInfo.external) {
40
+ // - ignored files: we don't know their content
41
+ if (urlInfo.isInline || !urlInfo.shouldHandle) {
42
42
  return
43
43
  }
44
44
  // file loaded via import assertion are already inside the graph
@@ -188,7 +188,7 @@ const createUrlInfo = (url) => {
188
188
  generatedUrl: null,
189
189
  isInline: false,
190
190
  inlineUrlSite: null,
191
- external: false,
191
+ shouldHandle: undefined,
192
192
  originalContent: undefined,
193
193
  content: undefined,
194
194
  contentEtag: null,
@@ -1,20 +1,15 @@
1
- import { urlIsInsideOf } from "@jsenv/filesystem"
2
-
3
1
  import {
4
2
  parseHtmlString,
5
3
  stringifyHtmlAst,
6
4
  injectScriptAsEarlyAsPossible,
7
5
  createHtmlNode,
8
6
  } from "@jsenv/utils/html_ast/html_ast.js"
9
- import { jsenvRootDirectoryUrl } from "@jsenv/core/src/jsenv_root_directory_url.js"
10
7
 
11
- export const jsenvPluginDevSSEClient = ({ rootDirectoryUrl }) => {
12
- const preferSourceFiles =
13
- rootDirectoryUrl === jsenvRootDirectoryUrl ||
14
- urlIsInsideOf(rootDirectoryUrl, jsenvRootDirectoryUrl)
15
- const eventSourceClientFileUrl = preferSourceFiles
16
- ? new URL("./client/event_source_client.js", import.meta.url).href
17
- : new URL("./dist/event_source_client.js", jsenvRootDirectoryUrl).href
8
+ export const jsenvPluginDevSSEClient = () => {
9
+ const eventSourceClientFileUrl = new URL(
10
+ "./client/event_source_client.js",
11
+ import.meta.url,
12
+ ).href
18
13
 
19
14
  return {
20
15
  name: "jsenv:dev_sse_client",
@@ -14,9 +14,7 @@ export const jsenvPluginAutoreload = ({
14
14
  }
15
15
  return [
16
16
  jsenvPluginHmr(),
17
- jsenvPluginDevSSEClient({
18
- rootDirectoryUrl,
19
- }),
17
+ jsenvPluginDevSSEClient(),
20
18
  jsenvPluginDevSSEServer({
21
19
  rootDirectoryUrl,
22
20
  urlGraph,