@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,211 +0,0 @@
|
|
|
1
|
-
import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
|
|
2
|
-
import { ContentType } from "@jsenv/utils/src/content_type.js"
|
|
3
|
-
import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
|
|
4
|
-
import { injectQueryParamsIntoSpecifier } from "@jsenv/utils/urls/url_utils.js"
|
|
5
|
-
import { JS_QUOTES } from "@jsenv/utils/string/js_quotes.js"
|
|
6
|
-
|
|
7
|
-
import { babelPluginMetadataImportAssertions } from "./helpers/babel_plugin_metadata_import_assertions.js"
|
|
8
|
-
import { convertJsonTextToJavascriptModule } from "./helpers/json_module.js"
|
|
9
|
-
import { convertTextToJavascriptModule } from "./helpers/text_module.js"
|
|
10
|
-
|
|
11
|
-
export const jsenvPluginImportAssertions = () => {
|
|
12
|
-
const importAssertions = [
|
|
13
|
-
{
|
|
14
|
-
name: "jsenv:import_assertions",
|
|
15
|
-
appliesDuring: "*",
|
|
16
|
-
transform: {
|
|
17
|
-
js_module: async (
|
|
18
|
-
{ url, generatedUrl, content },
|
|
19
|
-
{ scenario, isSupportedOnRuntime, referenceUtils },
|
|
20
|
-
) => {
|
|
21
|
-
const importTypesToHandle = getImportTypesToHandle({
|
|
22
|
-
scenario,
|
|
23
|
-
isSupportedOnRuntime,
|
|
24
|
-
})
|
|
25
|
-
if (importTypesToHandle.length === 0) {
|
|
26
|
-
return null
|
|
27
|
-
}
|
|
28
|
-
const { metadata } = await applyBabelPlugins({
|
|
29
|
-
babelPlugins: [babelPluginMetadataImportAssertions],
|
|
30
|
-
url,
|
|
31
|
-
generatedUrl,
|
|
32
|
-
content,
|
|
33
|
-
})
|
|
34
|
-
const { importAssertions } = metadata
|
|
35
|
-
const magicSource = createMagicSource(content)
|
|
36
|
-
importAssertions.forEach((importAssertion) => {
|
|
37
|
-
const assertType = importAssertion.assert.type
|
|
38
|
-
if (!importTypesToHandle.includes(assertType)) {
|
|
39
|
-
return
|
|
40
|
-
}
|
|
41
|
-
const { path } = importAssertion
|
|
42
|
-
const { node } = path
|
|
43
|
-
const importType = `${assertType}_module`
|
|
44
|
-
if (node.type === "CallExpression") {
|
|
45
|
-
const importSpecifierPath = path.get("arguments")[0]
|
|
46
|
-
const specifier = importSpecifierPath.node.value
|
|
47
|
-
const newSpecifier = injectQueryParamsIntoSpecifier(specifier, {
|
|
48
|
-
[importType]: "",
|
|
49
|
-
})
|
|
50
|
-
const [newReference, newUrlInfo] = referenceUtils.updateSpecifier(
|
|
51
|
-
JSON.stringify(specifier),
|
|
52
|
-
newSpecifier,
|
|
53
|
-
)
|
|
54
|
-
newUrlInfo.data.importType = importType
|
|
55
|
-
magicSource.replace({
|
|
56
|
-
start: importSpecifierPath.node.start,
|
|
57
|
-
end: importSpecifierPath.node.end,
|
|
58
|
-
replacement: newReference.generatedSpecifier,
|
|
59
|
-
})
|
|
60
|
-
const secondArgPath = path.get("arguments")[1]
|
|
61
|
-
magicSource.remove({
|
|
62
|
-
start: secondArgPath.node.start,
|
|
63
|
-
end: secondArgPath.node.end,
|
|
64
|
-
})
|
|
65
|
-
return
|
|
66
|
-
}
|
|
67
|
-
const importSpecifierPath = path.get("source")
|
|
68
|
-
const specifier = importSpecifierPath.node.value
|
|
69
|
-
const newSpecifier = injectQueryParamsIntoSpecifier(specifier, {
|
|
70
|
-
[importType]: "",
|
|
71
|
-
})
|
|
72
|
-
const [newReference, newUrlInfo] = referenceUtils.updateSpecifier(
|
|
73
|
-
JSON.stringify(specifier),
|
|
74
|
-
newSpecifier,
|
|
75
|
-
)
|
|
76
|
-
newUrlInfo.data.importType = importType
|
|
77
|
-
magicSource.replace({
|
|
78
|
-
start: importSpecifierPath.node.start,
|
|
79
|
-
end: importSpecifierPath.node.end,
|
|
80
|
-
replacement: newReference.generatedSpecifier,
|
|
81
|
-
})
|
|
82
|
-
const assertionsPath = path.get("assertions")[0]
|
|
83
|
-
magicSource.remove({
|
|
84
|
-
start: assertionsPath.node.start,
|
|
85
|
-
end: assertionsPath.node.end,
|
|
86
|
-
})
|
|
87
|
-
})
|
|
88
|
-
return magicSource.toContentAndSourcemap()
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
},
|
|
92
|
-
]
|
|
93
|
-
|
|
94
|
-
const importTypeJson = {
|
|
95
|
-
name: "jsenv:import_type_json",
|
|
96
|
-
appliesDuring: "*",
|
|
97
|
-
finalize: ({ url, contentType, content }) => {
|
|
98
|
-
if (!new URL(url).searchParams.has("json_module")) {
|
|
99
|
-
return null
|
|
100
|
-
}
|
|
101
|
-
if (contentType !== "application/json") {
|
|
102
|
-
throw new Error(
|
|
103
|
-
`Unexpected content type on ${url}, should be "application/json" but got ${contentType}`,
|
|
104
|
-
)
|
|
105
|
-
}
|
|
106
|
-
return convertJsonTextToJavascriptModule({
|
|
107
|
-
content,
|
|
108
|
-
})
|
|
109
|
-
},
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// not standard but I expect this to happen one day?
|
|
113
|
-
const importTypeText = {
|
|
114
|
-
name: "jsenv:import_type_text",
|
|
115
|
-
appliesDuring: "*",
|
|
116
|
-
finalize: ({ url, contentType, content }) => {
|
|
117
|
-
if (!new URL(url).searchParams.has("text_module")) {
|
|
118
|
-
return null
|
|
119
|
-
}
|
|
120
|
-
if (ContentType.isTextual(contentType)) {
|
|
121
|
-
throw new Error(
|
|
122
|
-
`Unexpected content type on ${url}, should be "text/*" but got ${contentType}`,
|
|
123
|
-
)
|
|
124
|
-
}
|
|
125
|
-
return convertTextToJavascriptModule({
|
|
126
|
-
content,
|
|
127
|
-
})
|
|
128
|
-
},
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return [
|
|
132
|
-
importAssertions,
|
|
133
|
-
importTypeJson,
|
|
134
|
-
jsenvPluginImportTypeCss(),
|
|
135
|
-
importTypeText,
|
|
136
|
-
]
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
const jsenvPluginImportTypeCss = () => {
|
|
140
|
-
const inlineContentClientFileUrl = new URL(
|
|
141
|
-
"../inline/client/inline_content.js",
|
|
142
|
-
import.meta.url,
|
|
143
|
-
).href
|
|
144
|
-
|
|
145
|
-
return {
|
|
146
|
-
name: "jsenv:import_type_css",
|
|
147
|
-
appliesDuring: "*",
|
|
148
|
-
// load the original css url
|
|
149
|
-
load: ({ data }, { urlGraph, load }) => {
|
|
150
|
-
if (data.importType !== "css_module") {
|
|
151
|
-
return null
|
|
152
|
-
}
|
|
153
|
-
return load({
|
|
154
|
-
reference: data.originalReference,
|
|
155
|
-
urlInfo: urlGraph.getUrlInfo(data.originalReference.url),
|
|
156
|
-
})
|
|
157
|
-
},
|
|
158
|
-
transform: ({ url, data, contentType, content }, { referenceUtils }) => {
|
|
159
|
-
if (data.importType !== "css_module") {
|
|
160
|
-
return null
|
|
161
|
-
}
|
|
162
|
-
if (contentType !== "text/css") {
|
|
163
|
-
throw new Error(
|
|
164
|
-
`Unexpected content type on ${url}, should be "text/css" but got ${contentType}`,
|
|
165
|
-
)
|
|
166
|
-
}
|
|
167
|
-
const [reference] = referenceUtils.inject({
|
|
168
|
-
type: "js_import_export",
|
|
169
|
-
specifier: inlineContentClientFileUrl,
|
|
170
|
-
})
|
|
171
|
-
const cssText = JS_QUOTES.escapeSpecialChars(content, {
|
|
172
|
-
// If template string is choosen and runtime do not support template literals
|
|
173
|
-
// it's ok because "jsenv:new_inline_content" plugin executes after this one
|
|
174
|
-
// and convert template strings into raw strings
|
|
175
|
-
canUseTemplateString: true,
|
|
176
|
-
})
|
|
177
|
-
return {
|
|
178
|
-
type: "js_module",
|
|
179
|
-
contentType: "application/javascript",
|
|
180
|
-
content: `import { InlineContent } from ${reference.generatedSpecifier}
|
|
181
|
-
|
|
182
|
-
const css = new InlineContent(${cssText}, { type: "text/css" })
|
|
183
|
-
const stylesheet = new CSSStyleSheet()
|
|
184
|
-
stylesheet.replaceSync(css.text)
|
|
185
|
-
export default stylesheet`,
|
|
186
|
-
}
|
|
187
|
-
},
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
const getImportTypesToHandle = ({ scenario, isSupportedOnRuntime }) => {
|
|
192
|
-
// during build always replace import assertions with the js:
|
|
193
|
-
// - means rollup can bundle more js file together
|
|
194
|
-
// - means url versioning can work for css inlined in js
|
|
195
|
-
// - avoid rollup to see import assertions
|
|
196
|
-
// We would have to tell rollup to ignore import with assertion
|
|
197
|
-
if (scenario === "build") {
|
|
198
|
-
return ["json", "css", "text"]
|
|
199
|
-
}
|
|
200
|
-
const importTypes = []
|
|
201
|
-
if (!isSupportedOnRuntime("import_type_json")) {
|
|
202
|
-
importTypes.push("json")
|
|
203
|
-
}
|
|
204
|
-
if (!isSupportedOnRuntime("import_type_css")) {
|
|
205
|
-
importTypes.push("css")
|
|
206
|
-
}
|
|
207
|
-
if (!isSupportedOnRuntime("import_type_text")) {
|
|
208
|
-
importTypes.push("text")
|
|
209
|
-
}
|
|
210
|
-
return importTypes
|
|
211
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { jsenvPluginJsAndCssInsideHtml } from "./jsenv_plugin_js_and_css_inside_html.js"
|
|
2
|
-
import { jsenvPluginNewInlineContent } from "./jsenv_plugin_new_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 = ({ allowEscapeForVersioning } = {}) => {
|
|
7
|
-
return [
|
|
8
|
-
jsenvPluginJsAndCssInsideHtml(),
|
|
9
|
-
jsenvPluginNewInlineContent({ allowEscapeForVersioning }),
|
|
10
|
-
jsenvPluginDataUrls(),
|
|
11
|
-
jsenvPluginInlineQueryParam(),
|
|
12
|
-
]
|
|
13
|
-
}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
parseHtmlString,
|
|
3
|
-
stringifyHtmlAst,
|
|
4
|
-
visitHtmlAst,
|
|
5
|
-
getHtmlNodeTextNode,
|
|
6
|
-
htmlNodePosition,
|
|
7
|
-
parseScriptNode,
|
|
8
|
-
setHtmlNodeText,
|
|
9
|
-
getHtmlNodeAttributeByName,
|
|
10
|
-
} from "@jsenv/utils/html_ast/html_ast.js"
|
|
11
|
-
import { injectQueryParams } from "@jsenv/utils/urls/url_utils.js"
|
|
12
|
-
import { generateInlineContentUrl } from "@jsenv/utils/urls/inline_content_url_generator.js"
|
|
13
|
-
|
|
14
|
-
export const jsenvPluginJsAndCssInsideHtml = () => {
|
|
15
|
-
return {
|
|
16
|
-
name: "jsenv:js_and_css_inside_html",
|
|
17
|
-
appliesDuring: "*",
|
|
18
|
-
transform: {
|
|
19
|
-
html: async ({ url, content }, { cook, referenceUtils }) => {
|
|
20
|
-
const htmlAst = parseHtmlString(content)
|
|
21
|
-
const actions = []
|
|
22
|
-
const handleInlineStyle = (node) => {
|
|
23
|
-
if (node.nodeName !== "style") {
|
|
24
|
-
return
|
|
25
|
-
}
|
|
26
|
-
const textNode = getHtmlNodeTextNode(node)
|
|
27
|
-
if (!textNode) {
|
|
28
|
-
return
|
|
29
|
-
}
|
|
30
|
-
actions.push(async () => {
|
|
31
|
-
const { line, column, lineEnd, columnEnd, isOriginal } =
|
|
32
|
-
htmlNodePosition.readNodePosition(node, {
|
|
33
|
-
preferOriginal: true,
|
|
34
|
-
})
|
|
35
|
-
const inlineStyleUrl = generateInlineContentUrl({
|
|
36
|
-
url,
|
|
37
|
-
extension: ".css",
|
|
38
|
-
line,
|
|
39
|
-
column,
|
|
40
|
-
lineEnd,
|
|
41
|
-
columnEnd,
|
|
42
|
-
})
|
|
43
|
-
const [inlineStyleReference, inlineStyleUrlInfo] =
|
|
44
|
-
referenceUtils.foundInline({
|
|
45
|
-
type: "link_href",
|
|
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
|
-
line: line - 1,
|
|
50
|
-
column,
|
|
51
|
-
isOriginal,
|
|
52
|
-
specifier: inlineStyleUrl,
|
|
53
|
-
contentType: "text/css",
|
|
54
|
-
content: textNode.value,
|
|
55
|
-
})
|
|
56
|
-
await cook({
|
|
57
|
-
reference: inlineStyleReference,
|
|
58
|
-
urlInfo: inlineStyleUrlInfo,
|
|
59
|
-
})
|
|
60
|
-
setHtmlNodeText(node, inlineStyleUrlInfo.content)
|
|
61
|
-
})
|
|
62
|
-
}
|
|
63
|
-
const handleInlineScript = (node) => {
|
|
64
|
-
if (node.nodeName !== "script") {
|
|
65
|
-
return
|
|
66
|
-
}
|
|
67
|
-
const textNode = getHtmlNodeTextNode(node)
|
|
68
|
-
if (!textNode) {
|
|
69
|
-
return
|
|
70
|
-
}
|
|
71
|
-
const contentSrc = getHtmlNodeAttributeByName(node, "content-src")
|
|
72
|
-
if (contentSrc) {
|
|
73
|
-
// it's inline but there is a corresponding "src" somewhere
|
|
74
|
-
// - for instance the importmap was inlined by importmap plugin
|
|
75
|
-
// in that case the content is already cooked and can be kept as it is
|
|
76
|
-
// - any other logic that would turn a remote script into some content
|
|
77
|
-
// but don't want to cook the content
|
|
78
|
-
return
|
|
79
|
-
}
|
|
80
|
-
actions.push(async () => {
|
|
81
|
-
const scriptCategory = parseScriptNode(node)
|
|
82
|
-
const { line, column, lineEnd, columnEnd, isOriginal } =
|
|
83
|
-
htmlNodePosition.readNodePosition(node, {
|
|
84
|
-
preferOriginal: true,
|
|
85
|
-
})
|
|
86
|
-
let inlineScriptUrl = generateInlineContentUrl({
|
|
87
|
-
url,
|
|
88
|
-
extension: scriptCategory === "importmap" ? ".importmap" : ".js",
|
|
89
|
-
line,
|
|
90
|
-
column,
|
|
91
|
-
lineEnd,
|
|
92
|
-
columnEnd,
|
|
93
|
-
})
|
|
94
|
-
if (scriptCategory === "classic") {
|
|
95
|
-
inlineScriptUrl = injectQueryParams(inlineScriptUrl, {
|
|
96
|
-
js_classic: "",
|
|
97
|
-
})
|
|
98
|
-
}
|
|
99
|
-
const [inlineScriptReference, inlineScriptUrlInfo] =
|
|
100
|
-
referenceUtils.foundInline({
|
|
101
|
-
node,
|
|
102
|
-
type: "script_src",
|
|
103
|
-
// we remove 1 to the line because imagine the following html:
|
|
104
|
-
// <script>console.log('ok')</script>
|
|
105
|
-
// -> content starts same line as <script>
|
|
106
|
-
line: line - 1,
|
|
107
|
-
column,
|
|
108
|
-
isOriginal,
|
|
109
|
-
specifier: inlineScriptUrl,
|
|
110
|
-
contentType:
|
|
111
|
-
scriptCategory === "importmap"
|
|
112
|
-
? "application/importmap+json"
|
|
113
|
-
: "application/javascript",
|
|
114
|
-
content: textNode.value,
|
|
115
|
-
})
|
|
116
|
-
await cook({
|
|
117
|
-
reference: inlineScriptReference,
|
|
118
|
-
urlInfo: inlineScriptUrlInfo,
|
|
119
|
-
})
|
|
120
|
-
setHtmlNodeText(node, inlineScriptUrlInfo.content)
|
|
121
|
-
})
|
|
122
|
-
}
|
|
123
|
-
visitHtmlAst(htmlAst, (node) => {
|
|
124
|
-
handleInlineStyle(node)
|
|
125
|
-
handleInlineScript(node)
|
|
126
|
-
})
|
|
127
|
-
if (actions.length === 0) {
|
|
128
|
-
return null
|
|
129
|
-
}
|
|
130
|
-
await Promise.all(
|
|
131
|
-
actions.map(async (action) => {
|
|
132
|
-
await action()
|
|
133
|
-
}),
|
|
134
|
-
)
|
|
135
|
-
const htmlModified = stringifyHtmlAst(htmlAst)
|
|
136
|
-
return {
|
|
137
|
-
content: htmlModified,
|
|
138
|
-
}
|
|
139
|
-
},
|
|
140
|
-
},
|
|
141
|
-
}
|
|
142
|
-
}
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Needs to be updated so that it sill works in the following cases:
|
|
3
|
-
* - templates literals transformed to regular stuff by babel
|
|
4
|
-
* - tagged name renamed by rollup
|
|
5
|
-
* - the template named is minified by terser
|
|
6
|
-
* In the cases above I must remain capable to recoginize the template literal
|
|
7
|
-
* to be able to update the urls inside (and even version the urls)
|
|
8
|
-
* because url versioning happens after minification it can be challenging
|
|
9
|
-
*
|
|
10
|
-
* TODO: use "keep_classnames" https://github.com/terser/terser#compress-options
|
|
11
|
-
* so that new InlineContent can be recognized after minification
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
|
|
15
|
-
import { JS_QUOTES } from "@jsenv/utils/string/js_quotes.js"
|
|
16
|
-
import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
|
|
17
|
-
import { generateInlineContentUrl } from "@jsenv/utils/urls/inline_content_url_generator.js"
|
|
18
|
-
|
|
19
|
-
export const jsenvPluginNewInlineContent = ({ allowEscapeForVersioning }) => {
|
|
20
|
-
return {
|
|
21
|
-
name: "jsenv:new_inline_content",
|
|
22
|
-
appliesDuring: "*",
|
|
23
|
-
transform: {
|
|
24
|
-
js_module: async (
|
|
25
|
-
{ url, generatedUrl, content, originalContent },
|
|
26
|
-
{ referenceUtils, cook, isSupportedOnRuntime },
|
|
27
|
-
) => {
|
|
28
|
-
const { metadata } = await applyBabelPlugins({
|
|
29
|
-
babelPlugins: [babelPluginMetadataInlineContentCalls],
|
|
30
|
-
url,
|
|
31
|
-
generatedUrl,
|
|
32
|
-
content,
|
|
33
|
-
})
|
|
34
|
-
const { inlineContentCalls } = metadata
|
|
35
|
-
if (inlineContentCalls.length === 0) {
|
|
36
|
-
return null
|
|
37
|
-
}
|
|
38
|
-
const magicSource = createMagicSource(content)
|
|
39
|
-
await inlineContentCalls.reduce(async (previous, inlineContentCall) => {
|
|
40
|
-
await previous
|
|
41
|
-
const inlineUrl = generateInlineContentUrl({
|
|
42
|
-
url,
|
|
43
|
-
extension: {
|
|
44
|
-
"application/json": ".json",
|
|
45
|
-
"text/css": ".css",
|
|
46
|
-
"text/plain": ".txt",
|
|
47
|
-
"application/octet-stream": "",
|
|
48
|
-
}[inlineContentCall.contentType],
|
|
49
|
-
line: inlineContentCall.line,
|
|
50
|
-
column: inlineContentCall.column,
|
|
51
|
-
lineEnd: inlineContentCall.lineEnd,
|
|
52
|
-
columnEnd: inlineContentCall.columnEnd,
|
|
53
|
-
})
|
|
54
|
-
let { quote } = inlineContentCall
|
|
55
|
-
if (quote === "`" && !isSupportedOnRuntime("template_literals")) {
|
|
56
|
-
// if quote is "`" and template literals are not supported
|
|
57
|
-
// we'll use a regular string (single or double quote)
|
|
58
|
-
// when rendering the string
|
|
59
|
-
quote = JS_QUOTES.pickBest(inlineContentCall.content)
|
|
60
|
-
}
|
|
61
|
-
const [inlineReference, inlineUrlInfo] = referenceUtils.foundInline({
|
|
62
|
-
type: "js_inline_content",
|
|
63
|
-
isOriginal: content === originalContent,
|
|
64
|
-
line: inlineContentCall.line,
|
|
65
|
-
column: inlineContentCall.column,
|
|
66
|
-
specifier: inlineUrl,
|
|
67
|
-
contentType: inlineContentCall.contentType,
|
|
68
|
-
content: inlineContentCall.content,
|
|
69
|
-
})
|
|
70
|
-
inlineUrlInfo.jsQuote = quote
|
|
71
|
-
inlineReference.escape = (value) =>
|
|
72
|
-
JS_QUOTES.escapeSpecialChars(value.slice(1, -1), { quote })
|
|
73
|
-
await cook({
|
|
74
|
-
reference: inlineReference,
|
|
75
|
-
urlInfo: inlineUrlInfo,
|
|
76
|
-
})
|
|
77
|
-
magicSource.replace({
|
|
78
|
-
start: inlineContentCall.start,
|
|
79
|
-
end: inlineContentCall.end,
|
|
80
|
-
replacement: JS_QUOTES.escapeSpecialChars(inlineUrlInfo.content, {
|
|
81
|
-
quote,
|
|
82
|
-
allowEscapeForVersioning,
|
|
83
|
-
}),
|
|
84
|
-
})
|
|
85
|
-
}, Promise.resolve())
|
|
86
|
-
return magicSource.toContentAndSourcemap()
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const babelPluginMetadataInlineContentCalls = () => {
|
|
93
|
-
return {
|
|
94
|
-
name: "metadata-inline-content-calls",
|
|
95
|
-
visitor: {
|
|
96
|
-
Program: (programPath, state) => {
|
|
97
|
-
const inlineContentCalls = []
|
|
98
|
-
programPath.traverse({
|
|
99
|
-
NewExpression: (path) => {
|
|
100
|
-
const newInlineContentCall = parseAsNewInlineContentCall(path)
|
|
101
|
-
if (newInlineContentCall) {
|
|
102
|
-
inlineContentCalls.push(newInlineContentCall)
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
})
|
|
106
|
-
state.file.metadata.inlineContentCalls = inlineContentCalls
|
|
107
|
-
},
|
|
108
|
-
},
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
const parseAsNewInlineContentCall = (path) => {
|
|
113
|
-
const node = path.node
|
|
114
|
-
if (node.callee.type === "Identifier") {
|
|
115
|
-
// terser rename import to use a shorter name
|
|
116
|
-
const name = getOriginalName(path, node.callee.name)
|
|
117
|
-
if (name !== "InlineContent") {
|
|
118
|
-
return null
|
|
119
|
-
}
|
|
120
|
-
} else if (node.callee.id) {
|
|
121
|
-
// terser might combine new InlineContent('') declaration and usage
|
|
122
|
-
if (node.callee.id.type !== "Identifier") {
|
|
123
|
-
return null
|
|
124
|
-
}
|
|
125
|
-
const name = getOriginalName(path, node.callee.id.name)
|
|
126
|
-
if (name !== "InlineContent") {
|
|
127
|
-
return null
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
if (node.arguments.length !== 2) {
|
|
131
|
-
return null
|
|
132
|
-
}
|
|
133
|
-
const [firstArg, secondArg] = node.arguments
|
|
134
|
-
if (secondArg.type !== "ObjectExpression") {
|
|
135
|
-
return null
|
|
136
|
-
}
|
|
137
|
-
const typePropertyNode = secondArg.properties.find((property) => {
|
|
138
|
-
return (
|
|
139
|
-
property.key.type === "Identifier" &&
|
|
140
|
-
property.key.name === "type" &&
|
|
141
|
-
property.type === "ObjectProperty" &&
|
|
142
|
-
property.value.type === "StringLiteral"
|
|
143
|
-
)
|
|
144
|
-
})
|
|
145
|
-
if (!typePropertyNode) {
|
|
146
|
-
return null
|
|
147
|
-
}
|
|
148
|
-
const type = typePropertyNode.value.value
|
|
149
|
-
if (firstArg.type === "StringLiteral") {
|
|
150
|
-
const position = getNodePosition(firstArg)
|
|
151
|
-
return {
|
|
152
|
-
nodeType: "StringLiteral",
|
|
153
|
-
quote: firstArg.extra.raw[0],
|
|
154
|
-
contentType: type,
|
|
155
|
-
content: firstArg.value,
|
|
156
|
-
...position,
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
if (firstArg.type === "TemplateLiteral") {
|
|
160
|
-
const quasis = firstArg.quasis
|
|
161
|
-
if (quasis.length !== 1) {
|
|
162
|
-
return null
|
|
163
|
-
}
|
|
164
|
-
const templateElementNode = quasis[0]
|
|
165
|
-
const position = getNodePosition(firstArg)
|
|
166
|
-
return {
|
|
167
|
-
nodeType: "TemplateLiteral",
|
|
168
|
-
quote: "`",
|
|
169
|
-
contentType: type,
|
|
170
|
-
content: templateElementNode.value.cooked,
|
|
171
|
-
...position,
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return null
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
const getNodePosition = (node) => {
|
|
178
|
-
return {
|
|
179
|
-
start: node.start,
|
|
180
|
-
end: node.end,
|
|
181
|
-
line: node.loc.start.line,
|
|
182
|
-
column: node.loc.start.column,
|
|
183
|
-
lineEnd: node.loc.end.line,
|
|
184
|
-
columnEnd: node.loc.end.column,
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
const getOriginalName = (path, name) => {
|
|
189
|
-
const binding = path.scope.getBinding(name)
|
|
190
|
-
if (!binding) {
|
|
191
|
-
return name
|
|
192
|
-
}
|
|
193
|
-
if (binding.path.type === "ImportSpecifier") {
|
|
194
|
-
const importedName = binding.path.node.imported.name
|
|
195
|
-
if (name === importedName) {
|
|
196
|
-
return name
|
|
197
|
-
}
|
|
198
|
-
return getOriginalName(path, importedName)
|
|
199
|
-
}
|
|
200
|
-
if (binding.path.type === "VariableDeclarator") {
|
|
201
|
-
if (binding.path.node.init.type === "Identifier") {
|
|
202
|
-
const previousName = binding.path.node.init.name
|
|
203
|
-
return getOriginalName(path, previousName)
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
return name
|
|
207
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export const jsenvPluginLeadingSlash = () => {
|
|
2
|
-
return {
|
|
3
|
-
name: "jsenv:leading_slash",
|
|
4
|
-
appliesDuring: "*",
|
|
5
|
-
resolve: ({ specifier }, { rootDirectoryUrl }) => {
|
|
6
|
-
if (specifier[0] !== "/") {
|
|
7
|
-
return null
|
|
8
|
-
}
|
|
9
|
-
return new URL(specifier.slice(1), rootDirectoryUrl).href
|
|
10
|
-
},
|
|
11
|
-
}
|
|
12
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* - should I restore eventual search params lost during node esm resolution
|
|
3
|
-
* - what about symlinks?
|
|
4
|
-
* It feels like I should apply symlink (when we don't want to preserve them)
|
|
5
|
-
* once a file:/// url is found, regardless
|
|
6
|
-
* if that comes from node resolution or anything else (not even magic resolution)
|
|
7
|
-
* it should likely be an other plugin happening after the others
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import {
|
|
11
|
-
applyNodeEsmResolution,
|
|
12
|
-
lookupPackageScope,
|
|
13
|
-
readPackageJson,
|
|
14
|
-
} from "@jsenv/node-esm-resolution"
|
|
15
|
-
|
|
16
|
-
export const jsenvPluginNodeEsmResolution = ({
|
|
17
|
-
// https://nodejs.org/api/esm.html#resolver-algorithm-specification
|
|
18
|
-
packageConditions = ["browser", "import"],
|
|
19
|
-
} = {}) => {
|
|
20
|
-
const nodeEsmResolution = {
|
|
21
|
-
name: "jsenv:node_esm_resolve",
|
|
22
|
-
appliesDuring: "*",
|
|
23
|
-
resolve: {
|
|
24
|
-
js_import_export: ({ parentUrl, specifier }) => {
|
|
25
|
-
const { url } = applyNodeEsmResolution({
|
|
26
|
-
conditions: packageConditions,
|
|
27
|
-
parentUrl,
|
|
28
|
-
specifier,
|
|
29
|
-
})
|
|
30
|
-
return url
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
load: ({ url }) => {
|
|
34
|
-
if (url.startsWith("file:///@ignore/")) {
|
|
35
|
-
return {
|
|
36
|
-
content: "export default {}",
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return null
|
|
40
|
-
},
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const packageVersionInUrl = {
|
|
44
|
-
name: "jsenv:package_url_version",
|
|
45
|
-
appliesDuring: {
|
|
46
|
-
dev: true,
|
|
47
|
-
test: true,
|
|
48
|
-
},
|
|
49
|
-
transformReferencedUrl: ({ url }, { rootDirectoryUrl }) => {
|
|
50
|
-
if (!url.startsWith("file:")) {
|
|
51
|
-
return null
|
|
52
|
-
}
|
|
53
|
-
// without this check a file inside a project without package.json
|
|
54
|
-
// could be considered as a node module if there is a ancestor package.json
|
|
55
|
-
// but we want to version only node modules
|
|
56
|
-
if (!url.includes("/node_modules/")) {
|
|
57
|
-
return null
|
|
58
|
-
}
|
|
59
|
-
const urlObject = new URL(url)
|
|
60
|
-
if (urlObject.searchParams.has("v")) {
|
|
61
|
-
return null
|
|
62
|
-
}
|
|
63
|
-
const packageUrl = lookupPackageScope(url)
|
|
64
|
-
if (!packageUrl) {
|
|
65
|
-
return null
|
|
66
|
-
}
|
|
67
|
-
if (packageUrl === rootDirectoryUrl) {
|
|
68
|
-
return null
|
|
69
|
-
}
|
|
70
|
-
const packageVersion = readPackageJson(packageUrl).version
|
|
71
|
-
urlObject.searchParams.set("v", packageVersion)
|
|
72
|
-
return urlObject.href
|
|
73
|
-
},
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return [nodeEsmResolution, packageVersionInUrl]
|
|
77
|
-
}
|