Add missing typings of helpers, add automatic test (#9570)

* Add missing typings of helpers, add automatic test

* Add error handling to autogen.js
This commit is contained in:
Jukka Kurkela 2021-09-02 03:27:26 +03:00 committed by GitHub
parent fca0309223
commit 3ed94559dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 93 additions and 4 deletions

3
.gitignore vendored
View File

@ -27,3 +27,6 @@ docs/api
*.log
*.swp
*.stackdump
# Generated
/types/tests/autogen*.ts

18
package-lock.json generated
View File

@ -30,6 +30,7 @@
"eslint-plugin-es": "^4.1.0",
"eslint-plugin-html": "^6.1.2",
"eslint-plugin-markdown": "^2.1.0",
"esm": "^3.2.25",
"glob": "^7.1.6",
"jasmine": "^3.7.0",
"jasmine-core": "^3.7.1",
@ -7840,6 +7841,15 @@
"node": ">=4"
}
},
"node_modules/esm": {
"version": "3.2.25",
"resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
"integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
@ -20863,7 +20873,6 @@
"integrity": "sha512-pM7CR3yXB6L8Gfn6EmX7FLNE3+V/15I3o33GkSNsWvgsMp6HVGXKkXgojrcfUUauyL1LZOdvTmu4enU2RePGHw==",
"dev": true,
"requires": {
"@babel/core": "^7.11.0",
"@babel/helper-compilation-targets": "^7.9.6",
"@babel/helper-module-imports": "^7.8.3",
"@babel/plugin-proposal-class-properties": "^7.8.3",
@ -20876,7 +20885,6 @@
"@vue/babel-plugin-jsx": "^1.0.3",
"@vue/babel-preset-jsx": "^1.2.4",
"babel-plugin-dynamic-import-node": "^2.3.3",
"core-js": "^3.6.5",
"core-js-compat": "^3.6.5",
"semver": "^6.1.0"
},
@ -25335,6 +25343,12 @@
"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
"dev": true
},
"esm": {
"version": "3.2.25",
"resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
"integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
"dev": true
},
"espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",

View File

@ -44,7 +44,7 @@
"lint-js": "eslint \"src/**/*.js\" \"test/**/*.js\" \"docs/**/*.js\"",
"lint-md": "eslint \"**/*.md\"",
"lint-tsc": "tsc",
"lint-types": "eslint \"types/**/*.ts\" && tsc -p types/tests/",
"lint-types": "eslint \"types/**/*.ts\" && node -r esm types/tests/autogen.js && tsc -p types/tests/",
"lint": "concurrently \"npm:lint-*\"",
"test": "npm run lint && cross-env NODE_ENV=test karma start --auto-watch --single-run --coverage --grep"
},
@ -70,6 +70,7 @@
"eslint-plugin-es": "^4.1.0",
"eslint-plugin-html": "^6.1.2",
"eslint-plugin-markdown": "^2.1.0",
"esm": "^3.2.25",
"glob": "^7.1.6",
"jasmine": "^3.7.0",
"jasmine-core": "^3.7.1",

24
types/geometric.d.ts vendored
View File

@ -11,3 +11,27 @@ export interface Point {
x: number;
y: number;
}
export type TRBL = {
top: number;
right: number;
bottom: number;
left: number;
}
export type TRBLCorners = {
topLeft: number;
topRight: number;
bottomLeft: number;
bottomRight: number;
};
export type CornerRadius = number | Partial<TRBLCorners>;
export type RoundedRect = {
x: number;
y: number;
w: number;
h: number;
radius?: CornerRadius
}

View File

@ -1,6 +1,6 @@
import { PointStyle } from '../index.esm';
import { Color } from '../color';
import { ChartArea } from '../geometric';
import { ChartArea, RoundedRect } from '../geometric';
import { CanvasFontSpec } from './helpers.options';
export function clearCanvas(canvas: HTMLCanvasElement, ctx?: CanvasRenderingContext2D): void;
@ -97,3 +97,5 @@ export function renderText(
font: CanvasFontSpec,
opts?: RenderTextOpts
): void;
export function addRoundedRectPath(ctx: CanvasRenderingContext2D, rect: RoundedRect): void;

View File

@ -38,6 +38,15 @@ export function isObject(value: unknown): value is AnyObject;
* @returns {boolean}
*/
export function isFinite(value: unknown): value is number;
/**
* Returns `value` if finite, else returns `defaultValue`.
* @param {*} value - The value to return if defined.
* @param {*} defaultValue - The value to return if `value` is not finite.
* @returns {*}
*/
export function finiteOrDefault(value: unknown, defaultValue: number): number;
/**
* Returns `value` if defined, else returns `defaultValue`.
* @param {*} value - The value to return if defined.
@ -45,6 +54,10 @@ export function isFinite(value: unknown): value is number;
* @returns {*}
*/
export function valueOrDefault<T>(value: T | undefined, defaultValue: T): T;
export function toPercentage(value: number | string, dimesion: number): number;
export function toDimension(value: number | string, dimension: number): number;
/**
* Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the
* value returned by `fn`. If `fn` is not a function, this method returns undefined.
@ -137,4 +150,8 @@ export function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;
export function resolveObjectKey(obj: AnyObject, key: string): AnyObject;
export function defined(value: unknown): boolean;
export function isFunction(value: unknown): boolean;
export function setsEqual(a: Set<unknown>, b: Set<unknown>): boolean;

View File

@ -15,3 +15,4 @@ export function retinaScale(
forceRatio: number,
forceStyle?: boolean
): void;
export function readUsedSize(element: HTMLElement, property: 'width' | 'height'): number | undefined;

View File

@ -3,6 +3,7 @@ export function isNumber(v: unknown): boolean;
export function almostEquals(x: number, y: number, epsilon: number): boolean;
export function almostWhole(x: number, epsilon: number): number;
export function sign(x: number): number;
export function niceNum(range: number): number;
export function toRadians(degrees: number): number;
export function toDegrees(radians: number): number;
/**

View File

@ -1,3 +1,4 @@
import { TRBL, TRBLCorners } from '../geometric';
import { FontSpec } from '../index.esm';
export interface CanvasFontSpec extends FontSpec {
@ -20,6 +21,9 @@ export function toFont(options: Partial<FontSpec>): CanvasFontSpec;
*/
export function toLineHeight(value: string, size: number): number;
export function toTRBL(value: number | Partial<TRBL>): TRBL;
export function toTRBLCorners(value: number | Partial<TRBLCorners>): TRBLCorners;
/**
* Converts the given value into a padding object with pre-computed width/height.
* @param {number|object} value - If a number, set the value to all TRBL component;

22
types/tests/autogen.js Normal file
View File

@ -0,0 +1,22 @@
import * as fs from 'fs';
import * as path from 'path';
import * as helpers from '../../src/helpers/index.js';
let fd;
try {
const fn = path.resolve(__dirname, 'autogen_helpers.ts');
fd = fs.openSync(fn, 'w+');
fs.writeSync(fd, 'import * as helpers from \'../helpers\';\n\n');
fs.writeSync(fd, 'const testKeys = [];\n');
for (const key of Object.keys(helpers)) {
if (key[0] !== '_' && typeof helpers[key] === 'function') {
fs.writeSync(fd, `testKeys.push(helpers.${key});\n`);
}
}
} finally {
if (fd !== undefined) {
fs.closeSync(fd);
}
}