@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,14 +1,16 @@
|
|
|
1
|
+
import { timeStart } from "@jsenv/server"
|
|
2
|
+
|
|
1
3
|
export const createPluginController = ({
|
|
2
4
|
plugins,
|
|
3
5
|
scenario,
|
|
4
6
|
hooks = [
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
7
|
+
"resolveUrl",
|
|
8
|
+
"redirectUrl",
|
|
9
|
+
"fetchUrlContent",
|
|
10
|
+
"transformUrlContent",
|
|
11
|
+
"transformUrlSearchParams",
|
|
12
|
+
"formatUrl",
|
|
13
|
+
"finalizeUrlContent",
|
|
12
14
|
"cooked",
|
|
13
15
|
"destroy",
|
|
14
16
|
],
|
|
@@ -47,7 +49,13 @@ export const createPluginController = ({
|
|
|
47
49
|
}
|
|
48
50
|
currentPlugin = hook.plugin
|
|
49
51
|
currentHookName = hook.hookName
|
|
52
|
+
const timeEnd = timeStart(
|
|
53
|
+
`${currentHookName}-${currentPlugin.name.replace("jsenv:", "")}`,
|
|
54
|
+
)
|
|
50
55
|
let valueReturned = hookFn(info, context)
|
|
56
|
+
if (info.timing) {
|
|
57
|
+
Object.assign(info.timing, timeEnd())
|
|
58
|
+
}
|
|
51
59
|
valueReturned = assertAndNormalizeReturnValue(hook.hookName, valueReturned)
|
|
52
60
|
currentPlugin = null
|
|
53
61
|
currentHookName = null
|
|
@@ -60,7 +68,13 @@ export const createPluginController = ({
|
|
|
60
68
|
}
|
|
61
69
|
currentPlugin = hook.plugin
|
|
62
70
|
currentHookName = hook.hookName
|
|
71
|
+
const timeEnd = timeStart(
|
|
72
|
+
`${currentHookName}-${currentPlugin.name.replace("jsenv:", "")}`,
|
|
73
|
+
)
|
|
63
74
|
let valueReturned = await hookFn(info, context)
|
|
75
|
+
if (info.timing) {
|
|
76
|
+
Object.assign(info.timing, timeEnd())
|
|
77
|
+
}
|
|
64
78
|
valueReturned = assertAndNormalizeReturnValue(hook.hookName, valueReturned)
|
|
65
79
|
currentPlugin = null
|
|
66
80
|
currentHookName = null
|
|
@@ -99,6 +113,9 @@ export const createPluginController = ({
|
|
|
99
113
|
}
|
|
100
114
|
const callAsyncHooksUntil = (hookName, info, context) => {
|
|
101
115
|
const hooks = hookGroups[hookName]
|
|
116
|
+
if (hooks.length === 0) {
|
|
117
|
+
return null
|
|
118
|
+
}
|
|
102
119
|
return new Promise((resolve, reject) => {
|
|
103
120
|
const visit = (index) => {
|
|
104
121
|
if (index >= hooks.length) {
|
|
@@ -142,15 +159,35 @@ const flattenAndFilterPlugins = (pluginsRaw, { scenario }) => {
|
|
|
142
159
|
return
|
|
143
160
|
}
|
|
144
161
|
if (typeof pluginEntry === "object" && pluginEntry !== null) {
|
|
162
|
+
if (!pluginEntry.name) {
|
|
163
|
+
pluginEntry.name = "anonymous"
|
|
164
|
+
}
|
|
145
165
|
const { appliesDuring } = pluginEntry
|
|
146
166
|
if (appliesDuring === undefined) {
|
|
147
167
|
console.warn(`"appliesDuring" is undefined on ${pluginEntry.name}`)
|
|
168
|
+
return
|
|
148
169
|
}
|
|
149
170
|
if (appliesDuring === "*") {
|
|
150
171
|
plugins.push(pluginEntry)
|
|
151
172
|
return
|
|
152
173
|
}
|
|
153
|
-
if (appliesDuring
|
|
174
|
+
if (typeof appliesDuring === "string") {
|
|
175
|
+
if (!["dev", "build", "test"].includes(appliesDuring)) {
|
|
176
|
+
throw new Error(
|
|
177
|
+
`"appliesDuring" must be "dev", "test" or "build", got ${appliesDuring}`,
|
|
178
|
+
)
|
|
179
|
+
}
|
|
180
|
+
if (appliesDuring === scenario) {
|
|
181
|
+
plugins.push(pluginEntry)
|
|
182
|
+
}
|
|
183
|
+
return
|
|
184
|
+
}
|
|
185
|
+
if (typeof appliesDuring !== "object") {
|
|
186
|
+
throw new Error(
|
|
187
|
+
`"appliesDuring" must be an object or a string, got ${appliesDuring}`,
|
|
188
|
+
)
|
|
189
|
+
}
|
|
190
|
+
if (appliesDuring[scenario]) {
|
|
154
191
|
plugins.push(pluginEntry)
|
|
155
192
|
return
|
|
156
193
|
}
|
|
@@ -203,7 +240,7 @@ const assertAndNormalizeReturnValue = (hookName, returnValue) => {
|
|
|
203
240
|
const returnValueAssertions = [
|
|
204
241
|
{
|
|
205
242
|
name: "url_assertion",
|
|
206
|
-
appliesTo: ["
|
|
243
|
+
appliesTo: ["resolveUrl", "redirectUrl"],
|
|
207
244
|
assertion: (valueReturned) => {
|
|
208
245
|
if (valueReturned instanceof URL) {
|
|
209
246
|
return valueReturned.href
|
|
@@ -218,14 +255,22 @@ const returnValueAssertions = [
|
|
|
218
255
|
},
|
|
219
256
|
{
|
|
220
257
|
name: "content_assertion",
|
|
221
|
-
appliesTo: [
|
|
258
|
+
appliesTo: [
|
|
259
|
+
"fetchUrlContent",
|
|
260
|
+
"transformUrlContent",
|
|
261
|
+
"finalizeUrlContent",
|
|
262
|
+
"optimizeUrlContent",
|
|
263
|
+
],
|
|
222
264
|
assertion: (valueReturned) => {
|
|
223
265
|
if (typeof valueReturned === "string" || Buffer.isBuffer(valueReturned)) {
|
|
224
266
|
return { content: valueReturned }
|
|
225
267
|
}
|
|
226
268
|
if (typeof valueReturned === "object") {
|
|
227
|
-
const { content } = valueReturned
|
|
228
|
-
if (
|
|
269
|
+
const { shouldHandle, content, body } = valueReturned
|
|
270
|
+
if (shouldHandle === false) {
|
|
271
|
+
return undefined
|
|
272
|
+
}
|
|
273
|
+
if (typeof content !== "string" && !Buffer.isBuffer(content) && !body) {
|
|
229
274
|
throw new Error(
|
|
230
275
|
`Unexpected "content" returned by plugin: it must be a string or a buffer; got ${content}`,
|
|
231
276
|
)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { jsenvPluginUrlAnalysis } from "../plugins/url_analysis/jsenv_plugin_url_analysis.js"
|
|
2
|
+
import { jsenvPluginLeadingSlash } from "./leading_slash/jsenv_plugin_leading_slash.js"
|
|
3
|
+
import { jsenvPluginImportmap } from "./importmap/jsenv_plugin_importmap.js"
|
|
4
|
+
import { jsenvPluginUrlResolution } from "./url_resolution/jsenv_plugin_url_resolution.js"
|
|
5
|
+
import { jsenvPluginNodeEsmResolution } from "./node_esm_resolution/jsenv_plugin_node_esm_resolution.js"
|
|
6
|
+
import { jsenvPluginUrlVersion } from "./url_version/jsenv_plugin_url_version.js"
|
|
7
|
+
import { jsenvPluginFileUrls } from "./file_urls/jsenv_plugin_file_urls.js"
|
|
8
|
+
import { jsenvPluginHttpUrls } from "./http_urls/jsenv_plugin_http_urls.js"
|
|
9
|
+
import { jsenvPluginInline } from "./inline/jsenv_plugin_inline.js"
|
|
10
|
+
import { jsenvPluginHtmlSupervisor } from "./html_supervisor/jsenv_plugin_html_supervisor.js"
|
|
11
|
+
import { jsenvPluginCommonJsGlobals } from "./commonjs_globals/jsenv_plugin_commonjs_globals.js"
|
|
12
|
+
import { jsenvPluginImportMetaScenarios } from "./import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js"
|
|
13
|
+
import { jsenvPluginTranspilation } from "./transpilation/jsenv_plugin_transpilation.js"
|
|
14
|
+
import { jsenvPluginNodeRuntime } from "./node_runtime/jsenv_plugin_node_runtime.js"
|
|
15
|
+
// build only
|
|
16
|
+
import { jsenvPluginBundling } from "./bundling/jsenv_plugin_bundling.js"
|
|
17
|
+
import { jsenvPluginMinification } from "./minification/jsenv_plugin_minification.js"
|
|
18
|
+
// autoreload
|
|
19
|
+
import { jsenvPluginImportMetaHot } from "./import_meta_hot/jsenv_plugin_import_meta_hot.js"
|
|
20
|
+
import { jsenvPluginAutoreload } from "./autoreload/jsenv_plugin_autoreload.js"
|
|
21
|
+
import { jsenvPluginCacheControl } from "./cache_control/jsenv_plugin_cache_control.js"
|
|
22
|
+
|
|
23
|
+
export const getCorePlugins = ({
|
|
24
|
+
rootDirectoryUrl,
|
|
25
|
+
urlGraph,
|
|
26
|
+
scenario,
|
|
27
|
+
runtimeCompat,
|
|
28
|
+
|
|
29
|
+
urlAnalysis = {},
|
|
30
|
+
htmlSupervisor,
|
|
31
|
+
nodeEsmResolution,
|
|
32
|
+
fileSystemMagicResolution,
|
|
33
|
+
directoryReferenceAllowed,
|
|
34
|
+
transpilation = true,
|
|
35
|
+
minification = false,
|
|
36
|
+
bundling = false,
|
|
37
|
+
|
|
38
|
+
clientAutoreload = false,
|
|
39
|
+
clientFileChangeCallbackList,
|
|
40
|
+
clientFilesPruneCallbackList,
|
|
41
|
+
} = {}) => {
|
|
42
|
+
if (htmlSupervisor === true) {
|
|
43
|
+
htmlSupervisor = {}
|
|
44
|
+
}
|
|
45
|
+
if (nodeEsmResolution === true) {
|
|
46
|
+
nodeEsmResolution = {}
|
|
47
|
+
}
|
|
48
|
+
return [
|
|
49
|
+
jsenvPluginUrlAnalysis({ rootDirectoryUrl, ...urlAnalysis }),
|
|
50
|
+
jsenvPluginTranspilation(transpilation),
|
|
51
|
+
...(htmlSupervisor ? [jsenvPluginHtmlSupervisor(htmlSupervisor)] : []), // before inline as it turns inline <script> into <script src>
|
|
52
|
+
jsenvPluginInline(), // before "file urls" to resolve and load inline urls
|
|
53
|
+
jsenvPluginImportmap(), // before node esm to handle bare specifiers before node esm
|
|
54
|
+
jsenvPluginFileUrls({
|
|
55
|
+
directoryReferenceAllowed,
|
|
56
|
+
...fileSystemMagicResolution,
|
|
57
|
+
}),
|
|
58
|
+
jsenvPluginHttpUrls(),
|
|
59
|
+
jsenvPluginLeadingSlash(),
|
|
60
|
+
// before url resolution to handle "js_import_export" resolution
|
|
61
|
+
jsenvPluginNodeEsmResolution({
|
|
62
|
+
rootDirectoryUrl,
|
|
63
|
+
runtimeCompat,
|
|
64
|
+
...nodeEsmResolution,
|
|
65
|
+
}),
|
|
66
|
+
jsenvPluginUrlResolution(),
|
|
67
|
+
jsenvPluginUrlVersion(),
|
|
68
|
+
jsenvPluginCommonJsGlobals(),
|
|
69
|
+
jsenvPluginImportMetaScenarios(),
|
|
70
|
+
|
|
71
|
+
jsenvPluginNodeRuntime({ runtimeCompat }),
|
|
72
|
+
jsenvPluginBundling(bundling),
|
|
73
|
+
jsenvPluginMinification(minification),
|
|
74
|
+
|
|
75
|
+
jsenvPluginImportMetaHot(),
|
|
76
|
+
...(clientAutoreload
|
|
77
|
+
? [
|
|
78
|
+
jsenvPluginAutoreload({
|
|
79
|
+
rootDirectoryUrl,
|
|
80
|
+
urlGraph,
|
|
81
|
+
scenario,
|
|
82
|
+
clientFileChangeCallbackList,
|
|
83
|
+
clientFilesPruneCallbackList,
|
|
84
|
+
}),
|
|
85
|
+
]
|
|
86
|
+
: []),
|
|
87
|
+
jsenvPluginCacheControl(),
|
|
88
|
+
]
|
|
89
|
+
}
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is a modified version of https://github.com/systemjs/systemjs/blob/main/dist/s.js
|
|
3
|
+
* with the following changes:
|
|
4
|
+
*
|
|
5
|
+
* - Code can use aync/await, const, ... because an es5 version of this file is generated
|
|
6
|
+
* - Can use document.currentScript because we don't support IE
|
|
7
|
+
* - auto import inline System.register
|
|
8
|
+
* - auto import first System.register in web workers
|
|
9
|
+
* - queing events in web workers
|
|
10
|
+
* - no support for importmap because jsenv don't need it
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
;(function () {
|
|
14
|
+
/* eslint-env browser */
|
|
15
|
+
/* globals self */
|
|
16
|
+
|
|
17
|
+
const loadRegistry = Object.create(null)
|
|
18
|
+
const registerRegistry = Object.create(null)
|
|
19
|
+
let inlineScriptCount = 0
|
|
20
|
+
const System = {}
|
|
21
|
+
|
|
22
|
+
const hasDocument = typeof document === "object"
|
|
23
|
+
const envGlobal = self
|
|
24
|
+
const isWorker =
|
|
25
|
+
!hasDocument &&
|
|
26
|
+
typeof envGlobal.WorkerGlobalScope === "function" &&
|
|
27
|
+
envGlobal instanceof envGlobal.WorkerGlobalScope
|
|
28
|
+
const isServiceWorker = isWorker && typeof self.skipWaiting === "function"
|
|
29
|
+
envGlobal.System = System
|
|
30
|
+
|
|
31
|
+
let baseUrl = envGlobal.location.href.split("#")[0].split("?")[0]
|
|
32
|
+
const lastSlashIndex = baseUrl.lastIndexOf("/")
|
|
33
|
+
if (lastSlashIndex !== -1) {
|
|
34
|
+
baseUrl = baseUrl.slice(0, lastSlashIndex + 1)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const resolveUrl = (specifier, baseUrl) => new URL(specifier, baseUrl).href
|
|
38
|
+
|
|
39
|
+
if (hasDocument) {
|
|
40
|
+
const baseElement = document.querySelector("base[href]")
|
|
41
|
+
if (baseElement) {
|
|
42
|
+
baseUrl = baseElement.href
|
|
43
|
+
}
|
|
44
|
+
System.register = (deps, declare) => {
|
|
45
|
+
if (!document.currentScript) {
|
|
46
|
+
throw new Error("unexpected call")
|
|
47
|
+
}
|
|
48
|
+
if (document.currentScript.__s__) {
|
|
49
|
+
registerRegistry[document.currentScript.src] = [deps, declare]
|
|
50
|
+
return null
|
|
51
|
+
}
|
|
52
|
+
const url =
|
|
53
|
+
document.currentScript.src ||
|
|
54
|
+
`${window.location.href}__inline_script__${++inlineScriptCount}`
|
|
55
|
+
registerRegistry[url] = [deps, declare]
|
|
56
|
+
return _import(url)
|
|
57
|
+
}
|
|
58
|
+
System.instantiate = (url) => {
|
|
59
|
+
const script = createScript(url)
|
|
60
|
+
return new Promise(function (resolve, reject) {
|
|
61
|
+
let lastWindowErrorUrl
|
|
62
|
+
let lastWindowError
|
|
63
|
+
const windowErrorCallback = (event) => {
|
|
64
|
+
lastWindowErrorUrl = event.filename
|
|
65
|
+
lastWindowError = event.error
|
|
66
|
+
}
|
|
67
|
+
window.addEventListener("error", windowErrorCallback)
|
|
68
|
+
script.addEventListener("error", () => {
|
|
69
|
+
window.removeEventListener("error", windowErrorCallback)
|
|
70
|
+
reject(`An error occured while loading url with <script> for ${url}`)
|
|
71
|
+
})
|
|
72
|
+
script.addEventListener("load", () => {
|
|
73
|
+
window.removeEventListener("error", windowErrorCallback)
|
|
74
|
+
document.head.removeChild(script)
|
|
75
|
+
// Note that if an error occurs that isn't caught by this if statement,
|
|
76
|
+
// that getRegister will return null and a "did not instantiate" error will be thrown.
|
|
77
|
+
if (lastWindowErrorUrl === url) {
|
|
78
|
+
reject(lastWindowError)
|
|
79
|
+
} else {
|
|
80
|
+
resolve()
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
document.head.appendChild(script)
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
const createScript = (url) => {
|
|
87
|
+
const script = document.createElement("script")
|
|
88
|
+
script.async = true
|
|
89
|
+
// Only add cross origin for actual cross origin
|
|
90
|
+
// this is because Safari triggers for all
|
|
91
|
+
// - https://bugs.webkit.org/show_bug.cgi?id=171566
|
|
92
|
+
if (url.indexOf(`${self.location.origin}/`)) {
|
|
93
|
+
script.crossOrigin = "anonymous"
|
|
94
|
+
}
|
|
95
|
+
script.__s__ = true
|
|
96
|
+
script.src = url
|
|
97
|
+
return script
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (isWorker) {
|
|
101
|
+
/*
|
|
102
|
+
* SystemJs loads X files before executing the worker/service worker main file
|
|
103
|
+
* It mean events dispatched during this phase could be missed
|
|
104
|
+
* A warning like the one below is displayed in chrome devtools:
|
|
105
|
+
* "Event handler of 'install' event must be added on the initial evaluation of worker script"
|
|
106
|
+
* To fix that code below listen for these events early and redispatch them later
|
|
107
|
+
* once the worker file is executed (the listeners are installed)
|
|
108
|
+
*/
|
|
109
|
+
const firstImportCallbacks = []
|
|
110
|
+
if (isServiceWorker) {
|
|
111
|
+
// for service worker there is more events to listen
|
|
112
|
+
// and, to get rid of the warning, we override self.addEventListener
|
|
113
|
+
const eventsToCatch = ["message", "install", "activate", "fetch"]
|
|
114
|
+
const eventCallbackProxies = {}
|
|
115
|
+
const firstImportPromise = new Promise((resolve) => {
|
|
116
|
+
firstImportCallbacks.push(resolve)
|
|
117
|
+
})
|
|
118
|
+
eventsToCatch.forEach((eventName) => {
|
|
119
|
+
const eventsToDispatch = []
|
|
120
|
+
const eventCallback = (event) => {
|
|
121
|
+
const eventCallbackProxy = eventCallbackProxies[event.type]
|
|
122
|
+
if (eventCallbackProxy) {
|
|
123
|
+
eventCallbackProxy(event)
|
|
124
|
+
} else {
|
|
125
|
+
eventsToDispatch.push(event)
|
|
126
|
+
event.waitUntil(firstImportPromise)
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
self.addEventListener(eventName, eventCallback)
|
|
130
|
+
firstImportCallbacks.push(() => {
|
|
131
|
+
if (eventsToDispatch.length) {
|
|
132
|
+
const eventCallbackProxy =
|
|
133
|
+
eventCallbackProxies[eventsToDispatch[0].type]
|
|
134
|
+
if (eventCallbackProxy) {
|
|
135
|
+
eventsToDispatch.forEach((event) => {
|
|
136
|
+
eventCallbackProxy(event)
|
|
137
|
+
})
|
|
138
|
+
}
|
|
139
|
+
eventsToDispatch.length = 0
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
const addEventListener = self.addEventListener
|
|
145
|
+
self.addEventListener = function (eventName, callback, options) {
|
|
146
|
+
if (eventsToCatch.indexOf(eventName) > -1) {
|
|
147
|
+
eventCallbackProxies[eventName] = callback
|
|
148
|
+
return null
|
|
149
|
+
}
|
|
150
|
+
return addEventListener.call(self, eventName, callback, options)
|
|
151
|
+
}
|
|
152
|
+
} else {
|
|
153
|
+
const eventsToCatch = ["message"]
|
|
154
|
+
eventsToCatch.forEach((eventName) => {
|
|
155
|
+
var eventQueue = []
|
|
156
|
+
var eventCallback = (event) => {
|
|
157
|
+
eventQueue.push(event)
|
|
158
|
+
}
|
|
159
|
+
self.addEventListener(eventName, eventCallback)
|
|
160
|
+
firstImportCallbacks.push(() => {
|
|
161
|
+
self.removeEventListener(eventName, eventCallback)
|
|
162
|
+
eventQueue.forEach(function (event) {
|
|
163
|
+
self.dispatchEvent(event)
|
|
164
|
+
})
|
|
165
|
+
eventQueue.length = 0
|
|
166
|
+
})
|
|
167
|
+
})
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
System.register = async (deps, declare) => {
|
|
171
|
+
System.register = () => {
|
|
172
|
+
throw new Error("unexpected call")
|
|
173
|
+
}
|
|
174
|
+
const url = self.location.href
|
|
175
|
+
registerRegistry[url] = [deps, declare]
|
|
176
|
+
const namespace = await _import(url)
|
|
177
|
+
firstImportCallbacks.forEach((firstImportCallback) => {
|
|
178
|
+
firstImportCallback()
|
|
179
|
+
})
|
|
180
|
+
firstImportCallbacks.length = 0
|
|
181
|
+
return namespace
|
|
182
|
+
}
|
|
183
|
+
System.instantiate = async (url) => {
|
|
184
|
+
const response = await self.fetch(url, {
|
|
185
|
+
credentials: "same-origin",
|
|
186
|
+
})
|
|
187
|
+
if (!response.ok) {
|
|
188
|
+
throw Error(`Failed to fetch module at ${url}`)
|
|
189
|
+
}
|
|
190
|
+
let source = await response.text()
|
|
191
|
+
if (source.indexOf("//# sourceURL=") < 0) {
|
|
192
|
+
source += `\n//# sourceURL=${url}`
|
|
193
|
+
}
|
|
194
|
+
const register = System.register
|
|
195
|
+
System.register = (deps, declare) => {
|
|
196
|
+
registerRegistry[url] = [deps, declare]
|
|
197
|
+
}
|
|
198
|
+
;(0, self.eval)(source)
|
|
199
|
+
System.register = register
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const _import = (specifier, parentUrl) => {
|
|
204
|
+
const url = resolveUrl(specifier, parentUrl)
|
|
205
|
+
const load = getOrCreateLoad(url, parentUrl)
|
|
206
|
+
return load.completionPromise || startExecution(load)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const getOrCreateLoad = (url, firstParentUrl) => {
|
|
210
|
+
const existingLoad = loadRegistry[url]
|
|
211
|
+
if (existingLoad) {
|
|
212
|
+
return existingLoad
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const load = {
|
|
216
|
+
url,
|
|
217
|
+
}
|
|
218
|
+
loadRegistry[url] = load
|
|
219
|
+
|
|
220
|
+
const importerSetters = []
|
|
221
|
+
load.importerSetters = importerSetters
|
|
222
|
+
|
|
223
|
+
const namespace = createNamespace()
|
|
224
|
+
load.namespace = namespace
|
|
225
|
+
|
|
226
|
+
load.instantiatePromise = (async () => {
|
|
227
|
+
try {
|
|
228
|
+
let registration = registerRegistry[url]
|
|
229
|
+
if (!registration) {
|
|
230
|
+
const instantiateReturnValue = System.instantiate(url, firstParentUrl)
|
|
231
|
+
if (instantiateReturnValue) {
|
|
232
|
+
await instantiateReturnValue
|
|
233
|
+
}
|
|
234
|
+
registration = registerRegistry[url]
|
|
235
|
+
}
|
|
236
|
+
if (!registration) {
|
|
237
|
+
throw new Error(`System.register() not called after executing ${url}`)
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const _export = (firstArg, secondArg) => {
|
|
241
|
+
load.hoistedExports = true
|
|
242
|
+
let changed = false
|
|
243
|
+
if (typeof firstArg === "string") {
|
|
244
|
+
const name = firstArg
|
|
245
|
+
const value = secondArg
|
|
246
|
+
if (!(name in namespace) || namespace[name] !== value) {
|
|
247
|
+
namespace[name] = value
|
|
248
|
+
changed = true
|
|
249
|
+
}
|
|
250
|
+
} else {
|
|
251
|
+
Object.keys(firstArg).forEach((name) => {
|
|
252
|
+
const value = firstArg[name]
|
|
253
|
+
if (!(name in namespace) || namespace[name] !== value) {
|
|
254
|
+
namespace[name] = value
|
|
255
|
+
changed = true
|
|
256
|
+
}
|
|
257
|
+
})
|
|
258
|
+
if (firstArg && firstArg.__esModule) {
|
|
259
|
+
namespace.__esModule = firstArg.__esModule
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (changed) {
|
|
263
|
+
importerSetters.forEach((importerSetter) => {
|
|
264
|
+
if (importerSetter) {
|
|
265
|
+
importerSetter(namespace)
|
|
266
|
+
}
|
|
267
|
+
})
|
|
268
|
+
}
|
|
269
|
+
return secondArg
|
|
270
|
+
}
|
|
271
|
+
const [deps, declare] = registration
|
|
272
|
+
const { setters, execute = () => {} } = declare(_export, {
|
|
273
|
+
import: (importId) => _import(importId, url),
|
|
274
|
+
meta: createMeta(url),
|
|
275
|
+
})
|
|
276
|
+
load.deps = deps
|
|
277
|
+
load.setters = setters
|
|
278
|
+
load.execute = execute
|
|
279
|
+
} catch (e) {
|
|
280
|
+
load.error = e
|
|
281
|
+
load.execute = null
|
|
282
|
+
}
|
|
283
|
+
})()
|
|
284
|
+
|
|
285
|
+
load.linkPromise = (async () => {
|
|
286
|
+
await load.instantiatePromise
|
|
287
|
+
const dependencyLoads = await Promise.all(
|
|
288
|
+
load.deps.map(async (dep, index) => {
|
|
289
|
+
const setter = load.setters[index]
|
|
290
|
+
const dependencyUrl = resolveUrl(dep, url)
|
|
291
|
+
const dependencyLoad = getOrCreateLoad(dependencyUrl, url)
|
|
292
|
+
if (dependencyLoad.instantiatePromise) {
|
|
293
|
+
await dependencyLoad.instantiatePromise
|
|
294
|
+
}
|
|
295
|
+
if (setter) {
|
|
296
|
+
dependencyLoad.importerSetters.push(setter)
|
|
297
|
+
if (
|
|
298
|
+
dependencyLoad.hoistedExports ||
|
|
299
|
+
!dependencyLoad.instantiatePromise
|
|
300
|
+
) {
|
|
301
|
+
setter(dependencyLoad.namespace)
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return dependencyLoad
|
|
305
|
+
}),
|
|
306
|
+
)
|
|
307
|
+
load.dependencyLoads = dependencyLoads
|
|
308
|
+
})()
|
|
309
|
+
|
|
310
|
+
return load
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
const startExecution = async (load) => {
|
|
314
|
+
load.completionPromise = (async () => {
|
|
315
|
+
await instantiateAll(load, load, {})
|
|
316
|
+
await postOrderExec(load, {})
|
|
317
|
+
return load.namespace
|
|
318
|
+
})()
|
|
319
|
+
return load.completionPromise
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
const instantiateAll = async (load, parent, loaded) => {
|
|
323
|
+
if (loaded[load.url]) {
|
|
324
|
+
return
|
|
325
|
+
}
|
|
326
|
+
loaded[load.url] = true
|
|
327
|
+
try {
|
|
328
|
+
if (load.linkPromise) {
|
|
329
|
+
// load.linkPromise is null once instantiated
|
|
330
|
+
await load.linkPromise
|
|
331
|
+
}
|
|
332
|
+
// if (!load.parent || !load.parent.execute) {
|
|
333
|
+
// load.parent = parent
|
|
334
|
+
// }
|
|
335
|
+
await Promise.all(
|
|
336
|
+
load.dependencyLoads.map((dependencyLoad) => {
|
|
337
|
+
return instantiateAll(dependencyLoad, parent, loaded)
|
|
338
|
+
}),
|
|
339
|
+
)
|
|
340
|
+
} catch (error) {
|
|
341
|
+
if (load.error) {
|
|
342
|
+
throw error
|
|
343
|
+
}
|
|
344
|
+
load.execute = null
|
|
345
|
+
throw error
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
const postOrderExec = async (load, seen) => {
|
|
350
|
+
if (seen[load.url]) {
|
|
351
|
+
return
|
|
352
|
+
}
|
|
353
|
+
seen[load.url] = true
|
|
354
|
+
if (!load.execute) {
|
|
355
|
+
if (load.error) {
|
|
356
|
+
throw load.error
|
|
357
|
+
}
|
|
358
|
+
if (load.executePromise) {
|
|
359
|
+
await load.executePromise
|
|
360
|
+
}
|
|
361
|
+
return
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// deps execute first, unless circular
|
|
365
|
+
const depLoadPromises = []
|
|
366
|
+
load.dependencyLoads.forEach((dependencyLoad) => {
|
|
367
|
+
try {
|
|
368
|
+
const depLoadPromise = postOrderExec(dependencyLoad, seen)
|
|
369
|
+
if (depLoadPromise) {
|
|
370
|
+
depLoadPromises.push(depLoadPromise)
|
|
371
|
+
}
|
|
372
|
+
} catch (err) {
|
|
373
|
+
load.execute = null
|
|
374
|
+
load.error = err
|
|
375
|
+
throw err
|
|
376
|
+
}
|
|
377
|
+
})
|
|
378
|
+
if (depLoadPromises.length) {
|
|
379
|
+
await Promise.all(depLoadPromises)
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
try {
|
|
383
|
+
const executeReturnValue = load.execute.call(nullContext)
|
|
384
|
+
if (executeReturnValue) {
|
|
385
|
+
load.executePromise = executeReturnValue.then(
|
|
386
|
+
() => {
|
|
387
|
+
load.executePromise = null
|
|
388
|
+
load.completionPromise = load.namespace
|
|
389
|
+
},
|
|
390
|
+
(error) => {
|
|
391
|
+
load.executePromise = null
|
|
392
|
+
load.error = error
|
|
393
|
+
throw error
|
|
394
|
+
},
|
|
395
|
+
)
|
|
396
|
+
return
|
|
397
|
+
}
|
|
398
|
+
load.instantiatePromise = null
|
|
399
|
+
load.linkPromise = null
|
|
400
|
+
load.completionPromise = load.namespace
|
|
401
|
+
} catch (error) {
|
|
402
|
+
load.error = error
|
|
403
|
+
throw error
|
|
404
|
+
} finally {
|
|
405
|
+
load.execute = null
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// the closest we can get to call(undefined)
|
|
410
|
+
const nullContext = Object.freeze(Object.create(null))
|
|
411
|
+
|
|
412
|
+
const createMeta = (url) => {
|
|
413
|
+
return {
|
|
414
|
+
url,
|
|
415
|
+
resolve: (id, parentUrl) => resolveUrl(id, parentUrl),
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
const createNamespace =
|
|
420
|
+
typeof Symbol !== "undefined" && Symbol.toStringTag
|
|
421
|
+
? () => {
|
|
422
|
+
const namespace = Object.create(null)
|
|
423
|
+
Object.defineProperty(namespace, Symbol.toStringTag, {
|
|
424
|
+
value: "Module",
|
|
425
|
+
})
|
|
426
|
+
return namespace
|
|
427
|
+
}
|
|
428
|
+
: () => Object.create(null)
|
|
429
|
+
})();
|
package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import babelParser from "@babel/parser"
|
|
2
|
+
|
|
3
|
+
export const babelPluginTransformImportMetaUrl = (babel) => {
|
|
4
|
+
return {
|
|
5
|
+
name: "transform-import-meta-url",
|
|
6
|
+
visitor: {
|
|
7
|
+
Program: (programPath) => {
|
|
8
|
+
const currentUrlIdentifier =
|
|
9
|
+
programPath.scope.generateUidIdentifier("currentUrl")
|
|
10
|
+
let used = false
|
|
11
|
+
|
|
12
|
+
programPath.traverse({
|
|
13
|
+
MemberExpression: (path) => {
|
|
14
|
+
const node = path.node
|
|
15
|
+
if (
|
|
16
|
+
node.object.type === "MetaProperty" &&
|
|
17
|
+
node.object.property.name === "meta" &&
|
|
18
|
+
node.property.name === "url"
|
|
19
|
+
) {
|
|
20
|
+
// const node = babel.types.valueToNode(10)
|
|
21
|
+
const identifier = babel.types.identifier(
|
|
22
|
+
currentUrlIdentifier.name,
|
|
23
|
+
)
|
|
24
|
+
const expressionStatement =
|
|
25
|
+
babel.types.expressionStatement(identifier)
|
|
26
|
+
path.replaceWith(expressionStatement)
|
|
27
|
+
used = true
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
if (used) {
|
|
32
|
+
const ast = generateExpressionAst(`document.currentScript.src`)
|
|
33
|
+
programPath.scope.push({
|
|
34
|
+
id: currentUrlIdentifier,
|
|
35
|
+
init: ast,
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const generateExpressionAst = (expression, options) => {
|
|
44
|
+
const { parseExpression } = babelParser
|
|
45
|
+
const ast = parseExpression(expression, options)
|
|
46
|
+
return ast
|
|
47
|
+
}
|