import { IRequestResolverOptions, IResolutionFileSystem, createRequestResolver, } from '@file-services/resolve'; import type { ModuleResolver } from './types'; export type { IRequestResolverOptions, IResolutionFileSystem }; export function createDefaultResolver(options: IRequestResolverOptions): ModuleResolver { const resolver = createRequestResolver({ extensions: ['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts', '.json'], ...options, }); return (directoryPath, request): string => { const { resolvedFile, visitedPaths } = resolver(directoryPath, request); if (resolvedFile === false) { throw new Error( `Stylable does not support browser field 'false' values. ${request} resolved to 'false' from ${directoryPath}` ); } if (typeof resolvedFile !== 'string') { throw new Error( `Stylable could not resolve ${JSON.stringify(request)} from ${JSON.stringify( directoryPath )}` + (visitedPaths.size ? `\nVisited paths:\n${[...visitedPaths].join('\n')}` : '') ); } return resolvedFile; }; }