@jsenv/core 27.0.0-alpha.9 → 27.0.0-alpha.92
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/babel_helpers/AsyncGenerator/AsyncGenerator.js +95 -0
- package/dist/babel_helpers/AwaitValue/AwaitValue.js +3 -0
- package/dist/babel_helpers/applyDecoratorDescriptor/applyDecoratorDescriptor.js +29 -0
- package/dist/babel_helpers/applyDecs/applyDecs.js +756 -0
- package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
- package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
- package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
- package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
- package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
- package/dist/babel_helpers/asyncIterator/asyncIterator.js +78 -0
- package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
- package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
- package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
- package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
- package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
- package/dist/babel_helpers/classCallCheck/classCallCheck.js +5 -0
- package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
- package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
- package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
- package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
- package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
- package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
- package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
- package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
- package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
- package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
- package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
- package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
- package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
- package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
- package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
- package/dist/babel_helpers/construct/construct.js +15 -0
- package/dist/babel_helpers/createClass/createClass.js +18 -0
- package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
- package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
- package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
- package/dist/babel_helpers/createSuper/createSuper.js +22 -0
- package/dist/babel_helpers/decorate/decorate.js +622 -0
- package/dist/babel_helpers/defaults/defaults.js +14 -0
- package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
- package/dist/babel_helpers/defineProperty/defineProperty.js +19 -0
- package/dist/babel_helpers/extends/extends.js +16 -0
- package/dist/babel_helpers/get/get.js +21 -0
- package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
- package/dist/babel_helpers/identity/identity.js +3 -0
- package/dist/babel_helpers/inherits/inherits.js +21 -0
- package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
- package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
- package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
- package/dist/babel_helpers/instanceof/instanceof.js +7 -0
- package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
- package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
- package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
- package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
- package/dist/babel_helpers/iterableToArray/iterableToArray.js +3 -0
- package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
- package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
- package/dist/babel_helpers/jsx/jsx.js +49 -0
- package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
- package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
- package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
- package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
- package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
- package/dist/babel_helpers/objectSpread/objectSpread.js +22 -0
- package/dist/babel_helpers/objectSpread2/objectSpread2.js +41 -0
- package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
- package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
- package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
- package/dist/babel_helpers/readOnlyError/readOnlyError.js +4 -0
- package/dist/babel_helpers/set/set.js +51 -0
- package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
- package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
- package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -0
- package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
- package/dist/babel_helpers/superPropBase/superPropBase.js +10 -0
- package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
- package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
- package/dist/babel_helpers/tdz/tdz.js +4 -0
- package/dist/babel_helpers/temporalRef/temporalRef.js +5 -0
- package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
- package/dist/babel_helpers/toArray/toArray.js +5 -0
- package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
- package/dist/babel_helpers/toPrimitive/toPrimitive.js +14 -0
- package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
- package/dist/babel_helpers/typeof/typeof.js +7 -0
- package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
- package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
- package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
- package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
- package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
- package/dist/html/explorer.html +557 -0
- package/dist/js/controllable_file.mjs +227 -0
- package/dist/js/event_source_client.js +528 -0
- package/dist/js/global_this.js +32 -0
- package/dist/js/html_supervisor_installer.js +522 -0
- package/dist/js/html_supervisor_setup.js +82 -0
- package/dist/js/import_meta_hot.js +84 -0
- package/dist/js/inline_content.js +8 -0
- package/dist/js/new_stylesheet.js +409 -0
- package/dist/js/regenerator_runtime.js +721 -0
- package/dist/js/s.js +429 -0
- package/dist/js/uneval.js +804 -0
- package/dist/main.js +25163 -0
- package/dist/other/jsenv.png +0 -0
- package/dist/s.js +626 -0
- package/dist/s.js.map +205 -0
- package/package.json +61 -57
- package/readme.md +6 -14
- package/src/build/build.js +1040 -551
- package/src/build/build_urls_generator.js +65 -25
- package/src/build/graph_utils.js +31 -0
- package/src/build/inject_global_version_mappings.js +93 -0
- package/src/build/inject_service_worker_urls.js +79 -0
- package/src/build/resync_ressource_hints.js +114 -0
- package/src/build/start_build_server.js +217 -0
- package/src/build/version_generator.js +60 -0
- package/src/dev/plugins/explorer/client/explorer.html +1 -1
- package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +9 -14
- package/src/dev/plugins/toolbar/client/util/fetching.js +1 -1
- package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +6 -4
- package/src/dev/start_dev_server.js +173 -38
- package/src/execute/execute.js +35 -8
- package/src/execute/run.js +21 -57
- package/src/execute/runtimes/browsers/from_playwright.js +224 -153
- package/src/execute/runtimes/node/child_exec_options.js +1 -1
- package/src/execute/runtimes/node/controllable_file.mjs +26 -10
- package/src/execute/runtimes/node/kill_process_tree.js +2 -4
- package/src/execute/runtimes/node/node_execution_performance.js +67 -0
- package/src/execute/runtimes/node/node_process.js +288 -39
- package/src/helpers/command/command.js +73 -0
- package/src/{dev/plugins/autoreload/client/event_source_connection.js → helpers/event_source/event_source.js} +2 -0
- package/src/helpers/event_source/sse_service.js +53 -0
- package/src/helpers/worker_reload.js +57 -0
- package/src/main.js +27 -0
- package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
- package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +16 -17
- package/src/omega/errors.js +63 -67
- package/src/omega/fetched_content_compliance.js +24 -0
- package/src/omega/file_url_converter.js +9 -51
- package/src/omega/kitchen.js +607 -466
- package/src/omega/omega_server.js +2 -3
- package/src/omega/server/file_service.js +88 -41
- package/src/omega/server/user_agent.js +5 -5
- package/src/omega/url_graph/{url_graph_sort.js → sort_by_dependencies.js} +3 -5
- package/src/omega/url_graph/url_graph_load.js +31 -23
- package/src/omega/url_graph/url_graph_report.js +94 -51
- package/src/omega/url_graph/url_info_transformations.js +54 -24
- package/src/omega/url_graph.js +88 -19
- package/src/omega/url_specifier_encoding.js +59 -0
- package/src/omega/web_workers.js +42 -0
- package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
- package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
- package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +6 -3
- package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
- package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
- package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
- package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
- package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
- package/src/plugins/bundling/css/bundle_css.js +140 -0
- package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
- package/src/plugins/bundling/js_module/bundle_js_module.js +362 -0
- package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
- package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
- package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +56 -43
- package/src/plugins/file_urls/jsenv_plugin_file_urls.js +190 -0
- package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
- package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
- package/src/plugins/html_supervisor/client/html_supervisor_installer.js +254 -0
- package/src/plugins/html_supervisor/client/html_supervisor_setup.js +82 -0
- package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
- package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
- package/src/plugins/html_supervisor/jsenv_plugin_html_supervisor.js +239 -0
- package/src/plugins/http_urls/jsenv_plugin_http_urls.js +16 -0
- package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
- package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
- package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +15 -18
- package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +100 -0
- package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +35 -10
- package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
- package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
- package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +56 -54
- package/src/plugins/inject_globals/inject_globals.js +57 -0
- package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +24 -0
- package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
- package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +22 -21
- package/src/plugins/inline/jsenv_plugin_html_inline_content.js +159 -0
- package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
- package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +8 -11
- package/src/plugins/inline/jsenv_plugin_js_inline_content.js +294 -0
- package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
- package/src/plugins/minification/css/minify_css.js +9 -0
- package/src/plugins/minification/html/minify_html.js +13 -0
- package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
- package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
- package/src/plugins/minification/json/minify_json.js +8 -0
- package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +162 -0
- package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
- package/src/{omega → plugins}/plugin_controller.js +57 -12
- package/src/plugins/plugins.js +91 -0
- package/src/plugins/transpilation/as_js_classic/client/s.js +429 -0
- package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
- package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +209 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +282 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +55 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +2 -3
- package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +3 -4
- package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +14 -17
- package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +40 -33
- package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +32 -9
- package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +2 -3
- package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
- package/src/plugins/transpilation/babel/require_babel_plugin.js +8 -0
- package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
- package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +184 -0
- package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +80 -0
- package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
- package/src/plugins/url_analysis/css/css_urls.js +48 -0
- package/src/plugins/url_analysis/html/html_urls.js +257 -0
- package/src/plugins/url_analysis/js/js_urls.js +69 -0
- package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +110 -0
- package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +20 -0
- package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +9 -5
- package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
- package/src/require_from_jsenv.js +3 -0
- 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 +87 -46
- package/src/test/execute_test_plan.js +40 -28
- package/src/test/execution_steps.js +2 -5
- package/src/test/logs_file_execution.js +56 -49
- package/main.js +0 -19
- package/src/build/inject_version_mappings.js +0 -62
- package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -227
- package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
- package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
- package/src/dev/plugins/autoreload/sse_service.js +0 -149
- package/src/execute/runtimes/node/controlled_process.js +0 -316
- package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
- package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
- package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -58
- package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
- package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
- package/src/omega/core_plugins/html_supervisor/jsenv_plugin_html_supervisor.js +0 -233
- package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
- package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
- package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
- package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
- package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
- package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +0 -142
- package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
- package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
- package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
- package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
- package/src/omega/core_plugins.js +0 -39
- package/src/omega/runtime_support/default_runtime_support.js +0 -13
- package/src/omega/url_mentions/css_url_mentions.js +0 -63
- package/src/omega/url_mentions/html_url_mentions.js +0 -185
- package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
- package/src/omega/url_mentions/parse_url_mentions.js +0 -37
- package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pathToFileURL } from "node:url"
|
|
2
|
+
import { bufferToEtag } from "@jsenv/filesystem"
|
|
3
|
+
import { urlToRelativeUrl, isFileSystemPath } from "@jsenv/urls"
|
|
2
4
|
import {
|
|
5
|
+
composeTwoSourcemaps,
|
|
3
6
|
SOURCEMAP,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from "@jsenv/
|
|
7
|
+
generateSourcemapFileUrl,
|
|
8
|
+
generateSourcemapDataUrl,
|
|
9
|
+
} from "@jsenv/sourcemap"
|
|
7
10
|
|
|
8
11
|
export const createUrlInfoTransformer = ({
|
|
9
12
|
logger,
|
|
10
13
|
sourcemaps,
|
|
11
|
-
|
|
14
|
+
sourcemapsSourcesContent,
|
|
15
|
+
sourcemapsRelativeSources,
|
|
12
16
|
urlGraph,
|
|
13
17
|
injectSourcemapPlaceholder,
|
|
14
18
|
foundSourcemap,
|
|
@@ -19,21 +23,33 @@ export const createUrlInfoTransformer = ({
|
|
|
19
23
|
sourcemaps === "programmatic"
|
|
20
24
|
|
|
21
25
|
const normalizeSourcemap = (urlInfo, sourcemap) => {
|
|
26
|
+
let { sources } = sourcemap
|
|
27
|
+
if (sources) {
|
|
28
|
+
sources = sources.map((source) => {
|
|
29
|
+
if (source && isFileSystemPath(source)) {
|
|
30
|
+
return String(pathToFileURL(source))
|
|
31
|
+
}
|
|
32
|
+
return source
|
|
33
|
+
})
|
|
34
|
+
}
|
|
22
35
|
const wantSourcesContent =
|
|
23
36
|
// for inline content (<script> insdide html)
|
|
24
37
|
// chrome won't be able to fetch the file as it does not exists
|
|
25
38
|
// so sourcemap must contain sources
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
(source) =>
|
|
39
|
+
sourcemapsSourcesContent ||
|
|
40
|
+
urlInfo.isInline ||
|
|
41
|
+
(sources &&
|
|
42
|
+
sources.some((source) => !source || !source.startsWith("file:")))
|
|
43
|
+
if (sources && sources.length > 1) {
|
|
44
|
+
sourcemap.sources = sources.map(
|
|
45
|
+
(source) => new URL(source, urlInfo.originalUrl).href,
|
|
30
46
|
)
|
|
31
47
|
if (!wantSourcesContent) {
|
|
32
48
|
sourcemap.sourcesContent = undefined
|
|
33
49
|
}
|
|
34
50
|
return sourcemap
|
|
35
51
|
}
|
|
36
|
-
sourcemap.sources = [urlInfo.
|
|
52
|
+
sourcemap.sources = [urlInfo.originalUrl]
|
|
37
53
|
sourcemap.sourcesContent = [urlInfo.originalContent]
|
|
38
54
|
if (!wantSourcesContent) {
|
|
39
55
|
sourcemap.sourcesContent = undefined
|
|
@@ -56,7 +72,9 @@ export const createUrlInfoTransformer = ({
|
|
|
56
72
|
// when jsenv is done cooking the file
|
|
57
73
|
// during build it's urlInfo.url to be inside the build
|
|
58
74
|
// but otherwise it's generatedUrl to be inside .jsenv/ directory
|
|
59
|
-
urlInfo.sourcemapGeneratedUrl =
|
|
75
|
+
urlInfo.sourcemapGeneratedUrl = generateSourcemapFileUrl(
|
|
76
|
+
urlInfo.generatedUrl,
|
|
77
|
+
)
|
|
60
78
|
const [sourcemapReference, sourcemapUrlInfo] = injectSourcemapPlaceholder({
|
|
61
79
|
urlInfo,
|
|
62
80
|
specifier: urlInfo.sourcemapGeneratedUrl,
|
|
@@ -66,6 +84,7 @@ export const createUrlInfoTransformer = ({
|
|
|
66
84
|
|
|
67
85
|
// already loaded during "load" hook (happens during build)
|
|
68
86
|
if (urlInfo.sourcemap) {
|
|
87
|
+
urlInfo.sourcemap = normalizeSourcemap(urlInfo, urlInfo.sourcemap)
|
|
69
88
|
return
|
|
70
89
|
}
|
|
71
90
|
// check for existing sourcemap for this content
|
|
@@ -78,17 +97,15 @@ export const createUrlInfoTransformer = ({
|
|
|
78
97
|
const [sourcemapReference, sourcemapUrlInfo] = foundSourcemap({
|
|
79
98
|
urlInfo,
|
|
80
99
|
type,
|
|
81
|
-
line,
|
|
82
|
-
column,
|
|
83
100
|
specifier,
|
|
101
|
+
specifierLine: line,
|
|
102
|
+
specifierColumn: column,
|
|
84
103
|
})
|
|
85
104
|
try {
|
|
86
|
-
await context.cook({
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
const sourcemap = JSON.parse(sourcemapUrlInfo.content)
|
|
91
|
-
urlInfo.sourcemap = normalizeSourcemap(urlInfo, sourcemap)
|
|
105
|
+
await context.cook(sourcemapUrlInfo, { reference: sourcemapReference })
|
|
106
|
+
const sourcemapRaw = JSON.parse(sourcemapUrlInfo.content)
|
|
107
|
+
const sourcemap = normalizeSourcemap(urlInfo, sourcemapRaw)
|
|
108
|
+
urlInfo.sourcemap = sourcemap
|
|
92
109
|
} catch (e) {
|
|
93
110
|
logger.error(`Error while handling existing sourcemap: ${e.message}`)
|
|
94
111
|
return
|
|
@@ -137,20 +154,33 @@ export const createUrlInfoTransformer = ({
|
|
|
137
154
|
const sourcemapReference = urlInfo.sourcemapReference
|
|
138
155
|
const sourcemapUrlInfo = urlGraph.getUrlInfo(sourcemapReference.url)
|
|
139
156
|
sourcemapUrlInfo.contentType = "application/json"
|
|
140
|
-
|
|
157
|
+
const sourcemap = urlInfo.sourcemap
|
|
158
|
+
if (sourcemapsRelativeSources) {
|
|
159
|
+
sourcemap.sources = sourcemap.sources.map((source) => {
|
|
160
|
+
const sourceRelative = urlToRelativeUrl(source, urlInfo.url)
|
|
161
|
+
return sourceRelative || "."
|
|
162
|
+
})
|
|
163
|
+
}
|
|
164
|
+
sourcemapUrlInfo.content = JSON.stringify(sourcemap, null, " ")
|
|
141
165
|
if (sourcemaps === "inline") {
|
|
142
|
-
sourcemapReference.generatedSpecifier =
|
|
143
|
-
|
|
144
|
-
)
|
|
166
|
+
sourcemapReference.generatedSpecifier =
|
|
167
|
+
generateSourcemapDataUrl(sourcemap)
|
|
145
168
|
}
|
|
146
169
|
if (sourcemaps === "file" || sourcemaps === "inline") {
|
|
147
170
|
urlInfo.content = SOURCEMAP.writeComment({
|
|
148
171
|
contentType: urlInfo.contentType,
|
|
149
172
|
content: urlInfo.content,
|
|
150
|
-
specifier:
|
|
173
|
+
specifier:
|
|
174
|
+
sourcemaps === "file" && sourcemapsRelativeSources
|
|
175
|
+
? urlToRelativeUrl(sourcemapReference.url, urlInfo.url)
|
|
176
|
+
: sourcemapReference.generatedSpecifier,
|
|
151
177
|
})
|
|
152
178
|
}
|
|
179
|
+
} else if (urlInfo.sourcemapReference) {
|
|
180
|
+
// in the end we don't use the sourcemap placeholder
|
|
181
|
+
urlGraph.deleteUrlInfo(urlInfo.sourcemapReference.url)
|
|
153
182
|
}
|
|
183
|
+
urlInfo.contentEtag = bufferToEtag(Buffer.from(urlInfo.content))
|
|
154
184
|
}
|
|
155
185
|
|
|
156
186
|
return {
|
package/src/omega/url_graph.js
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { urlToRelativeUrl } from "@jsenv/urls"
|
|
2
|
+
import { urlSpecifierEncoding } from "./url_specifier_encoding.js"
|
|
3
3
|
|
|
4
|
-
export const createUrlGraph = (
|
|
4
|
+
export const createUrlGraph = ({
|
|
5
|
+
clientFileChangeCallbackList,
|
|
6
|
+
clientFilesPruneCallbackList,
|
|
7
|
+
} = {}) => {
|
|
5
8
|
const urlInfos = {}
|
|
6
9
|
const getUrlInfo = (url) => urlInfos[url]
|
|
7
|
-
const deleteUrlInfo = (url) =>
|
|
10
|
+
const deleteUrlInfo = (url) => {
|
|
11
|
+
const urlInfo = urlInfos[url]
|
|
12
|
+
if (urlInfo) {
|
|
13
|
+
delete urlInfos[url]
|
|
14
|
+
if (urlInfo.sourcemapReference) {
|
|
15
|
+
deleteUrlInfo(urlInfo.sourcemapReference.url)
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
8
20
|
const reuseOrCreateUrlInfo = (url) => {
|
|
9
21
|
const existingUrlInfo = urlInfos[url]
|
|
10
22
|
if (existingUrlInfo) return existingUrlInfo
|
|
@@ -12,13 +24,15 @@ export const createUrlGraph = () => {
|
|
|
12
24
|
urlInfos[url] = urlInfo
|
|
13
25
|
return urlInfo
|
|
14
26
|
}
|
|
15
|
-
const inferReference = (
|
|
27
|
+
const inferReference = (specifier, parentUrl) => {
|
|
16
28
|
const parentUrlInfo = urlInfos[parentUrl]
|
|
17
29
|
if (!parentUrlInfo) {
|
|
18
30
|
return null
|
|
19
31
|
}
|
|
20
32
|
const firstReferenceOnThatUrl = parentUrlInfo.references.find(
|
|
21
|
-
(reference) =>
|
|
33
|
+
(reference) => {
|
|
34
|
+
return urlSpecifierEncoding.decode(reference) === specifier
|
|
35
|
+
},
|
|
22
36
|
)
|
|
23
37
|
return firstReferenceOnThatUrl
|
|
24
38
|
}
|
|
@@ -40,13 +54,22 @@ export const createUrlGraph = () => {
|
|
|
40
54
|
return visitDependents(urlInfo)
|
|
41
55
|
}
|
|
42
56
|
|
|
43
|
-
const prunedCallbackList = createCallbackList()
|
|
44
57
|
const updateReferences = (urlInfo, references) => {
|
|
45
58
|
const dependencyUrls = []
|
|
46
59
|
references.forEach((reference) => {
|
|
47
|
-
if (
|
|
48
|
-
|
|
60
|
+
if (reference.isRessourceHint) {
|
|
61
|
+
// ressource hint are a special kind of reference.
|
|
62
|
+
// They are a sort of weak reference to an url.
|
|
63
|
+
// We ignore them so that url referenced only by ressource hints
|
|
64
|
+
// have url.dependents.size === 0 and can be considered as not used
|
|
65
|
+
// It means html won't consider url referenced solely
|
|
66
|
+
// by <link> as dependency and it's fine
|
|
67
|
+
return
|
|
68
|
+
}
|
|
69
|
+
if (dependencyUrls.includes(reference.url)) {
|
|
70
|
+
return
|
|
49
71
|
}
|
|
72
|
+
dependencyUrls.push(reference.url)
|
|
50
73
|
})
|
|
51
74
|
pruneDependencies(
|
|
52
75
|
urlInfo,
|
|
@@ -82,7 +105,47 @@ export const createUrlGraph = () => {
|
|
|
82
105
|
if (prunedUrlInfos.length === 0) {
|
|
83
106
|
return
|
|
84
107
|
}
|
|
85
|
-
|
|
108
|
+
prunedUrlInfos.forEach((prunedUrlInfo) => {
|
|
109
|
+
prunedUrlInfo.modifiedTimestamp = Date.now()
|
|
110
|
+
// should we delete?
|
|
111
|
+
// delete urlInfos[prunedUrlInfo.url]
|
|
112
|
+
})
|
|
113
|
+
if (clientFilesPruneCallbackList) {
|
|
114
|
+
clientFilesPruneCallbackList.forEach((callback) => {
|
|
115
|
+
callback({
|
|
116
|
+
firstUrlInfo,
|
|
117
|
+
prunedUrlInfos,
|
|
118
|
+
})
|
|
119
|
+
})
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (clientFileChangeCallbackList) {
|
|
124
|
+
const updateModifiedTimestamp = (urlInfo, modifiedTimestamp) => {
|
|
125
|
+
const seen = []
|
|
126
|
+
const iterate = (urlInfo) => {
|
|
127
|
+
if (seen.includes(urlInfo.url)) {
|
|
128
|
+
return
|
|
129
|
+
}
|
|
130
|
+
seen.push(urlInfo.url)
|
|
131
|
+
urlInfo.modifiedTimestamp = modifiedTimestamp
|
|
132
|
+
urlInfo.dependents.forEach((dependentUrl) => {
|
|
133
|
+
const dependentUrlInfo = urlInfos[dependentUrl]
|
|
134
|
+
const { hotAcceptDependencies = [] } = dependentUrlInfo.data
|
|
135
|
+
if (!hotAcceptDependencies.includes(urlInfo.url)) {
|
|
136
|
+
iterate(dependentUrlInfo)
|
|
137
|
+
}
|
|
138
|
+
})
|
|
139
|
+
}
|
|
140
|
+
iterate(urlInfo)
|
|
141
|
+
}
|
|
142
|
+
clientFileChangeCallbackList.push(({ url }) => {
|
|
143
|
+
const urlInfo = urlInfos[url]
|
|
144
|
+
if (urlInfo) {
|
|
145
|
+
updateModifiedTimestamp(urlInfo, Date.now())
|
|
146
|
+
urlInfo.contentEtag = null
|
|
147
|
+
}
|
|
148
|
+
})
|
|
86
149
|
}
|
|
87
150
|
|
|
88
151
|
return {
|
|
@@ -92,8 +155,6 @@ export const createUrlGraph = () => {
|
|
|
92
155
|
deleteUrlInfo,
|
|
93
156
|
inferReference,
|
|
94
157
|
findDependent,
|
|
95
|
-
|
|
96
|
-
prunedCallbackList,
|
|
97
158
|
updateReferences,
|
|
98
159
|
|
|
99
160
|
toJSON: (rootDirectoryUrl) => {
|
|
@@ -114,19 +175,27 @@ export const createUrlGraph = () => {
|
|
|
114
175
|
|
|
115
176
|
const createUrlInfo = (url) => {
|
|
116
177
|
return {
|
|
178
|
+
modifiedTimestamp: 0,
|
|
117
179
|
data: {}, // plugins can put whatever they want here
|
|
180
|
+
references: [],
|
|
181
|
+
dependencies: new Set(),
|
|
182
|
+
dependents: new Set(),
|
|
183
|
+
type: undefined, // "html", "css", "js_classic", "js_module", "importmap", "json", "webmanifest", ...
|
|
184
|
+
subtype: undefined, // "worker", "service_worker", "shared_worker" for js, otherwise undefined
|
|
185
|
+
contentType: "", // "text/html", "text/css", "text/javascript", "application/json", ...
|
|
118
186
|
url,
|
|
187
|
+
originalUrl: undefined,
|
|
119
188
|
generatedUrl: null,
|
|
189
|
+
filename: "",
|
|
120
190
|
isInline: false,
|
|
121
191
|
inlineUrlSite: null,
|
|
122
|
-
|
|
123
|
-
originalContent:
|
|
124
|
-
content:
|
|
192
|
+
shouldHandle: undefined,
|
|
193
|
+
originalContent: undefined,
|
|
194
|
+
content: undefined,
|
|
195
|
+
contentEtag: null,
|
|
125
196
|
sourcemap: null,
|
|
126
197
|
sourcemapReference: null,
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
dependencies: new Set(),
|
|
130
|
-
dependents: new Set(),
|
|
198
|
+
timing: {},
|
|
199
|
+
headers: {},
|
|
131
200
|
}
|
|
132
201
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export const urlSpecifierEncoding = {
|
|
2
|
+
encode: (reference) => {
|
|
3
|
+
const { generatedSpecifier } = reference
|
|
4
|
+
if (generatedSpecifier.then) {
|
|
5
|
+
return generatedSpecifier.then((value) => {
|
|
6
|
+
reference.generatedSpecifier = value
|
|
7
|
+
return urlSpecifierEncoding.encode(reference)
|
|
8
|
+
})
|
|
9
|
+
}
|
|
10
|
+
// allow plugin to return a function to bypas default formatting
|
|
11
|
+
// (which is to use JSON.stringify when url is referenced inside js)
|
|
12
|
+
if (typeof generatedSpecifier === "function") {
|
|
13
|
+
return generatedSpecifier()
|
|
14
|
+
}
|
|
15
|
+
const formatter = formatters[reference.type]
|
|
16
|
+
const value = formatter
|
|
17
|
+
? formatter.encode(generatedSpecifier)
|
|
18
|
+
: generatedSpecifier
|
|
19
|
+
if (reference.escape) {
|
|
20
|
+
return reference.escape(value)
|
|
21
|
+
}
|
|
22
|
+
return value
|
|
23
|
+
},
|
|
24
|
+
decode: (reference) => {
|
|
25
|
+
const formatter = formatters[reference.type]
|
|
26
|
+
return formatter
|
|
27
|
+
? formatter.decode(reference.generatedSpecifier)
|
|
28
|
+
: reference.generatedSpecifier
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
const formatters = {
|
|
32
|
+
"js_import_export": { encode: JSON.stringify, decode: JSON.parse },
|
|
33
|
+
"js_url_specifier": { encode: JSON.stringify, decode: JSON.parse },
|
|
34
|
+
"css_@import": { encode: JSON.stringify, code: JSON.stringify },
|
|
35
|
+
// https://github.com/webpack-contrib/css-loader/pull/627/files
|
|
36
|
+
"css_url": {
|
|
37
|
+
encode: (url) => {
|
|
38
|
+
// If url is already wrapped in quotes, remove them
|
|
39
|
+
url = formatters.css_url.decode(url)
|
|
40
|
+
// Should url be wrapped?
|
|
41
|
+
// See https://drafts.csswg.org/css-values-3/#urls
|
|
42
|
+
if (/["'() \t\n]/.test(url)) {
|
|
43
|
+
return `"${url.replace(/"/g, '\\"').replace(/\n/g, "\\n")}"`
|
|
44
|
+
}
|
|
45
|
+
return url
|
|
46
|
+
},
|
|
47
|
+
decode: (url) => {
|
|
48
|
+
const firstChar = url[0]
|
|
49
|
+
const lastChar = url[url.length - 1]
|
|
50
|
+
if (firstChar === `"` && lastChar === `"`) {
|
|
51
|
+
return url.slice(1, -1)
|
|
52
|
+
}
|
|
53
|
+
if (firstChar === `'` && lastChar === `'`) {
|
|
54
|
+
return url.slice(1, -1)
|
|
55
|
+
}
|
|
56
|
+
return url
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// the following apis are creating js entry points:
|
|
2
|
+
// - new Worker()
|
|
3
|
+
// - new SharedWorker()
|
|
4
|
+
// - navigator.serviceWorker.register()
|
|
5
|
+
export const isWebWorkerEntryPointReference = (reference) => {
|
|
6
|
+
if (reference.subtype === "new_url_first_arg") {
|
|
7
|
+
return ["worker", "service_worker", "shared_worker"].includes(
|
|
8
|
+
reference.expectedSubtype,
|
|
9
|
+
)
|
|
10
|
+
}
|
|
11
|
+
return [
|
|
12
|
+
"new_worker_first_arg",
|
|
13
|
+
"new_shared_worker_first_arg",
|
|
14
|
+
"service_worker_register_first_arg",
|
|
15
|
+
].includes(reference.subtype)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const isWebWorkerUrlInfo = (urlInfo) => {
|
|
19
|
+
return (
|
|
20
|
+
urlInfo.subtype === "worker" ||
|
|
21
|
+
urlInfo.subtype === "service_worker" ||
|
|
22
|
+
urlInfo.subtype === "shared_worker"
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// export const isEntryPoint = (urlInfo, urlGraph) => {
|
|
27
|
+
// if (urlInfo.data.isEntryPoint) {
|
|
28
|
+
// return true
|
|
29
|
+
// }
|
|
30
|
+
// if (isWebWorker(urlInfo)) {
|
|
31
|
+
// // - new Worker("a.js") -> "a.js" is an entry point
|
|
32
|
+
// // - self.importScripts("b.js") -> "b.js" is not an entry point
|
|
33
|
+
// // So the following logic applies to infer if the file is a web worker entry point
|
|
34
|
+
// // "When a non-webworker file references a worker file, the worker file is an entry point"
|
|
35
|
+
// const dependents = Array.from(urlInfo.dependents)
|
|
36
|
+
// return dependents.some((dependentUrl) => {
|
|
37
|
+
// const dependentUrlInfo = urlGraph.getUrlInfo(dependentUrl)
|
|
38
|
+
// return !isWebWorker(dependentUrlInfo)
|
|
39
|
+
// })
|
|
40
|
+
// }
|
|
41
|
+
// return false
|
|
42
|
+
// }
|
package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js
RENAMED
|
File without changes
|
package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { createEventSourceConnection } from "
|
|
1
|
+
import { createEventSourceConnection } from "@jsenv/core/src/helpers/event_source/event_source.js"
|
|
2
|
+
import { urlHotMetas } from "../../../import_meta_hot/client/import_meta_hot.js"
|
|
2
3
|
import {
|
|
3
4
|
isAutoreloadEnabled,
|
|
4
5
|
setAutoreloadPreference,
|
|
@@ -9,7 +10,6 @@ import {
|
|
|
9
10
|
reloadDOMNodesUsingUrl,
|
|
10
11
|
reloadJsImport,
|
|
11
12
|
} from "./reload.js"
|
|
12
|
-
import { urlHotMetas } from "./import_meta_hot.js"
|
|
13
13
|
|
|
14
14
|
const reloadMessages = []
|
|
15
15
|
const reloadMessagesSignal = { onchange: () => {} }
|
|
@@ -26,13 +26,16 @@ const dequeue = async () => {
|
|
|
26
26
|
const callbacks = pendingCallbacks.slice()
|
|
27
27
|
pendingCallbacks = []
|
|
28
28
|
running = true
|
|
29
|
-
|
|
30
|
-
await previous
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
try {
|
|
30
|
+
await callbacks.reduce(async (previous, callback) => {
|
|
31
|
+
await previous
|
|
32
|
+
await callback()
|
|
33
|
+
}, Promise.resolve())
|
|
34
|
+
} finally {
|
|
35
|
+
running = false
|
|
36
|
+
if (pendingCallbacks.length) {
|
|
37
|
+
dequeue()
|
|
38
|
+
}
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
41
|
|
|
@@ -93,11 +96,15 @@ const applyHotReload = async ({ hotInstructions }) => {
|
|
|
93
96
|
// if (!urlHotMeta) {return }
|
|
94
97
|
|
|
95
98
|
if (type === "prune") {
|
|
96
|
-
console.
|
|
99
|
+
console.groupCollapsed(
|
|
100
|
+
`[jsenv] prune: ${boundary} (inside ${acceptedBy})`,
|
|
101
|
+
)
|
|
97
102
|
} else if (acceptedBy === boundary) {
|
|
98
|
-
console.
|
|
103
|
+
console.groupCollapsed(`[jsenv] hot reloading: ${boundary}`)
|
|
99
104
|
} else {
|
|
100
|
-
console.
|
|
105
|
+
console.groupCollapsed(
|
|
106
|
+
`[jsenv] hot reloading: ${acceptedBy} inside ${boundary}`,
|
|
107
|
+
)
|
|
101
108
|
}
|
|
102
109
|
if (urlHotMeta && urlHotMeta.disposeCallback) {
|
|
103
110
|
console.log(`call dispose callback`)
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
parseSrcSet,
|
|
3
|
+
stringifySrcSet,
|
|
4
|
+
} from "@jsenv/ast/src/html/html_src_set.js"
|
|
2
5
|
|
|
3
6
|
import { injectQuery, compareTwoUrlPaths } from "./url_helpers.js"
|
|
4
7
|
|
|
@@ -57,7 +60,7 @@ export const reloadDOMNodesUsingUrl = (urlToReload) => {
|
|
|
57
60
|
visitNodeAttributeAsUrl(img, "src")
|
|
58
61
|
const srcset = img.srcset
|
|
59
62
|
if (srcset) {
|
|
60
|
-
const srcCandidates =
|
|
63
|
+
const srcCandidates = parseSrcSet(srcset)
|
|
61
64
|
srcCandidates.forEach((srcCandidate) => {
|
|
62
65
|
const url = new URL(srcCandidate.specifier, `${window.location.href}`)
|
|
63
66
|
if (shouldReloadUrl(url)) {
|
|
@@ -65,7 +68,7 @@ export const reloadDOMNodesUsingUrl = (urlToReload) => {
|
|
|
65
68
|
}
|
|
66
69
|
})
|
|
67
70
|
mutations.push(() => {
|
|
68
|
-
img.srcset =
|
|
71
|
+
img.srcset = stringifySrcSet(srcCandidates)
|
|
69
72
|
})
|
|
70
73
|
}
|
|
71
74
|
})
|
|
File without changes
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {
|
|
2
|
+
parseHtmlString,
|
|
3
|
+
stringifyHtmlAst,
|
|
4
|
+
injectScriptNodeAsEarlyAsPossible,
|
|
5
|
+
createHtmlNode,
|
|
6
|
+
} from "@jsenv/ast"
|
|
7
|
+
|
|
8
|
+
export const jsenvPluginDevSSEClient = () => {
|
|
9
|
+
const eventSourceClientFileUrl = new URL(
|
|
10
|
+
"./client/event_source_client.js",
|
|
11
|
+
import.meta.url,
|
|
12
|
+
).href
|
|
13
|
+
|
|
14
|
+
return {
|
|
15
|
+
name: "jsenv:dev_sse_client",
|
|
16
|
+
appliesDuring: { dev: true },
|
|
17
|
+
transformUrlContent: {
|
|
18
|
+
html: (htmlUrlInfo, context) => {
|
|
19
|
+
const htmlAst = parseHtmlString(htmlUrlInfo.content)
|
|
20
|
+
const [eventSourceClientReference] = context.referenceUtils.inject({
|
|
21
|
+
type: "script_src",
|
|
22
|
+
expectedType: "js_module",
|
|
23
|
+
specifier: eventSourceClientFileUrl,
|
|
24
|
+
})
|
|
25
|
+
injectScriptNodeAsEarlyAsPossible(
|
|
26
|
+
htmlAst,
|
|
27
|
+
createHtmlNode({
|
|
28
|
+
"tagName": "script",
|
|
29
|
+
"type": "module",
|
|
30
|
+
"src": eventSourceClientReference.generatedSpecifier,
|
|
31
|
+
"injected-by": "jsenv:dev_sse_client",
|
|
32
|
+
}),
|
|
33
|
+
)
|
|
34
|
+
const htmlModified = stringifyHtmlAst(htmlAst)
|
|
35
|
+
return {
|
|
36
|
+
content: htmlModified,
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
}
|