UNPKG

@wroud/vite-plugin-asset-resolver

Version:

A Vite plugin for custom asset resolution, mapping 'dist' to 'src' directories and resolving files like SVG, images, and other resources. Supports multiple directory aliases and file extensions for flexible module resolution.

39 lines 1.8 kB
import { DEFAULT_DIST, DEFAULT_SRC, KNOWN_ASSET_TYPES } from "./constants.js"; import { getPossiblePaths } from "./getPossiblePaths.js"; export { DEFAULT_DIST, DEFAULT_SRC, KNOWN_ASSET_TYPES }; export function assetResolverPlugin(options) { // Ensure options are provided with default values const { dist = DEFAULT_DIST, src = DEFAULT_SRC, extensions = KNOWN_ASSET_TYPES, } = options || {}; // Remove leading dots and escape extensions for regex const escapedExtensions = extensions.map((ext) => ext.replace(/^\./, "").replace(/[.*+?^${}()|[\]\\]/g, "\\$&")); const extensionsPattern = escapedExtensions.join("|"); // Build the dynamic regex const regex = new RegExp(`^\\.{1,2}\\/.*\\.(${extensionsPattern})(\\?.*)?$`); return [ { name: "asset-resolver-plugin", enforce: "post", resolveId: { order: "post", async handler(source, importer, options) { if (!importer || !regex.test(source)) { return; } // Attempt default resolution const resolved = await this.resolve(source, importer, options); if (resolved) { return resolved; } for (const adjustedImporter of getPossiblePaths(importer, dist, src)) { const resolvedId = await this.resolve(source, adjustedImporter, options); if (resolvedId) { return resolvedId; } } throw new Error(`Failed to resolve ${source} from ${importer}`); }, }, }, ]; } //# sourceMappingURL=plugin.js.map