Skip to content

Commit

Permalink
dynamic require breaks jest, disabling for now
Browse files Browse the repository at this point in the history
  • Loading branch information
telamonian committed Jun 14, 2019
1 parent ee9c163 commit d4a8d6c
Showing 1 changed file with 66 additions and 51 deletions.
117 changes: 66 additions & 51 deletions packages/ui-components/src/icon/icon.ts
@@ -1,68 +1,83 @@
import { nameFromPath } from '../utils';

/**
* `require.context` polyfill for jest tests.
* Modified from https://stackoverflow.com/a/42191018/425458.
* To add an icon to the defaultIconRegistry requires two lines of code:
* 1. import the icon's .svg
*
* 2. add a relevant entry to _defaultIcons
*/
// This condition actually should detect if it's an Node environment
if (typeof require.context === 'undefined') {
const fs = require('fs');
const path = require('path');

require.context = (base: string, deep?: boolean, filter?: RegExp): any => {
const files: { [key: string]: boolean } = Object.create(null);

function readDirectory(directory: string) {
fs.readdirSync(directory).forEach((file: string) => {
const fullPath = path.resolve(directory, file);

if (fs.statSync(fullPath).isDirectory()) {
if (deep) readDirectory(fullPath);

return;
}
/* tslint:disable */
import jupyterFaviconSvg from '../../style/icons/jupyter-favicon.svg';

if (!filter.test(fullPath)) return;
// filetype icons
import html5Svg from '../../style/icons/filetype/html5.svg';
import reactSvg from '../../style/icons/filetype/react.svg';

files[fullPath] = true;
});
}
// statusbar icons
import kernelSvg from '../../style/icons/statusbar/kernel.svg';
import lineFormSvg from '../../style/icons/statusbar/line-form.svg';
import notTrustedSvg from '../../style/icons/statusbar/not-trusted.svg';
import statusBarSvg from '../../style/icons/statusbar/status-bar.svg';
import terminalSvg from '../../style/icons/statusbar/terminal.svg';
import trustedSvg from '../../style/icons/statusbar/trusted.svg';

readDirectory(path.resolve(__dirname, base));
// sidebar icons
import buildSvg from '../../style/icons/sidebar/build.svg'; // originally ic-build-24px.svg
import extensionSvg from '../../style/icons/sidebar/extension.svg'; // originally ic-extension-24px.svg
import folderSvg from '../../style/icons/sidebar/folder.svg'; // originally ic-folder-24px.svg
import paletteSvg from '../../style/icons/sidebar/palette.svg'; // originally ic-palette-24px.svg
import runningSvg from '../../style/icons/sidebar/running.svg'; // originally stop-circle.svg
import tabSvg from '../../style/icons/sidebar/tab.svg'; // originally ic-tab-24px.svg
/* tslint:enable */

function Module(file: string) {
return require(file);
}

Module.keys = () => Object.keys(files);
export namespace Icon {
export const defaultIcons: ReadonlyArray<IModel> = [
{ name: 'jupyter-favicon', svg: jupyterFaviconSvg },

return Module;
};
}
{ name: 'html5', svg: html5Svg },
{ name: 'react', svg: reactSvg },

export namespace Icon {
/**
* Import all svgs from a directory. The input argument should be
* of the form `require.context('raw-loader!<path>', true, /\.svg$/)`.
* <path> should be a string literal path, as this is needed by `require`.
*/
export function importSvgs(r: any): ReadonlyArray<IModel> {
return r.keys().reduce((svgs: IModel[], item: string, index: number) => {
const name = nameFromPath(item);
if (name !== 'bad') {
svgs.push({ name: name, svg: r(item).default });
}
return svgs;
}, []);
}
{ name: 'kernel', svg: kernelSvg },
{ name: 'line-form', svg: lineFormSvg },
{ name: 'not-trusted', svg: notTrustedSvg },
{ name: 'status-bar', svg: statusBarSvg },
{ name: 'terminal', svg: terminalSvg },
{ name: 'trusted', svg: trustedSvg },

export const defaultIcons: ReadonlyArray<IModel> = importSvgs(
require.context('raw-loader!../../style/icons', true, /\.svg$/)
);
{ name: 'build', svg: buildSvg },
{ name: 'extension', svg: extensionSvg },
{ name: 'folder', svg: folderSvg },
{ name: 'palette', svg: paletteSvg },
{ name: 'running', svg: runningSvg },
{ name: 'tab', svg: tabSvg }
];

export interface IModel {
name: string;
className?: string;
svg: string;
}

/**
* The dynamic import stuff is webpack only and breaks Jest,
* so it's turned off for now
*/

// /**
// * Import all svgs from a directory. The input argument should be
// * of the form `require.context('raw-loader!<path>', true, /\.svg$/)`.
// * <path> should be a string literal path, as this is needed by `require`.
// */
// export function importSvgs(r: any): ReadonlyArray<IModel> {
// return r.keys().reduce((svgs: IModel[], item: string, index: number) => {
// const name = nameFromPath(item);
// if (name !== 'bad') {
// svgs.push({ name: name, svg: r(item).default });
// }
// return svgs;
// }, []);
// }

// export const defaultIcons: ReadonlyArray<IModel> = importSvgs(
// require.context('raw-loader!../../style/icons', true, /\.svg$/)
// );
}

0 comments on commit d4a8d6c

Please sign in to comment.