diff --git a/.eslintignore b/.eslintignore index 53b4e371a7..2ba7e4d070 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,3 +4,4 @@ node_modules interactive/guides/vendor/*.md interactive/data/guides.ts defaultConfig.ts +packages/preset-icons/src/collections.json diff --git a/.gitignore b/.gitignore index bf2e3d067d..7c237d081c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ node_modules packages/runtime/*.global.js packages/unocss/README.md packages/vscode/LICENSE +packages/preset-icons/src/collections.json result.json interactive/guides/vendor/*.md interactive/data/guides.ts diff --git a/package.json b/package.json index 455b38c893..42efabb6bb 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "private": true, "packageManager": "pnpm@7.11.0", "scripts": { + "postinstall": "esno scripts/icon-collections.ts", "bench": "npm -C bench run bench", "build": "rimraf packages/*/dist && esno scripts/copy-files.ts && pnpm -r --filter=./packages/* run build && pnpm -r run build-post", "dev": "nr stub", @@ -35,6 +36,7 @@ "@iconify-json/teenyicons": "^1.1.3", "@iconify-json/twemoji": "^1.1.5", "@iconify-json/uim": "^1.1.2", + "@iconify/json": "^2.1.119", "@types/codemirror": "^5.60.5", "@types/connect": "^3.4.35", "@types/css-tree": "^1.0.7", diff --git a/packages/preset-icons/src/cdn.ts b/packages/preset-icons/src/cdn.ts index 46583a7988..98b5b67db2 100644 --- a/packages/preset-icons/src/cdn.ts +++ b/packages/preset-icons/src/cdn.ts @@ -3,9 +3,7 @@ import { loadIcon } from '@iconify/utils/lib/loader/loader' import { searchForIcon } from '@iconify/utils/lib/loader/modern' import type { UniversalIconLoader } from '@iconify/utils/lib/loader/types' import { $fetch } from 'ohmyfetch' - -// TODO: load dynamically from somewhere -const supportedCollection = ['material-symbols', 'ic', 'mdi', 'ph', 'ri', 'carbon', 'bi', 'tabler', 'ion', 'uil', 'teenyicons', 'clarity', 'iconoir', 'majesticons', 'zondicons', 'ant-design', 'bx', 'bxs', 'gg', 'cil', 'lucide', 'pixelarticons', 'system-uicons', 'ci', 'akar-icons', 'typcn', 'radix-icons', 'ep', 'mdi-light', 'fe', 'eos-icons', 'line-md', 'charm', 'prime', 'heroicons', 'heroicons-outline', 'heroicons-solid', 'uiw', 'uim', 'uit', 'uis', 'maki', 'gridicons', 'mi', 'quill', 'gala', 'fluent', 'icon-park-outline', 'icon-park', 'vscode-icons', 'jam', 'codicon', 'pepicons', 'bytesize', 'ei', 'fa6-solid', 'fa6-regular', 'octicon', 'ooui', 'nimbus', 'openmoji', 'twemoji', 'noto', 'noto-v1', 'emojione', 'emojione-monotone', 'emojione-v1', 'fxemoji', 'bxl', 'logos', 'simple-icons', 'cib', 'fa6-brands', 'arcticons', 'file-icons', 'brandico', 'entypo-social', 'cryptocurrency', 'flag', 'circle-flags', 'flagpack', 'cif', 'gis', 'map', 'geo', 'fad', 'academicons', 'wi', 'healthicons', 'medical-icon', 'la', 'eva', 'dashicons', 'flat-color-icons', 'entypo', 'foundation', 'raphael', 'icons8', 'iwwa', 'fa-solid', 'fa-regular', 'fa-brands', 'fa', 'fontisto', 'icomoon-free', 'ps', 'subway', 'oi', 'wpf', 'simple-line-icons', 'et', 'el', 'vaadin', 'grommet-icons', 'whh', 'si-glyph', 'zmdi', 'ls', 'bpmn', 'flat-ui', 'vs', 'topcoat', 'il', 'websymbol', 'fontelico', 'feather', 'mono-icons'] +import supportedCollection from './collections.json' export function createCDNLoader(cdnBase: string): UniversalIconLoader { const cache = new Map>() diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 755b0979e0..58bbe9b367 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,6 +22,7 @@ importers: '@iconify-json/teenyicons': ^1.1.3 '@iconify-json/twemoji': ^1.1.5 '@iconify-json/uim': ^1.1.2 + '@iconify/json': ^2.1.119 '@types/codemirror': ^5.60.5 '@types/connect': ^3.4.35 '@types/css-tree': ^1.0.7 @@ -106,6 +107,7 @@ importers: '@iconify-json/teenyicons': 1.1.3 '@iconify-json/twemoji': 1.1.5 '@iconify-json/uim': 1.1.2 + '@iconify/json': 2.1.119 '@types/codemirror': 5.60.5 '@types/connect': 3.4.35 '@types/css-tree': 1.0.7 @@ -164,7 +166,7 @@ importers: simple-git-hooks: 2.8.0 splitpanes: 3.1.1 terser: 5.15.1 - tsup: 6.2.3_typescript@4.8.4 + tsup: 6.2.3_64lehftmpdxmnkqestsyufiygi typescript: 4.8.4 unbuild: 0.8.11 unocss: link:packages/unocss @@ -2464,6 +2466,13 @@ packages: '@iconify/types': 2.0.0 dev: true + /@iconify/json/2.1.119: + resolution: {integrity: sha512-cWQ1c7mEizqyvL5+IhQLtW59tqaIy8TFSOtVn7fun2IDhtrLxkNcyaJe9rkzIC3KF8/HYADIraSHb+M81y2YqQ==} + dependencies: + '@iconify/types': 2.0.0 + pathe: 0.3.9 + dev: true + /@iconify/types/2.0.0: resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -3628,7 +3637,7 @@ packages: '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.19.1 '@babel/plugin-transform-typescript': 7.19.1_@babel+core@7.19.1 '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.19.1 - vite: 3.1.6 + vite: 3.1.6_terser@5.15.1 vue: 3.2.39 transitivePeerDependencies: - supports-color @@ -3641,7 +3650,7 @@ packages: vite: ^3.0.0 vue: ^3.2.25 dependencies: - vite: 3.1.6 + vite: 3.1.6_terser@5.15.1 vue: 3.2.39 dev: true @@ -12933,7 +12942,7 @@ packages: resolution: {integrity: sha512-DgRgNUSX9NIxxCxygX4Xeg9C7GX7OUx1wuQ8cXx9o9LE0e9wrH+OZ9fcnrlEedsC/rtqry3ZhUddC759XD/L0w==} dependencies: acorn: 8.8.0 - pathe: 0.3.7 + pathe: 0.3.9 pkg-types: 0.3.5 ufo: 0.8.5 dev: true @@ -17444,7 +17453,7 @@ packages: - ts-node dev: true - /tsup/6.2.3_typescript@4.8.4: + /tsup/6.2.3_64lehftmpdxmnkqestsyufiygi: resolution: {integrity: sha512-J5Pu2Dx0E1wlpIEsVFv9ryzP1pZ1OYsJ2cBHZ7GrKteytNdzaSz5hmLX7/nAxtypq+jVkVvA79d7S83ETgHQ5w==} engines: {node: '>=14'} hasBin: true @@ -17468,7 +17477,8 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4 + postcss: 8.4.17 + postcss-load-config: 3.1.4_postcss@8.4.17 resolve-from: 5.0.0 rollup: 2.79.0 source-map: 0.8.0-beta.0 @@ -17949,7 +17959,7 @@ packages: chokidar: 3.5.3 esbuild: 0.15.10 rollup: 2.79.1 - vite: 3.1.6 + vite: 3.1.6_terser@5.15.1 webpack-sources: 3.2.3 webpack-virtual-modules: 0.4.5 dev: true diff --git a/scripts/icon-collections.ts b/scripts/icon-collections.ts new file mode 100644 index 0000000000..6d2e7b1f17 --- /dev/null +++ b/scripts/icon-collections.ts @@ -0,0 +1,21 @@ +import path from 'path' +import { fileURLToPath } from 'url' +import fs from 'fs-extra' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) +const out = path.resolve(__dirname, '../packages/preset-icons') + +async function prepareJSON() { + const dir = path.resolve(__dirname, '../node_modules/@iconify/json/json') + await fs.ensureDir(dir) + + const collections = (await fs.readdir(dir)).map(file => file.replace(/\.json$/, '')) + await fs.writeJSON(path.resolve(out, 'src/collections.json'), collections) +} + +async function prepare() { + await prepareJSON() +} + +prepare()