@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
|
@@ -22,20 +22,18 @@ import {
|
|
|
22
22
|
composeTwoImportMaps,
|
|
23
23
|
normalizeImportMap,
|
|
24
24
|
} from "@jsenv/importmap"
|
|
25
|
-
|
|
25
|
+
import { generateInlineContentUrl } from "@jsenv/urls"
|
|
26
26
|
import {
|
|
27
27
|
parseHtmlString,
|
|
28
28
|
stringifyHtmlAst,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
findHtmlNode,
|
|
30
|
+
getHtmlNodeAttribute,
|
|
31
|
+
setHtmlNodeAttributes,
|
|
32
|
+
getHtmlNodePosition,
|
|
33
|
+
getHtmlNodeText,
|
|
33
34
|
setHtmlNodeText,
|
|
34
|
-
assignHtmlNodeAttributes,
|
|
35
|
-
getHtmlNodeTextNode,
|
|
36
35
|
removeHtmlNode,
|
|
37
|
-
} from "@jsenv/
|
|
38
|
-
import { generateInlineContentUrl } from "@jsenv/utils/urls/inline_content_url_generator.js"
|
|
36
|
+
} from "@jsenv/ast"
|
|
39
37
|
|
|
40
38
|
export const jsenvPluginImportmap = () => {
|
|
41
39
|
let finalImportmap = null
|
|
@@ -59,16 +57,16 @@ export const jsenvPluginImportmap = () => {
|
|
|
59
57
|
return {
|
|
60
58
|
name: "jsenv:importmap",
|
|
61
59
|
appliesDuring: "*",
|
|
62
|
-
|
|
63
|
-
js_import_export: (
|
|
60
|
+
resolveUrl: {
|
|
61
|
+
js_import_export: (reference) => {
|
|
64
62
|
if (!finalImportmap) {
|
|
65
63
|
return null
|
|
66
64
|
}
|
|
67
65
|
try {
|
|
68
66
|
let fromMapping = false
|
|
69
67
|
const result = resolveImport({
|
|
70
|
-
specifier,
|
|
71
|
-
importer: parentUrl,
|
|
68
|
+
specifier: reference.specifier,
|
|
69
|
+
importer: reference.parentUrl,
|
|
72
70
|
importMap: finalImportmap,
|
|
73
71
|
onImportMapping: () => {
|
|
74
72
|
fromMapping = true
|
|
@@ -91,33 +89,30 @@ export const jsenvPluginImportmap = () => {
|
|
|
91
89
|
}
|
|
92
90
|
},
|
|
93
91
|
},
|
|
94
|
-
|
|
95
|
-
html: async (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
) => {
|
|
99
|
-
const htmlAst = parseHtmlString(content)
|
|
100
|
-
const importmap = findNode(htmlAst, (node) => {
|
|
92
|
+
transformUrlContent: {
|
|
93
|
+
html: async (htmlUrlInfo, context) => {
|
|
94
|
+
const htmlAst = parseHtmlString(htmlUrlInfo.content)
|
|
95
|
+
const importmap = findHtmlNode(htmlAst, (node) => {
|
|
101
96
|
if (node.nodeName !== "script") {
|
|
102
97
|
return false
|
|
103
98
|
}
|
|
104
|
-
const
|
|
105
|
-
if (
|
|
99
|
+
const type = getHtmlNodeAttribute(node, "type")
|
|
100
|
+
if (type === undefined || type !== "importmap") {
|
|
106
101
|
return false
|
|
107
102
|
}
|
|
108
103
|
return true
|
|
109
104
|
})
|
|
110
105
|
if (!importmap) {
|
|
111
|
-
onHtmlImportmapParsed(null, url)
|
|
106
|
+
onHtmlImportmapParsed(null, htmlUrlInfo.url)
|
|
112
107
|
return null
|
|
113
108
|
}
|
|
114
|
-
const handleInlineImportmap = async (importmap,
|
|
109
|
+
const handleInlineImportmap = async (importmap, htmlNodeText) => {
|
|
115
110
|
const { line, column, lineEnd, columnEnd, isOriginal } =
|
|
116
|
-
|
|
111
|
+
getHtmlNodePosition(importmap, {
|
|
117
112
|
preferOriginal: true,
|
|
118
113
|
})
|
|
119
114
|
const inlineImportmapUrl = generateInlineContentUrl({
|
|
120
|
-
url,
|
|
115
|
+
url: htmlUrlInfo.url,
|
|
121
116
|
extension: ".importmap",
|
|
122
117
|
line,
|
|
123
118
|
column,
|
|
@@ -125,21 +120,26 @@ export const jsenvPluginImportmap = () => {
|
|
|
125
120
|
columnEnd,
|
|
126
121
|
})
|
|
127
122
|
const [inlineImportmapReference, inlineImportmapUrlInfo] =
|
|
128
|
-
referenceUtils.foundInline({
|
|
123
|
+
context.referenceUtils.foundInline({
|
|
129
124
|
type: "script_src",
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
125
|
+
isOriginalPosition: isOriginal,
|
|
126
|
+
specifierLine: line - 1,
|
|
127
|
+
specifierColumn: column,
|
|
133
128
|
specifier: inlineImportmapUrl,
|
|
134
129
|
contentType: "application/importmap+json",
|
|
135
|
-
content:
|
|
130
|
+
content: htmlNodeText,
|
|
136
131
|
})
|
|
137
|
-
await cook({
|
|
132
|
+
await context.cook(inlineImportmapUrlInfo, {
|
|
138
133
|
reference: inlineImportmapReference,
|
|
139
|
-
urlInfo: inlineImportmapUrlInfo,
|
|
140
134
|
})
|
|
141
135
|
setHtmlNodeText(importmap, inlineImportmapUrlInfo.content)
|
|
142
|
-
|
|
136
|
+
setHtmlNodeAttributes(importmap, {
|
|
137
|
+
"generated-by": "jsenv:importmap",
|
|
138
|
+
})
|
|
139
|
+
onHtmlImportmapParsed(
|
|
140
|
+
JSON.parse(inlineImportmapUrlInfo.content),
|
|
141
|
+
htmlUrlInfo.url,
|
|
142
|
+
)
|
|
143
143
|
}
|
|
144
144
|
const handleImportmapWithSrc = async (importmap, src) => {
|
|
145
145
|
// Browser would throw on remote importmap
|
|
@@ -147,35 +147,38 @@ export const jsenvPluginImportmap = () => {
|
|
|
147
147
|
// We must precook the importmap to know its content and inline it into the HTML
|
|
148
148
|
// In this situation the ref to the importmap was already discovered
|
|
149
149
|
// when parsing the HTML
|
|
150
|
-
const importmapReference =
|
|
151
|
-
(
|
|
150
|
+
const importmapReference =
|
|
151
|
+
context.referenceUtils.findByGeneratedSpecifier(src)
|
|
152
|
+
const importmapUrlInfo = context.urlGraph.getUrlInfo(
|
|
153
|
+
importmapReference.url,
|
|
152
154
|
)
|
|
153
|
-
|
|
154
|
-
await cook({
|
|
155
|
+
await context.cook(importmapUrlInfo, {
|
|
155
156
|
reference: importmapReference,
|
|
156
|
-
urlInfo: importmapUrlInfo,
|
|
157
|
-
})
|
|
158
|
-
onHtmlImportmapParsed(JSON.parse(importmapUrlInfo.content), url)
|
|
159
|
-
removeHtmlNodeAttributeByName(importmap, "src")
|
|
160
|
-
assignHtmlNodeAttributes(importmap, {
|
|
161
|
-
"content-src": src,
|
|
162
|
-
"inlined-by": "jsenv:importmap",
|
|
163
157
|
})
|
|
158
|
+
onHtmlImportmapParsed(
|
|
159
|
+
JSON.parse(importmapUrlInfo.content),
|
|
160
|
+
htmlUrlInfo.url,
|
|
161
|
+
)
|
|
164
162
|
setHtmlNodeText(importmap, importmapUrlInfo.content)
|
|
163
|
+
setHtmlNodeAttributes(importmap, {
|
|
164
|
+
"src": undefined,
|
|
165
|
+
"generated-by": "jsenv:importmap",
|
|
166
|
+
"generated-from-src": src,
|
|
167
|
+
})
|
|
165
168
|
|
|
166
169
|
const { line, column, lineEnd, columnEnd, isOriginal } =
|
|
167
|
-
|
|
170
|
+
getHtmlNodePosition(importmap, {
|
|
168
171
|
preferOriginal: true,
|
|
169
172
|
})
|
|
170
173
|
const inlineImportmapUrl = generateInlineContentUrl({
|
|
171
|
-
url,
|
|
174
|
+
url: htmlUrlInfo.url,
|
|
172
175
|
extension: ".importmap",
|
|
173
176
|
line,
|
|
174
177
|
column,
|
|
175
178
|
lineEnd,
|
|
176
179
|
columnEnd,
|
|
177
180
|
})
|
|
178
|
-
referenceUtils.becomesInline(importmapReference, {
|
|
181
|
+
context.referenceUtils.becomesInline(importmapReference, {
|
|
179
182
|
line: line - 1,
|
|
180
183
|
column,
|
|
181
184
|
isOriginal,
|
|
@@ -185,14 +188,13 @@ export const jsenvPluginImportmap = () => {
|
|
|
185
188
|
})
|
|
186
189
|
}
|
|
187
190
|
|
|
188
|
-
const
|
|
189
|
-
const src = srcAttribute ? srcAttribute.value : undefined
|
|
191
|
+
const src = getHtmlNodeAttribute(importmap, "src")
|
|
190
192
|
if (src) {
|
|
191
193
|
await handleImportmapWithSrc(importmap, src)
|
|
192
194
|
} else {
|
|
193
|
-
const
|
|
194
|
-
if (
|
|
195
|
-
await handleInlineImportmap(importmap,
|
|
195
|
+
const htmlNodeText = getHtmlNodeText(importmap)
|
|
196
|
+
if (htmlNodeText) {
|
|
197
|
+
await handleInlineImportmap(importmap, htmlNodeText)
|
|
196
198
|
}
|
|
197
199
|
}
|
|
198
200
|
// once this plugin knows the importmap, it will use it
|
|
@@ -200,7 +202,7 @@ export const jsenvPluginImportmap = () => {
|
|
|
200
202
|
// by "formatReferencedUrl" making the importmap presence useless.
|
|
201
203
|
// In dev/test we keep importmap into the HTML to see it even if useless
|
|
202
204
|
// Duing build we get rid of it
|
|
203
|
-
if (scenario === "build") {
|
|
205
|
+
if (context.scenario === "build") {
|
|
204
206
|
removeHtmlNode(importmap)
|
|
205
207
|
}
|
|
206
208
|
return {
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { createMagicSource } from "@jsenv/sourcemap"
|
|
2
|
+
import {
|
|
3
|
+
parseHtmlString,
|
|
4
|
+
injectScriptNodeAsEarlyAsPossible,
|
|
5
|
+
createHtmlNode,
|
|
6
|
+
stringifyHtmlAst,
|
|
7
|
+
} from "@jsenv/ast"
|
|
8
|
+
|
|
9
|
+
export const injectGlobals = (urlInfo, globals) => {
|
|
10
|
+
if (urlInfo.type === "html") {
|
|
11
|
+
return globalInjectorOnHtml(urlInfo, globals)
|
|
12
|
+
}
|
|
13
|
+
if (urlInfo.type === "js_classic" || urlInfo.type === "js_module") {
|
|
14
|
+
return globalsInjectorOnJs(urlInfo, globals)
|
|
15
|
+
}
|
|
16
|
+
throw new Error(`cannot inject globals into "${urlInfo.type}"`)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const globalInjectorOnHtml = async (urlInfo, globals) => {
|
|
20
|
+
// ideally we would inject an importmap but browser support is too low
|
|
21
|
+
// (even worse for worker/service worker)
|
|
22
|
+
// so for now we inject code into entry points
|
|
23
|
+
const htmlAst = parseHtmlString(urlInfo.content, {
|
|
24
|
+
storeOriginalPositions: false,
|
|
25
|
+
})
|
|
26
|
+
const clientCode = generateClientCodeForGlobals({
|
|
27
|
+
globals,
|
|
28
|
+
isWebWorker: false,
|
|
29
|
+
})
|
|
30
|
+
injectScriptNodeAsEarlyAsPossible(
|
|
31
|
+
htmlAst,
|
|
32
|
+
createHtmlNode({
|
|
33
|
+
"tagName": "script",
|
|
34
|
+
"textContent": clientCode,
|
|
35
|
+
"injected-by": "jsenv:inject_globals",
|
|
36
|
+
}),
|
|
37
|
+
)
|
|
38
|
+
return stringifyHtmlAst(htmlAst)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const globalsInjectorOnJs = async (urlInfo, globals) => {
|
|
42
|
+
const clientCode = generateClientCodeForGlobals({
|
|
43
|
+
globals,
|
|
44
|
+
isWebWorker:
|
|
45
|
+
urlInfo.subtype === "worker" ||
|
|
46
|
+
urlInfo.subtype === "service_worker" ||
|
|
47
|
+
urlInfo.subtype === "shared_worker",
|
|
48
|
+
})
|
|
49
|
+
const magicSource = createMagicSource(urlInfo.content)
|
|
50
|
+
magicSource.prepend(clientCode)
|
|
51
|
+
return magicSource.toContentAndSourcemap()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const generateClientCodeForGlobals = ({ isWebWorker = false, globals }) => {
|
|
55
|
+
const globalName = isWebWorker ? "self" : "window"
|
|
56
|
+
return `Object.assign(${globalName}, ${JSON.stringify(globals, null, " ")});`
|
|
57
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { injectGlobals } from "./inject_globals.js"
|
|
2
|
+
|
|
3
|
+
export const jsenvPluginInjectGlobals = (urlAssociations) => {
|
|
4
|
+
return {
|
|
5
|
+
name: "jsenv:inject_globals",
|
|
6
|
+
appliesDuring: "*",
|
|
7
|
+
transformUrlContent: async (urlInfo) => {
|
|
8
|
+
const url = Object.keys(urlAssociations).find((url) => {
|
|
9
|
+
return url === urlInfo.url
|
|
10
|
+
})
|
|
11
|
+
if (!url) {
|
|
12
|
+
return null
|
|
13
|
+
}
|
|
14
|
+
let globals = urlAssociations[url]
|
|
15
|
+
if (typeof globals === "function") {
|
|
16
|
+
globals = await globals()
|
|
17
|
+
}
|
|
18
|
+
if (Object.keys(globals).length === 0) {
|
|
19
|
+
return null
|
|
20
|
+
}
|
|
21
|
+
return injectGlobals(urlInfo, globals)
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
}
|
|
File without changes
|
|
@@ -1,45 +1,46 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { DATA_URL } from "@jsenv/urls"
|
|
2
|
+
import { CONTENT_TYPE } from "@jsenv/utils/src/content_type/content_type.js"
|
|
3
3
|
|
|
4
4
|
export const jsenvPluginDataUrls = () => {
|
|
5
5
|
return {
|
|
6
6
|
name: "jsenv:data_urls",
|
|
7
7
|
appliesDuring: "*",
|
|
8
|
-
|
|
9
|
-
if (!specifier.startsWith("data:")) {
|
|
8
|
+
resolveUrl: (reference) => {
|
|
9
|
+
if (!reference.specifier.startsWith("data:")) {
|
|
10
10
|
return null
|
|
11
11
|
}
|
|
12
|
-
return specifier
|
|
12
|
+
return reference.specifier
|
|
13
13
|
},
|
|
14
|
-
|
|
15
|
-
if (!url.startsWith("data:")) {
|
|
14
|
+
fetchUrlContent: (urlInfo) => {
|
|
15
|
+
if (!urlInfo.url.startsWith("data:")) {
|
|
16
16
|
return null
|
|
17
17
|
}
|
|
18
|
-
const {
|
|
19
|
-
data.base64Flag = base64Flag
|
|
20
|
-
return {
|
|
18
|
+
const {
|
|
21
19
|
contentType,
|
|
20
|
+
base64Flag,
|
|
21
|
+
data: urlData,
|
|
22
|
+
} = DATA_URL.parse(urlInfo.url)
|
|
23
|
+
urlInfo.data.base64Flag = base64Flag
|
|
24
|
+
return {
|
|
22
25
|
content: contentFromUrlData({ contentType, base64Flag, urlData }),
|
|
26
|
+
contentType,
|
|
23
27
|
}
|
|
24
28
|
},
|
|
25
|
-
|
|
26
|
-
if (!reference.
|
|
29
|
+
formatUrl: (reference, context) => {
|
|
30
|
+
if (!reference.generatedUrl.startsWith("data:")) {
|
|
27
31
|
return null
|
|
28
32
|
}
|
|
29
33
|
if (reference.type === "sourcemap_comment") {
|
|
30
34
|
return null
|
|
31
35
|
}
|
|
32
36
|
return (async () => {
|
|
33
|
-
const urlInfo = urlGraph.getUrlInfo(reference.url)
|
|
34
|
-
await cook({
|
|
35
|
-
reference,
|
|
36
|
-
urlInfo,
|
|
37
|
-
})
|
|
37
|
+
const urlInfo = context.urlGraph.getUrlInfo(reference.url)
|
|
38
|
+
await context.cook(urlInfo, { reference })
|
|
38
39
|
if (urlInfo.originalContent === urlInfo.content) {
|
|
39
|
-
return reference.
|
|
40
|
+
return reference.generatedUrl
|
|
40
41
|
}
|
|
41
|
-
const specifier =
|
|
42
|
-
contentType: urlInfo.
|
|
42
|
+
const specifier = DATA_URL.stringify({
|
|
43
|
+
contentType: urlInfo.headers["content-type"],
|
|
43
44
|
base64Flag: urlInfo.data.base64Flag,
|
|
44
45
|
data: urlInfo.data.base64Flag
|
|
45
46
|
? dataToBase64(urlInfo.content)
|
|
@@ -52,7 +53,7 @@ export const jsenvPluginDataUrls = () => {
|
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
const contentFromUrlData = ({ contentType, base64Flag, urlData }) => {
|
|
55
|
-
if (
|
|
56
|
+
if (CONTENT_TYPE.isTextual(contentType)) {
|
|
56
57
|
if (base64Flag) {
|
|
57
58
|
return base64ToString(urlData)
|
|
58
59
|
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { generateInlineContentUrl } from "@jsenv/urls"
|
|
2
|
+
import {
|
|
3
|
+
parseHtmlString,
|
|
4
|
+
stringifyHtmlAst,
|
|
5
|
+
visitHtmlNodes,
|
|
6
|
+
getHtmlNodeText,
|
|
7
|
+
getHtmlNodePosition,
|
|
8
|
+
analyzeScriptNode,
|
|
9
|
+
setHtmlNodeAttributes,
|
|
10
|
+
setHtmlNodeText,
|
|
11
|
+
getHtmlNodeAttribute,
|
|
12
|
+
} from "@jsenv/ast"
|
|
13
|
+
import { CONTENT_TYPE } from "@jsenv/utils/src/content_type/content_type.js"
|
|
14
|
+
|
|
15
|
+
export const jsenvPluginHtmlInlineContent = ({ analyzeConvertedScripts }) => {
|
|
16
|
+
return {
|
|
17
|
+
name: "jsenv:html_inline_content",
|
|
18
|
+
appliesDuring: "*",
|
|
19
|
+
transformUrlContent: {
|
|
20
|
+
html: async (urlInfo, context) => {
|
|
21
|
+
const htmlAst = parseHtmlString(urlInfo.content)
|
|
22
|
+
const actions = []
|
|
23
|
+
const handleInlineStyle = (node) => {
|
|
24
|
+
const htmlNodeText = getHtmlNodeText(node)
|
|
25
|
+
if (!htmlNodeText) {
|
|
26
|
+
return
|
|
27
|
+
}
|
|
28
|
+
actions.push(async () => {
|
|
29
|
+
const { line, column, lineEnd, columnEnd, isOriginal } =
|
|
30
|
+
getHtmlNodePosition(node, {
|
|
31
|
+
preferOriginal: true,
|
|
32
|
+
})
|
|
33
|
+
const inlineStyleUrl = generateInlineContentUrl({
|
|
34
|
+
url: urlInfo.url,
|
|
35
|
+
extension: ".css",
|
|
36
|
+
line,
|
|
37
|
+
column,
|
|
38
|
+
lineEnd,
|
|
39
|
+
columnEnd,
|
|
40
|
+
})
|
|
41
|
+
const [inlineStyleReference, inlineStyleUrlInfo] =
|
|
42
|
+
context.referenceUtils.foundInline({
|
|
43
|
+
type: "link_href",
|
|
44
|
+
expectedType: "css",
|
|
45
|
+
isOriginalPosition: isOriginal,
|
|
46
|
+
// we remove 1 to the line because imagine the following html:
|
|
47
|
+
// <style>body { color: red; }</style>
|
|
48
|
+
// -> content starts same line as <style>
|
|
49
|
+
specifierLine: line - 1,
|
|
50
|
+
specifierColumn: column,
|
|
51
|
+
specifier: inlineStyleUrl,
|
|
52
|
+
contentType: "text/css",
|
|
53
|
+
content: htmlNodeText,
|
|
54
|
+
})
|
|
55
|
+
await context.cook(inlineStyleUrlInfo, {
|
|
56
|
+
reference: inlineStyleReference,
|
|
57
|
+
})
|
|
58
|
+
setHtmlNodeText(node, inlineStyleUrlInfo.content)
|
|
59
|
+
setHtmlNodeAttributes(node, {
|
|
60
|
+
"generated-by": "jsenv:html_inline_content",
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
}
|
|
64
|
+
const handleInlineScript = (node) => {
|
|
65
|
+
const htmlNodeText = getHtmlNodeText(node)
|
|
66
|
+
if (!htmlNodeText) {
|
|
67
|
+
return
|
|
68
|
+
}
|
|
69
|
+
// If the inline script was already handled by an other plugin, ignore it
|
|
70
|
+
// - we want to preserve inline scripts generated by html supervisor during dev
|
|
71
|
+
// - we want to avoid cooking twice a script during build
|
|
72
|
+
const generatedBy = getHtmlNodeAttribute(node, "generated-by")
|
|
73
|
+
if (
|
|
74
|
+
generatedBy === "jsenv:as_js_classic_html" &&
|
|
75
|
+
!analyzeConvertedScripts
|
|
76
|
+
) {
|
|
77
|
+
return
|
|
78
|
+
}
|
|
79
|
+
if (generatedBy === "jsenv:html_supervisor") {
|
|
80
|
+
return
|
|
81
|
+
}
|
|
82
|
+
actions.push(async () => {
|
|
83
|
+
const scriptCategory = analyzeScriptNode(node)
|
|
84
|
+
const { line, column, lineEnd, columnEnd, isOriginal } =
|
|
85
|
+
getHtmlNodePosition(node, {
|
|
86
|
+
preferOriginal: true,
|
|
87
|
+
})
|
|
88
|
+
// from MDN about [type] attribute:
|
|
89
|
+
// "Any other value: The embedded content is treated as a data block
|
|
90
|
+
// which won't be processed by the browser. Developers must use a valid MIME type
|
|
91
|
+
// that is not a JavaScript MIME type to denote data blocks.
|
|
92
|
+
// The src attribute will be ignored."
|
|
93
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-type
|
|
94
|
+
const isJs =
|
|
95
|
+
scriptCategory === "classic" || scriptCategory === "module"
|
|
96
|
+
const isImportmap = scriptCategory === "importmap"
|
|
97
|
+
const contentType = isJs
|
|
98
|
+
? "text/javascript"
|
|
99
|
+
: isImportmap
|
|
100
|
+
? "application/importmap+json"
|
|
101
|
+
: scriptCategory
|
|
102
|
+
|
|
103
|
+
let inlineScriptUrl = generateInlineContentUrl({
|
|
104
|
+
url: urlInfo.url,
|
|
105
|
+
extension: CONTENT_TYPE.asFileExtension(contentType),
|
|
106
|
+
line,
|
|
107
|
+
column,
|
|
108
|
+
lineEnd,
|
|
109
|
+
columnEnd,
|
|
110
|
+
})
|
|
111
|
+
const [inlineScriptReference, inlineScriptUrlInfo] =
|
|
112
|
+
context.referenceUtils.foundInline({
|
|
113
|
+
node,
|
|
114
|
+
type: "script_src",
|
|
115
|
+
expectedType: {
|
|
116
|
+
classic: "js_classic",
|
|
117
|
+
module: "js_module",
|
|
118
|
+
importmap: "importmap",
|
|
119
|
+
}[scriptCategory],
|
|
120
|
+
// we remove 1 to the line because imagine the following html:
|
|
121
|
+
// <script>console.log('ok')</script>
|
|
122
|
+
// -> content starts same line as <script>
|
|
123
|
+
specifierLine: line - 1,
|
|
124
|
+
specifierColumn: column,
|
|
125
|
+
isOriginalPosition: isOriginal,
|
|
126
|
+
specifier: inlineScriptUrl,
|
|
127
|
+
contentType,
|
|
128
|
+
content: htmlNodeText,
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
await context.cook(inlineScriptUrlInfo, {
|
|
132
|
+
reference: inlineScriptReference,
|
|
133
|
+
})
|
|
134
|
+
setHtmlNodeText(node, inlineScriptUrlInfo.content)
|
|
135
|
+
setHtmlNodeAttributes(node, {
|
|
136
|
+
"generated-by": "jsenv:html_inline_content",
|
|
137
|
+
})
|
|
138
|
+
})
|
|
139
|
+
}
|
|
140
|
+
visitHtmlNodes(htmlAst, {
|
|
141
|
+
style: (node) => {
|
|
142
|
+
handleInlineStyle(node)
|
|
143
|
+
},
|
|
144
|
+
script: (node) => {
|
|
145
|
+
handleInlineScript(node)
|
|
146
|
+
},
|
|
147
|
+
})
|
|
148
|
+
if (actions.length === 0) {
|
|
149
|
+
return null
|
|
150
|
+
}
|
|
151
|
+
await Promise.all(actions.map((action) => action()))
|
|
152
|
+
const htmlModified = stringifyHtmlAst(htmlAst)
|
|
153
|
+
return {
|
|
154
|
+
content: htmlModified,
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsenvPluginHtmlInlineContent } from "./jsenv_plugin_html_inline_content.js"
|
|
2
|
+
import { jsenvPluginJsInlineContent } from "./jsenv_plugin_js_inline_content.js"
|
|
3
|
+
import { jsenvPluginDataUrls } from "./jsenv_plugin_data_urls.js"
|
|
4
|
+
import { jsenvPluginInlineQueryParam } from "./jsenv_plugin_inline_query_param.js"
|
|
5
|
+
|
|
6
|
+
export const jsenvPluginInline = ({
|
|
7
|
+
fetchInlineUrls = true,
|
|
8
|
+
analyzeConvertedScripts = false,
|
|
9
|
+
allowEscapeForVersioning = false,
|
|
10
|
+
} = {}) => {
|
|
11
|
+
return [
|
|
12
|
+
...(fetchInlineUrls ? [jsenvPluginInlineUrls()] : []),
|
|
13
|
+
jsenvPluginHtmlInlineContent({ analyzeConvertedScripts }),
|
|
14
|
+
jsenvPluginJsInlineContent({ allowEscapeForVersioning }),
|
|
15
|
+
jsenvPluginDataUrls(),
|
|
16
|
+
jsenvPluginInlineQueryParam(),
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const jsenvPluginInlineUrls = () => {
|
|
21
|
+
return {
|
|
22
|
+
name: "jsenv:inline_urls",
|
|
23
|
+
appliesDuring: "*",
|
|
24
|
+
fetchUrlContent: (urlInfo) => {
|
|
25
|
+
if (!urlInfo.isInline) {
|
|
26
|
+
return null
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
// we want to fetch the original content otherwise we might re-cook
|
|
30
|
+
// content already cooked
|
|
31
|
+
content: urlInfo.originalContent,
|
|
32
|
+
contentType: urlInfo.contentType,
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DATA_URL } from "@jsenv/urls"
|
|
2
2
|
|
|
3
3
|
export const jsenvPluginInlineQueryParam = () => {
|
|
4
4
|
return {
|
|
5
5
|
name: "jsenv:inline_query_param",
|
|
6
6
|
appliesDuring: "*",
|
|
7
|
-
|
|
7
|
+
formatUrl: {
|
|
8
8
|
// <link> and <script> can be inlined in the html
|
|
9
9
|
// this should be done during dev and postbuild but not build
|
|
10
10
|
// so that the bundled file gets inlined and not the entry point
|
|
@@ -15,21 +15,18 @@ export const jsenvPluginInlineQueryParam = () => {
|
|
|
15
15
|
// but maybe we should rather use ?object_url
|
|
16
16
|
// or people could do this:
|
|
17
17
|
// import workerText from './worker.js?text'
|
|
18
|
-
// const blob = new Blob(workerText, { type: '
|
|
18
|
+
// const blob = new Blob(workerText, { type: 'text/javascript' })
|
|
19
19
|
// window.URL.createObjectURL(blob)
|
|
20
20
|
// in any case the recommended way is to use an url
|
|
21
21
|
// to benefit from shared worker and reuse worker between tabs
|
|
22
|
-
"*": (reference,
|
|
23
|
-
if (!
|
|
22
|
+
"*": (reference, context) => {
|
|
23
|
+
if (!reference.searchParams.has("inline")) {
|
|
24
24
|
return null
|
|
25
25
|
}
|
|
26
26
|
return (async () => {
|
|
27
|
-
const urlInfo = urlGraph.getUrlInfo(reference.url)
|
|
28
|
-
await cook({
|
|
29
|
-
|
|
30
|
-
urlInfo,
|
|
31
|
-
})
|
|
32
|
-
const specifier = DataUrl.stringify({
|
|
27
|
+
const urlInfo = context.urlGraph.getUrlInfo(reference.url)
|
|
28
|
+
await context.cook(urlInfo, { reference })
|
|
29
|
+
const specifier = DATA_URL.stringify({
|
|
33
30
|
mediaType: urlInfo.contentType,
|
|
34
31
|
base64Flag: true,
|
|
35
32
|
data: Buffer.from(urlInfo.content).toString("base64"),
|