@jsenv/core
Version:
Tool to develop, test and build js projects
156 lines (145 loc) • 5.93 kB
JavaScript
// tslint:disable:ordered-imports
import { jsenvPluginSupervisor } from "@jsenv/plugin-supervisor";
import { jsenvPluginTranspilation } from "@jsenv/plugin-transpilation";
import { jsenvPluginReferenceAnalysis } from "./reference_analysis/jsenv_plugin_reference_analysis.js";
import { jsenvPluginNodeEsmResolution } from "./resolution_node_esm/jsenv_plugin_node_esm_resolution.js";
import { jsenvPluginWebResolution } from "./resolution_web/jsenv_plugin_web_resolution.js";
import { jsenvPluginVersionSearchParam } from "./version_search_param/jsenv_plugin_version_search_param.js";
import { jsenvPluginProtocolFile } from "./protocol_file/jsenv_plugin_protocol_file.js";
import { jsenvPluginProtocolHttp } from "./protocol_http/jsenv_plugin_protocol_http.js";
import { jsenvPluginDirectoryReferenceEffect } from "./directory_reference_effect/jsenv_plugin_directory_reference_effect.js";
import { jsenvPluginInjections } from "./injections/jsenv_plugin_injections.js";
import { jsenvPluginInlining } from "./inlining/jsenv_plugin_inlining.js";
import { jsenvPluginCommonJsGlobals } from "./commonjs_globals/jsenv_plugin_commonjs_globals.js";
import { jsenvPluginImportMetaScenarios } from "./import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js";
import { jsenvPluginGlobalScenarios } from "./global_scenarios/jsenv_plugin_global_scenarios.js";
import { jsenvPluginNodeRuntime } from "./node_runtime/jsenv_plugin_node_runtime.js";
import { jsenvPluginImportMetaCss } from "./import_meta_css/jsenv_plugin_import_meta_css.js";
// autoreload
import { jsenvPluginImportMetaHot } from "./import_meta_hot/jsenv_plugin_import_meta_hot.js";
import { jsenvPluginAutoreload } from "./autoreload/jsenv_plugin_autoreload.js";
import { jsenvPluginCacheControl } from "./cache_control/jsenv_plugin_cache_control.js";
// other
import { jsenvPluginRibbon } from "./ribbon/jsenv_plugin_ribbon.js";
import { jsenvPluginCleanHTML } from "./clean_html/jsenv_plugin_clean_html.js";
import { jsenvPluginChromeDevtoolsJson } from "./chrome_devtools_json/jsenv_plugin_chrome_devtools_json.js";
import { jsenvPluginAutoreloadOnServerRestart } from "./autoreload_on_server_restart/jsenv_plugin_autoreload_on_server_restart.js";
import { jsenvPluginPackageSideEffects } from "./package_side_effects/jsenv_plugin_package_side_effects.js";
export const getCorePlugins = ({
rootDirectoryUrl,
mainFilePath,
runtimeCompat,
packageDirectory,
sourceFilesConfig,
referenceAnalysis = {},
nodeEsmResolution = {},
packageConditions,
packageConditionsConfig,
magicExtensions,
magicDirectoryIndex,
directoryListing = true,
directoryReferenceEffect,
supervisor,
injections,
transpilation = true,
inlining = true,
http = false,
spa,
clientAutoreload,
clientAutoreloadOnServerRestart,
cacheControl,
scenarioPlaceholders = true,
ribbon = true,
packageSideEffects = false,
} = {}) => {
if (cacheControl === true) {
cacheControl = {};
}
if (supervisor === true) {
supervisor = {};
}
if (ribbon === true) {
ribbon = {};
}
if (http === true) {
http = { include: true };
}
if (http === false) {
http = { include: false };
}
if (directoryListing === true) {
directoryListing = {};
}
return [
jsenvPluginReferenceAnalysis(referenceAnalysis),
jsenvPluginInjections(injections),
jsenvPluginTranspilation(transpilation),
// "jsenvPluginInlining" must be very soon because all other plugins will react differently once they see the file is inlined
...(inlining ? [jsenvPluginInlining()] : []),
/* When resolving references the following applies by default:
- http urls are resolved by jsenvPluginHttpUrls
- reference.type === "filesystem" -> resolved by jsenv_plugin_file_urls.js
- reference inside a js module -> resolved by node esm
- All the rest uses web standard url resolution
*/
jsenvPluginProtocolHttp(http),
jsenvPluginProtocolFile({
spa,
magicExtensions,
magicDirectoryIndex,
directoryListing,
rootDirectoryUrl,
mainFilePath,
packageDirectory,
sourceFilesConfig,
}),
{
name: "jsenv:resolve_root_as_main",
appliesDuring: "*",
resolveReference: (reference) => {
const { ownerUrlInfo } = reference;
if (reference.specifierPathname === "/") {
const { mainFilePath, rootDirectoryUrl } = ownerUrlInfo.context;
const url = new URL(mainFilePath, rootDirectoryUrl);
return url;
}
return null;
},
},
...(nodeEsmResolution
? [
jsenvPluginNodeEsmResolution(
nodeEsmResolution,
packageConditions,
packageConditionsConfig,
),
]
: []),
jsenvPluginWebResolution(),
jsenvPluginDirectoryReferenceEffect(directoryReferenceEffect, {
rootDirectoryUrl,
}),
jsenvPluginVersionSearchParam(),
// "jsenvPluginSupervisor" MUST be after "jsenvPluginInlining" as it needs inline script to be cooked
...(supervisor ? [jsenvPluginSupervisor(supervisor)] : []),
...(clientAutoreloadOnServerRestart
? [jsenvPluginAutoreloadOnServerRestart()]
: []),
jsenvPluginImportMetaCss(),
jsenvPluginCommonJsGlobals(),
jsenvPluginImportMetaScenarios(),
...(scenarioPlaceholders ? [jsenvPluginGlobalScenarios()] : []),
jsenvPluginNodeRuntime({ runtimeCompat }),
jsenvPluginImportMetaHot(),
...(clientAutoreload && clientAutoreload.enabled
? [jsenvPluginAutoreload(clientAutoreload)]
: []),
...(cacheControl ? [jsenvPluginCacheControl(cacheControl)] : []),
...(ribbon ? [jsenvPluginRibbon({ rootDirectoryUrl, ...ribbon })] : []),
jsenvPluginCleanHTML(),
jsenvPluginChromeDevtoolsJson(),
...(packageSideEffects
? [jsenvPluginPackageSideEffects({ rootDirectoryUrl, packageDirectory })]
: []),
];
};