@jsenv/core 27.0.0-alpha.2 → 27.0.0-alpha.20
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/main.js +4 -0
- package/package.json +16 -12
- package/readme.md +4 -12
- package/src/build/build.js +512 -304
- package/src/build/build_urls_generator.js +33 -21
- package/src/build/graph_utils.js +31 -0
- package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +33 -15
- package/src/build/inject_service_worker_urls.js +79 -0
- package/src/build/resync_ressource_hints.js +83 -0
- package/src/build/start_build_server.js +188 -0
- package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +2 -2
- package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
- package/src/dev/start_dev_server.js +19 -22
- package/src/execute/execute.js +23 -4
- package/src/execute/run.js +17 -54
- package/src/execute/runtimes/browsers/from_playwright.js +167 -146
- package/src/execute/runtimes/node/node_process.js +281 -37
- package/src/omega/{runtime_support/default_runtime_support.js → compat/default_runtime_compat.js} +3 -5
- package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +66 -4
- package/src/omega/compat/runtime_compat.js +50 -0
- package/src/omega/errors.js +51 -58
- package/src/omega/fetched_content_compliance.js +24 -0
- package/src/omega/file_url_converter.js +8 -50
- package/src/omega/kitchen.js +405 -286
- package/src/omega/server/file_service.js +9 -11
- package/src/omega/url_graph/url_graph_load.js +14 -7
- package/src/omega/url_graph/url_graph_report.js +7 -5
- package/src/omega/url_graph.js +22 -9
- 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 +2 -2
- package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
- 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/{dev/plugins/autoreload/jsenv_plugin_autoreload.js → plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js} +27 -168
- 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 +21 -0
- package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
- package/src/{build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js → plugins/bundling/js_module/bundle_js_module.js} +105 -78
- package/src/plugins/bundling/jsenv_plugin_bundling.js +51 -0
- package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +48 -41
- package/src/plugins/file_urls/jsenv_plugin_file_urls.js +66 -0
- package/src/{omega/core_plugins → plugins}/filesystem_magic/jsenv_plugin_filesystem_magic.js +7 -4
- 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/{omega/core_plugins → plugins}/html_supervisor/client/html_supervisor_installer.js +3 -2
- package/src/{omega/core_plugins → plugins}/html_supervisor/client/html_supervisor_setup.js +0 -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/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +38 -46
- package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -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 +2 -2
- package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +98 -0
- package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +41 -13
- 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 +37 -31
- package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +25 -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 +18 -14
- package/src/{omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js → plugins/inline/jsenv_plugin_html_inline_content.js} +61 -40
- package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
- package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +6 -6
- package/src/plugins/inline/jsenv_plugin_js_inline_content.js +263 -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 +15 -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/{omega/core_plugins → plugins}/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +15 -15
- package/src/{omega → plugins}/plugin_controller.js +18 -10
- package/src/plugins/plugins.js +73 -0
- package/src/plugins/transpilation/as_js_classic/client/s.js +808 -0
- package/src/plugins/transpilation/as_js_classic/client/s.js.md +1 -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 +191 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_script_type_module_as_classic.js +156 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_top_level_await.js +37 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_workers_type_module_as_classic.js +133 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
- package/src/{omega/core_plugins/babel/babel_helper → plugins/transpilation/babel/helpers}/babel_plugin_babel_helpers_as_jsenv_imports.js +1 -2
- package/src/plugins/transpilation/babel/helpers/babel_plugin_structure.js +158 -0
- 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 +38 -22
- package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/.eslintrc.cjs +0 -0
- 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 +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
- package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
- package/src/{omega/core_plugins → plugins/transpilation}/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -0
- package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +243 -0
- package/src/plugins/transpilation/jsenv_plugin_transpilation.js +40 -0
- package/src/plugins/url_references/css/css_urls.js +49 -0
- package/src/plugins/url_references/html/html_urls.js +273 -0
- package/src/plugins/url_references/js/js_urls.js +170 -0
- package/src/plugins/url_references/jsenv_plugin_url_references.js +18 -0
- package/src/plugins/url_references/webmanifest/webmanifest_urls.js +17 -0
- package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +12 -5
- package/src/{omega/core_plugins → plugins}/url_version/jsenv_plugin_url_version.js +8 -8
- package/src/test/execute_plan.js +25 -11
- package/src/test/execute_test_plan.js +14 -1
- package/src/test/logs_file_execution.js +8 -7
- package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
- package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
- 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/babel_helper/babel_helper_directory.js +0 -29
- package/src/omega/core_plugins/babel/babel_helper/client/.eslintrc.cjs +0 -24
- package/src/omega/core_plugins/babel/babel_helper/client/AsyncGenerator/AsyncGenerator.js +0 -81
- package/src/omega/core_plugins/babel/babel_helper/client/AwaitValue/AwaitValue.js +0 -3
- package/src/omega/core_plugins/babel/babel_helper/client/applyDecoratorDescriptor/applyDecoratorDescriptor.js +0 -33
- package/src/omega/core_plugins/babel/babel_helper/client/arrayLikeToArray/arrayLikeToArray.js +0 -7
- package/src/omega/core_plugins/babel/babel_helper/client/arrayWithHoles/arrayWithHoles.js +0 -4
- package/src/omega/core_plugins/babel/babel_helper/client/arrayWithoutHoles/arrayWithoutHoles.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/assertThisInitialized/assertThisInitialized.js +0 -7
- package/src/omega/core_plugins/babel/babel_helper/client/asyncGeneratorDelegate/asyncGeneratorDelegate.js +0 -40
- package/src/omega/core_plugins/babel/babel_helper/client/asyncIterator/asyncIterator.js +0 -65
- package/src/omega/core_plugins/babel/babel_helper/client/asyncToGenerator/asyncToGenerator.js +0 -34
- package/src/omega/core_plugins/babel/babel_helper/client/awaitAsyncGenerator/awaitAsyncGenerator.js +0 -5
- package/src/omega/core_plugins/babel/babel_helper/client/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +0 -20
- package/src/omega/core_plugins/babel/babel_helper/client/classApplyDescriptorGet/classApplyDescriptorGet.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/classApplyDescriptorSet/classApplyDescriptorSet.js +0 -13
- package/src/omega/core_plugins/babel/babel_helper/client/classCallCheck/classCallCheck.js +0 -5
- package/src/omega/core_plugins/babel/babel_helper/client/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +0 -5
- package/src/omega/core_plugins/babel/babel_helper/client/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/classExtractFieldDescriptor/classExtractFieldDescriptor.js +0 -7
- package/src/omega/core_plugins/babel/babel_helper/client/classNameTDZError/classNameTDZError.js +0 -4
- package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +0 -7
- package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldGet/classPrivateFieldGet.js +0 -7
- package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +0 -5
- package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldSet/classPrivateFieldSet.js +0 -8
- package/src/omega/core_plugins/babel/babel_helper/client/classPrivateMethodGet/classPrivateMethodGet.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/classPrivateMethodSet/classPrivateMethodSet.js +0 -3
- package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +0 -9
- package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +0 -15
- package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +0 -3
- package/src/omega/core_plugins/babel/babel_helper/client/construct/construct.js +0 -16
- package/src/omega/core_plugins/babel/babel_helper/client/createClass/createClass.js +0 -15
- package/src/omega/core_plugins/babel/babel_helper/client/createForOfIteratorHelper/createForOfIteratorHelper.js +0 -60
- package/src/omega/core_plugins/babel/babel_helper/client/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +0 -23
- package/src/omega/core_plugins/babel/babel_helper/client/createRawReactElement/createRawReactElement.js +0 -50
- package/src/omega/core_plugins/babel/babel_helper/client/createSuper/createSuper.js +0 -22
- package/src/omega/core_plugins/babel/babel_helper/client/decorate/decorate.js +0 -403
- package/src/omega/core_plugins/babel/babel_helper/client/defaults/defaults.js +0 -11
- package/src/omega/core_plugins/babel/babel_helper/client/defineEnumerableProperties/defineEnumerableProperties.js +0 -23
- package/src/omega/core_plugins/babel/babel_helper/client/defineProperty/defineProperty.js +0 -18
- package/src/omega/core_plugins/babel/babel_helper/client/extends/extends.js +0 -14
- package/src/omega/core_plugins/babel/babel_helper/client/get/get.js +0 -19
- package/src/omega/core_plugins/babel/babel_helper/client/getPrototypeOf/getPrototypeOf.js +0 -4
- package/src/omega/core_plugins/babel/babel_helper/client/inherits/inherits.js +0 -19
- package/src/omega/core_plugins/babel/babel_helper/client/inheritsLoose/inheritsLoose.js +0 -7
- package/src/omega/core_plugins/babel/babel_helper/client/initializerDefineProperty/initializerDefineProperty.js +0 -10
- package/src/omega/core_plugins/babel/babel_helper/client/initializerWarningHelper/initializerWarningHelper.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/instanceof/instanceof.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/interopRequireDefault/interopRequireDefault.js +0 -3
- package/src/omega/core_plugins/babel/babel_helper/client/interopRequireWildcard/interopRequireWildcard.js +0 -37
- package/src/omega/core_plugins/babel/babel_helper/client/isNativeFunction/isNativeFunction.js +0 -4
- package/src/omega/core_plugins/babel/babel_helper/client/isNativeReflectConstruct/isNativeReflectConstruct.js +0 -21
- package/src/omega/core_plugins/babel/babel_helper/client/iterableToArray/iterableToArray.js +0 -7
- package/src/omega/core_plugins/babel/babel_helper/client/iterableToArrayLimit/iterableToArrayLimit.js +0 -36
- package/src/omega/core_plugins/babel/babel_helper/client/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +0 -10
- package/src/omega/core_plugins/babel/babel_helper/client/jsx/jsx.js +0 -50
- package/src/omega/core_plugins/babel/babel_helper/client/maybeArrayLike/maybeArrayLike.js +0 -10
- package/src/omega/core_plugins/babel/babel_helper/client/newArrowCheck/newArrowCheck.js +0 -5
- package/src/omega/core_plugins/babel/babel_helper/client/nonIterableRest/nonIterableRest.js +0 -5
- package/src/omega/core_plugins/babel/babel_helper/client/nonIterableSpread/nonIterableSpread.js +0 -5
- package/src/omega/core_plugins/babel/babel_helper/client/objectDestructuringEmpty/objectDestructuringEmpty.js +0 -3
- package/src/omega/core_plugins/babel/babel_helper/client/objectSpread/objectSpread.js +0 -23
- package/src/omega/core_plugins/babel/babel_helper/client/objectSpread2/objectSpread2.js +0 -41
- package/src/omega/core_plugins/babel/babel_helper/client/objectWithoutProperties/objectWithoutProperties.js +0 -19
- package/src/omega/core_plugins/babel/babel_helper/client/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +0 -13
- package/src/omega/core_plugins/babel/babel_helper/client/possibleConstructorReturn/possibleConstructorReturn.js +0 -10
- package/src/omega/core_plugins/babel/babel_helper/client/readOnlyError/readOnlyError.js +0 -4
- package/src/omega/core_plugins/babel/babel_helper/client/readme.md +0 -8
- package/src/omega/core_plugins/babel/babel_helper/client/set/set.js +0 -44
- package/src/omega/core_plugins/babel/babel_helper/client/setPrototypeOf/setPrototypeOf.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/skipFirstGeneratorNext/skipFirstGeneratorNext.js +0 -8
- package/src/omega/core_plugins/babel/babel_helper/client/slicedToArray/slicedToArray.js +0 -10
- package/src/omega/core_plugins/babel/babel_helper/client/slicedToArrayLoose/slicedToArrayLoose.js +0 -13
- package/src/omega/core_plugins/babel/babel_helper/client/superPropBase/superPropBase.js +0 -10
- package/src/omega/core_plugins/babel/babel_helper/client/taggedTemplateLiteral/taggedTemplateLiteral.js +0 -10
- package/src/omega/core_plugins/babel/babel_helper/client/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +0 -7
- package/src/omega/core_plugins/babel/babel_helper/client/tdz/tdz.js +0 -4
- package/src/omega/core_plugins/babel/babel_helper/client/temporalRef/temporalRef.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/temporalUndefined/temporalUndefined.js +0 -3
- package/src/omega/core_plugins/babel/babel_helper/client/toArray/toArray.js +0 -10
- package/src/omega/core_plugins/babel/babel_helper/client/toConsumableArray/toConsumableArray.js +0 -10
- package/src/omega/core_plugins/babel/babel_helper/client/toPrimitive/toPrimitive.js +0 -10
- package/src/omega/core_plugins/babel/babel_helper/client/toPropertyKey/toPropertyKey.js +0 -6
- package/src/omega/core_plugins/babel/babel_helper/client/typeof/typeof.js +0 -14
- package/src/omega/core_plugins/babel/babel_helper/client/unsupportedIterableToArray/unsupportedIterableToArray.js +0 -12
- package/src/omega/core_plugins/babel/babel_helper/client/wrapAsyncGenerator/wrapAsyncGenerator.js +0 -8
- package/src/omega/core_plugins/babel/babel_helper/client/wrapNativeSuper/wrapNativeSuper.js +0 -30
- package/src/omega/core_plugins/babel/babel_helper/client/wrapRegExp/wrapRegExp.js +0 -63
- package/src/omega/core_plugins/babel/babel_helper/client/writeOnlyError/writeOnlyError.js +0 -4
- package/src/omega/core_plugins/babel/helpers/babel_plugin_structure.js +0 -187
- package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
- 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_new_inline_content.js +0 -210
- package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
- package/src/omega/core_plugins.js +0 -39
- package/src/omega/runtime_support/runtime_support.js +0 -20
- 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
|
@@ -2,27 +2,21 @@
|
|
|
2
2
|
* Things happening here
|
|
3
3
|
* - html supervisor module injection
|
|
4
4
|
* - scripts are wrapped to be supervised
|
|
5
|
-
*
|
|
6
|
-
* TODO:
|
|
7
|
-
* - if ressource is referenced by ressource hint we should do sthing?
|
|
8
|
-
* I think so when we inject ?js_classic
|
|
9
5
|
*/
|
|
10
6
|
|
|
11
|
-
import { injectQueryParams } from "@jsenv/utils/urls/url_utils.js"
|
|
12
7
|
import {
|
|
13
8
|
parseHtmlString,
|
|
14
9
|
stringifyHtmlAst,
|
|
15
10
|
visitHtmlAst,
|
|
16
11
|
getHtmlNodeAttributeByName,
|
|
17
12
|
removeHtmlNodeAttributeByName,
|
|
18
|
-
setHtmlNodeText,
|
|
19
|
-
assignHtmlNodeAttributes,
|
|
20
13
|
parseScriptNode,
|
|
21
14
|
injectScriptAsEarlyAsPossible,
|
|
22
15
|
createHtmlNode,
|
|
23
16
|
htmlNodePosition,
|
|
24
|
-
removeHtmlNodeText,
|
|
25
17
|
getHtmlNodeTextNode,
|
|
18
|
+
removeHtmlNodeText,
|
|
19
|
+
setHtmlNodeGeneratedText,
|
|
26
20
|
} from "@jsenv/utils/html_ast/html_ast.js"
|
|
27
21
|
import { generateInlineContentUrl } from "@jsenv/utils/urls/inline_content_url_generator.js"
|
|
28
22
|
|
|
@@ -45,7 +39,7 @@ export const jsenvPluginHtmlSupervisor = ({
|
|
|
45
39
|
dev: true,
|
|
46
40
|
test: true,
|
|
47
41
|
},
|
|
48
|
-
|
|
42
|
+
transformUrlContent: {
|
|
49
43
|
html: ({ url, content }, { referenceUtils }) => {
|
|
50
44
|
const htmlAst = parseHtmlString(content)
|
|
51
45
|
const scriptsToSupervise = []
|
|
@@ -64,27 +58,22 @@ export const jsenvPluginHtmlSupervisor = ({
|
|
|
64
58
|
lineEnd,
|
|
65
59
|
columnEnd,
|
|
66
60
|
})
|
|
67
|
-
if (scriptCategory === "classic") {
|
|
68
|
-
inlineScriptUrl = injectQueryParams(inlineScriptUrl, {
|
|
69
|
-
js_classic: "",
|
|
70
|
-
})
|
|
71
|
-
}
|
|
72
61
|
const [inlineScriptReference] = referenceUtils.foundInline({
|
|
73
62
|
type: "script_src",
|
|
63
|
+
expectedType: { classic: "js_classic", module: "js_module" }[
|
|
64
|
+
scriptCategory
|
|
65
|
+
],
|
|
74
66
|
line: line - 1,
|
|
75
67
|
column,
|
|
76
|
-
isOriginal,
|
|
68
|
+
isOriginalPosition: isOriginal,
|
|
77
69
|
specifier: inlineScriptUrl,
|
|
78
|
-
contentType: "
|
|
70
|
+
contentType: "text/javascript",
|
|
79
71
|
content: textNode.value,
|
|
80
72
|
})
|
|
81
|
-
assignHtmlNodeAttributes(node, {
|
|
82
|
-
"src": inlineScriptReference.generatedSpecifier,
|
|
83
|
-
"src-generated-from-inline-content": "",
|
|
84
|
-
})
|
|
85
73
|
removeHtmlNodeText(node)
|
|
86
74
|
scriptsToSupervise.push({
|
|
87
75
|
node,
|
|
76
|
+
isInline: true,
|
|
88
77
|
type: scriptCategory,
|
|
89
78
|
src: inlineScriptReference.generatedSpecifier,
|
|
90
79
|
})
|
|
@@ -105,6 +94,7 @@ export const jsenvPluginHtmlSupervisor = ({
|
|
|
105
94
|
const crossorigin = crossoriginAttribute
|
|
106
95
|
? crossoriginAttribute.value
|
|
107
96
|
: undefined
|
|
97
|
+
removeHtmlNodeAttributeByName(node, "src")
|
|
108
98
|
scriptsToSupervise.push({
|
|
109
99
|
node,
|
|
110
100
|
type: scriptCategory,
|
|
@@ -151,6 +141,7 @@ export const jsenvPluginHtmlSupervisor = ({
|
|
|
151
141
|
}
|
|
152
142
|
const [htmlSupervisorInstallerFileReference] = referenceUtils.inject({
|
|
153
143
|
type: "js_import_export",
|
|
144
|
+
expectedType: "js_module",
|
|
154
145
|
specifier: htmlSupervisorInstallerFileUrl,
|
|
155
146
|
})
|
|
156
147
|
injectScriptAsEarlyAsPossible(
|
|
@@ -159,25 +150,24 @@ export const jsenvPluginHtmlSupervisor = ({
|
|
|
159
150
|
"tagName": "script",
|
|
160
151
|
"type": "module",
|
|
161
152
|
"textContent": `
|
|
162
|
-
import { installHtmlSupervisor } from ${
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
installHtmlSupervisor(${JSON.stringify(
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
153
|
+
import { installHtmlSupervisor } from ${
|
|
154
|
+
htmlSupervisorInstallerFileReference.generatedSpecifier
|
|
155
|
+
}
|
|
156
|
+
installHtmlSupervisor(${JSON.stringify(
|
|
157
|
+
{
|
|
158
|
+
logs,
|
|
159
|
+
measurePerf,
|
|
160
|
+
},
|
|
161
|
+
null,
|
|
162
|
+
" ",
|
|
163
|
+
)})`,
|
|
173
164
|
"injected-by": "jsenv:html_supervisor",
|
|
174
165
|
}),
|
|
175
166
|
)
|
|
176
167
|
const [htmlSupervisorSetupFileReference] = referenceUtils.inject({
|
|
177
168
|
type: "script_src",
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}),
|
|
169
|
+
expectedType: "js_classic",
|
|
170
|
+
specifier: htmlSupervisorSetupFileUrl,
|
|
181
171
|
})
|
|
182
172
|
injectScriptAsEarlyAsPossible(
|
|
183
173
|
htmlAst,
|
|
@@ -188,14 +178,9 @@ installHtmlSupervisor(${JSON.stringify(
|
|
|
188
178
|
}),
|
|
189
179
|
)
|
|
190
180
|
scriptsToSupervise.forEach(
|
|
191
|
-
({ node, type, src, integrity, crossorigin }) => {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
"content-src": src,
|
|
195
|
-
})
|
|
196
|
-
setHtmlNodeText(
|
|
197
|
-
node,
|
|
198
|
-
generateCodeToSuperviseScript({
|
|
181
|
+
({ node, isInline, type, src, integrity, crossorigin }) => {
|
|
182
|
+
setHtmlNodeGeneratedText(node, {
|
|
183
|
+
generatedText: generateCodeToSuperviseScript({
|
|
199
184
|
type,
|
|
200
185
|
src,
|
|
201
186
|
integrity,
|
|
@@ -203,7 +188,10 @@ installHtmlSupervisor(${JSON.stringify(
|
|
|
203
188
|
htmlSupervisorInstallerSpecifier:
|
|
204
189
|
htmlSupervisorInstallerFileReference.generatedSpecifier,
|
|
205
190
|
}),
|
|
206
|
-
|
|
191
|
+
generatedBy: "jsenv:html_supervisor",
|
|
192
|
+
generatedFromSrc: src,
|
|
193
|
+
generatedFromInlineContent: isInline,
|
|
194
|
+
})
|
|
207
195
|
},
|
|
208
196
|
)
|
|
209
197
|
const htmlModified = stringifyHtmlAst(htmlAst)
|
|
@@ -226,8 +214,12 @@ const generateCodeToSuperviseScript = ({
|
|
|
226
214
|
}) => {
|
|
227
215
|
const paramsAsJson = JSON.stringify({ src, integrity, crossorigin })
|
|
228
216
|
if (type === "module") {
|
|
229
|
-
return `
|
|
230
|
-
superviseScriptTypeModule
|
|
217
|
+
return `
|
|
218
|
+
import { superviseScriptTypeModule } from ${htmlSupervisorInstallerSpecifier}
|
|
219
|
+
superviseScriptTypeModule(${paramsAsJson})
|
|
220
|
+
`
|
|
231
221
|
}
|
|
232
|
-
return `
|
|
222
|
+
return `
|
|
223
|
+
window.__html_supervisor__.superviseScript(${paramsAsJson})
|
|
224
|
+
`
|
|
233
225
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const jsenvPluginHttpUrls = () => {
|
|
2
|
+
return {
|
|
3
|
+
name: "jsenv:http_urls",
|
|
4
|
+
appliesDuring: "*",
|
|
5
|
+
fetchUrlContent: (urlInfo) => {
|
|
6
|
+
if (urlInfo.url.startsWith("http") || urlInfo.url.startsWith("https")) {
|
|
7
|
+
return { external: true }
|
|
8
|
+
}
|
|
9
|
+
return null
|
|
10
|
+
},
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -16,13 +16,12 @@ export const babelPluginMetadataImportMetaHot = () => {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
const collectImportMetaProperties = (programPath) => {
|
|
19
|
-
|
|
19
|
+
const importMetaHotPaths = []
|
|
20
20
|
let hotDecline = false
|
|
21
21
|
let hotAcceptSelf = false
|
|
22
22
|
let hotAcceptDependencies = []
|
|
23
23
|
programPath.traverse({
|
|
24
24
|
MemberExpression(path) {
|
|
25
|
-
if (importMetaHotDetected) return
|
|
26
25
|
const { node } = path
|
|
27
26
|
const { object } = node
|
|
28
27
|
if (object.type !== "MetaProperty") {
|
|
@@ -35,7 +34,7 @@ const collectImportMetaProperties = (programPath) => {
|
|
|
35
34
|
const { property } = node
|
|
36
35
|
const { name } = property
|
|
37
36
|
if (name === "hot") {
|
|
38
|
-
|
|
37
|
+
importMetaHotPaths.push(path)
|
|
39
38
|
}
|
|
40
39
|
},
|
|
41
40
|
CallExpression(path) {
|
|
@@ -64,7 +63,7 @@ const collectImportMetaProperties = (programPath) => {
|
|
|
64
63
|
)
|
|
65
64
|
}
|
|
66
65
|
return {
|
|
67
|
-
specifierPath: firstArgPath.get(index),
|
|
66
|
+
specifierPath: firstArgPath.get(String(index)),
|
|
68
67
|
}
|
|
69
68
|
})
|
|
70
69
|
return
|
|
@@ -79,7 +78,7 @@ const collectImportMetaProperties = (programPath) => {
|
|
|
79
78
|
},
|
|
80
79
|
})
|
|
81
80
|
return {
|
|
82
|
-
|
|
81
|
+
importMetaHotPaths,
|
|
83
82
|
hotDecline,
|
|
84
83
|
hotAcceptSelf,
|
|
85
84
|
hotAcceptDependencies,
|
|
@@ -40,7 +40,9 @@ export const createImportMetaHot = (importMetaUrl) => {
|
|
|
40
40
|
})
|
|
41
41
|
return
|
|
42
42
|
}
|
|
43
|
-
throw new Error(
|
|
43
|
+
throw new Error(
|
|
44
|
+
`invalid call to import.meta.hot.accept(), received ${firstArg}`,
|
|
45
|
+
)
|
|
44
46
|
},
|
|
45
47
|
dispose: (callback) => {
|
|
46
48
|
addUrlMeta(url, {
|
|
@@ -53,7 +53,7 @@ export const collectHotDataFromHtmlAst = (htmlAst) => {
|
|
|
53
53
|
})
|
|
54
54
|
visitUrlSpecifierAttribute({
|
|
55
55
|
node,
|
|
56
|
-
attributeName: "
|
|
56
|
+
attributeName: "generated-from-href",
|
|
57
57
|
hotAccepted,
|
|
58
58
|
})
|
|
59
59
|
}
|
|
@@ -65,7 +65,7 @@ export const collectHotDataFromHtmlAst = (htmlAst) => {
|
|
|
65
65
|
})
|
|
66
66
|
visitUrlSpecifierAttribute({
|
|
67
67
|
node,
|
|
68
|
-
attributeName: "
|
|
68
|
+
attributeName: "generated-from-src",
|
|
69
69
|
hotAccepted,
|
|
70
70
|
})
|
|
71
71
|
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
|
|
2
|
+
import { parseHtmlString } from "@jsenv/utils/html_ast/html_ast.js"
|
|
3
|
+
import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
|
|
4
|
+
|
|
5
|
+
import { collectHotDataFromHtmlAst } from "./html_hot_dependencies.js"
|
|
6
|
+
import { babelPluginMetadataImportMetaHot } from "./babel_plugin_metadata_import_meta_hot.js"
|
|
7
|
+
|
|
8
|
+
const importMetaHotClientFileUrl = new URL(
|
|
9
|
+
"./client/import_meta_hot.js",
|
|
10
|
+
import.meta.url,
|
|
11
|
+
).href
|
|
12
|
+
|
|
13
|
+
export const jsenvPluginImportMetaHot = () => {
|
|
14
|
+
return {
|
|
15
|
+
name: "jsenv:import_meta_hot",
|
|
16
|
+
appliesDuring: "*",
|
|
17
|
+
transformUrlContent: {
|
|
18
|
+
html: (htmlUrlInfo, context) => {
|
|
19
|
+
// during build we don't really care to parse html hot dependencies
|
|
20
|
+
if (context.scenario === "build") {
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
const htmlAst = parseHtmlString(htmlUrlInfo.content)
|
|
24
|
+
const { hotReferences } = collectHotDataFromHtmlAst(htmlAst)
|
|
25
|
+
htmlUrlInfo.data.hotDecline = false
|
|
26
|
+
htmlUrlInfo.data.hotAcceptSelf = false
|
|
27
|
+
htmlUrlInfo.data.hotAcceptDependencies = hotReferences.map(
|
|
28
|
+
({ type, specifier }) => {
|
|
29
|
+
const [reference] = context.referenceUtils.found({
|
|
30
|
+
type,
|
|
31
|
+
specifier,
|
|
32
|
+
})
|
|
33
|
+
return reference.url
|
|
34
|
+
},
|
|
35
|
+
)
|
|
36
|
+
},
|
|
37
|
+
css: (cssUrlInfo) => {
|
|
38
|
+
cssUrlInfo.data.hotDecline = false
|
|
39
|
+
cssUrlInfo.data.hotAcceptSelf = false
|
|
40
|
+
cssUrlInfo.data.hotAcceptDependencies = []
|
|
41
|
+
},
|
|
42
|
+
js_module: async (urlInfo, context) => {
|
|
43
|
+
const { metadata } = await applyBabelPlugins({
|
|
44
|
+
babelPlugins: [babelPluginMetadataImportMetaHot],
|
|
45
|
+
urlInfo,
|
|
46
|
+
})
|
|
47
|
+
const {
|
|
48
|
+
importMetaHotPaths,
|
|
49
|
+
hotDecline,
|
|
50
|
+
hotAcceptSelf,
|
|
51
|
+
hotAcceptDependencies,
|
|
52
|
+
} = metadata
|
|
53
|
+
urlInfo.data.hotDecline = hotDecline
|
|
54
|
+
urlInfo.data.hotAcceptSelf = hotAcceptSelf
|
|
55
|
+
urlInfo.data.hotAcceptDependencies = hotAcceptDependencies
|
|
56
|
+
if (importMetaHotPaths.length === 0) {
|
|
57
|
+
return null
|
|
58
|
+
}
|
|
59
|
+
if (context.scenario === "build") {
|
|
60
|
+
return removeImportMetaHots(urlInfo, importMetaHotPaths)
|
|
61
|
+
}
|
|
62
|
+
return injectImportMetaHot(urlInfo, context)
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const removeImportMetaHots = (urlInfo, importMetaHotPaths) => {
|
|
69
|
+
const magicSource = createMagicSource(urlInfo.content)
|
|
70
|
+
importMetaHotPaths.forEach((path) => {
|
|
71
|
+
magicSource.replace({
|
|
72
|
+
start: path.node.start,
|
|
73
|
+
end: path.node.end,
|
|
74
|
+
replacement: "undefined",
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
return magicSource.toContentAndSourcemap()
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// For some reason using magic source here produce
|
|
81
|
+
// better sourcemap than doing the equivalent with babel
|
|
82
|
+
// I suspect it's because I was doing injectAstAfterImport(programPath, ast.program.body[0])
|
|
83
|
+
// which is likely not well supported by babel
|
|
84
|
+
const injectImportMetaHot = (urlInfo, context) => {
|
|
85
|
+
const [importMetaHotClientFileReference] = context.referenceUtils.inject({
|
|
86
|
+
parentUrl: urlInfo.url,
|
|
87
|
+
type: "js_import_export",
|
|
88
|
+
expectedType: "js_module",
|
|
89
|
+
specifier: importMetaHotClientFileUrl,
|
|
90
|
+
})
|
|
91
|
+
const magicSource = createMagicSource(urlInfo.content)
|
|
92
|
+
magicSource.prepend(
|
|
93
|
+
`import { createImportMetaHot } from ${importMetaHotClientFileReference.generatedSpecifier}
|
|
94
|
+
import.meta.hot = createImportMetaHot(import.meta.url)
|
|
95
|
+
`,
|
|
96
|
+
)
|
|
97
|
+
return magicSource.toContentAndSourcemap()
|
|
98
|
+
}
|
|
@@ -12,18 +12,15 @@
|
|
|
12
12
|
import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
|
|
13
13
|
import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
|
|
14
14
|
|
|
15
|
-
import { collectProgramImportMetas } from "@jsenv/utils/js_ast/program_import_metas.js"
|
|
16
|
-
|
|
17
15
|
export const jsenvPluginImportMetaScenarios = () => {
|
|
18
16
|
return {
|
|
19
17
|
name: "jsenv:import_meta_scenario",
|
|
20
18
|
appliesDuring: "*",
|
|
21
|
-
|
|
22
|
-
js_module: async (
|
|
19
|
+
transformUrlContent: {
|
|
20
|
+
js_module: async (urlInfo, { scenario }) => {
|
|
23
21
|
const { metadata } = await applyBabelPlugins({
|
|
24
22
|
babelPlugins: [babelPluginMetadataImportMetaScenarios],
|
|
25
|
-
|
|
26
|
-
content,
|
|
23
|
+
urlInfo,
|
|
27
24
|
})
|
|
28
25
|
const { dev = [], test = [], build = [] } = metadata.importMetaScenarios
|
|
29
26
|
const replacements = []
|
|
@@ -32,24 +29,34 @@ export const jsenvPluginImportMetaScenarios = () => {
|
|
|
32
29
|
}
|
|
33
30
|
if (scenario === "dev") {
|
|
34
31
|
dev.forEach((path) => {
|
|
35
|
-
replace(path, true)
|
|
32
|
+
replace(path, "true")
|
|
36
33
|
})
|
|
37
34
|
} else if (scenario === "test") {
|
|
35
|
+
// test is also considered a dev environment
|
|
36
|
+
// just like the dev server can be used to debug test files
|
|
37
|
+
// without this people would have to write
|
|
38
|
+
// if (import.meta.dev || import.meta.test) or if (!import.meta.build)
|
|
39
|
+
dev.forEach((path) => {
|
|
40
|
+
replace(path, "true")
|
|
41
|
+
})
|
|
38
42
|
test.forEach((path) => {
|
|
39
|
-
replace(path, true)
|
|
43
|
+
replace(path, "true")
|
|
40
44
|
})
|
|
41
45
|
} else if (scenario === "build") {
|
|
46
|
+
// replacing by undefined might not be required
|
|
47
|
+
// as I suppose rollup would consider them as undefined
|
|
48
|
+
// but let's make it explicit to ensure code is properly tree-shaked
|
|
42
49
|
dev.forEach((path) => {
|
|
43
|
-
replace(path, undefined)
|
|
50
|
+
replace(path, "undefined")
|
|
44
51
|
})
|
|
45
52
|
test.forEach((path) => {
|
|
46
|
-
replace(path, undefined)
|
|
53
|
+
replace(path, "undefined")
|
|
47
54
|
})
|
|
48
55
|
build.forEach((path) => {
|
|
49
|
-
replace(path, true)
|
|
56
|
+
replace(path, "true")
|
|
50
57
|
})
|
|
51
58
|
}
|
|
52
|
-
const magicSource = createMagicSource(content)
|
|
59
|
+
const magicSource = createMagicSource(urlInfo.content)
|
|
53
60
|
replacements.forEach(({ path, value }) => {
|
|
54
61
|
magicSource.replace({
|
|
55
62
|
start: path.node.start,
|
|
@@ -68,7 +75,28 @@ const babelPluginMetadataImportMetaScenarios = () => {
|
|
|
68
75
|
name: "metadata-import-meta-scenarios",
|
|
69
76
|
visitor: {
|
|
70
77
|
Program(programPath, state) {
|
|
71
|
-
const importMetas =
|
|
78
|
+
const importMetas = {}
|
|
79
|
+
programPath.traverse({
|
|
80
|
+
MemberExpression(path) {
|
|
81
|
+
const { node } = path
|
|
82
|
+
const { object } = node
|
|
83
|
+
if (object.type !== "MetaProperty") {
|
|
84
|
+
return
|
|
85
|
+
}
|
|
86
|
+
const { property: objectProperty } = object
|
|
87
|
+
if (objectProperty.name !== "meta") {
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
const { property } = node
|
|
91
|
+
const { name } = property
|
|
92
|
+
const importMetaPaths = importMetas[name]
|
|
93
|
+
if (importMetaPaths) {
|
|
94
|
+
importMetaPaths.push(path)
|
|
95
|
+
} else {
|
|
96
|
+
importMetas[name] = [path]
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
})
|
|
72
100
|
state.file.metadata.importMetaScenarios = {
|
|
73
101
|
dev: importMetas.dev,
|
|
74
102
|
test: importMetas.test,
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const getCurrentScriptSrc = () => {
|
|
2
|
+
const { currentScript } = document
|
|
3
|
+
if (currentScript) return currentScript.src
|
|
4
|
+
|
|
5
|
+
// https://github.com/amiller-gh/currentScript-polyfill
|
|
6
|
+
|
|
7
|
+
const scripts = Array.prototype.slice.call(
|
|
8
|
+
document.getElementsByTagName("script"),
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
const readyScript = scripts.find((script) => {
|
|
12
|
+
return script.readyState === "interactive"
|
|
13
|
+
})
|
|
14
|
+
if (readyScript) return readyScript
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
throw new Error()
|
|
18
|
+
} catch (err) {
|
|
19
|
+
// Find the second match for the "at" string to get file src url from stack.
|
|
20
|
+
// Specifically works with the format of stack traces in IE.
|
|
21
|
+
const stackDetails = /.*at [^(]*\((.*):(.+):(.+)\)$/gi.exec(err.stack)
|
|
22
|
+
const scriptLocation = (stackDetails || [false])[1]
|
|
23
|
+
const line = (stackDetails || [false])[2]
|
|
24
|
+
const currentLocation = document.location.href.replace(
|
|
25
|
+
document.location.hash,
|
|
26
|
+
"",
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
if (scriptLocation === currentLocation) {
|
|
30
|
+
const source = document.documentElement.outerHTML
|
|
31
|
+
const codeRegExp = new RegExp(
|
|
32
|
+
`(?:[^\\n]+?\\n){0,${
|
|
33
|
+
line - 2
|
|
34
|
+
}}[^<]*<script>([\\d\\D]*?)<\\/script>[\\d\\D]*`,
|
|
35
|
+
"i",
|
|
36
|
+
)
|
|
37
|
+
const code = source.replace(codeRegExp, "$1").trim()
|
|
38
|
+
|
|
39
|
+
return scripts.find((script) => {
|
|
40
|
+
return script.innerHTML && script.innerHTML.trim() === code
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return scripts.find((script) => {
|
|
45
|
+
return script.src === scriptLocation
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const url = getCurrentScriptSrc()
|
|
51
|
+
|
|
52
|
+
export default url
|
|
@@ -30,8 +30,7 @@ import {
|
|
|
30
30
|
getHtmlNodeAttributeByName,
|
|
31
31
|
htmlNodePosition,
|
|
32
32
|
removeHtmlNodeAttributeByName,
|
|
33
|
-
|
|
34
|
-
assignHtmlNodeAttributes,
|
|
33
|
+
setHtmlNodeGeneratedText,
|
|
35
34
|
getHtmlNodeTextNode,
|
|
36
35
|
removeHtmlNode,
|
|
37
36
|
} from "@jsenv/utils/html_ast/html_ast.js"
|
|
@@ -59,16 +58,16 @@ export const jsenvPluginImportmap = () => {
|
|
|
59
58
|
return {
|
|
60
59
|
name: "jsenv:importmap",
|
|
61
60
|
appliesDuring: "*",
|
|
62
|
-
|
|
63
|
-
js_import_export: (
|
|
61
|
+
resolveUrl: {
|
|
62
|
+
js_import_export: (reference) => {
|
|
64
63
|
if (!finalImportmap) {
|
|
65
64
|
return null
|
|
66
65
|
}
|
|
67
66
|
try {
|
|
68
67
|
let fromMapping = false
|
|
69
68
|
const result = resolveImport({
|
|
70
|
-
specifier,
|
|
71
|
-
importer: parentUrl,
|
|
69
|
+
specifier: reference.specifier,
|
|
70
|
+
importer: reference.parentUrl,
|
|
72
71
|
importMap: finalImportmap,
|
|
73
72
|
onImportMapping: () => {
|
|
74
73
|
fromMapping = true
|
|
@@ -91,12 +90,9 @@ export const jsenvPluginImportmap = () => {
|
|
|
91
90
|
}
|
|
92
91
|
},
|
|
93
92
|
},
|
|
94
|
-
|
|
95
|
-
html: async (
|
|
96
|
-
|
|
97
|
-
{ scenario, cook, urlGraph, referenceUtils },
|
|
98
|
-
) => {
|
|
99
|
-
const htmlAst = parseHtmlString(content)
|
|
93
|
+
transformUrlContent: {
|
|
94
|
+
html: async (htmlUrlInfo, context) => {
|
|
95
|
+
const htmlAst = parseHtmlString(htmlUrlInfo.content)
|
|
100
96
|
const importmap = findNode(htmlAst, (node) => {
|
|
101
97
|
if (node.nodeName !== "script") {
|
|
102
98
|
return false
|
|
@@ -108,7 +104,7 @@ export const jsenvPluginImportmap = () => {
|
|
|
108
104
|
return true
|
|
109
105
|
})
|
|
110
106
|
if (!importmap) {
|
|
111
|
-
onHtmlImportmapParsed(null, url)
|
|
107
|
+
onHtmlImportmapParsed(null, htmlUrlInfo.url)
|
|
112
108
|
return null
|
|
113
109
|
}
|
|
114
110
|
const handleInlineImportmap = async (importmap, textNode) => {
|
|
@@ -117,7 +113,7 @@ export const jsenvPluginImportmap = () => {
|
|
|
117
113
|
preferOriginal: true,
|
|
118
114
|
})
|
|
119
115
|
const inlineImportmapUrl = generateInlineContentUrl({
|
|
120
|
-
url,
|
|
116
|
+
url: htmlUrlInfo.url,
|
|
121
117
|
extension: ".importmap",
|
|
122
118
|
line,
|
|
123
119
|
column,
|
|
@@ -125,21 +121,27 @@ export const jsenvPluginImportmap = () => {
|
|
|
125
121
|
columnEnd,
|
|
126
122
|
})
|
|
127
123
|
const [inlineImportmapReference, inlineImportmapUrlInfo] =
|
|
128
|
-
referenceUtils.foundInline({
|
|
124
|
+
context.referenceUtils.foundInline({
|
|
129
125
|
type: "script_src",
|
|
130
126
|
line: line - 1,
|
|
131
127
|
column,
|
|
132
|
-
isOriginal,
|
|
128
|
+
isOriginalPosition: isOriginal,
|
|
133
129
|
specifier: inlineImportmapUrl,
|
|
134
130
|
contentType: "application/importmap+json",
|
|
135
131
|
content: textNode.value,
|
|
136
132
|
})
|
|
137
|
-
await cook({
|
|
133
|
+
await context.cook({
|
|
138
134
|
reference: inlineImportmapReference,
|
|
139
135
|
urlInfo: inlineImportmapUrlInfo,
|
|
140
136
|
})
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
setHtmlNodeGeneratedText(importmap, {
|
|
138
|
+
generatedText: inlineImportmapUrlInfo.content,
|
|
139
|
+
generatedBy: "jsenv:importmap",
|
|
140
|
+
})
|
|
141
|
+
onHtmlImportmapParsed(
|
|
142
|
+
JSON.parse(inlineImportmapUrlInfo.content),
|
|
143
|
+
htmlUrlInfo.url,
|
|
144
|
+
)
|
|
143
145
|
}
|
|
144
146
|
const handleImportmapWithSrc = async (importmap, src) => {
|
|
145
147
|
// Browser would throw on remote importmap
|
|
@@ -147,35 +149,39 @@ export const jsenvPluginImportmap = () => {
|
|
|
147
149
|
// We must precook the importmap to know its content and inline it into the HTML
|
|
148
150
|
// In this situation the ref to the importmap was already discovered
|
|
149
151
|
// when parsing the HTML
|
|
150
|
-
const importmapReference =
|
|
151
|
-
(
|
|
152
|
+
const importmapReference =
|
|
153
|
+
context.referenceUtils.findByGeneratedSpecifier(src)
|
|
154
|
+
const importmapUrlInfo = context.urlGraph.getUrlInfo(
|
|
155
|
+
importmapReference.url,
|
|
152
156
|
)
|
|
153
|
-
|
|
154
|
-
await cook({
|
|
157
|
+
await context.cook({
|
|
155
158
|
reference: importmapReference,
|
|
156
159
|
urlInfo: importmapUrlInfo,
|
|
157
160
|
})
|
|
158
|
-
onHtmlImportmapParsed(
|
|
161
|
+
onHtmlImportmapParsed(
|
|
162
|
+
JSON.parse(importmapUrlInfo.content),
|
|
163
|
+
htmlUrlInfo.url,
|
|
164
|
+
)
|
|
159
165
|
removeHtmlNodeAttributeByName(importmap, "src")
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
166
|
+
setHtmlNodeGeneratedText(importmap, {
|
|
167
|
+
generatedText: importmapUrlInfo.content,
|
|
168
|
+
generatedBy: "jsenv:importmap",
|
|
169
|
+
generatedFromSrc: src,
|
|
163
170
|
})
|
|
164
|
-
setHtmlNodeText(importmap, importmapUrlInfo.content)
|
|
165
171
|
|
|
166
172
|
const { line, column, lineEnd, columnEnd, isOriginal } =
|
|
167
173
|
htmlNodePosition.readNodePosition(importmap, {
|
|
168
174
|
preferOriginal: true,
|
|
169
175
|
})
|
|
170
176
|
const inlineImportmapUrl = generateInlineContentUrl({
|
|
171
|
-
url,
|
|
177
|
+
url: htmlUrlInfo.url,
|
|
172
178
|
extension: ".importmap",
|
|
173
179
|
line,
|
|
174
180
|
column,
|
|
175
181
|
lineEnd,
|
|
176
182
|
columnEnd,
|
|
177
183
|
})
|
|
178
|
-
referenceUtils.becomesInline(importmapReference, {
|
|
184
|
+
context.referenceUtils.becomesInline(importmapReference, {
|
|
179
185
|
line: line - 1,
|
|
180
186
|
column,
|
|
181
187
|
isOriginal,
|
|
@@ -200,7 +206,7 @@ export const jsenvPluginImportmap = () => {
|
|
|
200
206
|
// by "formatReferencedUrl" making the importmap presence useless.
|
|
201
207
|
// In dev/test we keep importmap into the HTML to see it even if useless
|
|
202
208
|
// Duing build we get rid of it
|
|
203
|
-
if (scenario === "build") {
|
|
209
|
+
if (context.scenario === "build") {
|
|
204
210
|
removeHtmlNode(importmap)
|
|
205
211
|
}
|
|
206
212
|
return {
|