UNPKG

st-bundle

Version:

CLI for watching and bundling SpringType projects.

171 lines (170 loc) 6.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("../utils/utils"); const browserField_1 = require("./browserField"); const fileLookup_1 = require("./fileLookup"); const nodeModuleLookup_1 = require("./nodeModuleLookup"); const pathsLookup_1 = require("./pathsLookup"); const polyfills_1 = require("./polyfills"); var ImportType; (function (ImportType) { ImportType[ImportType["REQUIRE"] = 0] = "REQUIRE"; ImportType[ImportType["FROM"] = 1] = "FROM"; ImportType[ImportType["RAW_IMPORT"] = 2] = "RAW_IMPORT"; ImportType[ImportType["DYNAMIC"] = 3] = "DYNAMIC"; })(ImportType = exports.ImportType || (exports.ImportType = {})); function isExternalModule(props) { if (/^https?:/.test(props.target)) { return { isExternal: true, }; } } function replaceAliases(props) { let forceReplacement = false; let target = props.target; for (const key in props.alias) { const regex = utils_1.path2Regex(key); const value = props.alias[key]; if (regex.test(target)) { target = target.replace(regex, value); return { target, forceReplacement: true }; } } return { target, forceReplacement }; } function resolveModule(props) { const external = isExternalModule(props); if (external) { return external; } const isBrowserBuild = props.buildTarget === 'browser'; const isServerBuild = props.buildTarget === 'server'; const isElectronBuild = props.buildTarget === 'electron'; const isUniversalBuild = props.buildTarget === 'universal'; let target = props.target; let forcedStatement; let forceReplacement = false; let lookupResult; // replace aliaes // props.target will be updated if (props.alias) { const res = replaceAliases(props); forceReplacement = res.forceReplacement; target = res.target; } // handle typescript paths // in this cases it should always send a forceStatement if (props.typescriptPaths) { lookupResult = pathsLookup_1.pathsLookup({ isDev: props.isDev, baseURL: props.typescriptPaths.baseURL, cachePaths: props.cache, homeDir: props.homeDir, paths: props.typescriptPaths.paths, target: target, }); if (lookupResult) { forceReplacement = true; } } const browserFieldLookup = props.packageMeta && isBrowserBuild && props.packageMeta.browser && typeof props.packageMeta.browser === 'object'; // continue looking for the file if (!lookupResult) { let moduleParsed = nodeModuleLookup_1.isNodeModule(target); if (moduleParsed) { // first check if we need to bundle it at all; if (!isUniversalBuild && isServerBuild && polyfills_1.isServerPolyfill(moduleParsed.name)) { return { skip: true }; } if (!isUniversalBuild && isElectronBuild && polyfills_1.isElectronPolyfill(moduleParsed.name)) { return { skip: true }; } if (browserFieldLookup) { if (props.packageMeta.browser[moduleParsed.name] === false) { forcedStatement = 'fuse-empty-package'; moduleParsed = { name: forcedStatement }; forceReplacement = true; } } const pkg = nodeModuleLookup_1.nodeModuleLookup(props, moduleParsed); if (pkg.error) { return { error: pkg.error }; } const aliasForced = forceReplacement && target; return { forcedStatement: forcedStatement ? forcedStatement : pkg.forcedStatement ? pkg.forcedStatement : aliasForced, package: pkg, }; } else { lookupResult = fileLookup_1.fileLookup({ isDev: props.isDev, filePath: props.filePath, target: target, javascriptFirst: props.javascriptFirst, }); } } if (!lookupResult.fileExists) { return; } if (props.packageMeta) { if (isBrowserBuild && props.packageMeta.browser && typeof props.packageMeta.browser === 'object') { // a match should direct according to the specs const override = browserField_1.handleBrowserField(props.packageMeta, lookupResult.absPath); if (override) { forceReplacement = true; lookupResult.absPath = override; } } } if (lookupResult.customIndex) { forceReplacement = true; } if (props.importType && props.importType === ImportType.DYNAMIC) { forceReplacement = true; } const extension = lookupResult.extension; const absPath = lookupResult.absPath; let fuseBoxPath; if (props.packageMeta) { if (props.packageMeta.packageAltRoots) { if (absPath.includes(props.packageMeta.packageRoot)) { fuseBoxPath = utils_1.makeFuseBoxPath(props.packageMeta.packageRoot, absPath); } else { for (const root of props.packageMeta.packageAltRoots) { if (absPath.includes(root)) { fuseBoxPath = utils_1.makeFuseBoxPath(root, absPath); break; } } } } else { fuseBoxPath = utils_1.makeFuseBoxPath(props.packageMeta.packageRoot, absPath); } } else { fuseBoxPath = utils_1.makeFuseBoxPath(props.homeDir, absPath); } if (forceReplacement) { if (props.packageMeta) { forcedStatement = `${props.packageMeta.name}/${fuseBoxPath}`; } else { forcedStatement = `~/${fuseBoxPath}`; } } lookupResult.tsConfigAtPath; return { tsConfigAtPath: lookupResult.tsConfigAtPath, monorepoModulesPath: lookupResult.monorepoModulesPaths, extension, absPath, fuseBoxPath, forcedStatement, }; } exports.resolveModule = resolveModule;