Skip to content

Commit

Permalink
feat(preset-icons): allow fallback to CDN loader in Node, close #1359
Browse files Browse the repository at this point in the history
  • Loading branch information
antfu committed Aug 4, 2022
1 parent da90c6b commit ca282c6
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 14 deletions.
10 changes: 10 additions & 0 deletions packages/preset-icons/src/core.ts
Expand Up @@ -118,3 +118,13 @@ export function createPresetIcons(lookupIconLoader: (options: IconsOptions) => P
}
}
}

export function combineLoaders(loaders: UniversalIconLoader[]) {
return <UniversalIconLoader>((...args) => {
for (const loader of loaders) {
const result = loader(...args)
if (result)
return result
}
})
}
37 changes: 23 additions & 14 deletions packages/preset-icons/src/index.ts
@@ -1,29 +1,38 @@
import type { UniversalIconLoader } from '@iconify/utils'
import { loadIcon } from '@iconify/utils'
import { createCDNLoader } from './cdn'
import { createPresetIcons } from './core'
import { combineLoaders, createPresetIcons } from './core'
import { isNode, isVSCode } from './utils'

export * from './core'

async function createNodeLoader() {
try {
return await import('@iconify/utils/lib/loader/node-loader').then(i => i?.loadNodeIcon)
}
catch { }
try {
return require('@iconify/utils/lib/loader/node-loader.cjs')
}
catch { }
}

export const presetIcons = createPresetIcons(async (options) => {
const {
cdn,
} = options

const loaders: UniversalIconLoader[] = []

if (isNode && !isVSCode)
loaders.push(await createNodeLoader())

if (cdn)
return createCDNLoader(cdn)

if (isNode && !isVSCode) {
try {
return await import('@iconify/utils/lib/loader/node-loader').then(i => i?.loadNodeIcon)
}
catch {}
try {
return require('@iconify/utils/lib/loader/node-loader.cjs')
}
catch {}
}
return loadIcon
loaders.push(createCDNLoader(cdn))

loaders.push(loadIcon)

return combineLoaders(loaders)
})

export default presetIcons

0 comments on commit ca282c6

Please sign in to comment.