mirror of
https://github.com/iconify/iconify.git
synced 2025-02-14 17:36:29 +00:00
chore: move to unbuild
This commit is contained in:
parent
79e4530fab
commit
e74f332fb9
1
packages/utils/.gitignore
vendored
1
packages/utils/.gitignore
vendored
@ -7,4 +7,5 @@ npm-debug.log
|
||||
yarn.lock
|
||||
tsconfig.tsbuildinfo
|
||||
lib
|
||||
dual-lib
|
||||
tests-compiled
|
||||
|
45
packages/utils/build.config.ts
Normal file
45
packages/utils/build.config.ts
Normal file
@ -0,0 +1,45 @@
|
||||
import { defineBuildConfig } from 'unbuild'
|
||||
|
||||
export default defineBuildConfig({
|
||||
outDir: './dual-lib',
|
||||
entries: [
|
||||
{ input: 'src/colors/types', name: 'colors/types' },
|
||||
{ input: 'src/colors/keywords', name: 'colors/keywords' },
|
||||
{ input: 'src/colors/index', name: 'colors/index' },
|
||||
{ input: 'src/customisations/bool', name: 'customizations/bool' },
|
||||
{ input: 'src/customisations/compare', name: 'customizations/compare' },
|
||||
{ input: 'src/customisations/index', name: 'customizations/index' },
|
||||
{ input: 'src/customisations/rotate', name: 'customizations/rotate' },
|
||||
{ input: 'src/customisations/shorthand', name: 'customizations/shorthand' },
|
||||
{ input: 'src/icon/index', name: 'icon/index' },
|
||||
{ input: 'src/icon/merge', name: 'icon/merge' },
|
||||
{ input: 'src/icon/name', name: 'icon/name' },
|
||||
{ input: 'src/icon-set/convert-info', name: 'icon-set/convert-info' },
|
||||
{ input: 'src/icon-set/expand', name: 'icon-set/expand' },
|
||||
{ input: 'src/icon-set/get-icon', name: 'icon-set/get-icon' },
|
||||
{ input: 'src/icon-set/get-icons', name: 'icon-set/get-icons' },
|
||||
{ input: 'src/icon-set/minify', name: 'icon-set/minify' },
|
||||
{ input: 'src/icon-set/parse', name: 'icon-set/parse' },
|
||||
{ input: 'src/icon-set/validate', name: 'icon-set/validate' },
|
||||
{ input: 'src/loader/custom', name: 'loader/custom' },
|
||||
{ input: 'src/loader/fs', name: 'loader/fs' },
|
||||
{ input: 'src/loader/install-pkg', name: 'loader/install-pkg' },
|
||||
{ input: 'src/loader/loader', name: 'loader/loader' },
|
||||
{ input: 'src/loader/loaders', name: 'loader/loaders' },
|
||||
{ input: 'src/loader/modern', name: 'loader/modern' },
|
||||
{ input: 'src/loader/types', name: 'loader/types' },
|
||||
{ input: 'src/loader/utils', name: 'loader/utils' },
|
||||
{ input: 'src/loader/warn', name: 'loader/warn' },
|
||||
{ input: 'src/misc/strings', name: 'misc/strings' },
|
||||
{ input: 'src/svg/build', name: 'svg/build' },
|
||||
{ input: 'src/svg/encode-svg-for-css', name: 'svg/encode-svg-for-css' },
|
||||
{ input: 'src/svg/id', name: 'svg/id' },
|
||||
{ input: 'src/svg/size', name: 'svg/size' },
|
||||
{ input: 'src/index', name: 'index' },
|
||||
],
|
||||
clean: true,
|
||||
declaration: true,
|
||||
rollup: {
|
||||
emitCJS: true,
|
||||
},
|
||||
})
|
8
packages/utils/old-tsconfig.json
Normal file
8
packages/utils/old-tsconfig.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "./tsconfig-base.json",
|
||||
"include": ["src/**/*.ts", ".eslintrc.js"],
|
||||
"compilerOptions": {
|
||||
"rootDir": "./src",
|
||||
"outDir": "./lib"
|
||||
}
|
||||
}
|
2021
packages/utils/package-lock.json
generated
2021
packages/utils/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,6 @@
|
||||
{
|
||||
"name": "@iconify/utils",
|
||||
"type": "module",
|
||||
"description": "Common functions for working with Iconify icon sets used by various packages.",
|
||||
"author": "Vjacheslav Trushkin",
|
||||
"version": "1.0.23",
|
||||
@ -16,155 +17,181 @@
|
||||
"lint": "eslint src/**/*.ts",
|
||||
"prebuild": "npm run lint && npm run clean",
|
||||
"build": "node build",
|
||||
"build-dual": "unbuild",
|
||||
"test:jest": "jest --runInBand",
|
||||
"test:jasmine": "cross-env NODE_OPTIONS=--experimental-vm-modules npx jasmine",
|
||||
"test": "npm run test:jest && npm run test:jasmine"
|
||||
},
|
||||
"main": "./lib/index.js",
|
||||
"module": "./lib/index.mjs",
|
||||
"sideEffects": "false",
|
||||
"exports": {
|
||||
"./*": "./*",
|
||||
".": {
|
||||
"require": "./lib/index.js",
|
||||
"require": "./lib/index.cjs",
|
||||
"import": "./lib/index.mjs"
|
||||
},
|
||||
"./lib/colors": {
|
||||
"require": "./lib/colors/index.js",
|
||||
"require": "./lib/colors/index.cjs",
|
||||
"import": "./lib/colors/index.mjs"
|
||||
},
|
||||
"./lib/colors/index": {
|
||||
"require": "./lib/colors/index.js",
|
||||
"require": "./lib/colors/index.cjs",
|
||||
"import": "./lib/colors/index.mjs"
|
||||
},
|
||||
"./lib/colors/keywords": {
|
||||
"require": "./lib/colors/keywords.js",
|
||||
"require": "./lib/colors/keywords.cjs",
|
||||
"import": "./lib/colors/keywords.mjs"
|
||||
},
|
||||
"./lib/colors/types": {
|
||||
"require": "./lib/colors/types.js",
|
||||
"require": "./lib/colors/types.cjs",
|
||||
"import": "./lib/colors/types.mjs"
|
||||
},
|
||||
"./lib/customisations/bool": {
|
||||
"require": "./lib/customisations/bool.js",
|
||||
"require": "./lib/customisations/bool.cjs",
|
||||
"import": "./lib/customisations/bool.mjs"
|
||||
},
|
||||
"./lib/customisations/compare": {
|
||||
"require": "./lib/customisations/compare.js",
|
||||
"require": "./lib/customisations/compare.cjs",
|
||||
"import": "./lib/customisations/compare.mjs"
|
||||
},
|
||||
"./lib/customisations": {
|
||||
"require": "./lib/customisations/index.js",
|
||||
"require": "./lib/customisations/index.cjs",
|
||||
"import": "./lib/customisations/index.mjs"
|
||||
},
|
||||
"./lib/customisations/index": {
|
||||
"require": "./lib/customisations/index.js",
|
||||
"require": "./lib/customisations/index.cjs",
|
||||
"import": "./lib/customisations/index.mjs"
|
||||
},
|
||||
"./lib/customisations/rotate": {
|
||||
"require": "./lib/customisations/rotate.js",
|
||||
"require": "./lib/customisations/rotate.cjs",
|
||||
"import": "./lib/customisations/rotate.mjs"
|
||||
},
|
||||
"./lib/customisations/shorthand": {
|
||||
"require": "./lib/customisations/shorthand.js",
|
||||
"require": "./lib/customisations/shorthand.cjs",
|
||||
"import": "./lib/customisations/shorthand.mjs"
|
||||
},
|
||||
"./lib/icon-set/convert-info": {
|
||||
"require": "./lib/icon-set/convert-info.js",
|
||||
"require": "./lib/icon-set/convert-info.cjs",
|
||||
"import": "./lib/icon-set/convert-info.mjs"
|
||||
},
|
||||
"./lib/icon-set/expand": {
|
||||
"require": "./lib/icon-set/expand.js",
|
||||
"require": "./lib/icon-set/expand.cjs",
|
||||
"import": "./lib/icon-set/expand.mjs"
|
||||
},
|
||||
"./lib/icon-set/get-icon": {
|
||||
"require": "./lib/icon-set/get-icon.js",
|
||||
"require": "./lib/icon-set/get-icon.cjs",
|
||||
"import": "./lib/icon-set/get-icon.mjs"
|
||||
},
|
||||
"./lib/icon-set/get-icons": {
|
||||
"require": "./lib/icon-set/get-icons.js",
|
||||
"require": "./lib/icon-set/get-icons.cjs",
|
||||
"import": "./lib/icon-set/get-icons.mjs"
|
||||
},
|
||||
"./lib/icon-set/minify": {
|
||||
"require": "./lib/icon-set/minify.js",
|
||||
"require": "./lib/icon-set/minify.cjs",
|
||||
"import": "./lib/icon-set/minify.mjs"
|
||||
},
|
||||
"./lib/icon-set/parse": {
|
||||
"require": "./lib/icon-set/parse.js",
|
||||
"require": "./lib/icon-set/parse.cjs",
|
||||
"import": "./lib/icon-set/parse.mjs"
|
||||
},
|
||||
"./lib/icon-set/validate": {
|
||||
"require": "./lib/icon-set/validate.js",
|
||||
"require": "./lib/icon-set/validate.cjs",
|
||||
"import": "./lib/icon-set/validate.mjs"
|
||||
},
|
||||
"./lib/icon": {
|
||||
"require": "./lib/icon/index.js",
|
||||
"require": "./lib/icon/index.cjs",
|
||||
"import": "./lib/icon/index.mjs"
|
||||
},
|
||||
"./lib/icon/index": {
|
||||
"require": "./lib/icon/index.js",
|
||||
"require": "./lib/icon/index.cjs",
|
||||
"import": "./lib/icon/index.mjs"
|
||||
},
|
||||
"./lib/icon/merge": {
|
||||
"require": "./lib/icon/merge.js",
|
||||
"require": "./lib/icon/merge.cjs",
|
||||
"import": "./lib/icon/merge.mjs"
|
||||
},
|
||||
"./lib/icon/name": {
|
||||
"require": "./lib/icon/name.js",
|
||||
"require": "./lib/icon/name.cjs",
|
||||
"import": "./lib/icon/name.mjs"
|
||||
},
|
||||
"./lib": {
|
||||
"require": "./lib/index.js",
|
||||
"require": "./lib/index.cjs",
|
||||
"import": "./lib/index.mjs"
|
||||
},
|
||||
"./lib/index": {
|
||||
"require": "./lib/index.js",
|
||||
"require": "./lib/index.cjs",
|
||||
"import": "./lib/index.mjs"
|
||||
},
|
||||
"./lib/loader/custom": {
|
||||
"require": "./lib/loader/custom.js",
|
||||
"require": "./lib/loader/custom.cjs",
|
||||
"import": "./lib/loader/custom.mjs"
|
||||
},
|
||||
"./lib/loader/fs": {
|
||||
"require": "./lib/loader/fs.cjs",
|
||||
"import": "./lib/loader/fs.mjs",
|
||||
"types": "./lib/loader/fs.d.ts"
|
||||
},
|
||||
"./lib/loader/install-pkg": {
|
||||
"require": "./lib/loader/install-pkg.cjs",
|
||||
"import": "./lib/loader/install-pkg.mjs",
|
||||
"types": "./lib/loader/install-pkg.d.ts"
|
||||
},
|
||||
"./lib/loader/loader": {
|
||||
"require": "./lib/loader/loader.js",
|
||||
"require": "./lib/loader/loader.cjs",
|
||||
"import": "./lib/loader/loader.mjs"
|
||||
},
|
||||
"./lib/loader/loaders": {
|
||||
"require": "./lib/loader/loaders.cjs",
|
||||
"import": "./lib/loader/loaders.mjs",
|
||||
"types": "./lib/loader/loaders.d.ts"
|
||||
},
|
||||
"./lib/loader/modern": {
|
||||
"require": "./lib/loader/modern.js",
|
||||
"require": "./lib/loader/modern.cjs",
|
||||
"import": "./lib/loader/modern.mjs"
|
||||
},
|
||||
"./lib/loader/types": {
|
||||
"require": "./lib/loader/types.js",
|
||||
"require": "./lib/loader/types.cjs",
|
||||
"import": "./lib/loader/types.mjs"
|
||||
},
|
||||
"./lib/loader/utils": {
|
||||
"require": "./lib/loader/utils.js",
|
||||
"require": "./lib/loader/utils.cjs",
|
||||
"import": "./lib/loader/utils.mjs"
|
||||
},
|
||||
},
|
||||
"./lib/loader/warn": {
|
||||
"require": "./lib/loader/warn.cjs",
|
||||
"import": "./lib/loader/warn.mjs",
|
||||
"types": "./lib/loader/warn.d.ts"
|
||||
},
|
||||
"./lib/misc/strings": {
|
||||
"require": "./lib/misc/strings.js",
|
||||
"require": "./lib/misc/strings.cjs",
|
||||
"import": "./lib/misc/strings.mjs"
|
||||
},
|
||||
"./lib/svg/build": {
|
||||
"require": "./lib/svg/build.js",
|
||||
"require": "./lib/svg/build.cjs",
|
||||
"import": "./lib/svg/build.mjs"
|
||||
},
|
||||
"./lib/svg/encode-svg-for-css": {
|
||||
"require": "./lib/svg/encode-svg-for-css.js",
|
||||
"require": "./lib/svg/encode-svg-for-css.cjs",
|
||||
"import": "./lib/svg/encode-svg-for-css.mjs"
|
||||
},
|
||||
"./lib/svg/id": {
|
||||
"require": "./lib/svg/id.js",
|
||||
"require": "./lib/svg/id.cjs",
|
||||
"import": "./lib/svg/id.mjs"
|
||||
},
|
||||
"./lib/svg/size": {
|
||||
"require": "./lib/svg/size.js",
|
||||
"require": "./lib/svg/size.cjs",
|
||||
"import": "./lib/svg/size.mjs"
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@antfu/utils": "^0.3.0",
|
||||
}
|
||||
},
|
||||
"main": "./lib/index.cjs",
|
||||
"module": "./lib/index.mjs",
|
||||
"types": "./lib/index.d.ts",
|
||||
"dependencies": {
|
||||
"@antfu/install-pkg": "^0.1.0",
|
||||
"@antfu/utils": "^0.3.0",
|
||||
"@iconify/types": "^1.0.12",
|
||||
"debug": "^4.3.3"
|
||||
"debug": "^4.3.3",
|
||||
"kolorist": "^1.5.0",
|
||||
"local-pkg": "^0.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@iconify-json/flat-color-icons": "^1.0.2",
|
||||
@ -179,6 +206,7 @@
|
||||
"jest": "^27.2.1",
|
||||
"rimraf": "^3.0.2",
|
||||
"ts-jest": "^27.0.5",
|
||||
"typescript": "^4.4.3"
|
||||
"typescript": "^4.4.3",
|
||||
"unbuild": "^0.6.9"
|
||||
}
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ export type {
|
||||
export { mergeIconProps } from './loader/utils';
|
||||
export { getCustomIcon } from './loader/custom';
|
||||
export { searchForIcon } from './loader/modern';
|
||||
export { loadIcon } from './loader/loader';
|
||||
export { isNode, loadIcon } from './loader/loader';
|
||||
|
||||
// Misc
|
||||
export { camelize, camelToKebab, pascalize } from './misc/strings';
|
||||
export { camelize, camelToKebab, snakelize, pascalize } from './misc/strings';
|
||||
|
39
packages/utils/src/loader/fs.ts
Normal file
39
packages/utils/src/loader/fs.ts
Normal file
@ -0,0 +1,39 @@
|
||||
import { promises as fs, Stats } from 'fs';
|
||||
import { isPackageExists, resolveModule } from 'local-pkg'
|
||||
import type { IconifyJSON } from '@iconify/types'
|
||||
import { tryInstallPkg } from './install-pkg';
|
||||
|
||||
const _collections: Record<string, Promise<IconifyJSON | undefined>> = {};
|
||||
const isLegacyExists = isPackageExists('@iconify/json');
|
||||
|
||||
export async function loadCollectionFromFS(name: string, autoInstall = false): Promise<IconifyJSON | undefined> {
|
||||
if (!_collections[name]) {
|
||||
_collections[name] = task();
|
||||
}
|
||||
return _collections[name];
|
||||
|
||||
async function task() {
|
||||
let jsonPath = resolveModule(`@iconify-json/${name}/icons.json`);
|
||||
if (!jsonPath && isLegacyExists) {
|
||||
jsonPath = resolveModule(`@iconify/json/json/${name}.json`);
|
||||
}
|
||||
|
||||
if (!jsonPath && !isLegacyExists && autoInstall) {
|
||||
await tryInstallPkg(`@iconify-json/${name}`);
|
||||
jsonPath = resolveModule(`@iconify-json/${name}/icons.json`);
|
||||
}
|
||||
|
||||
let stat: Stats | undefined;
|
||||
try {
|
||||
stat = jsonPath ? await fs.lstat(jsonPath) : undefined;
|
||||
} catch (err) {
|
||||
return undefined;
|
||||
}
|
||||
if (stat && stat.isFile()) {
|
||||
return JSON.parse(await fs.readFile(jsonPath as string, 'utf8')) as IconifyJSON;
|
||||
}
|
||||
else {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,4 @@
|
||||
import { getCustomIcon } from './custom';
|
||||
import { searchForIcon } from './modern';
|
||||
import { warnOnce } from './warn';
|
||||
import type { IconifyLoaderOptions } from './types';
|
||||
import { searchForIcon } from './modern';
|
||||
|
||||
@ -50,7 +48,21 @@ async function importFsModule(): Promise<typeof import('./fs') | undefined> {
|
||||
} catch {
|
||||
try {
|
||||
// cjs environments
|
||||
return require('./fs.js');
|
||||
return require('./fs.cjs');
|
||||
}
|
||||
catch {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function importWarnModule(): Promise<typeof import('./warn') | undefined> {
|
||||
try {
|
||||
return await import('./warn');
|
||||
} catch {
|
||||
try {
|
||||
// cjs environments
|
||||
return require('./warn.cjs');
|
||||
}
|
||||
catch {
|
||||
return undefined;
|
||||
@ -80,7 +92,8 @@ async function loadNodeBuiltinIcon(
|
||||
}
|
||||
|
||||
if (!result && options?.warn) {
|
||||
warnOnce(`failed to load ${options.warn} icon`);
|
||||
const warnOnce = await importWarnModule().then(i => i?.warnOnce);
|
||||
warnOnce?.(`failed to load ${options.warn} icon`);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -1,8 +1,7 @@
|
||||
import type { Awaitable } from '@antfu/utils';
|
||||
import { promises as fs, Stats } from 'fs';
|
||||
import type { CustomIconLoader } from './types';
|
||||
import { camelize, pascalize } from '../misc/strings';
|
||||
import { isNode } from './loader';
|
||||
import { camelize, pascalize, snakelize } from '../misc/strings';
|
||||
|
||||
/**
|
||||
* Returns CustomIconLoader for loading icons from a directory
|
||||
@ -11,26 +10,26 @@ export function FileSystemIconLoader(
|
||||
dir: string,
|
||||
transform?: (svg: string) => Awaitable<string>
|
||||
): CustomIconLoader {
|
||||
return isNode
|
||||
? async (name) => {
|
||||
const paths = [
|
||||
`${dir}/${name}.svg`,
|
||||
`${dir}/${camelize(name)}.svg`,
|
||||
`${dir}/${pascalize(name)}.svg`,
|
||||
];
|
||||
let stat: Stats;
|
||||
for (const path of paths) {
|
||||
try {
|
||||
stat = await fs.lstat(path);
|
||||
} catch (err) {
|
||||
continue;
|
||||
}
|
||||
if (stat.isFile()) {
|
||||
const svg = await fs.readFile(path, 'utf-8');
|
||||
return typeof transform === 'function'
|
||||
? await transform(svg)
|
||||
: svg;
|
||||
}
|
||||
return async (name) => {
|
||||
const paths = [
|
||||
`${dir}/${name}.svg`,
|
||||
`${dir}/${camelize(name)}.svg`,
|
||||
`${dir}/${pascalize(name)}.svg`,
|
||||
`${dir}/${snakelize(name)}.svg`,
|
||||
];
|
||||
let stat: Stats;
|
||||
for (const path of paths) {
|
||||
try {
|
||||
stat = await fs.lstat(path);
|
||||
} catch (err) {
|
||||
continue;
|
||||
}
|
||||
} : () => undefined;
|
||||
if (stat.isFile()) {
|
||||
const svg = await fs.readFile(path, 'utf-8');
|
||||
return typeof transform === 'function'
|
||||
? await transform(svg)
|
||||
: svg;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -76,6 +76,11 @@ export type CustomCollections = Record<
|
||||
* Options to use with the modern loader.
|
||||
*/
|
||||
export type IconifyLoaderOptions = {
|
||||
/**
|
||||
* Emit warning when missing icons are matched
|
||||
*/
|
||||
warn?: string
|
||||
|
||||
/**
|
||||
* Add svg and xlink xml namespace when necessary.
|
||||
*
|
||||
|
10
packages/utils/src/loader/warn.ts
Normal file
10
packages/utils/src/loader/warn.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import { yellow } from 'kolorist';
|
||||
|
||||
const warned = new Set<string>();
|
||||
|
||||
export function warnOnce(msg: string): void {
|
||||
if (!warned.has(msg)) {
|
||||
warned.add(msg);
|
||||
console.warn(yellow(`[@iconify-loader] ${msg}`));
|
||||
}
|
||||
}
|
@ -23,3 +23,11 @@ export function camelToKebab(key: string): string {
|
||||
.trim();
|
||||
return result.split(/\s+/g).join('-').toLowerCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert string string to snake-case
|
||||
*/
|
||||
export function snakelize(str: string): string {
|
||||
const kebab = camelToKebab(str)
|
||||
return kebab.replace(/-/g, '_')
|
||||
}
|
||||
|
@ -1,8 +1,18 @@
|
||||
{
|
||||
"extends": "./tsconfig-base.json",
|
||||
"include": ["src/**/*.ts", ".eslintrc.js"],
|
||||
"compilerOptions": {
|
||||
"rootDir": "./src",
|
||||
"outDir": "./lib"
|
||||
}
|
||||
"rootDir": "./",
|
||||
"outDir": "./dual-lib",
|
||||
"target": "ES2019",
|
||||
"module": "ESNext",
|
||||
"lib": [
|
||||
"ESNext",
|
||||
"DOM"
|
||||
],
|
||||
"strict": true,
|
||||
"moduleResolution": "node",
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"importsNotUsedAsValues": "error"
|
||||
},
|
||||
"include": ["./src/**/*.ts"]
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user