diff --git a/package.json b/package.json index 7322834..1c725a7 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "Iconify API", "author": "Vjacheslav Trushkin", "license": "MIT", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "publishConfig": { "access": "public", "tag": "next" diff --git a/src/config/importers/full-local-package.ts b/src/config/importers/full-local-package.ts index 37dae9c..d981995 100644 --- a/src/config/importers/full-local-package.ts +++ b/src/config/importers/full-local-package.ts @@ -4,16 +4,37 @@ import { Importer } from '../../types/importers.js'; import { createIconSetsPackageImporter } from '../../importers/full/json.js'; import { ImportedData } from '../../types/importers/common.js'; import { DirectoryDownloader } from '../../downloaders/directory.js'; +import type { RemoteDownloaderOptions } from '../../types/downloaders/remote.js'; +import { RemoteDownloader } from '../../downloaders/remote.js'; /** * Create importer for package */ -export function createPackageIconSetImporter(packageName = '@iconify/json'): Importer { - // const dir = dirname(import.meta.resolve(`${packageName}/package.json`)); +export function createPackageIconSetImporter( + packageName = '@iconify/json', + useRemoteFallback = false, + autoUpdateRemotePackage = false +): Importer { + // Try to locate package + let dir: string | undefined; + try { + const req = createRequire(import.meta.url); + const filename = req.resolve(`${packageName}/package.json`); + dir = filename ? dirname(filename) : undefined; + } catch (err) { + // + } + if (dir) { + return createIconSetsPackageImporter(new DirectoryDownloader(dir), {}); + } + if (!useRemoteFallback) { + throw new Error(`Cannot find package "${packageName}"`); + } - const req = createRequire(import.meta.url); - const filename = req.resolve(`${packageName}/package.json`); - const dir = dirname(filename); - - return createIconSetsPackageImporter(new DirectoryDownloader(dir), {}); + // Try to download it, update if + const npm: RemoteDownloaderOptions = { + downloadType: 'npm', + package: packageName, + }; + return createIconSetsPackageImporter(new RemoteDownloader(npm, autoUpdateRemotePackage)); }