@jsenv/core 27.0.0-alpha.8 → 27.0.0-alpha.82
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 +324 -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/main.js +13422 -0
- package/dist/other/jsenv.png +0 -0
- package/dist/s.js +626 -0
- package/dist/s.js.map +204 -0
- package/package.json +57 -51
- package/readme.md +6 -14
- package/src/build/build.js +1074 -563
- package/src/build/build_urls_generator.js +65 -24
- package/src/build/graph_utils.js +31 -0
- package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +49 -18
- package/src/build/inject_service_worker_urls.js +79 -0
- package/src/build/resync_ressource_hints.js +115 -0
- package/src/build/start_build_server.js +210 -0
- package/src/dev/plugins/explorer/client/explorer.html +1 -1
- package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +9 -13
- package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
- package/src/dev/start_dev_server.js +165 -38
- package/src/execute/execute.js +35 -8
- package/src/execute/run.js +21 -57
- package/src/execute/runtimes/browsers/from_playwright.js +220 -150
- 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/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} +14 -16
- 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 +605 -467
- 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 -6
- 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 +37 -17
- 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 +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/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 +343 -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 +54 -41
- package/src/plugins/file_urls/jsenv_plugin_file_urls.js +183 -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/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +73 -55
- 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 +7 -4
- 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 +33 -8
- 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 +40 -36
- 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 +161 -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 +89 -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 +211 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +304 -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 +0 -0
- 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 +0 -0
- 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 +39 -32
- package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +30 -6
- 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/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 +79 -0
- package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
- package/src/plugins/url_analysis/css/css_urls.js +49 -0
- package/src/plugins/url_analysis/html/html_urls.js +272 -0
- package/src/plugins/url_analysis/js/js_urls.js +68 -0
- package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +103 -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/execute_plan.js +85 -44
- package/src/test/execute_test_plan.js +37 -25
- 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/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/client/event_source_connection.js +0 -195
- 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/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_graph/url_graph_sort.js +0 -29
- 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,6 +1,6 @@
|
|
|
1
1
|
import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { RUNTIME_COMPAT } from "@jsenv/core/src/omega/compat/runtime_compat.js"
|
|
4
4
|
import { getBaseBabelPluginStructure } from "./helpers/babel_plugin_structure.js"
|
|
5
5
|
import { babelPluginBabelHelpersAsJsenvImports } from "./helpers/babel_plugin_babel_helpers_as_jsenv_imports.js"
|
|
6
6
|
import { babelPluginNewStylesheetAsJsenvImport } from "./new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js"
|
|
@@ -9,47 +9,57 @@ import { babelPluginRegeneratorRuntimeAsJsenvImport } from "./regenerator_runtim
|
|
|
9
9
|
|
|
10
10
|
export const jsenvPluginBabel = ({
|
|
11
11
|
getCustomBabelPlugins,
|
|
12
|
-
|
|
12
|
+
babelHelpersAsImport = true,
|
|
13
13
|
} = {}) => {
|
|
14
14
|
const transformWithBabel = async (urlInfo, context) => {
|
|
15
15
|
const isJsModule = urlInfo.type === "js_module"
|
|
16
16
|
const isWorker = urlInfo.subtype === "worker"
|
|
17
17
|
const isServiceWorker = urlInfo.subtype === "service_worker"
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
const isSharedWorker = urlInfo.subtype === "shared_worker"
|
|
19
|
+
const isWorkerContext = isWorker || isServiceWorker || isSharedWorker
|
|
20
|
+
|
|
21
|
+
let { clientRuntimeCompat } = context
|
|
22
|
+
if (isWorker) {
|
|
23
|
+
clientRuntimeCompat = RUNTIME_COMPAT.add(clientRuntimeCompat, "worker")
|
|
24
|
+
} else if (isServiceWorker) {
|
|
21
25
|
// when code is executed by a service worker we can assume
|
|
22
26
|
// the execution context supports more than the default one
|
|
23
27
|
// for instance arrow function are supported
|
|
24
|
-
|
|
28
|
+
clientRuntimeCompat = RUNTIME_COMPAT.add(
|
|
29
|
+
clientRuntimeCompat,
|
|
30
|
+
"service_worker",
|
|
31
|
+
)
|
|
32
|
+
} else if (isSharedWorker) {
|
|
33
|
+
clientRuntimeCompat = RUNTIME_COMPAT.add(
|
|
34
|
+
clientRuntimeCompat,
|
|
35
|
+
"shared_worker",
|
|
36
|
+
)
|
|
25
37
|
}
|
|
26
|
-
|
|
27
|
-
|
|
38
|
+
|
|
39
|
+
const isSupported = (feature) =>
|
|
40
|
+
RUNTIME_COMPAT.isSupported(clientRuntimeCompat, feature)
|
|
41
|
+
const getImportSpecifier = (clientFileUrl) => {
|
|
42
|
+
const [reference] = context.referenceUtils.inject({
|
|
43
|
+
type: "js_import_export",
|
|
44
|
+
expectedType: "js_module",
|
|
45
|
+
specifier: clientFileUrl,
|
|
46
|
+
})
|
|
47
|
+
return JSON.parse(reference.generatedSpecifier)
|
|
28
48
|
}
|
|
29
|
-
|
|
30
|
-
const isSupportedOnRuntime = (feature) =>
|
|
31
|
-
RUNTIME_SUPPORT.isSupported(runtimeSupport, feature)
|
|
49
|
+
|
|
32
50
|
const babelPluginStructure = getBaseBabelPluginStructure({
|
|
33
51
|
url: urlInfo.url,
|
|
34
|
-
|
|
35
|
-
topLevelAwait,
|
|
36
|
-
usesTopLevelAwait: urlInfo.data.usesTopLevelAwait,
|
|
37
|
-
isJsModule,
|
|
52
|
+
isSupported,
|
|
38
53
|
isWorkerContext,
|
|
54
|
+
isJsModule,
|
|
55
|
+
getImportSpecifier,
|
|
39
56
|
})
|
|
40
57
|
if (getCustomBabelPlugins) {
|
|
41
58
|
Object.assign(babelPluginStructure, getCustomBabelPlugins(context))
|
|
42
59
|
}
|
|
43
60
|
|
|
44
|
-
if (isJsModule) {
|
|
45
|
-
|
|
46
|
-
const [reference] = referenceUtils.inject({
|
|
47
|
-
type: "js_import_export",
|
|
48
|
-
specifier: clientFileUrl,
|
|
49
|
-
})
|
|
50
|
-
return JSON.parse(reference.generatedSpecifier)
|
|
51
|
-
}
|
|
52
|
-
if (!isSupportedOnRuntime("global_this")) {
|
|
61
|
+
if (isJsModule && babelHelpersAsImport) {
|
|
62
|
+
if (!isSupported("global_this")) {
|
|
53
63
|
babelPluginStructure["global-this-as-jsenv-import"] = [
|
|
54
64
|
babelPluginGlobalThisAsJsenvImport,
|
|
55
65
|
{
|
|
@@ -57,7 +67,7 @@ export const jsenvPluginBabel = ({
|
|
|
57
67
|
},
|
|
58
68
|
]
|
|
59
69
|
}
|
|
60
|
-
if (!
|
|
70
|
+
if (!isSupported("async_generator_function")) {
|
|
61
71
|
babelPluginStructure["regenerator-runtime-as-jsenv-import"] = [
|
|
62
72
|
babelPluginRegeneratorRuntimeAsJsenvImport,
|
|
63
73
|
{
|
|
@@ -65,7 +75,7 @@ export const jsenvPluginBabel = ({
|
|
|
65
75
|
},
|
|
66
76
|
]
|
|
67
77
|
}
|
|
68
|
-
if (!
|
|
78
|
+
if (!isSupported("new_stylesheet")) {
|
|
69
79
|
babelPluginStructure["new-stylesheet-as-jsenv-import"] = [
|
|
70
80
|
babelPluginNewStylesheetAsJsenvImport,
|
|
71
81
|
{
|
|
@@ -90,22 +100,19 @@ export const jsenvPluginBabel = ({
|
|
|
90
100
|
)
|
|
91
101
|
const { code, map } = await applyBabelPlugins({
|
|
92
102
|
babelPlugins,
|
|
93
|
-
|
|
94
|
-
generatedUrl: urlInfo.generatedUrl,
|
|
95
|
-
content: urlInfo.content,
|
|
103
|
+
urlInfo,
|
|
96
104
|
})
|
|
97
105
|
return {
|
|
98
106
|
content: code,
|
|
99
107
|
sourcemap: map,
|
|
100
108
|
}
|
|
101
109
|
}
|
|
102
|
-
|
|
103
110
|
return {
|
|
104
111
|
name: "jsenv:babel",
|
|
105
112
|
appliesDuring: "*",
|
|
106
|
-
|
|
107
|
-
js_module: transformWithBabel,
|
|
113
|
+
finalizeUrlContent: {
|
|
108
114
|
js_classic: transformWithBabel,
|
|
115
|
+
js_module: transformWithBabel,
|
|
109
116
|
},
|
|
110
117
|
}
|
|
111
118
|
}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* TODO:
|
|
3
|
-
* - code should also inject helper when code uses new keyword on "CSSStyleSheet"
|
|
4
|
-
* - code should also inject helper when code uses "document.adoptedStylesheets"
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
1
|
import { pathToFileURL } from "node:url"
|
|
8
2
|
|
|
9
3
|
import { injectImport } from "@jsenv/utils/js_ast/babel_utils.js"
|
|
@@ -27,6 +21,18 @@ export const babelPluginNewStylesheetAsJsenvImport = (
|
|
|
27
21
|
}
|
|
28
22
|
let usesNewStylesheet = false
|
|
29
23
|
programPath.traverse({
|
|
24
|
+
NewExpression: (path) => {
|
|
25
|
+
usesNewStylesheet = isNewCssStyleSheetCall(path.node)
|
|
26
|
+
if (usesNewStylesheet) {
|
|
27
|
+
path.stop()
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
MemberExpression: (path) => {
|
|
31
|
+
usesNewStylesheet = isDocumentAdoptedStyleSheets(path.node)
|
|
32
|
+
if (usesNewStylesheet) {
|
|
33
|
+
path.stop()
|
|
34
|
+
}
|
|
35
|
+
},
|
|
30
36
|
CallExpression: (path) => {
|
|
31
37
|
if (path.node.callee.type !== "Import") {
|
|
32
38
|
// Some other function call, not import();
|
|
@@ -90,6 +96,24 @@ export const babelPluginNewStylesheetAsJsenvImport = (
|
|
|
90
96
|
}
|
|
91
97
|
}
|
|
92
98
|
|
|
99
|
+
const isNewCssStyleSheetCall = (node) => {
|
|
100
|
+
return (
|
|
101
|
+
node.type === "NewExpression" &&
|
|
102
|
+
node.callee.type === "Identifier" &&
|
|
103
|
+
node.callee.name === "CSSStyleSheet"
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const isDocumentAdoptedStyleSheets = (node) => {
|
|
108
|
+
return (
|
|
109
|
+
node.type === "MemberExpression" &&
|
|
110
|
+
node.object.type === "Identifier" &&
|
|
111
|
+
node.object.name === "document" &&
|
|
112
|
+
node.property.type === "Identifier" &&
|
|
113
|
+
node.property.name === "adoptedStyleSheets"
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
|
|
93
117
|
const hasCssModuleQueryParam = (path) => {
|
|
94
118
|
const { node } = path
|
|
95
119
|
return (
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createRequire } from "node:module"
|
|
2
|
+
import { pathToFileURL } from "node:url"
|
|
3
|
+
import { requireFromJsenv } from "@jsenv/core/src/require_from_jsenv.js"
|
|
4
|
+
|
|
5
|
+
const babelPluginPackagePath = requireFromJsenv.resolve("@jsenv/babel-plugins")
|
|
6
|
+
const babelPluginPackageUrl = pathToFileURL(babelPluginPackagePath)
|
|
7
|
+
|
|
8
|
+
export const requireBabelPlugin = createRequire(babelPluginPackageUrl)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { transpileWithParcel } from "@jsenv/utils/css_ast/parcel_css.js"
|
|
2
|
+
|
|
3
|
+
// https://github.com/parcel-bundler/parcel-css
|
|
4
|
+
export const jsenvPluginCssParcel = () => {
|
|
5
|
+
return {
|
|
6
|
+
name: "jsenv:css_parcel",
|
|
7
|
+
appliesDuring: "*",
|
|
8
|
+
transformUrlContent: {
|
|
9
|
+
css: (urlInfo, context) => {
|
|
10
|
+
const { code, map } = transpileWithParcel(urlInfo, context)
|
|
11
|
+
return {
|
|
12
|
+
content: String(code),
|
|
13
|
+
sourcemap: map,
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Jsenv wont touch code where "specifier" or "type" is dynamic (see code below)
|
|
3
|
+
* ```js
|
|
4
|
+
* const file = "./style.css"
|
|
5
|
+
* const type = "css"
|
|
6
|
+
* import(file, { assert: { type }})
|
|
7
|
+
* ```
|
|
8
|
+
* Jsenv could throw an error when it knows some browsers in runtimeCompat
|
|
9
|
+
* do not support import assertions
|
|
10
|
+
* But for now (as it is simpler) we let the browser throw the error
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { urlToFilename, injectQueryParams } from "@jsenv/urls"
|
|
14
|
+
|
|
15
|
+
import { JS_QUOTES } from "@jsenv/utils/string/js_quotes.js"
|
|
16
|
+
|
|
17
|
+
export const jsenvPluginImportAssertions = () => {
|
|
18
|
+
const updateReference = (reference, searchParam) => {
|
|
19
|
+
reference.expectedType = "js_module"
|
|
20
|
+
reference.filename = `${urlToFilename(reference.url)}.js`
|
|
21
|
+
reference.mutation = (magicSource) => {
|
|
22
|
+
magicSource.remove({
|
|
23
|
+
start: reference.assertNode.start,
|
|
24
|
+
end: reference.assertNode.end,
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
const newUrl = injectQueryParams(reference.url, {
|
|
28
|
+
[searchParam]: "",
|
|
29
|
+
})
|
|
30
|
+
return newUrl
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const importAssertions = {
|
|
34
|
+
name: "jsenv:import_assertions",
|
|
35
|
+
appliesDuring: "*",
|
|
36
|
+
redirectUrl: {
|
|
37
|
+
js_import_export: (reference, context) => {
|
|
38
|
+
if (!reference.assert) {
|
|
39
|
+
return null
|
|
40
|
+
}
|
|
41
|
+
// during build always replace import assertions with the js:
|
|
42
|
+
// - avoid rollup to see import assertions
|
|
43
|
+
// We would have to tell rollup to ignore import with assertion
|
|
44
|
+
// - means rollup can bundle more js file together
|
|
45
|
+
// - means url versioning can work for css inlined in js
|
|
46
|
+
if (reference.assert.type === "json") {
|
|
47
|
+
if (
|
|
48
|
+
context.scenario !== "build" &&
|
|
49
|
+
context.isSupportedOnCurrentClients("import_type_json")
|
|
50
|
+
) {
|
|
51
|
+
return null
|
|
52
|
+
}
|
|
53
|
+
return updateReference(reference, "as_json_module")
|
|
54
|
+
}
|
|
55
|
+
if (reference.assert.type === "css") {
|
|
56
|
+
if (
|
|
57
|
+
context.scenario !== "build" &&
|
|
58
|
+
context.isSupportedOnCurrentClients("import_type_css")
|
|
59
|
+
) {
|
|
60
|
+
return null
|
|
61
|
+
}
|
|
62
|
+
return updateReference(reference, "as_css_module")
|
|
63
|
+
}
|
|
64
|
+
if (reference.assert.type === "text") {
|
|
65
|
+
if (
|
|
66
|
+
context.scenario !== "build" &&
|
|
67
|
+
context.isSupportedOnCurrentClients("import_type_text")
|
|
68
|
+
) {
|
|
69
|
+
return null
|
|
70
|
+
}
|
|
71
|
+
return updateReference(reference, "as_text_module")
|
|
72
|
+
}
|
|
73
|
+
return null
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
}
|
|
77
|
+
return [importAssertions, ...jsenvPluginAsModules()]
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const jsenvPluginAsModules = () => {
|
|
81
|
+
const inlineContentClientFileUrl = new URL(
|
|
82
|
+
"../../inline/client/inline_content.js",
|
|
83
|
+
import.meta.url,
|
|
84
|
+
).href
|
|
85
|
+
|
|
86
|
+
const asJsonModule = {
|
|
87
|
+
name: `jsenv:as_json_module`,
|
|
88
|
+
appliesDuring: "*",
|
|
89
|
+
fetchUrlContent: async (urlInfo, context) => {
|
|
90
|
+
const originalUrlInfo = await context.fetchOriginalUrlInfo({
|
|
91
|
+
urlInfo,
|
|
92
|
+
context,
|
|
93
|
+
searchParam: "as_json_module",
|
|
94
|
+
expectedType: "json",
|
|
95
|
+
})
|
|
96
|
+
if (!originalUrlInfo) {
|
|
97
|
+
return null
|
|
98
|
+
}
|
|
99
|
+
const jsonText = JSON.stringify(originalUrlInfo.content.trim())
|
|
100
|
+
return {
|
|
101
|
+
// here we could `export default ${jsonText}`:
|
|
102
|
+
// but js engine are optimized to recognize JSON.parse
|
|
103
|
+
// and use a faster parsing strategy
|
|
104
|
+
content: `export default JSON.parse(${jsonText})`,
|
|
105
|
+
contentType: "text/javascript",
|
|
106
|
+
type: "js_module",
|
|
107
|
+
originalUrl: originalUrlInfo.originalUrl,
|
|
108
|
+
originalContent: originalUrlInfo.originalContent,
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const asCssModule = {
|
|
114
|
+
name: `jsenv:as_css_module`,
|
|
115
|
+
appliesDuring: "*",
|
|
116
|
+
fetchUrlContent: async (urlInfo, context) => {
|
|
117
|
+
const originalUrlInfo = await context.fetchOriginalUrlInfo({
|
|
118
|
+
urlInfo,
|
|
119
|
+
context,
|
|
120
|
+
searchParam: "as_css_module",
|
|
121
|
+
expectedType: "css",
|
|
122
|
+
})
|
|
123
|
+
if (!originalUrlInfo) {
|
|
124
|
+
return null
|
|
125
|
+
}
|
|
126
|
+
const cssText = JS_QUOTES.escapeSpecialChars(originalUrlInfo.content, {
|
|
127
|
+
// If template string is choosen and runtime do not support template literals
|
|
128
|
+
// it's ok because "jsenv:new_inline_content" plugin executes after this one
|
|
129
|
+
// and convert template strings into raw strings
|
|
130
|
+
canUseTemplateString: true,
|
|
131
|
+
})
|
|
132
|
+
return {
|
|
133
|
+
content: `import { InlineContent } from ${JSON.stringify(
|
|
134
|
+
inlineContentClientFileUrl,
|
|
135
|
+
)}
|
|
136
|
+
|
|
137
|
+
const inlineContent = new InlineContent(${cssText}, { type: "text/css" })
|
|
138
|
+
const stylesheet = new CSSStyleSheet()
|
|
139
|
+
stylesheet.replaceSync(inlineContent.text)
|
|
140
|
+
export default stylesheet`,
|
|
141
|
+
contentType: "text/javascript",
|
|
142
|
+
type: "js_module",
|
|
143
|
+
originalUrl: originalUrlInfo.originalUrl,
|
|
144
|
+
originalContent: originalUrlInfo.originalContent,
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const asTextModule = {
|
|
150
|
+
name: `jsenv:as_text_module`,
|
|
151
|
+
appliesDuring: "*",
|
|
152
|
+
fetchUrlContent: async (urlInfo, context) => {
|
|
153
|
+
const originalUrlInfo = await context.fetchOriginalUrlInfo({
|
|
154
|
+
urlInfo,
|
|
155
|
+
context,
|
|
156
|
+
searchParam: "as_text_module",
|
|
157
|
+
expectedType: "text",
|
|
158
|
+
})
|
|
159
|
+
if (!originalUrlInfo) {
|
|
160
|
+
return null
|
|
161
|
+
}
|
|
162
|
+
const textPlain = JS_QUOTES.escapeSpecialChars(urlInfo.content, {
|
|
163
|
+
// If template string is choosen and runtime do not support template literals
|
|
164
|
+
// it's ok because "jsenv:new_inline_content" plugin executes after this one
|
|
165
|
+
// and convert template strings into raw strings
|
|
166
|
+
canUseTemplateString: true,
|
|
167
|
+
})
|
|
168
|
+
return {
|
|
169
|
+
content: `import { InlineContent } from ${JSON.stringify(
|
|
170
|
+
inlineContentClientFileUrl,
|
|
171
|
+
)}
|
|
172
|
+
|
|
173
|
+
const inlineContent = new InlineContent(${textPlain}, { type: "text/plain" })
|
|
174
|
+
export default inlineContent.text`,
|
|
175
|
+
contentType: "text/javascript",
|
|
176
|
+
type: "js_module",
|
|
177
|
+
originalUrl: originalUrlInfo.originalUrl,
|
|
178
|
+
originalContent: originalUrlInfo.originalContent,
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return [asJsonModule, asCssModule, asTextModule]
|
|
184
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
|
|
2
|
+
import { requireBabelPlugin } from "./babel/require_babel_plugin.js"
|
|
3
|
+
|
|
4
|
+
export const jsenvPluginTopLevelAwait = () => {
|
|
5
|
+
return {
|
|
6
|
+
name: "jsenv:top_level_await",
|
|
7
|
+
appliesDuring: "*",
|
|
8
|
+
transformUrlContent: {
|
|
9
|
+
js_module: async (urlInfo, context) => {
|
|
10
|
+
if (context.isSupportedOnCurrentClients("top_level_await")) {
|
|
11
|
+
return null
|
|
12
|
+
}
|
|
13
|
+
const usesTLA = await usesTopLevelAwait(urlInfo)
|
|
14
|
+
if (!usesTLA) {
|
|
15
|
+
return null
|
|
16
|
+
}
|
|
17
|
+
const { code, map } = await applyBabelPlugins({
|
|
18
|
+
urlInfo,
|
|
19
|
+
babelPlugins: [
|
|
20
|
+
[
|
|
21
|
+
requireBabelPlugin("babel-plugin-transform-async-to-promises"),
|
|
22
|
+
{
|
|
23
|
+
// Maybe we could pass target: "es6" when we support arrow function
|
|
24
|
+
// https://github.com/rpetrich/babel-plugin-transform-async-to-promises/blob/92755ff8c943c97596523e586b5fa515c2e99326/async-to-promises.ts#L55
|
|
25
|
+
topLevelAwait: "simple",
|
|
26
|
+
// enable once https://github.com/rpetrich/babel-plugin-transform-async-to-promises/pull/83
|
|
27
|
+
// externalHelpers: true,
|
|
28
|
+
// externalHelpersPath: JSON.parse(
|
|
29
|
+
// context.referenceUtils.inject({
|
|
30
|
+
// type: "js_import_export",
|
|
31
|
+
// expectedType: "js_module",
|
|
32
|
+
// specifier:
|
|
33
|
+
// "babel-plugin-transform-async-to-promises/helpers.mjs",
|
|
34
|
+
// })[0],
|
|
35
|
+
// ),
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
],
|
|
39
|
+
})
|
|
40
|
+
return {
|
|
41
|
+
content: code,
|
|
42
|
+
sourcemap: map,
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const usesTopLevelAwait = async (urlInfo) => {
|
|
50
|
+
if (!urlInfo.content.includes("await ")) {
|
|
51
|
+
return false
|
|
52
|
+
}
|
|
53
|
+
const { metadata } = await applyBabelPlugins({
|
|
54
|
+
urlInfo,
|
|
55
|
+
babelPlugins: [babelPluginMetadataUsesTopLevelAwait],
|
|
56
|
+
})
|
|
57
|
+
return metadata.usesTopLevelAwait
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const babelPluginMetadataUsesTopLevelAwait = () => {
|
|
61
|
+
return {
|
|
62
|
+
name: "metadata-uses-top-level-await",
|
|
63
|
+
visitor: {
|
|
64
|
+
Program: (programPath, state) => {
|
|
65
|
+
let usesTopLevelAwait = false
|
|
66
|
+
programPath.traverse({
|
|
67
|
+
AwaitExpression: (path) => {
|
|
68
|
+
const closestFunction = path.getFunctionParent()
|
|
69
|
+
if (!closestFunction) {
|
|
70
|
+
usesTopLevelAwait = true
|
|
71
|
+
path.stop()
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
})
|
|
75
|
+
state.file.metadata.usesTopLevelAwait = usesTopLevelAwait
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Transforms code to make it compatible with browser that would not be able to
|
|
3
|
+
* run it otherwise. For instance:
|
|
4
|
+
* - const -> var
|
|
5
|
+
* - async/await -> promises
|
|
6
|
+
* Anything that is not standard (import.meta.dev for instance) is outside the scope
|
|
7
|
+
* of this plugin
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { jsenvPluginCssParcel } from "./css_parcel/jsenv_plugin_css_parcel.js"
|
|
11
|
+
import { jsenvPluginImportAssertions } from "./import_assertions/jsenv_plugin_import_assertions.js"
|
|
12
|
+
import { jsenvPluginAsJsClassic } from "./as_js_classic/jsenv_plugin_as_js_classic.js"
|
|
13
|
+
import { jsenvPluginBabel } from "./babel/jsenv_plugin_babel.js"
|
|
14
|
+
import { jsenvPluginTopLevelAwait } from "./jsenv_plugin_top_level_await.js"
|
|
15
|
+
|
|
16
|
+
export const jsenvPluginTranspilation = ({
|
|
17
|
+
importAssertions = true,
|
|
18
|
+
css = true,
|
|
19
|
+
jsModuleAsJsClassic = true,
|
|
20
|
+
systemJsInjection = true,
|
|
21
|
+
topLevelAwait = true,
|
|
22
|
+
babelHelpersAsImport = true,
|
|
23
|
+
getCustomBabelPlugins,
|
|
24
|
+
}) => {
|
|
25
|
+
return [
|
|
26
|
+
// import assertions we want it all the time
|
|
27
|
+
...(importAssertions ? [jsenvPluginImportAssertions()] : []),
|
|
28
|
+
// babel also so that rollup can bundle babel helpers for instance
|
|
29
|
+
jsenvPluginBabel({
|
|
30
|
+
topLevelAwait,
|
|
31
|
+
getCustomBabelPlugins,
|
|
32
|
+
babelHelpersAsImport,
|
|
33
|
+
}),
|
|
34
|
+
// but the conversion from js_module to js_classic
|
|
35
|
+
// we want to do it after bundling
|
|
36
|
+
// so the build function will disable jsModuleAsJsClassic during build
|
|
37
|
+
// and enable it manually during postbuild
|
|
38
|
+
...(jsModuleAsJsClassic
|
|
39
|
+
? [jsenvPluginAsJsClassic({ systemJsInjection })]
|
|
40
|
+
: []),
|
|
41
|
+
// topLevelAwait must come after js_module_as_js_classic because it's related to the module format
|
|
42
|
+
// so we want to wait to know the module format before transforming things related to top level await
|
|
43
|
+
...(topLevelAwait ? [jsenvPluginTopLevelAwait(topLevelAwait)] : []),
|
|
44
|
+
...(css ? [jsenvPluginCssParcel()] : []),
|
|
45
|
+
]
|
|
46
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* https://github.com/parcel-bundler/parcel/blob/v2/packages/transformers/css/src/CSSTransformer.js
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
|
|
6
|
+
import { applyPostCss } from "@jsenv/utils/css_ast/apply_post_css.js"
|
|
7
|
+
import { postCssPluginUrlVisitor } from "@jsenv/utils/css_ast/postcss_plugin_url_visitor.js"
|
|
8
|
+
|
|
9
|
+
export const parseAndTransformCssUrls = async (urlInfo, context) => {
|
|
10
|
+
const actions = []
|
|
11
|
+
const magicSource = createMagicSource(urlInfo.content)
|
|
12
|
+
await applyPostCss({
|
|
13
|
+
sourcemaps: false,
|
|
14
|
+
plugins: [
|
|
15
|
+
postCssPluginUrlVisitor({
|
|
16
|
+
urlVisitor: ({
|
|
17
|
+
type,
|
|
18
|
+
specifier,
|
|
19
|
+
specifierStart,
|
|
20
|
+
specifierEnd,
|
|
21
|
+
specifierLine,
|
|
22
|
+
specifierColumn,
|
|
23
|
+
}) => {
|
|
24
|
+
const [reference] = context.referenceUtils.found({
|
|
25
|
+
type: `css_${type}`,
|
|
26
|
+
specifier,
|
|
27
|
+
specifierStart,
|
|
28
|
+
specifierEnd,
|
|
29
|
+
specifierLine,
|
|
30
|
+
specifierColumn,
|
|
31
|
+
})
|
|
32
|
+
actions.push(async () => {
|
|
33
|
+
magicSource.replace({
|
|
34
|
+
start: specifierStart,
|
|
35
|
+
end: specifierEnd,
|
|
36
|
+
replacement: await context.referenceUtils.readGeneratedSpecifier(
|
|
37
|
+
reference,
|
|
38
|
+
),
|
|
39
|
+
})
|
|
40
|
+
})
|
|
41
|
+
},
|
|
42
|
+
}),
|
|
43
|
+
],
|
|
44
|
+
url: urlInfo.originalUrl,
|
|
45
|
+
content: urlInfo.content,
|
|
46
|
+
})
|
|
47
|
+
await Promise.all(actions.map((action) => action()))
|
|
48
|
+
return magicSource.toContentAndSourcemap()
|
|
49
|
+
}
|