mirror of
https://github.com/iconify/iconify.git
synced 2025-02-15 01:41:37 +00:00
Change build process for SVG framework, switch tests to Jest
This commit is contained in:
parent
e6951fef7c
commit
691057527b
17
packages/browser-tests/package-lock.json
generated
17
packages/browser-tests/package-lock.json
generated
@ -1,14 +1,15 @@
|
||||
{
|
||||
"name": "@iconify/iconify-browser-tests",
|
||||
"version": "2.0.0",
|
||||
"version": "2.1.0-beta.2",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@iconify/iconify-browser-tests",
|
||||
"version": "2.0.0",
|
||||
"version": "2.1.0-beta.2",
|
||||
"license": "(Apache-2.0 OR GPL-2.0)",
|
||||
"devDependencies": {
|
||||
"@iconify/api-redundancy": "^1.0.1",
|
||||
"@iconify/core": "^1.2.0-beta.2",
|
||||
"@iconify/iconify": "^2.1.0-beta.2",
|
||||
"@rollup/plugin-buble": "^0.21.3",
|
||||
@ -28,6 +29,12 @@
|
||||
"integrity": "sha512-+ZvuwtVXzyxX1CWnP+X5XgDelseU9KSYgmPu3/DSraR7Qyi/vLZwuRRX0sYO24M/gZaChNXRBEK6RHRe3uBndw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@iconify/api-redundancy": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@iconify/api-redundancy/-/api-redundancy-1.0.1.tgz",
|
||||
"integrity": "sha512-KDnQEZzKNF3ETDbAeF335fusQTTVXAEowH8BV+KyUX58JfKWw/ccHFN+M1Os2++wssznt209nb8H9FfYillQbg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@iconify/core": {
|
||||
"version": "1.2.0-beta.2",
|
||||
"resolved": "https://registry.npmjs.org/@iconify/core/-/core-1.2.0-beta.2.tgz",
|
||||
@ -1756,6 +1763,12 @@
|
||||
"integrity": "sha512-+ZvuwtVXzyxX1CWnP+X5XgDelseU9KSYgmPu3/DSraR7Qyi/vLZwuRRX0sYO24M/gZaChNXRBEK6RHRe3uBndw==",
|
||||
"dev": true
|
||||
},
|
||||
"@iconify/api-redundancy": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@iconify/api-redundancy/-/api-redundancy-1.0.1.tgz",
|
||||
"integrity": "sha512-KDnQEZzKNF3ETDbAeF335fusQTTVXAEowH8BV+KyUX58JfKWw/ccHFN+M1Os2++wssznt209nb8H9FfYillQbg==",
|
||||
"dev": true
|
||||
},
|
||||
"@iconify/core": {
|
||||
"version": "1.2.0-beta.2",
|
||||
"resolved": "https://registry.npmjs.org/@iconify/core/-/core-1.2.0-beta.2.tgz",
|
||||
|
@ -18,6 +18,7 @@
|
||||
"build:dist": "rollup -c rollup.config.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@iconify/api-redundancy": "^1.0.1",
|
||||
"@iconify/core": "^1.2.0-beta.2",
|
||||
"@iconify/iconify": "^2.1.0-beta.2",
|
||||
"@rollup/plugin-buble": "^0.21.3",
|
||||
|
24
packages/iconify/.eslintrc.js
Normal file
24
packages/iconify/.eslintrc.js
Normal file
@ -0,0 +1,24 @@
|
||||
module.exports = {
|
||||
env: {
|
||||
browser: true,
|
||||
es6: true,
|
||||
node: true,
|
||||
},
|
||||
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
|
||||
globals: {
|
||||
Atomics: 'readonly',
|
||||
SharedArrayBuffer: 'readonly',
|
||||
},
|
||||
parser: '@typescript-eslint/parser',
|
||||
plugins: ['@typescript-eslint'],
|
||||
rules: {
|
||||
'no-mixed-spaces-and-tabs': ['off'],
|
||||
'no-unused-vars': ['off'],
|
||||
'@typescript-eslint/no-unused-vars-experimental': ['error'],
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: ['src/**/*.ts', 'tests/*.ts'],
|
||||
},
|
||||
],
|
||||
};
|
3
packages/iconify/.gitignore
vendored
3
packages/iconify/.gitignore
vendored
@ -1,4 +1,7 @@
|
||||
.DS_Store
|
||||
npm-debug.log
|
||||
yarn.lock
|
||||
tsconfig.tsbuildinfo
|
||||
node_modules
|
||||
dist
|
||||
lib
|
||||
|
@ -3,6 +3,9 @@ api-extractor*.json
|
||||
tsconfig*.json
|
||||
rollup.config.js
|
||||
build.js
|
||||
npm-debug.log
|
||||
yarn.lock
|
||||
tsconfig.tsbuildinfo
|
||||
node_modules
|
||||
src
|
||||
lib
|
||||
|
@ -64,7 +64,7 @@ if (compile.api && !fileExists(packagesDir + '/iconify/lib/iconify.d.ts')) {
|
||||
compile.lib = true;
|
||||
}
|
||||
|
||||
if (compile.lib && !fileExists(packagesDir + '/core/lib/modules.js')) {
|
||||
if (compile.lib && !fileExists(packagesDir + '/core/lib/cache.js')) {
|
||||
compile.core = true;
|
||||
}
|
||||
|
||||
|
7
packages/iconify/jest.config.js
Normal file
7
packages/iconify/jest.config.js
Normal file
@ -0,0 +1,7 @@
|
||||
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
|
||||
module.exports = {
|
||||
verbose: true,
|
||||
preset: 'ts-jest',
|
||||
testEnvironment: 'node',
|
||||
testMatch: ['**/tests/*-test.ts'],
|
||||
};
|
11248
packages/iconify/package-lock.json
generated
11248
packages/iconify/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -7,6 +7,7 @@
|
||||
"main": "./dist/iconify.min.js",
|
||||
"types": "./dist/iconify.d.ts",
|
||||
"browser": "./dist/iconify.min.js",
|
||||
"module": "./dist/iconify.mjs",
|
||||
"bugs": "https://github.com/iconify/iconify/issues",
|
||||
"homepage": "https://iconify.design/",
|
||||
"funding": "http://github.com/sponsors/cyberalien",
|
||||
@ -16,15 +17,27 @@
|
||||
"directory": "packages/iconify"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf lib dist tests-compiled tsconfig.tsbuildinfo",
|
||||
"lint": "eslint src/**/*.ts",
|
||||
"prebuild": "npm run lint && npm run clean",
|
||||
"build": "node build",
|
||||
"build:lib": "tsc --project src/tsconfig.json",
|
||||
"build:tests": "tsc --project tests/tsconfig.json",
|
||||
"build:lib": "tsc -b",
|
||||
"build:dist": "rollup -c rollup.config.js",
|
||||
"build:api": "api-extractor run --local --verbose",
|
||||
"build:api2": "api-extractor run --local --verbose --config api-extractor.without-api.json",
|
||||
"build:api2min": "api-extractor run --local --config api-extractor.without-api.min.json",
|
||||
"test": "mocha tests-compiled/*-test.js",
|
||||
"pretest": "npm run build && npm run build:tests"
|
||||
"test": "jest --runInBand"
|
||||
},
|
||||
"exports": {
|
||||
"./*": "./*",
|
||||
".": {
|
||||
"require": "./dist/iconify.cjs",
|
||||
"import": "./dist/iconify.mjs"
|
||||
},
|
||||
"./offline": {
|
||||
"require": "./dist/iconify.without-api.cjs",
|
||||
"import": "./dist/iconify.without-api.mjs"
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"cross-fetch": "^3.1.4"
|
||||
@ -38,13 +51,15 @@
|
||||
"@rollup/plugin-commonjs": "^16.0.0",
|
||||
"@rollup/plugin-node-resolve": "^10.0.0",
|
||||
"@rollup/plugin-replace": "^2.4.2",
|
||||
"@types/chai": "^4.2.14",
|
||||
"@types/mocha": "^8.2.0",
|
||||
"@types/jest": "^27.0.2",
|
||||
"@types/node": "^10.17.13",
|
||||
"chai": "^4.2.0",
|
||||
"mocha": "^8.2.1",
|
||||
"@typescript-eslint/eslint-plugin": "^4.31.2",
|
||||
"eslint": "^7.32.0",
|
||||
"jest": "^27.2.1",
|
||||
"rimraf": "^3.0.2",
|
||||
"rollup": "^2.33.3",
|
||||
"rollup-plugin-terser": "^7.0.2",
|
||||
"ts-jest": "^27.0.5",
|
||||
"typescript": "^4.1.2"
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
import { readFileSync, writeFileSync } from 'fs';
|
||||
import resolve from '@rollup/plugin-node-resolve';
|
||||
import commonjs from '@rollup/plugin-commonjs';
|
||||
import buble from '@rollup/plugin-buble';
|
||||
import { terser } from 'rollup-plugin-terser';
|
||||
import replace from '@rollup/plugin-replace';
|
||||
@ -20,9 +19,10 @@ const header = `/**
|
||||
*
|
||||
* @license Apache 2.0
|
||||
* @license GPL 2.0
|
||||
* @version __iconify_version__
|
||||
*/`;
|
||||
|
||||
const footer = `
|
||||
const footerJS = `
|
||||
// Export to window or web worker
|
||||
try {
|
||||
if (self.Iconify === void 0) {
|
||||
@ -31,7 +31,7 @@ try {
|
||||
} catch (err) {
|
||||
}
|
||||
|
||||
// Export as ES module
|
||||
// Export as module
|
||||
if (typeof exports === 'object') {
|
||||
try {
|
||||
exports.__esModule = true;
|
||||
@ -40,6 +40,15 @@ if (typeof exports === 'object') {
|
||||
}
|
||||
}`;
|
||||
|
||||
const footerMJS = `
|
||||
// Export to window or web worker
|
||||
try {
|
||||
if (self.Iconify === void 0) {
|
||||
self.Iconify = Iconify;
|
||||
}
|
||||
} catch (err) {
|
||||
}`;
|
||||
|
||||
// Get replacements
|
||||
const replacements = {
|
||||
preventAssignment: true,
|
||||
@ -74,35 +83,61 @@ if (readme !== oldReadme) {
|
||||
// Export configuration
|
||||
const config = [];
|
||||
names.forEach((name) => {
|
||||
[false, true].forEach((compress) => {
|
||||
const item = {
|
||||
input: `lib/${name}.js`,
|
||||
output: [
|
||||
{
|
||||
file: `dist/${name}${compress ? '.min' : ''}.js`,
|
||||
format: 'iife',
|
||||
name: global,
|
||||
banner: header,
|
||||
footer,
|
||||
},
|
||||
],
|
||||
plugins: [
|
||||
resolve({
|
||||
browser: true,
|
||||
}),
|
||||
commonjs({
|
||||
ignore: ['cross-fetch'],
|
||||
}),
|
||||
replace(replacements),
|
||||
buble({
|
||||
objectAssign: 'Object.assign',
|
||||
}),
|
||||
],
|
||||
};
|
||||
if (compress) {
|
||||
item.plugins.push(terser());
|
||||
}
|
||||
config.push(item);
|
||||
// Full and minified
|
||||
[false, true].forEach((minify) => {
|
||||
// Parse all formats
|
||||
['js', 'cjs', 'mjs'].forEach((ext) => {
|
||||
if (minify && ext !== 'js') {
|
||||
// Minify only .js files
|
||||
return;
|
||||
}
|
||||
|
||||
let format = ext;
|
||||
switch (ext) {
|
||||
case 'js':
|
||||
format = 'iife';
|
||||
break;
|
||||
|
||||
case 'mjs':
|
||||
format = 'es';
|
||||
}
|
||||
const item = {
|
||||
input: `lib/${name}.js`,
|
||||
output: [
|
||||
{
|
||||
file: `dist/${name}${minify ? '.min' : ''}.${ext}`,
|
||||
format,
|
||||
name: global,
|
||||
banner: header,
|
||||
footer: ext === 'js' ? footerJS : footerMJS,
|
||||
},
|
||||
],
|
||||
plugins: [
|
||||
resolve({
|
||||
browser: true,
|
||||
}),
|
||||
replace(replacements),
|
||||
],
|
||||
};
|
||||
|
||||
if (ext === 'js') {
|
||||
// Support old browsers only in .js files.
|
||||
// Other files are for modern browsers that don't need it or
|
||||
// for bundlers that should handle old browser support themselves.
|
||||
item.plugins.push(
|
||||
buble({
|
||||
objectAssign: 'Object.assign',
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
if (minify) {
|
||||
item.plugins.push(terser());
|
||||
}
|
||||
|
||||
config.push(item);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
export default config;
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { IconifyJSON } from '@iconify/types';
|
||||
import type { IconifyJSON } from '@iconify/types';
|
||||
import { stringToIcon } from '@iconify/utils/lib/icon/name';
|
||||
import type { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import {
|
||||
IconifyIconCustomisations,
|
||||
defaults,
|
||||
mergeCustomisations,
|
||||
} from '@iconify/utils/lib/customisations';
|
||||
@ -9,10 +9,8 @@ import {
|
||||
storageFunctions,
|
||||
getIconData,
|
||||
} from '@iconify/core/lib/storage/functions';
|
||||
import {
|
||||
iconToSVG,
|
||||
IconifyIconBuildResult,
|
||||
} from '@iconify/utils/lib/svg/build';
|
||||
import type { IconifyIconBuildResult } from '@iconify/utils/lib/svg/build';
|
||||
import { iconToSVG } from '@iconify/utils/lib/svg/build';
|
||||
import { renderIcon } from './modules/render';
|
||||
import {
|
||||
initObserver,
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { IconifyFinder } from './interface';
|
||||
import { IconifyElement } from '../modules/element';
|
||||
import { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import type { IconifyFinder } from './interface';
|
||||
import type { IconifyElement } from '../modules/element';
|
||||
import type { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import { finder as iconifyFinder } from './iconify';
|
||||
|
||||
const selector = 'iconify-icon';
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { IconifyFinder } from './interface';
|
||||
import { IconifyElement } from '../modules/element';
|
||||
import { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import type { IconifyFinder } from './interface';
|
||||
import type { IconifyElement } from '../modules/element';
|
||||
import type { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import { finder as iconifyFinder } from './iconify-v1';
|
||||
|
||||
const selector = 'iconify-icon';
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { IconifyFinder } from './interface';
|
||||
import { IconifyElement } from '../modules/element';
|
||||
import { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import type { IconifyFinder } from './interface';
|
||||
import type { IconifyElement } from '../modules/element';
|
||||
import type { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import { rotateFromString } from '@iconify/utils/lib/customisations/rotate';
|
||||
import {
|
||||
flipFromString,
|
||||
@ -144,7 +144,7 @@ const finder: IconifyFinder = {
|
||||
* Filter classes
|
||||
*/
|
||||
classFilter: (classList: string[]): string[] => {
|
||||
let result: string[] = [];
|
||||
const result: string[] = [];
|
||||
classList.forEach((className) => {
|
||||
if (
|
||||
className !== 'iconify' &&
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { IconifyFinder } from './interface';
|
||||
import { IconifyElement } from '../modules/element';
|
||||
import { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import type { IconifyFinder } from './interface';
|
||||
import type { IconifyElement } from '../modules/element';
|
||||
import type { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import { rotateFromString } from '@iconify/utils/lib/customisations/rotate';
|
||||
import {
|
||||
flipFromString,
|
||||
@ -160,7 +160,7 @@ const finder: IconifyFinder = {
|
||||
* Filter classes
|
||||
*/
|
||||
classFilter: (classList: string[]): string[] => {
|
||||
let result: string[] = [];
|
||||
const result: string[] = [];
|
||||
classList.forEach((className) => {
|
||||
if (
|
||||
className !== 'iconify' &&
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { IconifyElement } from '../modules/element';
|
||||
import { IconifyIconName } from '@iconify/utils/lib/icon/name';
|
||||
import { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import type { IconifyElement } from '../modules/element';
|
||||
import type { IconifyIconName } from '@iconify/utils/lib/icon/name';
|
||||
import type { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
|
||||
/**
|
||||
* find - find elements that match plugin within root element
|
||||
|
@ -1,66 +1,65 @@
|
||||
// Core
|
||||
import { IconifyJSON, IconifyIcon } from '@iconify/types';
|
||||
import { IconifyIconName } from '@iconify/utils/lib/icon/name';
|
||||
import {
|
||||
import type { IconifyJSON, IconifyIcon } from '@iconify/types';
|
||||
import type { IconifyIconName } from '@iconify/utils/lib/icon/name';
|
||||
import type {
|
||||
IconifyIconCustomisations,
|
||||
IconifyIconSize,
|
||||
IconifyHorizontalIconAlignment,
|
||||
IconifyVerticalIconAlignment,
|
||||
} from '@iconify/utils/lib/customisations';
|
||||
import { IconifyIconBuildResult } from '@iconify/utils/lib/svg/build';
|
||||
import {
|
||||
IconifyStorageFunctions,
|
||||
storageFunctions,
|
||||
} from '@iconify/core/lib/storage/functions';
|
||||
import {
|
||||
IconifyBuilderFunctions,
|
||||
builderFunctions,
|
||||
} from '@iconify/core/lib/builder/functions';
|
||||
import type { IconifyIconBuildResult } from '@iconify/utils/lib/svg/build';
|
||||
import type { IconifyStorageFunctions } from '@iconify/core/lib/storage/functions';
|
||||
import { storageFunctions } from '@iconify/core/lib/storage/functions';
|
||||
import type { IconifyBuilderFunctions } from '@iconify/core/lib/builder/functions';
|
||||
import { builderFunctions } from '@iconify/core/lib/builder/functions';
|
||||
|
||||
// Cache
|
||||
import { storeCache, loadCache } from '@iconify/core/lib/browser-storage/';
|
||||
import { cache } from '@iconify/core/lib/cache';
|
||||
import {
|
||||
import type {
|
||||
IconifyBrowserCacheFunctions,
|
||||
IconifyBrowserCacheType,
|
||||
toggleBrowserCache,
|
||||
} from '@iconify/core/lib/browser-storage/functions';
|
||||
import { toggleBrowserCache } from '@iconify/core/lib/browser-storage/functions';
|
||||
|
||||
// API
|
||||
import {
|
||||
import type {
|
||||
IconifyAPIFunctions,
|
||||
IconifyAPIInternalFunctions,
|
||||
APIFunctions,
|
||||
APIInternalFunctions,
|
||||
IconifyAPIQueryParams,
|
||||
IconifyAPICustomQueryParams,
|
||||
IconifyAPIMergeQueryParams,
|
||||
} from '@iconify/core/lib/api/functions';
|
||||
import {
|
||||
setAPIModule,
|
||||
APIFunctions,
|
||||
APIInternalFunctions,
|
||||
} from '@iconify/core/lib/api/functions';
|
||||
import type {
|
||||
IconifyAPIModule,
|
||||
IconifyAPISendQuery,
|
||||
IconifyAPIPrepareIconsQuery,
|
||||
} from '@iconify/core/lib/api/modules';
|
||||
import {
|
||||
setAPIConfig,
|
||||
import { setAPIModule } from '@iconify/core/lib/api/modules';
|
||||
import type {
|
||||
PartialIconifyAPIConfig,
|
||||
IconifyAPIConfig,
|
||||
GetAPIConfig,
|
||||
} from '@iconify/core/lib/api/config';
|
||||
import { setAPIConfig } from '@iconify/core/lib/api/config';
|
||||
import { jsonpAPIModule } from '@iconify/core/lib/api/modules/jsonp';
|
||||
import {
|
||||
fetchAPIModule,
|
||||
getFetch,
|
||||
setFetch,
|
||||
} from '@iconify/core/lib/api/modules/fetch';
|
||||
import {
|
||||
import type {
|
||||
IconifyIconLoaderCallback,
|
||||
IconifyIconLoaderAbort,
|
||||
} from '@iconify/core/lib/api/icons';
|
||||
|
||||
// Other
|
||||
import { IconifyCommonFunctions, commonFunctions } from './common';
|
||||
import type { IconifyCommonFunctions } from './common';
|
||||
import { commonFunctions } from './common';
|
||||
|
||||
/**
|
||||
* Export required types
|
||||
@ -181,7 +180,7 @@ if (typeof document !== 'undefined' && typeof window !== 'undefined') {
|
||||
if (_window.IconifyProviders !== void 0) {
|
||||
const providers = _window.IconifyProviders;
|
||||
if (typeof providers === 'object' && providers !== null) {
|
||||
for (let key in providers) {
|
||||
for (const key in providers) {
|
||||
const err = 'IconifyProviders[' + key + '] is invalid.';
|
||||
try {
|
||||
const value = providers[key];
|
||||
|
@ -1,24 +1,21 @@
|
||||
// Core
|
||||
import { IconifyJSON, IconifyIcon } from '@iconify/types';
|
||||
import { IconifyIconName } from '@iconify/utils/lib/icon/name';
|
||||
import {
|
||||
import type { IconifyJSON, IconifyIcon } from '@iconify/types';
|
||||
import type { IconifyIconName } from '@iconify/utils/lib/icon/name';
|
||||
import type {
|
||||
IconifyIconCustomisations,
|
||||
IconifyIconSize,
|
||||
IconifyHorizontalIconAlignment,
|
||||
IconifyVerticalIconAlignment,
|
||||
} from '@iconify/utils/lib/customisations';
|
||||
import { IconifyIconBuildResult } from '@iconify/utils/lib/svg/build';
|
||||
import {
|
||||
IconifyStorageFunctions,
|
||||
storageFunctions,
|
||||
} from '@iconify/core/lib/storage/functions';
|
||||
import {
|
||||
IconifyBuilderFunctions,
|
||||
builderFunctions,
|
||||
} from '@iconify/core/lib/builder/functions';
|
||||
import type { IconifyIconBuildResult } from '@iconify/utils/lib/svg/build';
|
||||
import type { IconifyStorageFunctions } from '@iconify/core/lib/storage/functions';
|
||||
import { storageFunctions } from '@iconify/core/lib/storage/functions';
|
||||
import type { IconifyBuilderFunctions } from '@iconify/core/lib/builder/functions';
|
||||
import { builderFunctions } from '@iconify/core/lib/builder/functions';
|
||||
|
||||
// Local code
|
||||
import { IconifyCommonFunctions, commonFunctions } from './common';
|
||||
import type { IconifyCommonFunctions } from './common';
|
||||
import { commonFunctions } from './common';
|
||||
|
||||
/**
|
||||
* Export required types
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { IconifyIconName } from '@iconify/utils/lib/icon/name';
|
||||
import { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import { IconifyFinder } from '../finders/interface';
|
||||
import type { IconifyIconName } from '@iconify/utils/lib/icon/name';
|
||||
import type { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import type { IconifyFinder } from '../finders/interface';
|
||||
|
||||
/**
|
||||
* Icon status
|
||||
|
@ -8,8 +8,8 @@ import {
|
||||
stringToIcon,
|
||||
validateIcon,
|
||||
} from '@iconify/utils/lib/icon/name';
|
||||
import { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import { IconifyFinder } from '../finders/interface';
|
||||
import type { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import type { IconifyFinder } from '../finders/interface';
|
||||
|
||||
/**
|
||||
* List of modules
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { elementFinderProperty, IconifyElement } from './element';
|
||||
import { ObservedNode } from './observed-node';
|
||||
import type { IconifyElement } from './element';
|
||||
import { elementFinderProperty } from './element';
|
||||
import type { ObservedNode } from './observed-node';
|
||||
import {
|
||||
listRootNodes,
|
||||
addRootNode,
|
||||
@ -149,7 +150,7 @@ function stopObserver(node: ObservedNode): void {
|
||||
* Start observer when DOM is ready
|
||||
*/
|
||||
export function initObserver(cb: ObserverCallback): void {
|
||||
let isRestart = callback !== null;
|
||||
const isRestart = callback !== null;
|
||||
|
||||
if (callback !== cb) {
|
||||
// Change callback and stop all pending observers
|
||||
|
@ -1,18 +1,14 @@
|
||||
import { FullIconifyIcon } from '@iconify/utils/lib/icon';
|
||||
import type { FullIconifyIcon } from '@iconify/utils/lib/icon';
|
||||
import type { IconifyIconCustomisations } from '@iconify/utils/lib/customisations';
|
||||
import {
|
||||
IconifyIconCustomisations,
|
||||
mergeCustomisations,
|
||||
defaults,
|
||||
} from '@iconify/utils/lib/customisations';
|
||||
import { iconToSVG } from '@iconify/utils/lib/svg/build';
|
||||
import { replaceIDs } from '@iconify/utils/lib/svg/id';
|
||||
import { PlaceholderElement } from './finder';
|
||||
import {
|
||||
IconifyElement,
|
||||
IconifyElementData,
|
||||
elementDataProperty,
|
||||
elementFinderProperty,
|
||||
} from './element';
|
||||
import type { PlaceholderElement } from './finder';
|
||||
import type { IconifyElement, IconifyElementData } from './element';
|
||||
import { elementDataProperty, elementFinderProperty } from './element';
|
||||
|
||||
/**
|
||||
* Replace element with SVG
|
||||
@ -97,7 +93,9 @@ export function renderIcon(
|
||||
) {
|
||||
try {
|
||||
svg.setAttribute(name, item.value);
|
||||
} catch (err) {}
|
||||
} catch (err) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { ObservedNode } from './observed-node';
|
||||
import type { ObservedNode } from './observed-node';
|
||||
|
||||
/**
|
||||
* List of root nodes
|
||||
@ -11,7 +11,7 @@ let nodes: ObservedNode[] = [];
|
||||
export function findRootNode(node: HTMLElement): ObservedNode | undefined {
|
||||
for (let i = 0; i < nodes.length; i++) {
|
||||
const item = nodes[i];
|
||||
let root = typeof item.node === 'function' ? item.node() : item.node;
|
||||
const root = typeof item.node === 'function' ? item.node() : item.node;
|
||||
if (root === node) {
|
||||
return item;
|
||||
}
|
||||
|
@ -1,11 +1,12 @@
|
||||
import { IconifyIconName } from '@iconify/utils/lib/icon/name';
|
||||
import type { IconifyIconName } from '@iconify/utils/lib/icon/name';
|
||||
import { getStorage, getIcon } from '@iconify/core/lib/storage/storage';
|
||||
import { isPending, loadIcons } from '@iconify/core/lib/api/icons';
|
||||
import { FullIconifyIcon } from '@iconify/utils/lib/icon';
|
||||
import type { FullIconifyIcon } from '@iconify/utils/lib/icon';
|
||||
import { findPlaceholders } from './finder';
|
||||
import { IconifyElementData, elementDataProperty } from './element';
|
||||
import type { IconifyElementData } from './element';
|
||||
import { elementDataProperty } from './element';
|
||||
import { renderIcon } from './render';
|
||||
import { ObservedNode } from './observed-node';
|
||||
import type { ObservedNode } from './observed-node';
|
||||
import {
|
||||
pauseObserver,
|
||||
resumeObserver,
|
||||
@ -56,7 +57,7 @@ const compareIcons = (
|
||||
*/
|
||||
export function scanElement(root: HTMLElement): void {
|
||||
// Add temporary node
|
||||
let node = findRootNode(root);
|
||||
const node = findRootNode(root);
|
||||
if (!node) {
|
||||
scanDOM(
|
||||
{
|
||||
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"extends": "../tsconfig-base.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../lib",
|
||||
"rootDir": "."
|
||||
}
|
||||
}
|
@ -1,12 +1,10 @@
|
||||
import 'mocha';
|
||||
import { expect } from 'chai';
|
||||
import Iconify from '../dist/iconify';
|
||||
|
||||
describe('Testing Iconify API functions with Node.js', () => {
|
||||
it('Cache functions', () => {
|
||||
// All functions should fail, not without throwing exceptions
|
||||
expect(Iconify.disableCache('all')).to.be.equal(void 0);
|
||||
expect(Iconify.enableCache('all')).to.be.equal(void 0);
|
||||
expect(Iconify.disableCache('all')).toBeUndefined();
|
||||
expect(Iconify.enableCache('all')).toBeUndefined();
|
||||
});
|
||||
|
||||
it('Adding API provider', () => {
|
||||
@ -15,6 +13,6 @@ describe('Testing Iconify API functions with Node.js', () => {
|
||||
Iconify.addAPIProvider('test', {
|
||||
resources: ['http://localhost'],
|
||||
})
|
||||
).to.be.equal(true);
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
@ -1,5 +1,3 @@
|
||||
import 'mocha';
|
||||
import { expect } from 'chai';
|
||||
import Iconify, { IconifyIconName } from '../dist/iconify';
|
||||
import { mockAPIModule, mockAPIData } from '@iconify/core/lib/api/modules/mock';
|
||||
|
||||
@ -38,16 +36,16 @@ describe('Testing loadIcons() with Node.js', () => {
|
||||
|
||||
Iconify.loadIcons([fullName], (loaded, missing) => {
|
||||
// Check callback data
|
||||
expect(missing).to.be.eql([]);
|
||||
expect(missing).toEqual([]);
|
||||
const icon: IconifyIconName = {
|
||||
provider,
|
||||
prefix,
|
||||
name,
|
||||
};
|
||||
expect(loaded).to.be.eql([icon]);
|
||||
expect(loaded).toEqual([icon]);
|
||||
|
||||
// Check if icon exists
|
||||
expect(Iconify.iconExists(fullName)).to.be.equal(true);
|
||||
expect(Iconify.iconExists(fullName)).toBe(true);
|
||||
|
||||
done();
|
||||
});
|
@ -1,13 +1,11 @@
|
||||
import 'mocha';
|
||||
import { expect } from 'chai';
|
||||
import Iconify from '../dist/iconify';
|
||||
|
||||
describe('Testing Iconify observer functions with Node.js', () => {
|
||||
it('Observer functions', () => {
|
||||
// All functions should fail, not without throwing exceptions
|
||||
expect(Iconify.scan()).to.be.equal(void 0);
|
||||
expect(Iconify.pauseObserver()).to.be.equal(void 0);
|
||||
expect(Iconify.resumeObserver()).to.be.equal(void 0);
|
||||
expect(Iconify.scan()).toBeUndefined();
|
||||
expect(Iconify.pauseObserver()).toBeUndefined();
|
||||
expect(Iconify.resumeObserver()).toBeUndefined();
|
||||
|
||||
// Cannot test observe() and stopObserving() because they require DOM node as parameter
|
||||
});
|
@ -1,5 +1,3 @@
|
||||
import 'mocha';
|
||||
import { expect } from 'chai';
|
||||
import Iconify, { IconifyIconBuildResult } from '../dist/iconify';
|
||||
|
||||
describe('Testing Iconify render functions with Node.js', () => {
|
||||
@ -14,7 +12,7 @@ describe('Testing Iconify render functions with Node.js', () => {
|
||||
width: 24,
|
||||
height: 24,
|
||||
})
|
||||
).to.be.equal(true);
|
||||
).toBe(true);
|
||||
|
||||
// renderIcon() should work
|
||||
const expected: IconifyIconBuildResult = {
|
||||
@ -26,10 +24,10 @@ describe('Testing Iconify render functions with Node.js', () => {
|
||||
},
|
||||
body: '<g />',
|
||||
};
|
||||
expect(Iconify.renderIcon(name, {})).to.be.eql(expected);
|
||||
expect(Iconify.renderIcon(name, {})).toEqual(expected);
|
||||
|
||||
// renderHTML() and renderSVG() should fail because document.createElement does not exist
|
||||
expect(Iconify.renderHTML(name, {})).to.be.equal('');
|
||||
expect(Iconify.renderSVG(name, {})).to.be.eql(null);
|
||||
expect(Iconify.renderHTML(name, {})).toBe('');
|
||||
expect(Iconify.renderSVG(name, {})).toBeNull();
|
||||
});
|
||||
});
|
@ -1,27 +1,25 @@
|
||||
import 'mocha';
|
||||
import { expect } from 'chai';
|
||||
import { readFileSync } from 'fs';
|
||||
import { dirname } from 'path';
|
||||
import Iconify, { IconifyIcon } from '../dist/iconify';
|
||||
|
||||
describe('Testing Iconify with Node.js', () => {
|
||||
it('Basic functions', () => {
|
||||
expect(typeof Iconify).to.be.equal('object');
|
||||
expect(typeof Iconify).toBe('object');
|
||||
|
||||
// Placeholder value should have been replaced during compilation
|
||||
const version = JSON.parse(
|
||||
readFileSync(dirname(__dirname) + '/package.json', 'utf8')
|
||||
).version;
|
||||
expect(Iconify.getVersion()).to.be.equal(version);
|
||||
expect(Iconify.getVersion()).toBe(version);
|
||||
});
|
||||
|
||||
it('Builder functions', () => {
|
||||
// calculateSize() should work in Node.js
|
||||
expect(Iconify.calculateSize('24px', 2)).to.be.equal('48px');
|
||||
expect(Iconify.calculateSize('24px', 2)).toBe('48px');
|
||||
|
||||
// replaceIDs() should work in Node.js
|
||||
const test = '<div id="foo" />';
|
||||
expect(Iconify.replaceIDs(test)).to.not.be.equal(test);
|
||||
expect(Iconify.replaceIDs(test)).not.toBe(test);
|
||||
});
|
||||
|
||||
it('Storage functions', () => {
|
||||
@ -29,9 +27,9 @@ describe('Testing Iconify with Node.js', () => {
|
||||
const name = prefix + ':bar';
|
||||
|
||||
// Empty results
|
||||
expect(Iconify.iconExists(name)).to.be.equal(false);
|
||||
expect(Iconify.getIcon(name)).to.be.eql(null);
|
||||
expect(Iconify.listIcons('', prefix)).to.be.eql([]);
|
||||
expect(Iconify.iconExists(name)).toBe(false);
|
||||
expect(Iconify.getIcon(name)).toBeNull();
|
||||
expect(Iconify.listIcons('', prefix)).toEqual([]);
|
||||
|
||||
// Test addIcon()
|
||||
expect(
|
||||
@ -40,9 +38,9 @@ describe('Testing Iconify with Node.js', () => {
|
||||
width: 24,
|
||||
height: 24,
|
||||
})
|
||||
).to.be.equal(true);
|
||||
).toBe(true);
|
||||
|
||||
expect(Iconify.iconExists(name)).to.be.equal(true);
|
||||
expect(Iconify.iconExists(name)).toBe(true);
|
||||
const expected: Required<IconifyIcon> = {
|
||||
body: '<g />',
|
||||
width: 24,
|
||||
@ -53,8 +51,8 @@ describe('Testing Iconify with Node.js', () => {
|
||||
vFlip: false,
|
||||
rotate: 0,
|
||||
};
|
||||
expect(Iconify.getIcon(name)).to.be.eql(expected);
|
||||
expect(Iconify.listIcons('', prefix)).to.be.eql([name]);
|
||||
expect(Iconify.getIcon(name)).toEqual(expected);
|
||||
expect(Iconify.listIcons('', prefix)).toEqual([name]);
|
||||
|
||||
// Test addCollection()
|
||||
expect(
|
||||
@ -68,8 +66,8 @@ describe('Testing Iconify with Node.js', () => {
|
||||
width: 24,
|
||||
height: 24,
|
||||
})
|
||||
).to.be.equal(true);
|
||||
expect(Iconify.listIcons('', prefix)).to.be.eql([
|
||||
).toBe(true);
|
||||
expect(Iconify.listIcons('', prefix)).toEqual([
|
||||
name,
|
||||
prefix + ':test1',
|
||||
]);
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"extends": "../tsconfig-base.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../tests-compiled",
|
||||
"types": ["node", "jest"],
|
||||
"rootDir": ".",
|
||||
"module": "commonjs"
|
||||
"outDir": "../tests-compiled"
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2019",
|
||||
"target": "ESNext",
|
||||
"module": "ESNext",
|
||||
"declaration": true,
|
||||
"declarationMap": false,
|
||||
"sourceMap": false,
|
||||
"composite": true,
|
||||
"strict": false,
|
||||
"moduleResolution": "node",
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"importsNotUsedAsValues": "error"
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,8 @@
|
||||
{
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./src/tsconfig.json"
|
||||
},
|
||||
{
|
||||
"path": "./tests/tsconfig.json"
|
||||
}
|
||||
]
|
||||
"extends": "./tsconfig-base.json",
|
||||
"include": ["src/**/*.ts", ".eslintrc.js"],
|
||||
"compilerOptions": {
|
||||
"rootDir": "./src",
|
||||
"outDir": "./lib"
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user