Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build: update dependencies #962

Merged
merged 8 commits into from
Jan 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ module.exports = {
'@typescript-eslint/restrict-plus-operands': 0, // rule is broken
'@typescript-eslint/no-unsafe-call': 1,
'@typescript-eslint/unbound-method': 1,
'@typescript-eslint/no-redeclare': 'off', // we use to declare enum type and object with the same name
'@typescript-eslint/no-shadow': 'off', // we use shadow mostly within the canvas renderer function when we need a new context
markov00 marked this conversation as resolved.
Show resolved Hide resolved
'unicorn/consistent-function-scoping': 1,
'unicorn/explicit-length-check': 1,
'import/no-cycle': [0, { maxDepth: 3, ignoreExternal: true }], // TODO: should error when this is fixed https://github.com/benmosher/eslint-plugin-import/issues/1453
Expand All @@ -82,6 +84,8 @@ module.exports = {
'no-param-reassign': 1,
'react/no-array-index-key': 1,
'react/prefer-stateless-function': 1,
'react/require-default-props': 'off',
'react/display-name': 'off',
'jsx-a11y/no-static-element-interactions': 1,
'jsx-a11y/mouse-events-have-key-events': 1,
'jsx-a11y/click-events-have-key-events': 1,
Expand Down Expand Up @@ -264,6 +268,10 @@ module.exports = {
case: 'snakeCase',
},
],
'unicorn/no-array-callback-reference': 'off',
'unicorn/no-array-reduce': 'off',
'unicorn/prefer-dom-node-append': 'off',
'unicorn/prefer-dom-node-remove': 'off',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good calls. Would be useful to switch off the stricter level (property setting) of no-param-reassign, it's routinely needed by efficient data processing and the Canvas2d API alike.

Also, allowing a comment line to be present atop of the file, eg. right after the comments block. And eg. mocks need no formatting, and sometimes a long array literal shouldn't be broken to a lot of lines either. Currently a simple bypass may require an exemptions inception for that bypass to work, some of these rules seem to buy less than what's lost in productivity, flow and developer experience.
image

Would be great to tame the destructuring rules too while at it, for at least arrays


/*
* file-header plugin
Expand Down
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
10.19.0
10.23.1
33 changes: 17 additions & 16 deletions integration/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,36 +18,37 @@
*/

import { lstatSync, readdirSync } from 'fs';
import { join, resolve } from 'path';
import path from 'path';

import { getStorybook, configure } from '@storybook/react';

export type StoryInfo = [string, string, number];

export type StoryGroupInfo = [string, string, StoryInfo[]];

function enumerateFiles(basedir: string, dir: string) {
let result: string[] = [];
readdirSync(path.join(basedir, dir)).forEach((file) => {
const relativePath = path.join(dir, file);
const stats = lstatSync(path.join(basedir, relativePath));
if (stats.isDirectory()) {
result = result.concat(enumerateFiles(basedir, relativePath));
} else if (/\.stories\.tsx$/.test(relativePath)) {
result.push(relativePath);
}
});
return result;
}

function requireAllStories(basedir: string, directory: string) {
function enumerateFiles(basedir: string, dir: string) {
let result: string[] = [];
readdirSync(join(basedir, dir)).forEach((file) => {
const relativePath = join(dir, file);
const stats = lstatSync(join(basedir, relativePath));
if (stats.isDirectory()) {
result = result.concat(enumerateFiles(basedir, relativePath));
} else if (/\.stories\.tsx$/.test(relativePath)) {
result.push(relativePath);
}
});
return result;
}
const absoluteDirectory = resolve(basedir, directory);
const absoluteDirectory = path.resolve(basedir, directory);

const keys = enumerateFiles(absoluteDirectory, '.');
function requireContext(key: string) {
if (!keys.includes(key)) {
throw new Error(`Cannot find module '${key}'`);
}
const fullKey = require('path').resolve(absoluteDirectory, key);
const fullKey = path.resolve(absoluteDirectory, key);
nickofthyme marked this conversation as resolved.
Show resolved Hide resolved
return require(fullKey);
}

Expand Down
2 changes: 1 addition & 1 deletion integration/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ module.exports = {
setupFilesAfterEnv: ['<rootDir>/jest_env_setup.ts'],
globals: {
'ts-jest': {
tsConfig: '<rootDir>/tsconfig.json',
tsconfig: '<rootDir>/tsconfig.json',
},
/*
* The window and HTMLElement globals are required to use @elastic/eui with VRT
Expand Down
13 changes: 3 additions & 10 deletions integration/page_objects/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,19 +81,11 @@ function getCursorPosition(
let y = element.top;

if (top !== undefined || bottom !== undefined) {
if (top !== undefined) {
y = element.top + top;
} else {
y = element.top + element.height - bottom!;
}
y = top !== undefined ? element.top + top : element.top + element.height - bottom!;
markov00 marked this conversation as resolved.
Show resolved Hide resolved
}

if (left !== undefined || right !== undefined) {
if (left !== undefined) {
x = element.left + left;
} else {
x = element.left + element.width - right!;
}
x = left !== undefined ? element.left + left : element.left + element.width - right!;
}

return { x, y };
Expand Down Expand Up @@ -145,6 +137,7 @@ type ScreenshotElementAtUrlOptions = ScreenshotDOMElementOptions & {

class CommonPage {
readonly chartWaitSelector = '.echChartStatus[data-ech-render-complete=true]';

readonly chartSelector = '.echChart';

/**
Expand Down
3 changes: 1 addition & 2 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,12 @@ module.exports = {
testMatch: ['**/?(*.)+(test).[jt]s?(x)'],
roots: ['<rootDir>/src'],
preset: 'ts-jest',
testEnvironment: 'jest-environment-jsdom-fourteen',
setupFilesAfterEnv: ['<rootDir>/scripts/setup_enzyme.ts', '<rootDir>/scripts/custom_matchers.ts'],
coveragePathIgnorePatterns: ['<rootDir>/src/mocks/', '<rootDir>/node_modules/'],
clearMocks: true,
globals: {
'ts-jest': {
tsConfig: 'tsconfig.jest.json',
tsconfig: 'tsconfig.jest.json',
},
},
};
89 changes: 44 additions & 45 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@
"@babel/polyfill": "^7.10.4",
"@babel/preset-env": "^7.10.4",
"@babel/preset-react": "^7.10.4",
"@commitlint/cli": "^9.1.2",
"@commitlint/config-conventional": "^9.1.2",
"@commitlint/cli": "^11.0.0",
"@commitlint/config-conventional": "^11.0.0",
"@elastic/datemath": "^5.0.2",
"@elastic/eui": "^27.0.0",
"@elastic/github-checks-reporter": "^0.0.20-b3",
Expand Down Expand Up @@ -118,71 +118,70 @@
"@types/d3-shape": "^1.3.1",
"@types/enzyme": "^3.9.0",
"@types/enzyme-adapter-react-16": "^1.0.5",
"@types/expect-puppeteer": "^3.3.1",
"@types/jest": "^25.2.1",
"@types/jest-environment-puppeteer": "^4.3.1",
"@types/jest-image-snapshot": "^2.12.0",
"@types/jsdom": "^16.2.3",
"@types/expect-puppeteer": "^4.4.5",
"@types/jest": "^26.0.19",
"@types/jest-environment-puppeteer": "^4.4.1",
"@types/jest-image-snapshot": "^4.1.3",
"@types/jsdom": "^16.2.5",
"@types/lodash": "^4.14.121",
"@types/luxon": "^1.11.1",
"@types/moment-timezone": "^0.5.12",
"@types/puppeteer": "^1.19.1",
"@types/luxon": "^1.25.0",
"@types/moment-timezone": "^0.5.30",
"@types/puppeteer": "^5.4.2",
"@types/react-dom": "^16.9.8",
"@types/react-redux": "^7.1.1",
"@types/seedrandom": "^2.4.28",
"@types/selenium-webdriver": "^4.0.6",
"@types/storybook__addon-info": "^5.2.1",
"@types/url-parse": "^1.4.3",
"@types/uuid": "^3.4.4",
"@typescript-eslint/eslint-plugin": "^3.0.2",
"@typescript-eslint/parser": "^3.0.2",
"@typescript-eslint/eslint-plugin": "^4.12.0",
"@typescript-eslint/parser": "^4.12.0",
"autoprefixer": "^9.8.4",
"babel-loader": "^8.1.0",
"backport": "^4.8.0",
"canvas": "^2.4.1",
"backport": "^5.6.1",
"canvas": "^2.6.1",
"chromedriver": "^80.0.0",
"circular-dependency-plugin": "^5.2.0",
"commitizen": "^4.0.3",
"core-js": "^3.6.4",
"cross-env": "^7.0.2",
"css-loader": "^3.6.0",
"cz-conventional-changelog": "^3.3.0",
"enzyme": "^3.9.0",
"enzyme-adapter-react-16": "^1.10.0",
"eslint": "^7.1.0",
"eslint-config-airbnb-typescript": "^7.2.1",
"eslint-config-prettier": "^6.9.0",
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.5",
"eslint": "^7.17.0",
"eslint-config-airbnb-typescript": "^12.0.0",
"eslint-config-prettier": "^7.1.0",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-file-header": "^0.0.1",
"eslint-plugin-header": "^3.0.0",
"eslint-plugin-import": "^2.21.1",
"eslint-plugin-jest": "^23.0.4",
"eslint-plugin-jsx-a11y": "^6.2.3",
"eslint-plugin-prettier": "^3.1.2",
"eslint-plugin-header": "^3.1.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jest": "^24.1.3",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-react": "^7.19.0",
"eslint-plugin-react-hooks": "^4.0.3",
"eslint-plugin-unicorn": "^20.1.0",
"eslint-plugin-react": "^7.22.0",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-plugin-unicorn": "^25.0.1",
"geckodriver": "^1.19.1",
"husky": "^3.1.0",
"jest": "^25.4.0",
"jest-environment-jsdom-fourteen": "^1.0.1",
"husky": "^4.3.6",
"jest": "^26.6.3",
"jest-extended": "^0.11.5",
"jest-image-snapshot": "^3.1.0",
"jest-matcher-utils": "^25.4.0",
"jest-image-snapshot": "^4.3.0",
"jest-matcher-utils": "^26.6.2",
"jest-puppeteer": "^4.4.0",
"jest-puppeteer-docker": "^1.3.2",
"lint-staged": "^10.2.7",
"jest-puppeteer-docker": "^1.4.2",
"lint-staged": "^10.5.3",
"lodash": "^4.17.15",
"lorem-ipsum": "^2.0.3",
"luxon": "^1.11.3",
"moment": "^2.27.0",
"moment-timezone": "^0.5.27",
"luxon": "^1.25.0",
"moment": "^2.29.1",
"moment-timezone": "^0.5.32",
"node-sass": "^4.14.1",
"numeral": "^2.0.6",
"postcss-cli": "^7.1.1",
"prettier": "^1.19.1",
"pretty-quick": "^2.0.0",
"prettier": "^2.2.1",
"pretty-quick": "^3.1.0",
"puppeteer": "^1.20.0",
"react": "^16.13.0",
"react-docgen-typescript-loader": "^3.7.2",
Expand All @@ -197,17 +196,17 @@
"semantic-release": "^17.3.0",
"semantic-release-slack-bot": "^1.6.2",
"style-loader": "^1.2.1",
"ts-jest": "^25.4.0",
"ts-jest": "^26.4.4",
"ts-loader": "^7.0.5",
"ts-prune": "^0.3.0",
"typescript": "^3.7.2",
"ts-prune": "^0.8.4",
"typescript": "^4.1.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.0"
},
"peerDependencies": {
"moment": "^2.27.0",
"moment-timezone": "^0.5.27",
"moment": "^2.29.1",
"moment-timezone": "^0.5.32",
"react": "^16.12.0",
"react-dom": "^16.12.0"
},
Expand All @@ -221,7 +220,7 @@
"refractor": "~3.1.0"
},
"engines": {
"node": ">=10.19",
"node": ">=10.23",
"yarn": "^1.10.1"
},
"browserslist": [
Expand Down
5 changes: 2 additions & 3 deletions scripts/concat_sass.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,8 @@ function recursiveReadSCSS(branchId, branch) {
}
const file = fs.readFileSync(branchId, 'utf8');
const sassFileContent = [];
branch.imports.forEach((branchId) => {
const content = recursiveReadSCSS(branchId, graph.index[branchId]);
sassFileContent.push(content);
branch.imports.forEach((branchImport) => {
sassFileContent.push(recursiveReadSCSS(branchImport, graph.index[branchImport]));
});
// remove imports
const contentWithoutImports = removeImportsFromFile(file);
Expand Down
1 change: 1 addition & 0 deletions scripts/setup_enzyme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ window.requestAnimationFrame = (callback) => {
type ResizeObserverMockCallback = (entries: Array<{ contentRect: { width: number; height: number } }>) => void;
class ResizeObserverMock {
callback: ResizeObserverMockCallback;

constructor(callback: ResizeObserverMockCallback) {
this.callback = callback;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,10 +226,10 @@ export function renderCanvas2d(

renderLayers(ctx, [
// clear the canvas
(ctx: CanvasRenderingContext2D) => clearCanvas(ctx, 200000, 200000),
(context: CanvasRenderingContext2D) => clearCanvas(context, 200000, 200000),

(ctx: CanvasRenderingContext2D) =>
withContext(ctx, (ctx) => {
(context: CanvasRenderingContext2D) =>
withContext(context, (ctx) => {
const fullSize = referenceSize;
const labelSize = fullSize / 2;
const pxRangeFrom = -fullSize / 2 + (circular || vertical ? 0 : labelSize);
Expand Down
37 changes: 19 additions & 18 deletions src/chart_types/goal_chart/renderer/canvas/connected_component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import { onChartRendered } from '../../../../state/actions/chart';
import { GlobalChartState } from '../../../../state/chart_state';
import { getInternalIsInitializedSelector, InitStatus } from '../../../../state/selectors/get_internal_is_intialized';
import { Dimensions } from '../../../../utils/dimensions';
import { BulletViewModel, nullShapeViewModel, ShapeViewModel } from '../../layout/types/viewmodel_types';
import { nullShapeViewModel, ShapeViewModel } from '../../layout/types/viewmodel_types';
import { geometries } from '../../state/selectors/geometries';
import { renderCanvas2d } from './canvas_renderers';

Expand All @@ -46,8 +46,10 @@ interface ReactiveChartOwnProps {
type Props = ReactiveChartStateProps & ReactiveChartDispatchProps & ReactiveChartOwnProps;
class Component extends React.Component<Props> {
static displayName = 'Goal';

// firstRender = true; // this'll be useful for stable resizing of treemaps
private ctx: CanvasRenderingContext2D | null;

// see example https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#Example
private readonly devicePixelRatio: number; // fixme this be no constant: multi-monitor window drag may necessitate modifying the `<canvas>` dimensions

Expand Down Expand Up @@ -79,21 +81,6 @@ class Component extends React.Component<Props> {
}
}

private tryCanvasContext() {
const canvas = this.props.forwardStageRef.current;
this.ctx = canvas && canvas.getContext('2d');
}

private drawCanvas() {
if (this.ctx) {
const { width, height }: Dimensions = this.props.chartContainerDimensions;
renderCanvas2d(this.ctx, this.devicePixelRatio, {
...this.props.geometries,
config: { ...this.props.geometries.config, width, height },
});
}
}

handleMouseMove(e: MouseEvent<HTMLCanvasElement>) {
const {
initialized,
Expand All @@ -109,8 +96,7 @@ class Component extends React.Component<Props> {
const { chartCenter } = geometries;
const x = e.clientX - box.left - chartCenter.x;
const y = e.clientY - box.top - chartCenter.y;
const pickedShapes: Array<BulletViewModel> = picker(x, y);
return pickedShapes;
return picker(x, y);
}

render() {
Expand All @@ -137,6 +123,21 @@ class Component extends React.Component<Props> {
/>
);
}

private tryCanvasContext() {
const canvas = this.props.forwardStageRef.current;
this.ctx = canvas && canvas.getContext('2d');
}

private drawCanvas() {
if (this.ctx) {
const { width, height }: Dimensions = this.props.chartContainerDimensions;
renderCanvas2d(this.ctx, this.devicePixelRatio, {
...this.props.geometries,
config: { ...this.props.geometries.config, width, height },
});
}
}
}

const mapDispatchToProps = (dispatch: Dispatch): ReactiveChartDispatchProps =>
Expand Down
Loading