2022-04-30 15:24:44 +00:00
|
|
|
import type { IconifyJSON } from '@iconify/types';
|
|
|
|
|
|
|
|
// Core
|
2022-05-14 05:35:53 +00:00
|
|
|
import {
|
|
|
|
allowSimpleNames,
|
|
|
|
IconifyStorageFunctions,
|
|
|
|
} from '@iconify/core/lib/storage/functions';
|
2022-04-30 15:24:44 +00:00
|
|
|
import {
|
|
|
|
iconExists,
|
|
|
|
getIcon,
|
|
|
|
addIcon,
|
|
|
|
addCollection,
|
|
|
|
} from '@iconify/core/lib/storage/functions';
|
2022-05-21 19:55:01 +00:00
|
|
|
import { listIcons } from '@iconify/core/lib/storage/storage';
|
2022-04-30 15:24:44 +00:00
|
|
|
import type { IconifyBuilderFunctions } from '@iconify/core/lib/builder/functions';
|
|
|
|
import { buildIcon } from '@iconify/core/lib/builder/functions';
|
|
|
|
import { calculateSize } from '@iconify/utils/lib/svg/size';
|
|
|
|
|
|
|
|
// API
|
|
|
|
import type {
|
|
|
|
IconifyAPIFunctions,
|
|
|
|
IconifyAPIInternalFunctions,
|
|
|
|
} from '@iconify/core/lib/api/functions';
|
|
|
|
import { setAPIModule } from '@iconify/core/lib/api/modules';
|
|
|
|
import type { PartialIconifyAPIConfig } from '@iconify/core/lib/api/config';
|
|
|
|
import {
|
|
|
|
addAPIProvider,
|
|
|
|
getAPIConfig,
|
|
|
|
listAPIProviders,
|
|
|
|
} from '@iconify/core/lib/api/config';
|
|
|
|
import {
|
|
|
|
fetchAPIModule,
|
|
|
|
setFetch,
|
|
|
|
getFetch,
|
|
|
|
} from '@iconify/core/lib/api/modules/fetch';
|
|
|
|
import { loadIcons, loadIcon } from '@iconify/core/lib/api/icons';
|
|
|
|
import { sendAPIQuery } from '@iconify/core/lib/api/query';
|
|
|
|
|
|
|
|
// Cache
|
2022-06-28 19:37:23 +00:00
|
|
|
import { initBrowserStorage } from '@iconify/core/lib/browser-storage';
|
2022-04-30 15:24:44 +00:00
|
|
|
import { toggleBrowserCache } from '@iconify/core/lib/browser-storage/functions';
|
|
|
|
import type {
|
|
|
|
IconifyBrowserCacheType,
|
|
|
|
IconifyBrowserCacheFunctions,
|
|
|
|
} from '@iconify/core/lib/browser-storage/functions';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Interface for exported functions
|
|
|
|
*/
|
|
|
|
export interface IconifyExportedFunctions
|
|
|
|
extends IconifyStorageFunctions,
|
|
|
|
IconifyBuilderFunctions,
|
|
|
|
IconifyBrowserCacheFunctions,
|
|
|
|
IconifyAPIFunctions {
|
|
|
|
_api: IconifyAPIInternalFunctions;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get functions and initialise stuff
|
|
|
|
*/
|
|
|
|
export function exportFunctions(): IconifyExportedFunctions {
|
|
|
|
/**
|
|
|
|
* Initialise stuff
|
|
|
|
*/
|
|
|
|
// Set API module
|
|
|
|
setAPIModule('', fetchAPIModule);
|
|
|
|
|
2022-05-14 05:35:53 +00:00
|
|
|
// Allow simple icon names
|
|
|
|
allowSimpleNames(true);
|
|
|
|
|
2022-04-30 15:24:44 +00:00
|
|
|
/**
|
|
|
|
* Browser stuff
|
|
|
|
*/
|
|
|
|
interface WindowWithIconifyStuff {
|
|
|
|
IconifyPreload?: IconifyJSON[] | IconifyJSON;
|
|
|
|
IconifyProviders?: Record<string, PartialIconifyAPIConfig>;
|
|
|
|
}
|
|
|
|
let _window: WindowWithIconifyStuff;
|
|
|
|
try {
|
|
|
|
_window = window as WindowWithIconifyStuff;
|
|
|
|
} catch (err) {
|
|
|
|
//
|
|
|
|
}
|
|
|
|
if (_window) {
|
|
|
|
// Set cache and load existing cache
|
2022-06-28 19:37:23 +00:00
|
|
|
initBrowserStorage();
|
2022-04-30 15:24:44 +00:00
|
|
|
|
|
|
|
// Load icons from global "IconifyPreload"
|
|
|
|
if (_window.IconifyPreload !== void 0) {
|
|
|
|
const preload = _window.IconifyPreload;
|
|
|
|
const err = 'Invalid IconifyPreload syntax.';
|
|
|
|
if (typeof preload === 'object' && preload !== null) {
|
|
|
|
(preload instanceof Array ? preload : [preload]).forEach(
|
|
|
|
(item) => {
|
|
|
|
try {
|
|
|
|
if (
|
|
|
|
// Check if item is an object and not null/array
|
|
|
|
typeof item !== 'object' ||
|
|
|
|
item === null ||
|
|
|
|
item instanceof Array ||
|
|
|
|
// Check for 'icons' and 'prefix'
|
|
|
|
typeof item.icons !== 'object' ||
|
|
|
|
typeof item.prefix !== 'string' ||
|
|
|
|
// Add icon set
|
|
|
|
!addCollection(item)
|
|
|
|
) {
|
|
|
|
console.error(err);
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
console.error(err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set API from global "IconifyProviders"
|
|
|
|
if (_window.IconifyProviders !== void 0) {
|
|
|
|
const providers = _window.IconifyProviders;
|
|
|
|
if (typeof providers === 'object' && providers !== null) {
|
|
|
|
for (const key in providers) {
|
|
|
|
const err = 'IconifyProviders[' + key + '] is invalid.';
|
|
|
|
try {
|
|
|
|
const value = providers[key];
|
|
|
|
if (
|
|
|
|
typeof value !== 'object' ||
|
|
|
|
!value ||
|
|
|
|
value.resources === void 0
|
|
|
|
) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (!addAPIProvider(key, value)) {
|
|
|
|
console.error(err);
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
console.error(err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const _api: IconifyAPIInternalFunctions = {
|
|
|
|
getAPIConfig,
|
|
|
|
setAPIModule,
|
|
|
|
sendAPIQuery,
|
|
|
|
setFetch,
|
|
|
|
getFetch,
|
|
|
|
listAPIProviders,
|
|
|
|
};
|
|
|
|
|
|
|
|
return {
|
|
|
|
enableCache: (storage: IconifyBrowserCacheType) =>
|
|
|
|
toggleBrowserCache(storage, true),
|
|
|
|
disableCache: (storage: IconifyBrowserCacheType) =>
|
|
|
|
toggleBrowserCache(storage, false),
|
|
|
|
iconExists,
|
|
|
|
getIcon,
|
|
|
|
listIcons,
|
|
|
|
addIcon,
|
|
|
|
addCollection,
|
|
|
|
calculateSize,
|
|
|
|
buildIcon,
|
|
|
|
loadIcons,
|
|
|
|
loadIcon,
|
|
|
|
addAPIProvider,
|
|
|
|
_api,
|
|
|
|
};
|
|
|
|
}
|