UNPKG

dependency-owners

Version:
57 lines (56 loc) 2.28 kB
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) { if (typeof path === "string" && /^\.\.?\//.test(path)) { return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) { return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js"); }); } return path; }; import * as path from 'node:path'; /** * Import a dependency loader by name. * @param {string} loaderName The name of the loader to import. * @returns {Promise<DependencyLoader>} The imported dependency loader. */ async function importDependencyLoader(loaderName) { let loaderModule; // Try importing from an installed dependency/absolute path try { loaderModule = await import(__rewriteRelativeImportExtension(loaderName)); } catch { // no-op } // Try import from relative path try { loaderModule = await import(__rewriteRelativeImportExtension(path.join(process.cwd(), loaderName))); } catch { // no-op } // If we couldn't find the module, throw an error if (!loaderModule) { throw new Error(`Failed to import loader: ${loaderName}`); } // Check if the loader has the required functions const loader = loaderModule.default || loaderModule; if (loader && typeof loader.canLoad === 'function' && typeof loader.load === 'function') { return loader; } else { throw new Error(`Invalid loader: ${loaderName}. The module does not export an object with 'canLoad' and 'load' functions.`); } } /** * Resolve a dependency loader for a specific file. * @param {DependencyLoader | string} loader The loader to use. * @param {string} depFilePath The path to the dependency file. * @returns {Promise<DependencyLoader | undefined>} The resolved dependency loader or undefined if not found. */ export async function resolveDependencyLoader(loader, depFilePath) { const resolvedLoader = typeof loader === 'string' ? await importDependencyLoader(loader) : loader; const canLoad = await resolvedLoader.canLoad(depFilePath); return canLoad ? resolvedLoader : undefined; }