2
0
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:
Vjacheslav Trushkin 2021-09-24 11:41:54 +03:00
parent e6951fef7c
commit 691057527b
33 changed files with 10464 additions and 1229 deletions

View File

@ -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",

View File

@ -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",

View 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'],
},
],
};

View File

@ -1,4 +1,7 @@
.DS_Store
npm-debug.log
yarn.lock
tsconfig.tsbuildinfo
node_modules
dist
lib

View File

@ -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

View File

@ -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;
}

View 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'],
};

File diff suppressed because it is too large Load Diff

View File

@ -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"
}
}

View File

@ -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;

View File

@ -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,

View File

@ -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';

View File

@ -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';

View File

@ -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' &&

View File

@ -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' &&

View File

@ -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

View File

@ -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];

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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) {
//
}
}
}
}

View File

@ -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;
}

View File

@ -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(
{

View File

@ -1,7 +0,0 @@
{
"extends": "../tsconfig-base.json",
"compilerOptions": {
"outDir": "../lib",
"rootDir": "."
}
}

View File

@ -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);
});
});

View File

@ -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();
});

View File

@ -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
});

View File

@ -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();
});
});

View File

@ -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',
]);

View File

@ -1,8 +1,8 @@
{
"extends": "../tsconfig-base.json",
"compilerOptions": {
"outDir": "../tests-compiled",
"types": ["node", "jest"],
"rootDir": ".",
"module": "commonjs"
"outDir": "../tests-compiled"
}
}

View File

@ -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"
}
}

View File

@ -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"
}
}