Spaces:
Sleeping
Sleeping
pythonic-rag-FastAPIReact
/
frontend
/node_modules
/@humanwhocodes
/module-importer
/src
/module-importer.cjs
| /** | |
| * @fileoverview Universal module importer | |
| */ | |
| //----------------------------------------------------------------------------- | |
| // Imports | |
| //----------------------------------------------------------------------------- | |
| const { createRequire } = require("module"); | |
| const { pathToFileURL } = require("url"); | |
| //----------------------------------------------------------------------------- | |
| // Helpers | |
| //----------------------------------------------------------------------------- | |
| const SLASHES = new Set(["/", "\\"]); | |
| /** | |
| * Normalizes directories to have a trailing slash. | |
| * Resolve is pretty finicky -- if the directory name doesn't have | |
| * a trailing slash then it tries to look in the parent directory. | |
| * i.e., if the directory is "/usr/nzakas/foo" it will start the | |
| * search in /usr/nzakas. However, if the directory is "/user/nzakas/foo/", | |
| * then it will start the search in /user/nzakas/foo. | |
| * @param {string} directory The directory to check. | |
| * @returns {string} The normalized directory. | |
| */ | |
| function normalizeDirectory(directory) { | |
| if (!SLASHES.has(directory[directory.length-1])) { | |
| return directory + "/"; | |
| } | |
| return directory; | |
| } | |
| //----------------------------------------------------------------------------- | |
| // Exports | |
| //----------------------------------------------------------------------------- | |
| /** | |
| * Class for importing both CommonJS and ESM modules in Node.js. | |
| */ | |
| exports.ModuleImporter = class ModuleImporter { | |
| /** | |
| * Creates a new instance. | |
| * @param {string} [cwd] The current working directory to resolve from. | |
| */ | |
| constructor(cwd = process.cwd()) { | |
| /** | |
| * The base directory from which paths should be resolved. | |
| * @type {string} | |
| */ | |
| this.cwd = normalizeDirectory(cwd); | |
| } | |
| /** | |
| * Resolves a module based on its name or location. | |
| * @param {string} specifier Either an npm package name or | |
| * relative file path. | |
| * @returns {string|undefined} The location of the import. | |
| * @throws {Error} If specifier cannot be located. | |
| */ | |
| resolve(specifier) { | |
| const require = createRequire(this.cwd); | |
| return require.resolve(specifier); | |
| } | |
| /** | |
| * Imports a module based on its name or location. | |
| * @param {string} specifier Either an npm package name or | |
| * relative file path. | |
| * @returns {Promise<object>} The module's object. | |
| */ | |
| import(specifier) { | |
| const location = this.resolve(specifier); | |
| return import(pathToFileURL(location).href); | |
| } | |
| } | |